├── docs ├── CNAME ├── favicon.ico ├── logo192.png ├── logo512.png ├── robots.txt ├── manifest.json ├── asset-manifest.json ├── static │ ├── css │ │ ├── main.2c906112.chunk.css │ │ └── main.2c906112.chunk.css.map │ └── js │ │ ├── runtime-main.4d7f5426.js │ │ ├── 2.82226bf5.chunk.js.LICENSE.txt │ │ ├── 3.764ffdad.chunk.js │ │ ├── 3.764ffdad.chunk.js.map │ │ └── runtime-main.4d7f5426.js.map └── index.html ├── packages ├── playground │ ├── docs │ │ ├── tour.md │ │ ├── popover.md │ │ ├── utils.md │ │ ├── intro.md │ │ └── mask.md │ ├── .env │ ├── public │ │ ├── robots.txt │ │ ├── favicon.ico │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── index.html │ ├── src │ │ ├── components │ │ │ ├── Mask │ │ │ │ ├── index.js │ │ │ │ └── README.md │ │ │ ├── Popover │ │ │ │ └── index.js │ │ │ ├── TourProvider │ │ │ │ └── index.js │ │ │ ├── hooks.js │ │ │ └── styles.css │ │ └── styleguide │ │ │ └── Logo.js │ ├── README.md │ ├── .gitignore │ ├── tsconfig.json │ ├── styleguide │ │ ├── asset-manifest.json │ │ ├── index.html │ │ ├── static │ │ │ └── css │ │ │ │ ├── main.2b8cbd1d.chunk.css │ │ │ │ └── main.2b8cbd1d.chunk.css.map │ │ └── build │ │ │ ├── bundle.d27f85f7.js │ │ │ └── 2.052a1ca7.js.LICENSE.txt │ ├── styleguide.config.js │ └── package.json ├── mask │ ├── .gitignore │ ├── src │ │ ├── index.tsx │ │ ├── styles.tsx │ │ └── Mask.tsx │ ├── .github │ │ └── workflows │ │ │ ├── size.yml │ │ │ └── main.yml │ ├── test │ │ └── blah.test.tsx │ ├── LICENSE │ ├── package.json │ ├── tsconfig.json │ └── README.md ├── popover │ ├── .gitignore │ ├── src │ │ ├── index.tsx │ │ ├── styles.tsx │ │ └── Popover.tsx │ ├── .github │ │ └── workflows │ │ │ ├── size.yml │ │ │ └── main.yml │ ├── test │ │ └── blah.test.tsx │ ├── LICENSE │ ├── package.json │ ├── tsconfig.json │ └── README.md ├── tour │ ├── .gitignore │ ├── src │ │ ├── index.tsx │ │ ├── Badge.tsx │ │ ├── Content.tsx │ │ ├── Close.tsx │ │ ├── Context.tsx │ │ ├── Keyboard.tsx │ │ ├── types.tsx │ │ ├── styles.tsx │ │ ├── hooks.tsx │ │ ├── Navigation.tsx │ │ └── Tour.tsx │ ├── .github │ │ └── workflows │ │ │ ├── size.yml │ │ │ └── main.yml │ ├── test │ │ └── blah.test.tsx │ ├── LICENSE │ ├── tsconfig.json │ └── package.json └── utils │ ├── .gitignore │ ├── .github │ └── workflows │ │ ├── size.yml │ │ └── main.yml │ ├── test │ └── blah.test.tsx │ ├── src │ ├── smoothScroll.tsx │ ├── Portal.tsx │ ├── useRect.tsx │ ├── index.tsx │ └── Observables.tsx │ ├── LICENSE │ ├── tsconfig.json │ ├── package.json │ └── README.md ├── demo ├── public │ ├── favicon.ico │ ├── logo192.png │ ├── logo512.png │ ├── robots.txt │ ├── manifest.json │ └── index.html ├── src │ ├── Row.js │ ├── Image.js │ ├── setupTests.js │ ├── Footer.js │ ├── Section.js │ ├── Scrollable.js │ ├── Box.js │ ├── reportWebVitals.js │ ├── Text.js │ ├── settings.js │ ├── Heading.js │ ├── index.js │ ├── Tooltip.js │ ├── Tabs.js │ ├── Button.js │ ├── Dropdown.js │ ├── styles.css │ ├── logo.svg │ ├── App.js │ └── Logo.js ├── .gitignore ├── package.json └── README.md ├── .eslintignore ├── .prettierrc.json ├── .babelrc ├── .gitignore ├── .eslintrc.json ├── index.js ├── package.json └── README.md /docs/CNAME: -------------------------------------------------------------------------------- 1 | reactour.js.org -------------------------------------------------------------------------------- /packages/playground/docs/tour.md: -------------------------------------------------------------------------------- 1 | # hola 2 | -------------------------------------------------------------------------------- /packages/playground/docs/popover.md: -------------------------------------------------------------------------------- 1 | # hola 2 | -------------------------------------------------------------------------------- /packages/playground/docs/utils.md: -------------------------------------------------------------------------------- 1 | # hola 2 | -------------------------------------------------------------------------------- /packages/playground/.env: -------------------------------------------------------------------------------- 1 | SKIP_PREFLIGHT_CHECK=true -------------------------------------------------------------------------------- /packages/mask/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | -------------------------------------------------------------------------------- /packages/popover/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | -------------------------------------------------------------------------------- /packages/tour/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | -------------------------------------------------------------------------------- /packages/utils/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/docs/favicon.ico -------------------------------------------------------------------------------- /docs/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/docs/logo192.png -------------------------------------------------------------------------------- /docs/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/docs/logo512.png -------------------------------------------------------------------------------- /docs/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/demo/public/favicon.ico -------------------------------------------------------------------------------- /demo/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/demo/public/logo192.png -------------------------------------------------------------------------------- /demo/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/demo/public/logo512.png -------------------------------------------------------------------------------- /demo/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /docs 3 | /dist 4 | /lib 5 | .idea 6 | .DS_Store 7 | /webpack.config.babel.js 8 | -------------------------------------------------------------------------------- /packages/playground/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/playground/src/components/Mask/index.js: -------------------------------------------------------------------------------- 1 | import { Mask } from '@reactour/mask' 2 | export default Mask 3 | -------------------------------------------------------------------------------- /packages/playground/src/components/Popover/index.js: -------------------------------------------------------------------------------- 1 | import { Popover } from '@reactour/popover' 2 | export default Popover 3 | -------------------------------------------------------------------------------- /packages/playground/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/packages/playground/public/favicon.ico -------------------------------------------------------------------------------- /packages/playground/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/packages/playground/public/logo192.png -------------------------------------------------------------------------------- /packages/playground/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hosein2398/reactour/master/packages/playground/public/logo512.png -------------------------------------------------------------------------------- /packages/playground/src/components/TourProvider/index.js: -------------------------------------------------------------------------------- 1 | import { TourProvider } from '@reactour/tour' 2 | export default TourProvider 3 | -------------------------------------------------------------------------------- /demo/src/Row.js: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled' 2 | 3 | export default styled.div` 4 | display: flex; 5 | flex-wrap: wrap; 6 | ` 7 | -------------------------------------------------------------------------------- /packages/mask/src/index.tsx: -------------------------------------------------------------------------------- 1 | import Mask from './Mask' 2 | import { StylesObj } from './styles' 3 | export default Mask 4 | export { Mask, StylesObj as MaskStylesObj } 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "bracketSpacing": true, 5 | "tabWidth": 2, 6 | "printWidth": 80, 7 | "semi": false 8 | } 9 | -------------------------------------------------------------------------------- /demo/src/Image.js: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled' 2 | 3 | export default styled.img` 4 | border: 0; 5 | display: block; 6 | max-width: 100%; 7 | width: 100%; 8 | ` 9 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/env", "@babel/react"], 3 | "plugins": [ 4 | "@babel/plugin-proposal-class-properties", 5 | "@babel/plugin-syntax-dynamic-import" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /packages/tour/src/index.tsx: -------------------------------------------------------------------------------- 1 | import Tour from './Tour' 2 | import TourContext, { TourProvider, useTour } from './Context' 3 | export default Tour 4 | export { Tour, TourContext, TourProvider, useTour } 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .DS_Store 3 | .env.local 4 | .env.development.local 5 | .env.test.local 6 | .env.production.local 7 | 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | 12 | .vscode/* -------------------------------------------------------------------------------- /demo/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /packages/playground/docs/intro.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
5 | An SVG mask that cover all the window contents except the one specified by certain position and sizes values 6 |
7 | -------------------------------------------------------------------------------- /packages/playground/docs/mask.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
5 | An SVG mask that cover all the window contents except the one specified by certain position and sizes values 6 |
7 | -------------------------------------------------------------------------------- /demo/src/Footer.js: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled' 2 | import { themeColors } from './settings' 3 | 4 | export default styled.footer` 5 | width: 100%; 6 | background-color: ${themeColors.light}; 7 | text-align: center; 8 | padding-bottom: 3em; 9 | padding-top: 1em; 10 | ` 11 | -------------------------------------------------------------------------------- /demo/src/Section.js: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled' 2 | 3 | export default styled.section` 4 | min-height: 100vh; 5 | max-width: 1024px; 6 | margin: auto; 7 | padding: 1em; 8 | text-align: ${props => 9 | props.center ? 'center' : props.align ? props.align : 'left'}; 10 | ` 11 | -------------------------------------------------------------------------------- /packages/popover/src/index.tsx: -------------------------------------------------------------------------------- 1 | import Popover from './Popover' 2 | import { PositionType, PositionProps } from './Popover' 3 | import { StylesObj } from './styles' 4 | export default Popover 5 | export { 6 | Popover, 7 | PositionType as Position, 8 | PositionProps, 9 | StylesObj as PopoverStylesObj, 10 | } 11 | -------------------------------------------------------------------------------- /packages/mask/.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /packages/popover/.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /packages/tour/.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /packages/utils/.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /packages/mask/test/blah.test.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import { Thing } from '../src'; 4 | 5 | describe('it', () => { 6 | it('renders without crashing', () => { 7 | const div = document.createElement('div'); 8 | ReactDOM.render(
2 |
3 |
5 | The playground where to play with the Tour and its parts 6 |
7 | 8 | This package uses [react-styleguidist](https://react-styleguidist.js.org/) to document and show examples of each part of `@reactour` ecosystem. Take a look [online](https://reactour.vercel.app/) 9 | -------------------------------------------------------------------------------- /demo/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /demo/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /packages/playground/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /packages/tour/src/Badge.tsx: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from '@emotion/react' 3 | import React from 'react' 4 | import { StylesObj, stylesMatcher } from './styles' 5 | 6 | const Badge: React.FC
2 |
3 |
5 | Tourist Guide and a set of Assistants to travel into your React Components 6 |
7 | 8 | ### Packages 9 | 10 | [@reactour/mask](/packages/mask) a customizable Component to highlight certain element or area of the viewport 11 | 12 | [@reactour/popover](/packages/popover) a customizable Component to attach to an element or position of the viewport to show conten 13 | 14 | [@reactour/tour](/packages/tour) the main responsible package, which uses the other ones to highlight parts of your application from an array of steps 15 | 16 | [@reactour/utils](/packages/utils) a set of helper functions used by the other packages 17 | 18 | [@reactour/playground](/packages/playground) the place where all the stuff is visible working 19 | 20 | #### License 21 | 22 | MIT © [Lionel Tzatzkin](https://lionel.tzatzk.in) 23 | -------------------------------------------------------------------------------- /packages/playground/src/components/styles.css: -------------------------------------------------------------------------------- 1 | .icon { 2 | width: 70px; 3 | height: 70px; 4 | } 5 | 6 | .wrapper { 7 | display: flex; 8 | flex-wrap: wrap; 9 | justify-content: space-between; 10 | } 11 | 12 | .scroll-demo { 13 | width: 100px; 14 | } 15 | 16 | .scroll-demo .icon { 17 | margin-bottom: 200px; 18 | } 19 | 20 | .custom-btn { 21 | padding: 0; 22 | border: 0; 23 | background: none; 24 | font-size: 0.6em; 25 | text-align: left; 26 | line-height: 0.5; 27 | cursor: pointer; 28 | margin-right: 1em; 29 | } 30 | .custom-btn:hover { 31 | text-decoration: underline; 32 | } 33 | .custom-btn p:before, 34 | .custom-btn p:after { 35 | content: '"'; 36 | } 37 | 38 | .open-button { 39 | border: 0; 40 | background-color: #8e949a; 41 | color: #fff; 42 | padding: 0.5em 1em; 43 | font: inherit; 44 | font-size: 0.85em; 45 | border-radius: 2em; 46 | margin-bottom: 1em; 47 | cursor: pointer; 48 | } 49 | 50 | .open-button:hover { 51 | background-color: #92a8b4; 52 | } 53 | -------------------------------------------------------------------------------- /packages/tour/src/Close.tsx: -------------------------------------------------------------------------------- 1 | /** @jsx jsx */ 2 | import { jsx } from '@emotion/react' 3 | import React from 'react' 4 | import { StylesObj, stylesMatcher } from './styles' 5 | 6 | const Close: React.FC
2 |
3 |
5 | A popover positioned based on certain values 6 |
7 | 8 | ## Install 9 | 10 | ```zsh 11 | npm i -S @reactour/popover 12 | # or 13 | yarn add @reacmask/popover 14 | ``` 15 | 16 | ## Usage 17 | 18 | ```js 19 | import { Popover } from '@reactour/popover' 20 | 21 | function App() { 22 | const sizes = { 23 | bottom: 0, 24 | left: 0, 25 | } 26 | 27 | return ( 28 | <> 29 | {/* ... */} 30 |
2 |
3 |
5 | An SVG mask that cover all the window contents except the one specified by certain position and sizes values 6 |
7 | 8 | ## Install 9 | 10 | ```zsh 11 | npm i -S @reactour/mask 12 | # or 13 | yarn add @reacmask/mask 14 | ``` 15 | 16 | ## Usage 17 | 18 | ```js 19 | import { Mask } from '@reactour/mask' 20 | 21 | function App() { 22 | const sizes = { 23 | width: 100, 24 | height: 100, 25 | top: 100, 26 | left: 100, 27 | } 28 | 29 | return ( 30 | <> 31 | {/* ... */} 32 |
2 |
3 |
5 | A set of utilities used by @reactour packages
6 |
Vestibulum maximus vitae
56 | 60 |Lorem ipsum dolor sit amet, consectetur adipiscing elit.
92 | {/* ...*/} 93 | > 94 | ) 95 | } 96 | ``` 97 | 98 | ## `useElemRect({ elem, refresher })` 99 | 100 | Same as `useRect` but providing an [Element](https://developer.mozilla.org/en-US/docs/Web/API/Element) 101 | 102 | ### `elem?: Element` 103 | 104 | DOM [Element](https://developer.mozilla.org/en-US/docs/Web/API/Element) 105 | 106 | ### `refresher?: any` 107 | 108 | Any value that if changed, updates calculations 109 | 110 | ```js 111 | import { useElemRect } from '@reactour/utils' 112 | function App() { 113 | const elem = document.querySelector('.elem') 114 | const sizes = useElemRect(elem) 115 | return ( 116 | <> 117 |118 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. 119 |
120 | {/* ...*/} 121 | > 122 | ) 123 | } 124 | ``` 125 | 126 | ## More Utils 127 | 128 | ### `getRect(element?:Element): RectResult` 129 | 130 |60 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat 61 | quam eu mauris euismod imperdiet. Nullam elementum fermentum neque a 62 | placerat. Vivamus sed dui nisi. Phasellus vel dolor interdum, accumsan 63 | eros ut, rutrum dolor. Etiam in leo urna. Vestibulum maximus vitae urna at 64 | congue. 65 |
66 | ) 67 | } 68 | 69 | const tourConfig = [ 70 | { 71 | selector: '[data-tut="reactour__iso"]', 72 | content: 73 | "Ok, let's start with the name of the Tour that is about to begin.", 74 | }, 75 | { 76 | selector: '[data-tut="reactour__logo"]', 77 | content: 'And this is our cool bus...', 78 | position: [20, 20], 79 | roundedStep: true, 80 | }, 81 | { 82 | selector: '[data-tut="reactour__copy"]', 83 | content: `Keep in mind that you could try and test everything during the Tour. 84 | For example, try selecting the highlighted text…`, 85 | }, 86 | { 87 | selector: '[data-tut="reactour__style"]', 88 | content: function DemoHelperComponent() { 89 | return ( 90 |91 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. mauris ante. Fusce 92 | at ante nunc. Maecenas ut leo eu erat porta fermentum. 93 |
94 |268 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat 269 | quam eu mauris euismod imperdiet. Nullam elementum fermentum neque a 270 | placerat. Vivamus sed dui nisi. Phasellus vel dolor interdum, accumsan eros 271 | ut, rutrum dolor. Etiam in leo urna. Vestibulum maximus vitae urna at 272 | congue. Vivamus lectus nisi, pellentesque at orci a, tempor lobortis orci. 273 | Praesent non lorem erat. Ut augue massa, aliquam in bibendum sed, euismod 274 | vitae magna. Nulla sit amet sodales augue. Curabitur in nulla in magna 275 | luctus porta et sit amet dolor. Pellentesque a magna enim. Pellentesque 276 | malesuada egestas urna, et pulvinar lorem viverra suscipit. Duis sit amet 277 | mauris ante. Fusce at ante nunc. Maecenas ut leo eu erat porta fermentum. 278 |
279 | 282 |283 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat 284 | quam eu mauris euismod imperdiet. Nullam elementum fermentum neque a 285 | placerat. Vivamus sed dui nisi. Phasellus vel 286 | dolor interdum, accumsan eros ut, rutrum dolor. Etiam in leo urna. 287 | Vestibulum maximus vitae urna at congue. Vivamus lectus nisi, pellentesque 288 | at orci a, tempor lobortis orci. Praesent non lorem erat. Ut augue massa, 289 | aliquam in bibendum sed, euismod vitae magna. Nulla sit amet sodales augue.{' '} 290 | 291 | Curabitur in nulla in magna luctus porta et sit amet dolor.{' '} 292 | 293 | Pellentesque a magna enim. Pellentesque malesuada egestas urna, et pulvinar lorem 294 | viverra suscipit. Duis sit amet mauris ante. Fusce at ante nunc. Maecenas ut 295 | leo eu erat porta fermentum. 296 |
297 | {isOpen && isVisible 298 | ? sizesss.map((size, index) => { 299 | return ( 300 |