├── .github └── workflows │ ├── figma.yml │ └── figma_action ├── .gitignore ├── .replit ├── .vscode └── launch.json ├── README.md ├── docs ├── CNAME ├── build │ ├── bundle.css │ ├── bundle.css.map │ ├── bundle.js │ └── bundle.js.map ├── favicon.png ├── global.css ├── images │ ├── !city │ ├── !class │ ├── !contact │ ├── !intro │ ├── !newname │ ├── !newsletter │ ├── !talk │ ├── #intro │ ├── Bestof2019_SoliGlow │ ├── BeyBlade │ ├── Data_Pane_Image │ ├── Frame_14 │ ├── Grimes │ ├── Infinitywar │ ├── Rectangle 2277 │ ├── Rectangle_2277 │ ├── Site │ ├── TM_screenshot_2 │ ├── bw_prof_red_1 │ ├── cars │ ├── cl_view_1 │ ├── cosmos_anniversary_smol_1 │ ├── covid │ ├── documentation22314 │ ├── documentation25924 │ ├── documentation27428 │ ├── enhance │ ├── figma │ ├── figmaLogo │ ├── hub │ ├── ig │ ├── infographic │ ├── insight_crop │ ├── lens2 │ ├── lens_IO │ ├── markets │ ├── no_spaces │ ├── payinterns │ ├── screenshot │ ├── stack_smol │ ├── tool │ ├── vote_screenshot │ ├── welcomeback │ └── what ├── index.html └── videos │ ├── lens.mp4 │ └── test.mp4 ├── lib └── figma.js ├── nodeFigma.js ├── package-lock.json ├── package.json ├── rollup.config.js └── src ├── App.svelte ├── components ├── Nav.svelte ├── Stories.svelte └── Story.svelte ├── figma.js ├── figmaAPIreturn.json ├── figmaExport.js ├── main.js ├── routes.js └── stores.js /.github/workflows/figma.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: figma_update 4 | 5 | # Controls when the action will run. Triggers the workflow on push or pull request 6 | # events but only for the master branch 7 | on: 8 | schedule: 9 | - cron: '0 0 * * *' 10 | repository_dispatch: 11 | types: figma_update 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v2 19 | with: 20 | ref: ${{ github.head_ref }} 21 | - name: Use Node.js 22 | uses: actions/setup-node@v1 23 | - run: npm ci 24 | - run: npm run build 25 | - run: npm run figma 26 | - name: Git Auto Commit 27 | # You may pin to the exact commit or the version. 28 | uses: stefanzweifel/git-auto-commit-action@v4.7.2 29 | with: 30 | commit_message: updated figma file from GH Action 31 | -------------------------------------------------------------------------------- /.github/workflows/figma_action: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Run Figma and re-push 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v2 17 | - name: Use Node.js 18 | uses: actions/setup-node@v1 19 | with: 20 | ref: ${{ github.head_ref }} 21 | - run: npm ci 22 | - run: npm run build 23 | - run: npm run figma 24 | - name: Git Auto Commit 25 | # You may pin to the exact commit or the version. 26 | # uses: stefanzweifel/git-auto-commit-action@bbd291750d2526367d915d5197485331dc2d8dc7 27 | uses: stefanzweifel/git-auto-commit-action@v4.7.2 28 | with: 29 | commit_message: updated figma file from GH Action 30 | 31 | 32 | 33 | 34 | 35 | # - name: GitHub Action for committing changes to a repository 36 | # uses: devops-infra/action-commit-push@0.1 37 | # with: 38 | # # Personal Access Token for GitHub for pushing the code 39 | # github_token: $\{{ secrets.PERSONAL_ACCESS_TOKEN }} 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | # - name: GitHub Push 48 | # uses: ad-m/github-push-action@v0.6.0 49 | # with: 50 | # # Token for the repo. Can be passed in using $\{{ secrets.GITHUB_TOKEN }} 51 | # github_token: $\{{ secrets.GITHUB_TOKEN }} 52 | # # Repository name to push. Default or empty value represents current github repository (${GITHUB_REPOSITORY}) 53 | # repository: # optional, default is 54 | # # Destination branch to push changes 55 | # branch: # optional, default is master 56 | # # Determines if force push is used 57 | # force: # optional 58 | # # Determines if --tags is used 59 | # tags: # optional 60 | # # Directory to change to before pushing. 61 | # directory: # optional, default is . 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /src/figmaAPIreturn.json 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | language = "nodejs" 2 | run = "npm run start" -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "attach", 10 | "name": "Attach by Process ID", 11 | "processId": "${command:PickProcess}", 12 | "skipFiles": [ 13 | "/**" 14 | ] 15 | }, 16 | { 17 | "type": "node", 18 | "request": "launch", 19 | "name": "Launch Program", 20 | "skipFiles": [ 21 | "/**" 22 | ], 23 | "program": "${workspaceFolder}/nodeFigma.js" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![figma_update](https://github.com/warronbebster/bwebsite/workflows/figma_update/badge.svg?branch=master) 2 | 3 | This is my website. It works like instagram stories. You can visit at [barronwebster.com](http://barronwebster.com) 4 | 5 | Wanna try it locally? 6 | Install the dependencies... 7 | 8 | ```bash 9 | npm install 10 | ``` 11 | 12 | ...then start [Rollup](https://rollupjs.org): 13 | 14 | ```bash 15 | npm run dev 16 | ``` 17 | 18 | Navigate to [localhost:5000](http://localhost:5000). You should see the site running. 19 | 20 | `node --inspect nodeFigma.js Fgv9nN04eSsH7qJopKgUML` to debug 21 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | barronwebster.com -------------------------------------------------------------------------------- /docs/build/bundle.css: -------------------------------------------------------------------------------- 1 | nav.svelte-iymz21{position:absolute;padding:4px 0;min-height:28px;color:white;top:2px;left:2px;border-radius:4px;z-index:9999}.open.svelte-iymz21{background-color:black;box-shadow:0px 2px 8px -2px rgba(0, 0, 0, 0.5);-webkit-box-shadow:0px 2px 8px -2px rgba(0, 0, 0, 0.5);-moz-box-shadow:0px 2px 8px -2px rgba(0, 0, 0, 0.5)}.navItem.svelte-iymz21{margin:2px;padding:8px;overflow:hidden;text-shadow:0px 2px 6px rgba(0, 0, 0, 0.3);font-size:14px}.navItem.svelte-iymz21:hover{cursor:pointer}ol.svelte-iymz21{padding:0;margin:0}.hidden.svelte-iymz21{height:0px;margin:0px;padding-top:0px;padding-bottom:0px} 2 | :root{--width-border:460px;--height-border:812px}.grabbing.svelte-n01c88.svelte-n01c88{cursor:grabbing !important}main.svelte-n01c88.svelte-n01c88{height:calc(100vh - 30px);max-height:var(--height-border);position:relative;width:100vw;max-width:var(--width-border);padding:0;margin:0;transform-style:preserve-3d;will-change:transform}@media screen and (max-width: 550px){main.svelte-n01c88.svelte-n01c88{border-radius:0px;margin:0;height:100vh;max-height:100vh;max-width:100vw}}.project.svelte-n01c88.svelte-n01c88{width:100%;height:100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:left 0.5s ease, transform 0.5s ease;display:none;overflow:hidden;background:transparent;will-change:transform}.prevProject.svelte-n01c88.svelte-n01c88{display:block;transform:translateX(-100%) rotateY(-90deg);-webkit-transform:translateX(-100%) rotateY(-90deg);z-index:-1;position:absolute;top:0}.currentProject.svelte-n01c88.svelte-n01c88{display:block;transform:translateX(0%) rotateY(0deg);-webkit-transform:translateX(0%) rotateY(0deg);position:absolute;top:0;left:0%}.nextProject.svelte-n01c88.svelte-n01c88{display:block;z-index:-1;position:absolute;top:0;transform:translateX(100%) rotateY(90deg);-webkit-transform:translateX(100%) rotateY(90deg)}#indicators.svelte-n01c88.svelte-n01c88{height:2px;top:8px;left:6px;right:6px;z-index:1;position:absolute;display:flex;justify-content:space-between;align-items:stretch}#indicators.svelte-n01c88 div.svelte-n01c88{background-color:white;height:100%;flex-grow:1;border-radius:2px;margin:0 2px}.nextIndicators.svelte-n01c88.svelte-n01c88{opacity:0.5}#indicators.svelte-n01c88 #currentIndicator.svelte-n01c88{background-color:rgba(255, 255, 255, 0.5);position:relative;overflow:hidden}#indicators.svelte-n01c88 div #loadingBar.svelte-n01c88{position:absolute;top:0px;left:0px;margin:0px;height:100%;background:white;animation:progress 6s linear;-moz-animation:progress 6s linear;-o-animation:progress 6s linear;animation-name:progress;animation-duration:6s;animation-timing-function:linear;animation-fill-mode:forwards;-webkit-animation-name:progress;-webkit-animation-duration:6s;-webkit-animation-timing-function:linear;-webkit-animation-fill-mode:forwards}.paused.svelte-n01c88.svelte-n01c88{-webkit-animation-play-state:paused !important;-moz-animation-play-state:paused !important;-o-animation-play-state:paused !important;animation-play-state:paused !important}@keyframes progress{0%{width:0%}100%{width:100%}}@-webkit-keyframes progress{0%{width:0%}100%{width:100%}}@-moz-keyframes progress{0%{width:0%}100%{width:100%}}@-o-keyframes progress{0%{width:0%}100%{width:100%}} 3 | .story.svelte-tz1p0n{width:100%;height:100%;padding:0;margin:0;position:relative;overflow:hidden;border-radius:8px;transform:translateY(0)}@media screen and (max-width: 550px){.story.svelte-tz1p0n{border-radius:0px}}.none.svelte-tz1p0n{display:none}.prevCover.svelte-tz1p0n{display:block !important;position:static}.minus1.svelte-tz1p0n{position:absolute;top:-2000px;left:-1000px}.currentStory.svelte-tz1p0n{margin:0;position:static}.plus1.svelte-tz1p0n{position:absolute;top:-2000px;left:-1000px}.nextCover.svelte-tz1p0n{position:static;display:block !important} 4 | 5 | /*# sourceMappingURL=bundle.css.map */ -------------------------------------------------------------------------------- /docs/build/bundle.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "file": "bundle.css", 4 | "sources": [ 5 | "../../Nav.svelte", 6 | "../../Stories.svelte", 7 | "../../Story.svelte" 8 | ], 9 | "sourcesContent": [ 10 | "\n\n\n\n\n {\n if (window.innerWidth > 640) {\n showNav(true);\n }\n }}\n on:mouseleave={() => {\n if (window.innerWidth > 640) {\n showNav(false);\n }\n }}\n class={navOpen ? 'open' : 'closed'}>\n
    \n\n {#each projectArray as project, i}\n {\n if (window.innerWidth < 640) {\n if (navOpen) dispatch('project', i);\n projectIndex == i ? showNav(!navOpen) : showNav(false);\n } else {\n dispatch('project', i);\n }\n }}>\n {project.name}\n \n {/each}\n\n
\n\n\n", 11 | "\n\n\n\n\n\n\n\n {\n gestureDown(e);\n }}\n on:mousemove={e => {\n if (held) gestureMove(e);\n }}\n on:mouseup={e => {\n if (held) gestureUp(e);\n }}\n on:touchstart|preventDefault={e => {\n gestureDown(e);\n }}\n on:touchmove|passive={e => {\n if (held) gestureMove(e);\n }}\n on:touchend|preventDefault={e => {\n if (held) gestureUp(e);\n }}\n class={held ? 'grabbing' : 'no'}>\n\n \n\n {#each projectArray as { name, stories }, i}\n \n\n \n \n\n {#if params.project == i}\n \n
\n {#each stories as story, p}\n {#if params.story > p}\n
\n {:else if params.story == p}\n
\n \n
\n {:else}\n
\n {/if}\n {/each}\n
\n {/if}\n\n {#each stories as story, j}\n \n \n {/each}\n
\n \n {/each}\n \n\n \n
\n", 12 | "\n\n\n\n
\n {#if showStoryContent}\n {@html storyContent}\n {:else}\n
loading…
\n {/if}\n
\n" 13 | ], 14 | "names": [], 15 | "mappings": "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" 16 | } -------------------------------------------------------------------------------- /docs/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/favicon.png -------------------------------------------------------------------------------- /docs/global.css: -------------------------------------------------------------------------------- 1 | html { 2 | box-sizing: border-box; 3 | } 4 | *, 5 | *:before, 6 | *:after { 7 | box-sizing: inherit; 8 | font-family: 'IBM Plex Sans', sans-serif; 9 | font-weight: 500; 10 | } 11 | 12 | body { 13 | margin: 0; 14 | padding: 0; 15 | overflow: hidden; 16 | height: 100vh; 17 | width: 100vw; 18 | background-color: black; 19 | 20 | font-size: 20px; 21 | display: flex; 22 | align-items: center; 23 | justify-content: center; 24 | /* perspective: 840px; */ 25 | } 26 | 27 | a { 28 | position: relative; 29 | color: inherit; 30 | z-index: 401 !important; 31 | } 32 | 33 | section { 34 | box-shadow: inset 0px 90px 50px -50px rgba(0, 0, 0, 0.35); 35 | -moz-box-shadow: inset 0px 90px 50px -50px rgba(0, 0, 0, 0.35); 36 | -webkit-box-shadow: inset 0px 90px 50px -50px rgba(0, 0, 0, 0.35); 37 | } 38 | 39 | /* svg { 40 | overflow: visible; 41 | position: absolute; 42 | top: 0; 43 | left: 0; 44 | } */ 45 | 46 | video { 47 | content-visibility: auto; 48 | } 49 | -------------------------------------------------------------------------------- /docs/images/!city: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!city -------------------------------------------------------------------------------- /docs/images/!class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!class -------------------------------------------------------------------------------- /docs/images/!contact: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!contact -------------------------------------------------------------------------------- /docs/images/!intro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!intro -------------------------------------------------------------------------------- /docs/images/!newname: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!newname -------------------------------------------------------------------------------- /docs/images/!newsletter: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!newsletter -------------------------------------------------------------------------------- /docs/images/!talk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/!talk -------------------------------------------------------------------------------- /docs/images/#intro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/#intro -------------------------------------------------------------------------------- /docs/images/Bestof2019_SoliGlow: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Bestof2019_SoliGlow -------------------------------------------------------------------------------- /docs/images/BeyBlade: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/BeyBlade -------------------------------------------------------------------------------- /docs/images/Data_Pane_Image: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Data_Pane_Image -------------------------------------------------------------------------------- /docs/images/Frame_14: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Frame_14 -------------------------------------------------------------------------------- /docs/images/Grimes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Grimes -------------------------------------------------------------------------------- /docs/images/Infinitywar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Infinitywar -------------------------------------------------------------------------------- /docs/images/Rectangle 2277: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Rectangle 2277 -------------------------------------------------------------------------------- /docs/images/Rectangle_2277: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Rectangle_2277 -------------------------------------------------------------------------------- /docs/images/Site: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/Site -------------------------------------------------------------------------------- /docs/images/TM_screenshot_2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/TM_screenshot_2 -------------------------------------------------------------------------------- /docs/images/bw_prof_red_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/bw_prof_red_1 -------------------------------------------------------------------------------- /docs/images/cars: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/cars -------------------------------------------------------------------------------- /docs/images/cl_view_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/cl_view_1 -------------------------------------------------------------------------------- /docs/images/cosmos_anniversary_smol_1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/cosmos_anniversary_smol_1 -------------------------------------------------------------------------------- /docs/images/covid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/covid -------------------------------------------------------------------------------- /docs/images/documentation22314: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/documentation22314 -------------------------------------------------------------------------------- /docs/images/documentation25924: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/documentation25924 -------------------------------------------------------------------------------- /docs/images/documentation27428: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/documentation27428 -------------------------------------------------------------------------------- /docs/images/enhance: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/enhance -------------------------------------------------------------------------------- /docs/images/figma: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/figma -------------------------------------------------------------------------------- /docs/images/figmaLogo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/figmaLogo -------------------------------------------------------------------------------- /docs/images/hub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/hub -------------------------------------------------------------------------------- /docs/images/ig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/ig -------------------------------------------------------------------------------- /docs/images/infographic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/infographic -------------------------------------------------------------------------------- /docs/images/insight_crop: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/insight_crop -------------------------------------------------------------------------------- /docs/images/lens2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/lens2 -------------------------------------------------------------------------------- /docs/images/lens_IO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/lens_IO -------------------------------------------------------------------------------- /docs/images/markets: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/markets -------------------------------------------------------------------------------- /docs/images/no_spaces: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/no_spaces -------------------------------------------------------------------------------- /docs/images/payinterns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/payinterns -------------------------------------------------------------------------------- /docs/images/screenshot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/screenshot -------------------------------------------------------------------------------- /docs/images/stack_smol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/stack_smol -------------------------------------------------------------------------------- /docs/images/tool: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/tool -------------------------------------------------------------------------------- /docs/images/vote_screenshot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/vote_screenshot -------------------------------------------------------------------------------- /docs/images/welcomeback: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/welcomeback -------------------------------------------------------------------------------- /docs/images/what: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/images/what -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | It's Barron Webster's Website 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 | 31 | 32 | 36 | 37 | -------------------------------------------------------------------------------- /docs/videos/lens.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/videos/lens.mp4 -------------------------------------------------------------------------------- /docs/videos/test.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warronbebster/bwebsite/cc9d645aad2a8aa651442f7e746cf27c3aebbd73/docs/videos/test.mp4 -------------------------------------------------------------------------------- /lib/figma.js: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | const fs = require("fs"); 3 | const https = require("https"); 4 | 5 | function saveImageToDisk(url, localPath) { 6 | //writes images to disk 7 | const file = fs.createWriteStream(localPath); 8 | const request = https.get(url, function (response) { 9 | response.pipe(file); 10 | }); 11 | } 12 | 13 | function colorString(fill) { 14 | return `rgba(${Math.round(fill.color.r * 255)}, ${Math.round(fill.color.g * 255)}, ${Math.round( 15 | fill.color.b * 255 16 | )}, ${fill.opacity ? fill.opacity : fill.color.a})`; 17 | } 18 | 19 | function dropShadow(effect) { 20 | return `${effect.offset.x}px ${effect.offset.y}px ${effect.radius}px ${colorString(effect)}`; 21 | } 22 | 23 | function innerShadow(effect) { 24 | return `inset ${effect.offset.x}px ${effect.offset.y}px ${effect.radius}px ${colorString( 25 | effect 26 | )}`; 27 | } 28 | 29 | function backgroundSize(scaleMode) { 30 | if (scaleMode === "FILL") { 31 | return "cover"; 32 | } 33 | } 34 | 35 | function getPaint(paintList) { 36 | //this should really be called "get top paint" 37 | if (paintList && paintList.length > 0) { 38 | return paintList[paintList.length - 1]; 39 | } 40 | return null; 41 | } 42 | 43 | function paintToLinearGradient(paint) { 44 | const handles = paint.gradientHandlePositions; 45 | const handle0 = handles[0]; 46 | const handle1 = handles[1]; 47 | 48 | const ydiff = handle1.y - handle0.y; 49 | const xdiff = handle0.x - handle1.x; 50 | 51 | const angle = Math.atan2(-xdiff, -ydiff); 52 | const stops = paint.gradientStops 53 | .map((stop) => { 54 | return `${colorString(stop)} ${Math.round(stop.position * 100)}%`; 55 | }) 56 | .join(", "); 57 | return `linear-gradient(${angle}rad, ${stops})`; 58 | } 59 | 60 | function paintToRadialGradient(paint) { 61 | const stops = paint.gradientStops 62 | .map((stop) => { 63 | return `${colorString(stop)} ${Math.round(stop.position * 60)}%`; 64 | }) 65 | .join(", "); 66 | 67 | return `radial-gradient(${stops})`; 68 | } 69 | 70 | function JSToCSS(JS) { 71 | let cssString = ""; 72 | const addPx = [ 73 | "minHeight", 74 | "minWidth", 75 | "height", 76 | "width", 77 | "left", 78 | "right", 79 | "top", 80 | "bottom", 81 | "fontSize", 82 | ]; 83 | if (typeof JS === "object" && JS !== null) { 84 | for (let objectKey in JS) { 85 | cssString += 86 | objectKey.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`) + 87 | ": " + 88 | JS[objectKey] + 89 | //add "px" to end if it's one of the above types and is a number 90 | (addPx.includes(objectKey) && !isNaN(JS[objectKey]) ? "px" : "") + 91 | "; "; 92 | } 93 | 94 | return cssString; 95 | } else { 96 | return ""; 97 | } 98 | } 99 | 100 | function containsHyperlink(checkNode) { 101 | if ( 102 | checkNode.hasOwnProperty("style") && 103 | "hyperlink" in checkNode.style && 104 | checkNode.style.hyperlink.type == "URL" 105 | ) { 106 | //if node has hyperlink as style 107 | return true; 108 | } else { 109 | if ( 110 | checkNode.hasOwnProperty("styleOverrideTable") && 111 | Object.keys(checkNode.styleOverrideTable).length !== 0 112 | ) { 113 | //if there are things in styleOverrideTable 114 | for (const key of Object.keys(checkNode.styleOverrideTable)) { 115 | if ( 116 | "hyperlink" in checkNode.styleOverrideTable[key] && 117 | checkNode.styleOverrideTable[key].hyperlink.type == "URL" 118 | ) { 119 | return true; 120 | break; 121 | } 122 | } 123 | } else { 124 | return false; //if it doesn't hit a hyperlink 125 | } 126 | } 127 | } 128 | 129 | function checkForLinksRecursive(checkNodeRecursive, found = []) { 130 | if (containsHyperlink(checkNodeRecursive)) { 131 | found.push(checkNodeRecursive); 132 | } else if (checkNodeRecursive.hasOwnProperty("children")) { 133 | for (childNode in checkNodeRecursive.children) { 134 | checkForLinksRecursive(checkNodeRecursive.children[childNode], found); 135 | } 136 | } 137 | return found; 138 | } 139 | 140 | //EXPANDCHILDREN STARTS HERE 141 | function expandChildren(node, parent, minChildren, offset) { 142 | const children = node.children; 143 | let added = offset; 144 | 145 | if (children) { 146 | for (let i = 0; i < children.length; i++) { 147 | const child = children[i]; 148 | child.order = i + added; 149 | minChildren.push(child); 150 | } 151 | return added + children.length - offset; 152 | } 153 | return added - offset; 154 | } 155 | 156 | const createComponent = (component, imageFills, componentMap) => { 157 | const name = component.name.replace(/\W+/g, ""); 158 | const instance = name + component.id.replace(";", "S").replace(":", "D"); 159 | 160 | let doc = ""; //text to eventually add to file 161 | let artboardSize = { x: 360, y: 720 }; //default sizing 162 | 163 | function print(msg, indent) { 164 | //just a function to add something to 'doc' 165 | doc += `${msg}`; 166 | } 167 | 168 | //VISITNODE STARTS HERE 169 | //VISITNODE STARTS HERE 170 | 171 | const visitNode = (node, parent, lastVertical, indent) => { 172 | //i think this function visits nodes and builds an object 173 | //to be transferred to html/css/written to file 174 | let content = null; 175 | const styles = {}; 176 | let minChildren = []; 177 | let bounds = null; 178 | let relativeTransform = null; 179 | 180 | if (parent != null) { 181 | //if this node is a child node 182 | relativeTransform = node.relativeTransform; 183 | 184 | const parentSize = parent.size; 185 | 186 | bounds = { 187 | left: relativeTransform[0][2], 188 | right: parentSize.x - (relativeTransform[0][2] + node.size.x), 189 | top: relativeTransform[1][2], 190 | bottom: parentSize.y - (relativeTransform[1][2] + node.size.y), 191 | //i could do some smartness here to only set based on this "size" variable if node has it 192 | width: node.size.x, 193 | height: node.size.y, 194 | }; 195 | 196 | if (parent.name.startsWith("!")) { 197 | //if it's a top-level object in an artboard 198 | if (checkForLinksRecursive(node).length > 0) { 199 | //if any child has a link 200 | styles.zIndex = 21; //set the z-index higher than buttons 201 | } 202 | } 203 | } else { 204 | //if it's the first child; aka first level frame in Figma with ! 205 | artboardSize = node.size; 206 | } 207 | 208 | //this runs that function above 209 | expandChildren(node, parent, minChildren, 0); 210 | //adds children to the object? 211 | 212 | const cHorizontal = node.constraints && node.constraints.horizontal; 213 | const cVertical = node.constraints && node.constraints.vertical; 214 | 215 | //if there is any rotation or matrix transform 216 | if (node.relativeTransform[0][0] !== 1) { 217 | styles.transform = 218 | "matrix(" + 219 | node.relativeTransform[0][0] + 220 | "," + 221 | node.relativeTransform[1][0] + 222 | "," + 223 | node.relativeTransform[0][1] + 224 | "," + 225 | node.relativeTransform[1][1] + 226 | ",0,0)"; 227 | styles.transformOrigin = "0% 0%"; 228 | } 229 | 230 | if (cHorizontal === "LEFT_RIGHT") { 231 | if (bounds != null) { 232 | styles.position = "absolute"; 233 | styles.left = bounds.left; 234 | styles.right = bounds.right; 235 | styles.flexGrow = 1; 236 | } 237 | } else { 238 | //if it's got width and isn't stuck to left and right 239 | if (bounds && bounds.width) { 240 | if (node.type === "TEXT" && node.style.textAutoResize) { 241 | if (node.style.textAutoResize !== "WIDTH_AND_HEIGHT") { 242 | //if it's an auto resize 243 | styles.width = bounds.width; 244 | } 245 | } else { 246 | // styles.width = bounds.width; 247 | if (!node.layoutMode) { 248 | //if it's not auto layout 249 | styles.width = bounds.width; 250 | } else if (node.layoutMode == "VERTICAL" && node.counterAxisSizingMode == "FIXED") { 251 | //if it's vertical auto layout and vertical is fixed 252 | styles.width = bounds.width; 253 | } else if (node.layoutMode == "HORIZONTAL" && node.primaryAxisSizingMode == "FIXED") { 254 | //if it's horizontal auto layout and vertical is fixed 255 | styles.width = bounds.width; 256 | } 257 | } 258 | } 259 | if (cHorizontal === "RIGHT" && bounds != null) { 260 | styles.position = "absolute"; 261 | styles.right = bounds.right; 262 | // styles.minWidth = bounds.width; 263 | } else if (cHorizontal === "CENTER") { 264 | styles.position = "absolute"; 265 | styles.left = 266 | "calc(50% - " + 267 | bounds.width / 2 + 268 | "px - " + 269 | // ((artboardSize.x - bounds.width) / 2 - bounds.left) + 270 | ((parent.size.x - bounds.width) / 2 - bounds.left) + 271 | "px)"; 272 | } else if (cHorizontal === "SCALE" && bounds != null) { 273 | const parentWidth = bounds.left + bounds.width + bounds.right; 274 | styles.width = `${(bounds.width * 100) / parentWidth}%`; 275 | styles.left = `${(bounds.left * 100) / parentWidth}%`; 276 | } else if (bounds != null) { 277 | // styles.marginLeft = bounds.left; 278 | styles.position = "absolute"; 279 | styles.left = bounds.left; 280 | // styles.width = bounds.width; 281 | // styles.minWidth = bounds.width; 282 | } 283 | } 284 | 285 | if (cVertical === "TOP_BOTTOM") { 286 | //if it's stuck to the bottom & top 287 | if (bounds != null) { 288 | styles.top = bounds.top; 289 | styles.bottom = bounds.bottom; 290 | } 291 | } else { 292 | if (bounds && bounds.height) { 293 | if (!node.layoutMode) { 294 | //if it's not auto layout 295 | styles.height = bounds.height; 296 | } else if (node.layoutMode == "VERTICAL" && node.primaryAxisSizingMode == "FIXED") { 297 | //if it's vertical auto layout and vertical is fixed 298 | styles.height = bounds.height; 299 | } else if (node.layoutMode == "HORIZONTAL" && node.counterAxisSizingMode == "FIXED") { 300 | //if it's horizontal auto layout and vertical is fixed 301 | styles.height = bounds.height; 302 | } 303 | } 304 | 305 | if (cVertical === "CENTER") { 306 | styles.position = "absolute"; 307 | styles.top = 308 | "calc(50% - " + 309 | bounds.height / 2 + 310 | "px - " + 311 | ((parent.size.y - bounds.height) / 2 - bounds.top) + 312 | "px)"; 313 | } else if (cVertical === "SCALE" && bounds != null) { 314 | //this seems chaotic; probably better to do with pos. absolute and setting all sides 315 | const parentHeight = bounds.top + bounds.height + bounds.bottom; 316 | styles.height = `${(bounds.height * 100) / parentHeight}%`; 317 | styles.top = `${(bounds.top * 100) / parentHeight}%`; 318 | } else if (cVertical === "TOP" && bounds != null) { 319 | styles.position = "absolute"; 320 | styles.top = bounds.top; 321 | } else if (cVertical === "BOTTOM" && bounds != null) { 322 | styles.position = "absolute"; 323 | styles.bottom = bounds.bottom; 324 | } 325 | } 326 | 327 | //if last 4 letters are .mp4 328 | if (node.name.slice(node.name.length - 4) == ".mp4") { 329 | styles.overflow = "hidden"; 330 | } 331 | 332 | //if it's auto layout parent 333 | if (node.layoutMode) { 334 | styles.display = "flex"; 335 | 336 | if (node.layoutMode == "HORIZONTAL") { 337 | styles.flexDirection = "row"; 338 | } else if (node.layoutMode == "VERTICAL") { 339 | styles.flexDirection = "column"; 340 | } 341 | 342 | styles.padding = 343 | node.paddingTop + 344 | "px " + 345 | node.paddingRight + 346 | "px " + 347 | node.paddingBottom + 348 | "px " + 349 | node.paddingLeft + 350 | "px"; 351 | 352 | //primary axis 353 | if (node.primaryAxisAlignItems == "SPACE_BETWEEN") { 354 | styles.justifyContent = "space-between"; 355 | } else if (node.primaryAxisAlignItems == "CENTER") { 356 | styles.justifyContent = "center"; 357 | } else if (node.primaryAxisAlignItems == "MAX") { 358 | styles.justifyContent = "flex-end"; 359 | } else { 360 | styles.justifyContent = "flex-start"; 361 | } 362 | 363 | //secondary axis 364 | if (node.counterAxisAlignItems == "CENTER") { 365 | styles.alignItems = "center"; 366 | } else if (node.counterAxisAlignItems == "MAX") { 367 | styles.alignItems = "flex-end"; 368 | } else { 369 | styles.alignItems = "flex-start"; 370 | } 371 | } 372 | 373 | //if it's auto layout child 374 | if (node.layoutAlign) { 375 | styles.flex = "none"; 376 | styles.position = "static"; 377 | if (node.layoutAlign == "MIN") { 378 | styles.alignSelf = "flex-start"; 379 | } else if (node.layoutAlign == "CENTER") { 380 | styles.alignSelf = "center"; 381 | } else if (node.layoutAlign == "MAX") { 382 | styles.alignSelf = "flex-end"; 383 | } else if (node.layoutAlign == "STRETCH") { 384 | styles.alignSelf = "stretch"; 385 | } 386 | 387 | styles.flexGrow = node.layoutGrow; 388 | 389 | if ( 390 | parent.itemSpacing && 391 | parent.itemSpacing !== 0 && 392 | parent.primaryAxisAlignItems !== "SPACE_BETWEEN" 393 | ) { 394 | //if parent has item spacing… 395 | //and it's not the last item… 396 | // console.log(parent.children.length + ' ' + parent.children.indexOf(node)); 397 | if (parent.children.indexOf(node) < parent.children.length - 1) { 398 | parent.layoutMode == "HORIZONTAL" 399 | ? (styles.marginRight = parent.itemSpacing + "px") 400 | : (styles.marginBottom = parent.itemSpacing + "px"); 401 | } 402 | } 403 | } 404 | 405 | node.opacity ? (styles.opacity = node.opacity) : null; 406 | 407 | if ( 408 | ["FRAME", "RECTANGLE", "INSTANCE", "COMPONENT", "ELLIPSE", "GROUP"].indexOf(node.type) >= 0 409 | ) { 410 | if (node.clipsContent) styles.overflow = "hidden"; 411 | 412 | const lastFill = getPaint(node.fills); 413 | if (lastFill) { 414 | if (lastFill.type === "SOLID") { 415 | styles.backgroundColor = colorString(lastFill); 416 | // lastFill.opacity !== undefined ? (styles.opacity = lastFill.opacity) : null; 417 | } else if (lastFill.type === "IMAGE") { 418 | saveImageToDisk(imageFills[lastFill.imageRef], "./docs/images/" + node.name); 419 | styles.backgroundImage = "url(./images/" + node.name + ")"; 420 | styles.backgroundSize = backgroundSize(lastFill.scaleMode); 421 | styles.backgroundPosition = "center"; 422 | } else if (lastFill.type === "GRADIENT_LINEAR") { 423 | styles.background = paintToLinearGradient(lastFill); 424 | } else if (lastFill.type === "GRADIENT_RADIAL") { 425 | styles.background = paintToRadialGradient(lastFill); 426 | } 427 | } 428 | 429 | if (node.effects) { 430 | for (let i = 0; i < node.effects.length; i++) { 431 | const effect = node.effects[i]; 432 | if (effect.type === "DROP_SHADOW") { 433 | styles.boxShadow = dropShadow(effect); 434 | } else if (effect.type === "INNER_SHADOW") { 435 | styles.boxShadow = innerShadow(effect); 436 | } else if (effect.type === "LAYER_BLUR") { 437 | styles.filter = `blur(${effect.radius}px)`; 438 | } 439 | } 440 | } 441 | 442 | const lastStroke = getPaint(node.strokes); 443 | if (lastStroke) { 444 | if (lastStroke.type === "SOLID") { 445 | const weight = node.strokeWeight || 1; 446 | styles.border = `${weight}px solid ${colorString(lastStroke)}`; 447 | } 448 | } 449 | if (node.type === "ELLIPSE") { 450 | styles.borderRadius = "50%"; 451 | } else { 452 | console.dir(node.cornerRadius) 453 | const cornerRadii = node.cornerRadius; 454 | if ( 455 | cornerRadii 456 | // && 457 | // cornerRadii.length === 4 && 458 | // cornerRadii[0] + cornerRadii[1] + cornerRadii[2] + cornerRadii[3] > 0 459 | ) { 460 | styles.borderRadius = `${cornerRadii}px`; 461 | } 462 | } 463 | } else if (node.type === "TEXT") { 464 | const lastFill = getPaint(node.fills); 465 | if (lastFill) { 466 | styles.color = colorString(lastFill); 467 | } 468 | 469 | const lastStroke = getPaint(node.strokes); 470 | if (lastStroke) { 471 | const weight = node.strokeWeight || 1; 472 | styles.WebkitTextStroke = `${weight}px ${colorString(lastStroke)}`; 473 | } 474 | 475 | const applyFontStyle = (_styles, fontStyle) => { 476 | if (fontStyle) { 477 | if (fontStyle.fontSize) _styles.fontSize = fontStyle.fontSize; 478 | if (fontStyle.fontWeight) _styles.fontWeight = fontStyle.fontWeight; 479 | if (fontStyle.fontFamily) _styles.fontFamily = fontStyle.fontFamily; 480 | _styles.fontFamily += ", IBM Plex Sans, sans-serif"; 481 | if (fontStyle.textAlignHorizontal) 482 | _styles.textAlign = fontStyle.textAlignHorizontal.toLowerCase(); 483 | _styles.fontStyle = fontStyle.italic ? "italic" : "normal"; 484 | if (fontStyle.lineHeightPercent) 485 | _styles.lineHeight = `${fontStyle.lineHeightPercent * 1.25}%`; 486 | if (fontStyle.letterSpacing) _styles.letterSpacing = `${fontStyle.letterSpacing}px`; 487 | if (fontStyle.textDecoration == "UNDERLINE") { 488 | _styles.textDecorationLine = "underline"; 489 | } else if (fontStyle.textDecoration == "STRIKETHROUGH") { 490 | _styles.textDecorationLine = "line-through"; 491 | } 492 | } 493 | }; 494 | applyFontStyle(styles, node.style); //this takes the fontStyle and applies it to 'styles' object 495 | 496 | //could do this with the title of the node tbh 497 | 498 | let para = ""; 499 | const ps = []; //this holds the content? 500 | 501 | const styleCache = {}; 502 | let currStyle = 0; 503 | 504 | const commitParagraph = (key) => { 505 | if (para !== "") { 506 | if (styleCache[currStyle] == null && currStyle !== 0) { 507 | styleCache[currStyle] = {}; 508 | applyFontStyle(styleCache[currStyle], node.styleOverrideTable[currStyle]); 509 | const inlineFill = getPaint(node.styleOverrideTable[currStyle].fills); 510 | if (inlineFill) { 511 | styleCache[currStyle].color = colorString(inlineFill); 512 | } 513 | } 514 | 515 | const styleOverride = styleCache[currStyle] ? styleCache[currStyle] : {}; 516 | 517 | Object.keys(styleOverride).length > 0 //if there are style overrides 518 | ? "hyperlink" in node.styleOverrideTable[currStyle] && 519 | node.styleOverrideTable[currStyle].hyperlink.type == "URL" //if hyperlink exists in overrides 520 | ? ps.push( 521 | ` ` + 524 | para + 525 | `` 526 | ) 527 | : ps.push(`${para}`) 528 | : "hyperlink" in node.style && node.style.hyperlink.type == "URL" //if hyperlink exists 529 | ? ps.push(`${para}`) 530 | : ps.push(`${para}`); 531 | //add a span to ps, then reset para 532 | para = ""; 533 | } 534 | }; 535 | 536 | for (const i in node.characters) { 537 | let idx = node.characterStyleOverrides[i]; // 538 | 539 | if (node.characters[i] === "\n") { 540 | //if there's a new line? 541 | commitParagraph(i); 542 | ps.push(`
`); 543 | continue; 544 | } 545 | 546 | if (idx == null) idx = 0; 547 | if (idx !== currStyle) { 548 | //hits commitParagraph every time the style changes? 549 | commitParagraph(i); 550 | currStyle = idx; 551 | } 552 | 553 | para += node.characters[i]; //adds to para, this is what gets committed 554 | } 555 | commitParagraph("end"); //after all characters 556 | 557 | content = ps; 558 | } 559 | 560 | function printDiv(styles, indent) { 561 | //this is really "print div opening tag " 562 | print(``, indent); 566 | } 567 | 568 | //PRINTING STARTS HERE 569 | //PRINTING STARTS HERE 570 | //PRINTING STARTS HERE 571 | 572 | //PRINT OPENING TAG: 573 | if (parent != null) { 574 | //if it's not the top layer 575 | if (!["VECTOR", "REGULAR_POLYGON", "LINE", "STAR"].includes(node.type)) 576 | //if it's not a vector 577 | printDiv(styles, indent); 578 | } else { 579 | //if it is the top layer 580 | print( 581 | `
`, 584 | indent 585 | ); 586 | } 587 | 588 | //PRINT CONTENT: 589 | if (node.id !== component.id && node.name.charAt(0) === "!") { 590 | //if this is a new top-level node? 591 | createComponent(node, imageFills, componentMap); //recurse and hit again; 592 | } else if (["VECTOR", "REGULAR_POLYGON", "LINE", "STAR"].includes(node.type)) { 593 | // print(`
${svgMap[node.id]}
`, indent); 594 | print( 595 | ` `, 604 | indent 605 | ); 606 | //PRINT THE SVG HERE BAYBEEEE 607 | //maybe do multiple paths for vectors with multiple paths idk 608 | } else { 609 | //if it's not a vector or a first layer 610 | for (const child of minChildren) { 611 | //for each child, recurse into VisitNode 612 | visitNode(child, node, null, indent); 613 | } 614 | 615 | if (content != null) { 616 | for (const piece of content) { 617 | print(piece, indent); 618 | } 619 | } 620 | 621 | if (node.name.slice(node.name.length - 4) == ".mp4") { 622 | //if last 4 letters are .mp4 623 | print( 624 | ``, indent); 633 | console.log(node.name); 634 | } 635 | } 636 | 637 | //PRINT CLOSING TAG 638 | if (parent != null) { 639 | if (!["VECTOR", "REGULAR_POLYGON", "LINE", "STAR"].includes(node.type)) 640 | print(``, indent); 641 | } else { 642 | print(`
`, indent); 643 | } 644 | //end of visitNode; 645 | }; 646 | 647 | visitNode(component, null, null, " "); //here's where it runs that big ol function baybeee 648 | componentMap[component.id] = { instance, name, doc }; //adds component doc(printed html, basically) to componentMap 649 | }; 650 | 651 | module.exports = { createComponent }; 652 | -------------------------------------------------------------------------------- /nodeFigma.js: -------------------------------------------------------------------------------- 1 | // require('dotenv').config(); //dunno if this is necessary 2 | const fetch = require('node-fetch'); //fetch behaviour 3 | const fs = require('fs'); //file system 4 | const figma = require('./lib/figma'); 5 | 6 | const headers = new fetch.Headers(); 7 | const componentList = []; 8 | let devToken = '42909-59b7407f-9d5d-4efc-bbbe-1980e8e471a3'; 9 | 10 | if (process.argv.length < 3) { 11 | console.log('Usage: node setup.js [figma-dev-token]'); 12 | process.exit(0); 13 | } 14 | 15 | if (process.argv.length > 3) { 16 | devToken = process.argv[3]; 17 | } 18 | 19 | headers.append('X-Figma-Token', devToken); 20 | 21 | const fileKey = process.argv[2]; 22 | const baseUrl = 'https://api.figma.com'; 23 | 24 | // const vectorMap = {}; 25 | // const vectorList = []; 26 | // const vectorTypes = ['VECTOR', 'LINE', 'REGULAR_POLYGON', 'STAR']; 27 | 28 | //shit begins after this 29 | //shit begins after this 30 | //shit begins after this 31 | 32 | //DON'T DELETE 33 | //DON'T DELETE 34 | // function preprocessTree(node) { 35 | // //this code runs once per frame with ! 36 | // let vectorsOnly = node.name.charAt(0) !== '!'; //things that don't start with ! 37 | // let vectorVConstraint = null; 38 | // let vectorHConstraint = null; 39 | 40 | // if (vectorTypes.indexOf(node.type) >= 0) { 41 | // //if the node is vector 42 | // // node.type = 'VECTOR'; 43 | // // vectorMap[node.id] = node; 44 | // vectorList.push(node.id); //adds to vectorlist 45 | // node.children = []; 46 | // } 47 | 48 | // if (node.children) { 49 | // //if there are children 50 | // for (const child of node.children) { 51 | // preprocessTree(child); //oh it's recursive baybee 52 | // } 53 | // } 54 | // } 55 | //DON'T DELETE 56 | //DON'T DELETE 57 | 58 | async function main() { 59 | let resp = await fetch(`${baseUrl}/v1/files/${fileKey}?geometry=paths`, { 60 | headers, 61 | }); 62 | let data = await resp.json(); //data is what comes back from API request 63 | 64 | const doc = data.document; //figma document 65 | const figmaFile = doc.children; //only grabbing first child = first page in project 66 | // const canvas = doc.children[0]; //only grabbing first child = first page in project 67 | //this is where I gotta call diffo pages 68 | 69 | // const canvas2 = doc.children[0]; //only grabbing first child = first page in project 70 | 71 | //GRAB THE BACKGROUND IMAGES: 72 | let respImages = await fetch(`${baseUrl}/v1/files/${fileKey}/images`, { 73 | headers, 74 | }); 75 | let imageFillJSON = await respImages.json(); //data is what comes back from API request 76 | // if (!imageFills.error && imageFills.meta.images) 77 | const imageFills = imageFillJSON.meta.images || {}; 78 | 79 | //DON'T DELETE 80 | //DON'T DELETE 81 | // for (let j = 0; j < figmaFile.length; j++) { 82 | // for (let i = 0; i < figmaFile[j].children.length; i++) { 83 | // //for each child of canvas 84 | // const child = figmaFile[j].children[i]; 85 | // if (child.name.charAt(0) === '!' && child.visible !== false) { 86 | // // preprocessTree(child); //run preprocess function? 87 | // //for each frame 88 | // } 89 | // } 90 | // } 91 | 92 | //okay soooo it's unclear to me what "preprocess" does… 93 | //maybe it cleans up files if there's a bunch of extra stuff? 94 | //or stuff the system isn't expecting? 95 | //DON'T DELETE 96 | //DON'T DELETE 97 | 98 | //is this where it grabs SVGs? what's vectorList? 99 | //does it get populated by preprocess? 100 | //GU IDS ?? 101 | // let guids = vectorList.join(','); //this grabs the vectors? 102 | 103 | // let svgData = await fetch(`${baseUrl}/v1/images/${fileKey}?ids=${guids}&format=svg`, { headers }); 104 | 105 | // //grabs svgs of vectorList 106 | // const svgJSON = await svgData.json(); //makes json out of them 107 | // const svgs = svgJSON.images || {}; //if images exist? 108 | // if (svgs) { 109 | // //if images exist, process like this? 110 | // let promises = []; 111 | // let guids = []; 112 | // for (const guid in svgs) { 113 | // if (svgs[guid] == null) continue; 114 | // guids.push(guid); 115 | // promises.push(fetch(svgs[guid])); 116 | // } 117 | 118 | // let responses = await Promise.all(promises); 119 | // promises = []; 120 | // for (const resp of responses) { 121 | // promises.push(resp.text()); 122 | // } 123 | 124 | // responses = await Promise.all(promises); 125 | // for (let i = 0; i < responses.length; i++) { 126 | // //replace svg with svg preserveAspectRatio none 127 | // svgs[guids[i]] = responses[i] 128 | // .replace(' Svelte app'; 165 | `{ name: "${figmaFile[j].name}", stories:[`; 166 | contents += nextSection; //append nextSection to contents 167 | // contents += ''; 168 | contents += ']}, '; 169 | } 170 | } 171 | contents += ' ];'; 172 | 173 | //here is where to end json 174 | 175 | const path = './src/figmaExport.js'; //so here, it writes one file. 176 | //here is where it could change to multiple files, one per project/frame 177 | fs.writeFile(path, contents, function (err) { 178 | //write the file 179 | if (err) console.log(err); 180 | console.log(`wrote ${path}`); 181 | }); 182 | } 183 | 184 | main().catch((err) => { 185 | //run main 186 | console.error(err); 187 | console.error(err.stack); 188 | }); 189 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelte-app", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "node-fetch": "^2.6.1", 12 | "sirv-cli": "^0.4.4", 13 | "svelte-spa-router": "^2.2.0" 14 | }, 15 | "devDependencies": { 16 | "@composi/gestures": "^1.0.9", 17 | "@rollup/plugin-commonjs": "11.0.2", 18 | "@rollup/plugin-node-resolve": "^7.0.0", 19 | "rollup": "^1.20.0", 20 | "rollup-plugin-livereload": "^1.0.0", 21 | "rollup-plugin-svelte": "^5.0.3", 22 | "rollup-plugin-terser": "^7.0.2", 23 | "svelte": "^3.0.0" 24 | } 25 | }, 26 | "node_modules/@babel/code-frame": { 27 | "version": "7.12.13", 28 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 29 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 30 | "dev": true, 31 | "dependencies": { 32 | "@babel/highlight": "^7.12.13" 33 | } 34 | }, 35 | "node_modules/@babel/helper-validator-identifier": { 36 | "version": "7.12.11", 37 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 38 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 39 | "dev": true 40 | }, 41 | "node_modules/@babel/highlight": { 42 | "version": "7.13.10", 43 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", 44 | "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", 45 | "dev": true, 46 | "dependencies": { 47 | "@babel/helper-validator-identifier": "^7.12.11", 48 | "chalk": "^2.0.0", 49 | "js-tokens": "^4.0.0" 50 | } 51 | }, 52 | "node_modules/@composi/gestures": { 53 | "version": "1.0.9", 54 | "resolved": "https://registry.npmjs.org/@composi/gestures/-/gestures-1.0.9.tgz", 55 | "integrity": "sha512-x2kiLMfBqY8VAbvVghbPJcvrS+OB2m0EGmpdcLjvREFnffUhPD0sWB1RliYS1pg3cs/sbpQlRDVgIvaPVsPyDg==", 56 | "dev": true 57 | }, 58 | "node_modules/@polka/url": { 59 | "version": "0.5.0", 60 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", 61 | "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" 62 | }, 63 | "node_modules/@rollup/plugin-commonjs": { 64 | "version": "11.0.2", 65 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz", 66 | "integrity": "sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==", 67 | "dev": true, 68 | "dependencies": { 69 | "@rollup/pluginutils": "^3.0.0", 70 | "estree-walker": "^1.0.1", 71 | "is-reference": "^1.1.2", 72 | "magic-string": "^0.25.2", 73 | "resolve": "^1.11.0" 74 | }, 75 | "engines": { 76 | "node": ">= 8.0.0" 77 | } 78 | }, 79 | "node_modules/@rollup/plugin-node-resolve": { 80 | "version": "7.1.3", 81 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", 82 | "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", 83 | "dev": true, 84 | "dependencies": { 85 | "@rollup/pluginutils": "^3.0.8", 86 | "@types/resolve": "0.0.8", 87 | "builtin-modules": "^3.1.0", 88 | "is-module": "^1.0.0", 89 | "resolve": "^1.14.2" 90 | }, 91 | "engines": { 92 | "node": ">= 8.0.0" 93 | } 94 | }, 95 | "node_modules/@rollup/pluginutils": { 96 | "version": "3.0.9", 97 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", 98 | "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", 99 | "dev": true, 100 | "dependencies": { 101 | "@types/estree": "0.0.39", 102 | "estree-walker": "^1.0.1", 103 | "micromatch": "^4.0.2" 104 | }, 105 | "engines": { 106 | "node": ">= 8.0.0" 107 | } 108 | }, 109 | "node_modules/@types/estree": { 110 | "version": "0.0.39", 111 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 112 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 113 | "dev": true 114 | }, 115 | "node_modules/@types/node": { 116 | "version": "13.13.0", 117 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.0.tgz", 118 | "integrity": "sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A==", 119 | "dev": true 120 | }, 121 | "node_modules/@types/resolve": { 122 | "version": "0.0.8", 123 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 124 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 125 | "dev": true, 126 | "dependencies": { 127 | "@types/node": "*" 128 | } 129 | }, 130 | "node_modules/acorn": { 131 | "version": "7.1.1", 132 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 133 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 134 | "dev": true, 135 | "bin": { 136 | "acorn": "bin/acorn" 137 | }, 138 | "engines": { 139 | "node": ">=0.4.0" 140 | } 141 | }, 142 | "node_modules/ansi-styles": { 143 | "version": "3.2.1", 144 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 145 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 146 | "dev": true, 147 | "dependencies": { 148 | "color-convert": "^1.9.0" 149 | }, 150 | "engines": { 151 | "node": ">=4" 152 | } 153 | }, 154 | "node_modules/anymatch": { 155 | "version": "3.1.1", 156 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 157 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 158 | "dev": true, 159 | "dependencies": { 160 | "normalize-path": "^3.0.0", 161 | "picomatch": "^2.0.4" 162 | }, 163 | "engines": { 164 | "node": ">= 8" 165 | } 166 | }, 167 | "node_modules/async-limiter": { 168 | "version": "1.0.1", 169 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 170 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", 171 | "dev": true 172 | }, 173 | "node_modules/binary-extensions": { 174 | "version": "2.0.0", 175 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 176 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 177 | "dev": true, 178 | "engines": { 179 | "node": ">=8" 180 | } 181 | }, 182 | "node_modules/braces": { 183 | "version": "3.0.2", 184 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 185 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 186 | "dev": true, 187 | "dependencies": { 188 | "fill-range": "^7.0.1" 189 | }, 190 | "engines": { 191 | "node": ">=8" 192 | } 193 | }, 194 | "node_modules/buffer-from": { 195 | "version": "1.1.1", 196 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 197 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 198 | "dev": true 199 | }, 200 | "node_modules/builtin-modules": { 201 | "version": "3.1.0", 202 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 203 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 204 | "dev": true, 205 | "engines": { 206 | "node": ">=6" 207 | } 208 | }, 209 | "node_modules/chalk": { 210 | "version": "2.4.2", 211 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 212 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 213 | "dev": true, 214 | "dependencies": { 215 | "ansi-styles": "^3.2.1", 216 | "escape-string-regexp": "^1.0.5", 217 | "supports-color": "^5.3.0" 218 | }, 219 | "engines": { 220 | "node": ">=4" 221 | } 222 | }, 223 | "node_modules/chokidar": { 224 | "version": "3.3.1", 225 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 226 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 227 | "dev": true, 228 | "dependencies": { 229 | "anymatch": "~3.1.1", 230 | "braces": "~3.0.2", 231 | "glob-parent": "~5.1.0", 232 | "is-binary-path": "~2.1.0", 233 | "is-glob": "~4.0.1", 234 | "normalize-path": "~3.0.0", 235 | "readdirp": "~3.3.0" 236 | }, 237 | "engines": { 238 | "node": ">= 8.10.0" 239 | }, 240 | "optionalDependencies": { 241 | "fsevents": "~2.1.2" 242 | } 243 | }, 244 | "node_modules/color-convert": { 245 | "version": "1.9.3", 246 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 247 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 248 | "dev": true, 249 | "dependencies": { 250 | "color-name": "1.1.3" 251 | } 252 | }, 253 | "node_modules/color-name": { 254 | "version": "1.1.3", 255 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 256 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 257 | "dev": true 258 | }, 259 | "node_modules/commander": { 260 | "version": "2.20.3", 261 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 262 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 263 | "dev": true 264 | }, 265 | "node_modules/console-clear": { 266 | "version": "1.1.1", 267 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 268 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", 269 | "engines": { 270 | "node": ">=4" 271 | } 272 | }, 273 | "node_modules/escape-string-regexp": { 274 | "version": "1.0.5", 275 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 276 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 277 | "dev": true, 278 | "engines": { 279 | "node": ">=0.8.0" 280 | } 281 | }, 282 | "node_modules/estree-walker": { 283 | "version": "1.0.1", 284 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 285 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 286 | "dev": true 287 | }, 288 | "node_modules/fill-range": { 289 | "version": "7.0.1", 290 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 291 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 292 | "dev": true, 293 | "dependencies": { 294 | "to-regex-range": "^5.0.1" 295 | }, 296 | "engines": { 297 | "node": ">=8" 298 | } 299 | }, 300 | "node_modules/fsevents": { 301 | "version": "2.1.2", 302 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 303 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 304 | "dev": true, 305 | "optional": true, 306 | "os": [ 307 | "darwin" 308 | ], 309 | "engines": { 310 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 311 | } 312 | }, 313 | "node_modules/get-port": { 314 | "version": "3.2.0", 315 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 316 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", 317 | "engines": { 318 | "node": ">=4" 319 | } 320 | }, 321 | "node_modules/glob-parent": { 322 | "version": "5.1.1", 323 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 324 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 325 | "dev": true, 326 | "dependencies": { 327 | "is-glob": "^4.0.1" 328 | }, 329 | "engines": { 330 | "node": ">= 6" 331 | } 332 | }, 333 | "node_modules/has-flag": { 334 | "version": "3.0.0", 335 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 336 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 337 | "dev": true, 338 | "engines": { 339 | "node": ">=4" 340 | } 341 | }, 342 | "node_modules/is-binary-path": { 343 | "version": "2.1.0", 344 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 345 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 346 | "dev": true, 347 | "dependencies": { 348 | "binary-extensions": "^2.0.0" 349 | }, 350 | "engines": { 351 | "node": ">=8" 352 | } 353 | }, 354 | "node_modules/is-extglob": { 355 | "version": "2.1.1", 356 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 357 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 358 | "dev": true, 359 | "engines": { 360 | "node": ">=0.10.0" 361 | } 362 | }, 363 | "node_modules/is-glob": { 364 | "version": "4.0.1", 365 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 366 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 367 | "dev": true, 368 | "dependencies": { 369 | "is-extglob": "^2.1.1" 370 | }, 371 | "engines": { 372 | "node": ">=0.10.0" 373 | } 374 | }, 375 | "node_modules/is-module": { 376 | "version": "1.0.0", 377 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 378 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 379 | "dev": true 380 | }, 381 | "node_modules/is-number": { 382 | "version": "7.0.0", 383 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 384 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 385 | "dev": true, 386 | "engines": { 387 | "node": ">=0.12.0" 388 | } 389 | }, 390 | "node_modules/is-reference": { 391 | "version": "1.1.4", 392 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", 393 | "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", 394 | "dev": true, 395 | "dependencies": { 396 | "@types/estree": "0.0.39" 397 | } 398 | }, 399 | "node_modules/jest-worker": { 400 | "version": "26.6.2", 401 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 402 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 403 | "dev": true, 404 | "dependencies": { 405 | "@types/node": "*", 406 | "merge-stream": "^2.0.0", 407 | "supports-color": "^7.0.0" 408 | }, 409 | "engines": { 410 | "node": ">= 10.13.0" 411 | } 412 | }, 413 | "node_modules/jest-worker/node_modules/has-flag": { 414 | "version": "4.0.0", 415 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 416 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 417 | "dev": true, 418 | "engines": { 419 | "node": ">=8" 420 | } 421 | }, 422 | "node_modules/jest-worker/node_modules/supports-color": { 423 | "version": "7.2.0", 424 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 425 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 426 | "dev": true, 427 | "dependencies": { 428 | "has-flag": "^4.0.0" 429 | }, 430 | "engines": { 431 | "node": ">=8" 432 | } 433 | }, 434 | "node_modules/js-tokens": { 435 | "version": "4.0.0", 436 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 437 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 438 | "dev": true 439 | }, 440 | "node_modules/kleur": { 441 | "version": "3.0.3", 442 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 443 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", 444 | "engines": { 445 | "node": ">=6" 446 | } 447 | }, 448 | "node_modules/livereload": { 449 | "version": "0.9.1", 450 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz", 451 | "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==", 452 | "dev": true, 453 | "dependencies": { 454 | "chokidar": "^3.3.0", 455 | "livereload-js": "^3.1.0", 456 | "opts": ">= 1.2.0", 457 | "ws": "^6.2.1" 458 | }, 459 | "bin": { 460 | "livereload": "bin/livereload.js" 461 | }, 462 | "engines": { 463 | "node": ">=8.0.0" 464 | } 465 | }, 466 | "node_modules/livereload-js": { 467 | "version": "3.2.2", 468 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.2.2.tgz", 469 | "integrity": "sha512-xhScbNeC687ZINjEf/bD+BMiPx4s4q0mehcLb3zCc8+mykOtmaBR4vqzyIV9rIGdG9JjHaT0LiFdscvivCjX1Q==", 470 | "dev": true 471 | }, 472 | "node_modules/local-access": { 473 | "version": "1.0.1", 474 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.0.1.tgz", 475 | "integrity": "sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA==", 476 | "engines": { 477 | "node": ">=6" 478 | } 479 | }, 480 | "node_modules/magic-string": { 481 | "version": "0.25.7", 482 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 483 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 484 | "dev": true, 485 | "dependencies": { 486 | "sourcemap-codec": "^1.4.4" 487 | } 488 | }, 489 | "node_modules/merge-stream": { 490 | "version": "2.0.0", 491 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 492 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 493 | "dev": true 494 | }, 495 | "node_modules/micromatch": { 496 | "version": "4.0.2", 497 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 498 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 499 | "dev": true, 500 | "dependencies": { 501 | "braces": "^3.0.1", 502 | "picomatch": "^2.0.5" 503 | }, 504 | "engines": { 505 | "node": ">=8" 506 | } 507 | }, 508 | "node_modules/mime": { 509 | "version": "2.4.4", 510 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 511 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", 512 | "bin": { 513 | "mime": "cli.js" 514 | }, 515 | "engines": { 516 | "node": ">=4.0.0" 517 | } 518 | }, 519 | "node_modules/mri": { 520 | "version": "1.1.5", 521 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", 522 | "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==", 523 | "engines": { 524 | "node": ">=4" 525 | } 526 | }, 527 | "node_modules/node-fetch": { 528 | "version": "2.6.1", 529 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 530 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 531 | "engines": { 532 | "node": "4.x || >=6.0.0" 533 | } 534 | }, 535 | "node_modules/normalize-path": { 536 | "version": "3.0.0", 537 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 538 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 539 | "dev": true, 540 | "engines": { 541 | "node": ">=0.10.0" 542 | } 543 | }, 544 | "node_modules/opts": { 545 | "version": "1.2.7", 546 | "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.7.tgz", 547 | "integrity": "sha512-hwZhzGGG/GQ7igxAVFOEun2N4fWul31qE9nfBdCnZGQCB5+L7tN9xZ+94B4aUpLOJx/of3zZs5XsuubayQYQjA==", 548 | "dev": true 549 | }, 550 | "node_modules/path-parse": { 551 | "version": "1.0.6", 552 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 553 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 554 | "dev": true 555 | }, 556 | "node_modules/picomatch": { 557 | "version": "2.2.2", 558 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 559 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 560 | "dev": true, 561 | "engines": { 562 | "node": ">=8.6" 563 | } 564 | }, 565 | "node_modules/randombytes": { 566 | "version": "2.1.0", 567 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 568 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 569 | "dev": true, 570 | "dependencies": { 571 | "safe-buffer": "^5.1.0" 572 | } 573 | }, 574 | "node_modules/readdirp": { 575 | "version": "3.3.0", 576 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 577 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 578 | "dev": true, 579 | "dependencies": { 580 | "picomatch": "^2.0.7" 581 | }, 582 | "engines": { 583 | "node": ">=8.10.0" 584 | } 585 | }, 586 | "node_modules/regexparam": { 587 | "version": "1.3.0", 588 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", 589 | "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==", 590 | "engines": { 591 | "node": ">=6" 592 | } 593 | }, 594 | "node_modules/require-relative": { 595 | "version": "0.8.7", 596 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 597 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 598 | "dev": true 599 | }, 600 | "node_modules/resolve": { 601 | "version": "1.16.1", 602 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", 603 | "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", 604 | "dev": true, 605 | "dependencies": { 606 | "path-parse": "^1.0.6" 607 | } 608 | }, 609 | "node_modules/rollup": { 610 | "version": "1.32.1", 611 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", 612 | "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", 613 | "dev": true, 614 | "dependencies": { 615 | "@types/estree": "*", 616 | "@types/node": "*", 617 | "acorn": "^7.1.0" 618 | }, 619 | "bin": { 620 | "rollup": "dist/bin/rollup" 621 | } 622 | }, 623 | "node_modules/rollup-plugin-livereload": { 624 | "version": "1.2.0", 625 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.2.0.tgz", 626 | "integrity": "sha512-zKcS4D8ElSFj9Mv6OAM1kGB3o5LkCtEClewO8CDPEacj6p4DSvTOm6WlKSc8/WtsD0d3Q33Y96c5Jqzyaxo/8g==", 627 | "dev": true, 628 | "dependencies": { 629 | "livereload": "^0.9.1" 630 | } 631 | }, 632 | "node_modules/rollup-plugin-svelte": { 633 | "version": "5.2.1", 634 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.2.1.tgz", 635 | "integrity": "sha512-wc93cN66sRpX6uFljVFqvWT6NU3V5ab/uLXKt2UiARuexFU/ctolzkmdXM7WM5iKdTX9scToS9sabJTJV4DUMA==", 636 | "dev": true, 637 | "dependencies": { 638 | "require-relative": "^0.8.7", 639 | "rollup-pluginutils": "^2.8.2", 640 | "sourcemap-codec": "^1.4.8" 641 | } 642 | }, 643 | "node_modules/rollup-plugin-terser": { 644 | "version": "7.0.2", 645 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 646 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 647 | "dev": true, 648 | "dependencies": { 649 | "@babel/code-frame": "^7.10.4", 650 | "jest-worker": "^26.2.1", 651 | "serialize-javascript": "^4.0.0", 652 | "terser": "^5.0.0" 653 | } 654 | }, 655 | "node_modules/rollup-pluginutils": { 656 | "version": "2.8.2", 657 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 658 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 659 | "dev": true, 660 | "dependencies": { 661 | "estree-walker": "^0.6.1" 662 | } 663 | }, 664 | "node_modules/rollup-pluginutils/node_modules/estree-walker": { 665 | "version": "0.6.1", 666 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 667 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 668 | "dev": true 669 | }, 670 | "node_modules/sade": { 671 | "version": "1.7.3", 672 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.3.tgz", 673 | "integrity": "sha512-m4BctppMvJ60W1dXnHq7jMmFe3hPJZDAH85kQ3ACTo7XZNVUuTItCQ+2HfyaMeV5cKrbw7l4vD/6We3GBxvdJw==", 674 | "dependencies": { 675 | "mri": "^1.1.0" 676 | }, 677 | "engines": { 678 | "node": ">= 6" 679 | } 680 | }, 681 | "node_modules/safe-buffer": { 682 | "version": "5.2.1", 683 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 684 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 685 | "dev": true 686 | }, 687 | "node_modules/serialize-javascript": { 688 | "version": "4.0.0", 689 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 690 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 691 | "dev": true, 692 | "dependencies": { 693 | "randombytes": "^2.1.0" 694 | } 695 | }, 696 | "node_modules/sirv": { 697 | "version": "0.4.2", 698 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.2.tgz", 699 | "integrity": "sha512-dQbZnsMaIiTQPZmbGmktz+c74zt/hyrJEB4tdp2Jj0RNv9J6B/OWR5RyrZEvIn9fyh9Zlg2OlE2XzKz6wMKGAw==", 700 | "dependencies": { 701 | "@polka/url": "^0.5.0", 702 | "mime": "^2.3.1" 703 | }, 704 | "engines": { 705 | "node": ">= 6" 706 | } 707 | }, 708 | "node_modules/sirv-cli": { 709 | "version": "0.4.5", 710 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-0.4.5.tgz", 711 | "integrity": "sha512-Fl6icSm0EwPrXSGid2xphMp//WNTSX2yENRAGnJuuZNmdc8LvE/BtdZD3MPn28ifAfDqTMwbB3dpcZojAIOiBg==", 712 | "dependencies": { 713 | "console-clear": "^1.1.0", 714 | "get-port": "^3.2.0", 715 | "kleur": "^3.0.0", 716 | "local-access": "^1.0.1", 717 | "sade": "^1.4.0", 718 | "sirv": "^0.4.2", 719 | "tinydate": "^1.0.0" 720 | }, 721 | "bin": { 722 | "sirv": "index.js" 723 | }, 724 | "engines": { 725 | "node": ">= 6" 726 | } 727 | }, 728 | "node_modules/source-map": { 729 | "version": "0.7.3", 730 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 731 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 732 | "dev": true, 733 | "engines": { 734 | "node": ">= 8" 735 | } 736 | }, 737 | "node_modules/source-map-support": { 738 | "version": "0.5.19", 739 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 740 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 741 | "dev": true, 742 | "dependencies": { 743 | "buffer-from": "^1.0.0", 744 | "source-map": "^0.6.0" 745 | } 746 | }, 747 | "node_modules/source-map-support/node_modules/source-map": { 748 | "version": "0.6.1", 749 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 750 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 751 | "dev": true, 752 | "engines": { 753 | "node": ">=0.10.0" 754 | } 755 | }, 756 | "node_modules/sourcemap-codec": { 757 | "version": "1.4.8", 758 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 759 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 760 | "dev": true 761 | }, 762 | "node_modules/supports-color": { 763 | "version": "5.5.0", 764 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 765 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 766 | "dev": true, 767 | "dependencies": { 768 | "has-flag": "^3.0.0" 769 | }, 770 | "engines": { 771 | "node": ">=4" 772 | } 773 | }, 774 | "node_modules/svelte": { 775 | "version": "3.20.1", 776 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.20.1.tgz", 777 | "integrity": "sha512-m/dw52BZf+p6KYnyKLErIcGalu4pwJrQbUM7VZriRw6ZlJj1qMAZsLcIWzEB3I0hhdJwkKb7LrrvUIeqmbO92Q==", 778 | "dev": true, 779 | "engines": { 780 | "node": ">= 8" 781 | } 782 | }, 783 | "node_modules/svelte-spa-router": { 784 | "version": "2.2.0", 785 | "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-2.2.0.tgz", 786 | "integrity": "sha512-S3KpmiBszjdjkU1QA9FyNgrSdQORbXWp4wl8R147Gl7KoNof/0SfFJ23+9E47jLiNz+lCw1uaCfeHJi2I60bVg==", 787 | "dependencies": { 788 | "regexparam": "1.3.0" 789 | } 790 | }, 791 | "node_modules/terser": { 792 | "version": "5.6.1", 793 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", 794 | "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", 795 | "dev": true, 796 | "dependencies": { 797 | "commander": "^2.20.0", 798 | "source-map": "~0.7.2", 799 | "source-map-support": "~0.5.19" 800 | }, 801 | "bin": { 802 | "terser": "bin/terser" 803 | }, 804 | "engines": { 805 | "node": ">=10" 806 | } 807 | }, 808 | "node_modules/tinydate": { 809 | "version": "1.2.0", 810 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.2.0.tgz", 811 | "integrity": "sha512-3GwPk8VhDFnUZ2TrgkhXJs6hcMAIIw4x/xkz+ayK6dGoQmp2nUwKzBXK0WnMsqkh6vfUhpqQicQF3rbshfyJkg==", 812 | "engines": { 813 | "node": ">=4" 814 | } 815 | }, 816 | "node_modules/to-regex-range": { 817 | "version": "5.0.1", 818 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 819 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 820 | "dev": true, 821 | "dependencies": { 822 | "is-number": "^7.0.0" 823 | }, 824 | "engines": { 825 | "node": ">=8.0" 826 | } 827 | }, 828 | "node_modules/ws": { 829 | "version": "6.2.1", 830 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 831 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 832 | "dev": true, 833 | "dependencies": { 834 | "async-limiter": "~1.0.0" 835 | } 836 | } 837 | }, 838 | "dependencies": { 839 | "@babel/code-frame": { 840 | "version": "7.12.13", 841 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 842 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 843 | "dev": true, 844 | "requires": { 845 | "@babel/highlight": "^7.12.13" 846 | } 847 | }, 848 | "@babel/helper-validator-identifier": { 849 | "version": "7.12.11", 850 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 851 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 852 | "dev": true 853 | }, 854 | "@babel/highlight": { 855 | "version": "7.13.10", 856 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", 857 | "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", 858 | "dev": true, 859 | "requires": { 860 | "@babel/helper-validator-identifier": "^7.12.11", 861 | "chalk": "^2.0.0", 862 | "js-tokens": "^4.0.0" 863 | } 864 | }, 865 | "@composi/gestures": { 866 | "version": "1.0.9", 867 | "resolved": "https://registry.npmjs.org/@composi/gestures/-/gestures-1.0.9.tgz", 868 | "integrity": "sha512-x2kiLMfBqY8VAbvVghbPJcvrS+OB2m0EGmpdcLjvREFnffUhPD0sWB1RliYS1pg3cs/sbpQlRDVgIvaPVsPyDg==", 869 | "dev": true 870 | }, 871 | "@polka/url": { 872 | "version": "0.5.0", 873 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", 874 | "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" 875 | }, 876 | "@rollup/plugin-commonjs": { 877 | "version": "11.0.2", 878 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz", 879 | "integrity": "sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==", 880 | "dev": true, 881 | "requires": { 882 | "@rollup/pluginutils": "^3.0.0", 883 | "estree-walker": "^1.0.1", 884 | "is-reference": "^1.1.2", 885 | "magic-string": "^0.25.2", 886 | "resolve": "^1.11.0" 887 | } 888 | }, 889 | "@rollup/plugin-node-resolve": { 890 | "version": "7.1.3", 891 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", 892 | "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", 893 | "dev": true, 894 | "requires": { 895 | "@rollup/pluginutils": "^3.0.8", 896 | "@types/resolve": "0.0.8", 897 | "builtin-modules": "^3.1.0", 898 | "is-module": "^1.0.0", 899 | "resolve": "^1.14.2" 900 | } 901 | }, 902 | "@rollup/pluginutils": { 903 | "version": "3.0.9", 904 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", 905 | "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", 906 | "dev": true, 907 | "requires": { 908 | "@types/estree": "0.0.39", 909 | "estree-walker": "^1.0.1", 910 | "micromatch": "^4.0.2" 911 | } 912 | }, 913 | "@types/estree": { 914 | "version": "0.0.39", 915 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 916 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 917 | "dev": true 918 | }, 919 | "@types/node": { 920 | "version": "13.13.0", 921 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.0.tgz", 922 | "integrity": "sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A==", 923 | "dev": true 924 | }, 925 | "@types/resolve": { 926 | "version": "0.0.8", 927 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", 928 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", 929 | "dev": true, 930 | "requires": { 931 | "@types/node": "*" 932 | } 933 | }, 934 | "acorn": { 935 | "version": "7.1.1", 936 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 937 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 938 | "dev": true 939 | }, 940 | "ansi-styles": { 941 | "version": "3.2.1", 942 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 943 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 944 | "dev": true, 945 | "requires": { 946 | "color-convert": "^1.9.0" 947 | } 948 | }, 949 | "anymatch": { 950 | "version": "3.1.1", 951 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 952 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 953 | "dev": true, 954 | "requires": { 955 | "normalize-path": "^3.0.0", 956 | "picomatch": "^2.0.4" 957 | } 958 | }, 959 | "async-limiter": { 960 | "version": "1.0.1", 961 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 962 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", 963 | "dev": true 964 | }, 965 | "binary-extensions": { 966 | "version": "2.0.0", 967 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 968 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 969 | "dev": true 970 | }, 971 | "braces": { 972 | "version": "3.0.2", 973 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 974 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 975 | "dev": true, 976 | "requires": { 977 | "fill-range": "^7.0.1" 978 | } 979 | }, 980 | "buffer-from": { 981 | "version": "1.1.1", 982 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 983 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 984 | "dev": true 985 | }, 986 | "builtin-modules": { 987 | "version": "3.1.0", 988 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", 989 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 990 | "dev": true 991 | }, 992 | "chalk": { 993 | "version": "2.4.2", 994 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 995 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 996 | "dev": true, 997 | "requires": { 998 | "ansi-styles": "^3.2.1", 999 | "escape-string-regexp": "^1.0.5", 1000 | "supports-color": "^5.3.0" 1001 | } 1002 | }, 1003 | "chokidar": { 1004 | "version": "3.3.1", 1005 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 1006 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 1007 | "dev": true, 1008 | "requires": { 1009 | "anymatch": "~3.1.1", 1010 | "braces": "~3.0.2", 1011 | "fsevents": "~2.1.2", 1012 | "glob-parent": "~5.1.0", 1013 | "is-binary-path": "~2.1.0", 1014 | "is-glob": "~4.0.1", 1015 | "normalize-path": "~3.0.0", 1016 | "readdirp": "~3.3.0" 1017 | } 1018 | }, 1019 | "color-convert": { 1020 | "version": "1.9.3", 1021 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1022 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1023 | "dev": true, 1024 | "requires": { 1025 | "color-name": "1.1.3" 1026 | } 1027 | }, 1028 | "color-name": { 1029 | "version": "1.1.3", 1030 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1031 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1032 | "dev": true 1033 | }, 1034 | "commander": { 1035 | "version": "2.20.3", 1036 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1037 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1038 | "dev": true 1039 | }, 1040 | "console-clear": { 1041 | "version": "1.1.1", 1042 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 1043 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" 1044 | }, 1045 | "escape-string-regexp": { 1046 | "version": "1.0.5", 1047 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1048 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1049 | "dev": true 1050 | }, 1051 | "estree-walker": { 1052 | "version": "1.0.1", 1053 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1054 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1055 | "dev": true 1056 | }, 1057 | "fill-range": { 1058 | "version": "7.0.1", 1059 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1060 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1061 | "dev": true, 1062 | "requires": { 1063 | "to-regex-range": "^5.0.1" 1064 | } 1065 | }, 1066 | "fsevents": { 1067 | "version": "2.1.2", 1068 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 1069 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 1070 | "dev": true, 1071 | "optional": true 1072 | }, 1073 | "get-port": { 1074 | "version": "3.2.0", 1075 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 1076 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" 1077 | }, 1078 | "glob-parent": { 1079 | "version": "5.1.2", 1080 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1081 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1082 | "dev": true, 1083 | "requires": { 1084 | "is-glob": "^4.0.1" 1085 | } 1086 | }, 1087 | "has-flag": { 1088 | "version": "3.0.0", 1089 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1090 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1091 | "dev": true 1092 | }, 1093 | "is-binary-path": { 1094 | "version": "2.1.0", 1095 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1096 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1097 | "dev": true, 1098 | "requires": { 1099 | "binary-extensions": "^2.0.0" 1100 | } 1101 | }, 1102 | "is-extglob": { 1103 | "version": "2.1.1", 1104 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1105 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1106 | "dev": true 1107 | }, 1108 | "is-glob": { 1109 | "version": "4.0.1", 1110 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1111 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1112 | "dev": true, 1113 | "requires": { 1114 | "is-extglob": "^2.1.1" 1115 | } 1116 | }, 1117 | "is-module": { 1118 | "version": "1.0.0", 1119 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1120 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1121 | "dev": true 1122 | }, 1123 | "is-number": { 1124 | "version": "7.0.0", 1125 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1126 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1127 | "dev": true 1128 | }, 1129 | "is-reference": { 1130 | "version": "1.1.4", 1131 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", 1132 | "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", 1133 | "dev": true, 1134 | "requires": { 1135 | "@types/estree": "0.0.39" 1136 | } 1137 | }, 1138 | "jest-worker": { 1139 | "version": "26.6.2", 1140 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1141 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1142 | "dev": true, 1143 | "requires": { 1144 | "@types/node": "*", 1145 | "merge-stream": "^2.0.0", 1146 | "supports-color": "^7.0.0" 1147 | }, 1148 | "dependencies": { 1149 | "has-flag": { 1150 | "version": "4.0.0", 1151 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1152 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1153 | "dev": true 1154 | }, 1155 | "supports-color": { 1156 | "version": "7.2.0", 1157 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1158 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1159 | "dev": true, 1160 | "requires": { 1161 | "has-flag": "^4.0.0" 1162 | } 1163 | } 1164 | } 1165 | }, 1166 | "js-tokens": { 1167 | "version": "4.0.0", 1168 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1169 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1170 | "dev": true 1171 | }, 1172 | "kleur": { 1173 | "version": "3.0.3", 1174 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 1175 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" 1176 | }, 1177 | "livereload": { 1178 | "version": "0.9.1", 1179 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz", 1180 | "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==", 1181 | "dev": true, 1182 | "requires": { 1183 | "chokidar": "^3.3.0", 1184 | "livereload-js": "^3.1.0", 1185 | "opts": ">= 1.2.0", 1186 | "ws": "^6.2.1" 1187 | } 1188 | }, 1189 | "livereload-js": { 1190 | "version": "3.2.2", 1191 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.2.2.tgz", 1192 | "integrity": "sha512-xhScbNeC687ZINjEf/bD+BMiPx4s4q0mehcLb3zCc8+mykOtmaBR4vqzyIV9rIGdG9JjHaT0LiFdscvivCjX1Q==", 1193 | "dev": true 1194 | }, 1195 | "local-access": { 1196 | "version": "1.0.1", 1197 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.0.1.tgz", 1198 | "integrity": "sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA==" 1199 | }, 1200 | "magic-string": { 1201 | "version": "0.25.7", 1202 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1203 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1204 | "dev": true, 1205 | "requires": { 1206 | "sourcemap-codec": "^1.4.4" 1207 | } 1208 | }, 1209 | "merge-stream": { 1210 | "version": "2.0.0", 1211 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1212 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1213 | "dev": true 1214 | }, 1215 | "micromatch": { 1216 | "version": "4.0.2", 1217 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 1218 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 1219 | "dev": true, 1220 | "requires": { 1221 | "braces": "^3.0.1", 1222 | "picomatch": "^2.0.5" 1223 | } 1224 | }, 1225 | "mime": { 1226 | "version": "2.4.4", 1227 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 1228 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" 1229 | }, 1230 | "mri": { 1231 | "version": "1.1.5", 1232 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", 1233 | "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==" 1234 | }, 1235 | "node-fetch": { 1236 | "version": "2.6.1", 1237 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1238 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1239 | }, 1240 | "normalize-path": { 1241 | "version": "3.0.0", 1242 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1243 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1244 | "dev": true 1245 | }, 1246 | "opts": { 1247 | "version": "1.2.7", 1248 | "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.7.tgz", 1249 | "integrity": "sha512-hwZhzGGG/GQ7igxAVFOEun2N4fWul31qE9nfBdCnZGQCB5+L7tN9xZ+94B4aUpLOJx/of3zZs5XsuubayQYQjA==", 1250 | "dev": true 1251 | }, 1252 | "path-parse": { 1253 | "version": "1.0.7", 1254 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1255 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1256 | "dev": true 1257 | }, 1258 | "picomatch": { 1259 | "version": "2.2.2", 1260 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1261 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1262 | "dev": true 1263 | }, 1264 | "randombytes": { 1265 | "version": "2.1.0", 1266 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1267 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1268 | "dev": true, 1269 | "requires": { 1270 | "safe-buffer": "^5.1.0" 1271 | } 1272 | }, 1273 | "readdirp": { 1274 | "version": "3.3.0", 1275 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 1276 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 1277 | "dev": true, 1278 | "requires": { 1279 | "picomatch": "^2.0.7" 1280 | } 1281 | }, 1282 | "regexparam": { 1283 | "version": "1.3.0", 1284 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", 1285 | "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==" 1286 | }, 1287 | "require-relative": { 1288 | "version": "0.8.7", 1289 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1290 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 1291 | "dev": true 1292 | }, 1293 | "resolve": { 1294 | "version": "1.16.1", 1295 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", 1296 | "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", 1297 | "dev": true, 1298 | "requires": { 1299 | "path-parse": "^1.0.6" 1300 | } 1301 | }, 1302 | "rollup": { 1303 | "version": "1.32.1", 1304 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", 1305 | "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", 1306 | "dev": true, 1307 | "requires": { 1308 | "@types/estree": "*", 1309 | "@types/node": "*", 1310 | "acorn": "^7.1.0" 1311 | } 1312 | }, 1313 | "rollup-plugin-livereload": { 1314 | "version": "1.2.0", 1315 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.2.0.tgz", 1316 | "integrity": "sha512-zKcS4D8ElSFj9Mv6OAM1kGB3o5LkCtEClewO8CDPEacj6p4DSvTOm6WlKSc8/WtsD0d3Q33Y96c5Jqzyaxo/8g==", 1317 | "dev": true, 1318 | "requires": { 1319 | "livereload": "^0.9.1" 1320 | } 1321 | }, 1322 | "rollup-plugin-svelte": { 1323 | "version": "5.2.1", 1324 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.2.1.tgz", 1325 | "integrity": "sha512-wc93cN66sRpX6uFljVFqvWT6NU3V5ab/uLXKt2UiARuexFU/ctolzkmdXM7WM5iKdTX9scToS9sabJTJV4DUMA==", 1326 | "dev": true, 1327 | "requires": { 1328 | "require-relative": "^0.8.7", 1329 | "rollup-pluginutils": "^2.8.2", 1330 | "sourcemap-codec": "^1.4.8" 1331 | } 1332 | }, 1333 | "rollup-plugin-terser": { 1334 | "version": "7.0.2", 1335 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1336 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1337 | "dev": true, 1338 | "requires": { 1339 | "@babel/code-frame": "^7.10.4", 1340 | "jest-worker": "^26.2.1", 1341 | "serialize-javascript": "^4.0.0", 1342 | "terser": "^5.0.0" 1343 | } 1344 | }, 1345 | "rollup-pluginutils": { 1346 | "version": "2.8.2", 1347 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1348 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1349 | "dev": true, 1350 | "requires": { 1351 | "estree-walker": "^0.6.1" 1352 | }, 1353 | "dependencies": { 1354 | "estree-walker": { 1355 | "version": "0.6.1", 1356 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1357 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1358 | "dev": true 1359 | } 1360 | } 1361 | }, 1362 | "sade": { 1363 | "version": "1.7.3", 1364 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.3.tgz", 1365 | "integrity": "sha512-m4BctppMvJ60W1dXnHq7jMmFe3hPJZDAH85kQ3ACTo7XZNVUuTItCQ+2HfyaMeV5cKrbw7l4vD/6We3GBxvdJw==", 1366 | "requires": { 1367 | "mri": "^1.1.0" 1368 | } 1369 | }, 1370 | "safe-buffer": { 1371 | "version": "5.2.1", 1372 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1373 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1374 | "dev": true 1375 | }, 1376 | "serialize-javascript": { 1377 | "version": "4.0.0", 1378 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1379 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1380 | "dev": true, 1381 | "requires": { 1382 | "randombytes": "^2.1.0" 1383 | } 1384 | }, 1385 | "sirv": { 1386 | "version": "0.4.2", 1387 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.2.tgz", 1388 | "integrity": "sha512-dQbZnsMaIiTQPZmbGmktz+c74zt/hyrJEB4tdp2Jj0RNv9J6B/OWR5RyrZEvIn9fyh9Zlg2OlE2XzKz6wMKGAw==", 1389 | "requires": { 1390 | "@polka/url": "^0.5.0", 1391 | "mime": "^2.3.1" 1392 | } 1393 | }, 1394 | "sirv-cli": { 1395 | "version": "0.4.5", 1396 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-0.4.5.tgz", 1397 | "integrity": "sha512-Fl6icSm0EwPrXSGid2xphMp//WNTSX2yENRAGnJuuZNmdc8LvE/BtdZD3MPn28ifAfDqTMwbB3dpcZojAIOiBg==", 1398 | "requires": { 1399 | "console-clear": "^1.1.0", 1400 | "get-port": "^3.2.0", 1401 | "kleur": "^3.0.0", 1402 | "local-access": "^1.0.1", 1403 | "sade": "^1.4.0", 1404 | "sirv": "^0.4.2", 1405 | "tinydate": "^1.0.0" 1406 | } 1407 | }, 1408 | "source-map": { 1409 | "version": "0.7.3", 1410 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1411 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1412 | "dev": true 1413 | }, 1414 | "source-map-support": { 1415 | "version": "0.5.19", 1416 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1417 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1418 | "dev": true, 1419 | "requires": { 1420 | "buffer-from": "^1.0.0", 1421 | "source-map": "^0.6.0" 1422 | }, 1423 | "dependencies": { 1424 | "source-map": { 1425 | "version": "0.6.1", 1426 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1427 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1428 | "dev": true 1429 | } 1430 | } 1431 | }, 1432 | "sourcemap-codec": { 1433 | "version": "1.4.8", 1434 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1435 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1436 | "dev": true 1437 | }, 1438 | "supports-color": { 1439 | "version": "5.5.0", 1440 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1441 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1442 | "dev": true, 1443 | "requires": { 1444 | "has-flag": "^3.0.0" 1445 | } 1446 | }, 1447 | "svelte": { 1448 | "version": "3.20.1", 1449 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.20.1.tgz", 1450 | "integrity": "sha512-m/dw52BZf+p6KYnyKLErIcGalu4pwJrQbUM7VZriRw6ZlJj1qMAZsLcIWzEB3I0hhdJwkKb7LrrvUIeqmbO92Q==", 1451 | "dev": true 1452 | }, 1453 | "svelte-spa-router": { 1454 | "version": "2.2.0", 1455 | "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-2.2.0.tgz", 1456 | "integrity": "sha512-S3KpmiBszjdjkU1QA9FyNgrSdQORbXWp4wl8R147Gl7KoNof/0SfFJ23+9E47jLiNz+lCw1uaCfeHJi2I60bVg==", 1457 | "requires": { 1458 | "regexparam": "1.3.0" 1459 | } 1460 | }, 1461 | "terser": { 1462 | "version": "5.6.1", 1463 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", 1464 | "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", 1465 | "dev": true, 1466 | "requires": { 1467 | "commander": "^2.20.0", 1468 | "source-map": "~0.7.2", 1469 | "source-map-support": "~0.5.19" 1470 | } 1471 | }, 1472 | "tinydate": { 1473 | "version": "1.2.0", 1474 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.2.0.tgz", 1475 | "integrity": "sha512-3GwPk8VhDFnUZ2TrgkhXJs6hcMAIIw4x/xkz+ayK6dGoQmp2nUwKzBXK0WnMsqkh6vfUhpqQicQF3rbshfyJkg==" 1476 | }, 1477 | "to-regex-range": { 1478 | "version": "5.0.1", 1479 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1480 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1481 | "dev": true, 1482 | "requires": { 1483 | "is-number": "^7.0.0" 1484 | } 1485 | }, 1486 | "ws": { 1487 | "version": "6.2.2", 1488 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", 1489 | "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", 1490 | "dev": true, 1491 | "requires": { 1492 | "async-limiter": "~1.0.0" 1493 | } 1494 | } 1495 | } 1496 | } 1497 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "build": "rollup -c", 6 | "dev": "rollup -c -w", 7 | "start": "sirv docs -c --host --single", 8 | "figma": "node nodeFigma.js Fgv9nN04eSsH7qJopKgUML" 9 | }, 10 | "devDependencies": { 11 | "@composi/gestures": "^1.0.9", 12 | "@rollup/plugin-commonjs": "11.0.2", 13 | "@rollup/plugin-node-resolve": "^7.0.0", 14 | "rollup": "^1.20.0", 15 | "rollup-plugin-livereload": "^1.0.0", 16 | "rollup-plugin-svelte": "^5.0.3", 17 | "rollup-plugin-terser": "^7.0.2", 18 | "svelte": "^3.0.0" 19 | }, 20 | "dependencies": { 21 | "node-fetch": "^2.6.1", 22 | "sirv-cli": "^0.4.4", 23 | "svelte-spa-router": "^2.2.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import resolve from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | 7 | const production = !process.env.ROLLUP_WATCH; 8 | 9 | export default { 10 | input: 'src/main.js', 11 | output: { 12 | sourcemap: true, 13 | format: 'iife', 14 | name: 'app', 15 | file: 'docs/build/bundle.js', 16 | }, 17 | plugins: [ 18 | svelte({ 19 | // enable run-time checks when not in production 20 | dev: !production, 21 | // we'll extract any component CSS out into 22 | // a separate file - better for performance 23 | css: (css) => { 24 | css.write('docs/build/bundle.css'); 25 | }, 26 | }), 27 | 28 | // If you have external dependencies installed from 29 | // npm, you'll most likely need these plugins. In 30 | // some cases you'll need additional configuration - 31 | // consult the documentation for details: 32 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 33 | resolve({ 34 | browser: true, 35 | dedupe: ['svelte'], 36 | }), 37 | commonjs(), 38 | 39 | // In dev mode, call `npm run start` once 40 | // the bundle has been generated 41 | !production && serve(), 42 | 43 | // Watch the `public` directory and refresh the 44 | // browser on changes when not in production 45 | !production && livereload('docs'), 46 | 47 | // If we're building for production (npm run build 48 | // instead of npm run dev), minify 49 | production && terser(), 50 | ], 51 | watch: { 52 | clearScreen: false, 53 | }, 54 | }; 55 | 56 | function serve() { 57 | let started = false; 58 | 59 | return { 60 | writeBundle() { 61 | if (!started) { 62 | started = true; 63 | 64 | require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 65 | stdio: ['ignore', 'inherit', 'inherit'], 66 | shell: true, 67 | }); 68 | } 69 | }, 70 | }; 71 | } 72 | -------------------------------------------------------------------------------- /src/App.svelte: -------------------------------------------------------------------------------- 1 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/components/Nav.svelte: -------------------------------------------------------------------------------- 1 | 19 | 20 | 59 | 60 | 61 | 95 | -------------------------------------------------------------------------------- /src/components/Stories.svelte: -------------------------------------------------------------------------------- 1 | 222 | 223 | 390 | 391 | 392 | 393 | 394 |