diff --git a/.github/workflows/js-widgets-tests.yml b/.github/workflows/js-widgets-tests.yml new file mode 100644 index 0000000000..ac9ca54682 --- /dev/null +++ b/.github/workflows/js-widgets-tests.yml @@ -0,0 +1,58 @@ +name: JS Widgets + +on: + push: + paths: + - "widgets/**" + pull_request: + paths: + - "widgets/**" + + +jobs: + build: + + runs-on: ubuntu-latest + + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js + uses: actions/setup-node@v1 + with: + node-version: 14 + - working-directory: widgets + run: | + npm ci + - name: Check style + working-directory: widgets + run: | + npm run lint + - name: Check svelte + working-directory: widgets + run: | + npm run check + - name: Build front + working-directory: widgets + run: | + npm run build + + # CD of static site + - name: Netlify install + working-directory: widgets + run: | + npm i netlify-cli + + - name: Netlify find out whether push to prod + if: endsWith(github.ref, '/master') + run: | + echo "::set-env name=NETLIFY_EXTRA_FLAG::--prod" + + - name: Netlify deploy + working-directory: widgets + env: + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + NETLIFY_SITE_ID: 69b9df00-bfdd-4499-bd7f-6add4d703d99 + run: | + npx netlify deploy --auth "$NETLIFY_AUTH_TOKEN" --dir ./build/ --site ${NETLIFY_SITE_ID} ${NETLIFY_EXTRA_FLAG} diff --git a/.github/workflows/python-quality.yml b/.github/workflows/python-quality.yml index 0d214ceeae..503144501b 100644 --- a/.github/workflows/python-quality.yml +++ b/.github/workflows/python-quality.yml @@ -6,10 +6,12 @@ on: - main paths-ignore: - "interfaces/**" + - "widgets/**" pull_request: types: [assigned, opened, synchronize, reopened] paths-ignore: - "interfaces/**" + - "widgets/**" jobs: check_code_quality: diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 3bb319dd01..e863fa8997 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -6,10 +6,12 @@ on: - main paths-ignore: - "interfaces/**" + - "widgets/**" pull_request: types: [assigned, opened, synchronize, reopened] paths-ignore: - "interfaces/**" + - "widgets/**" jobs: build: diff --git a/.gitignore b/.gitignore index c85b28c30f..26a70460ac 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ dist/ downloads/ eggs/ .eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/interfaces/DefaultWidget.ts b/interfaces/DefaultWidget.ts index 9c5479961e..28fb15182a 100644 --- a/interfaces/DefaultWidget.ts +++ b/interfaces/DefaultWidget.ts @@ -1,4 +1,4 @@ -import { PipelineType } from './Types'; +import type { PipelineType } from './Types'; type LanguageCode = string; diff --git a/interfaces/Libraries.ts b/interfaces/Libraries.ts index 8fa39d9afc..d9fa7d65df 100644 --- a/interfaces/Libraries.ts +++ b/interfaces/Libraries.ts @@ -1,3 +1,4 @@ +import type { ModelData } from "./Types"; /** * Add your new library here. @@ -18,33 +19,6 @@ export enum ModelLibrary { export const ALL_MODEL_LIBRARY_KEYS = Object.keys(ModelLibrary) as (keyof typeof ModelLibrary)[]; -/** - * subset of model metadata that - * a code snippet can depend on. - */ -interface ModelData { - /** - * id of model (e.g. 'user/repo_name') - */ - modelId: string; - /** - * is this model private? - */ - private: boolean; - /** - * all the model tags - */ - tags: string[]; - /** - * this is transformers-specific - */ - autoArchitecture: string; - /** - * this dictionary has useful information about the model configuration - */ - config?: Record; -} - /** * Elements configurable by a model library. diff --git a/interfaces/Types.ts b/interfaces/Types.ts index 7ab1b72900..0a2954f24d 100644 --- a/interfaces/Types.ts +++ b/interfaces/Types.ts @@ -55,3 +55,45 @@ export const PIPELINE_TYPE_PRETTY_NAMES: { [key in PipelineType]: string } = { "image-segmentation": "Image Segmentation", }; + + +/** + * Public interface for model metadata + */ +export interface ModelData { + /** + * id of model (e.g. 'user/repo_name') + */ + modelId: string; + /** + * is this model private? + */ + private?: boolean; + /** + * this dictionary has useful information about the model configuration + */ + config?: Record; + /** + * all the model tags + */ + tags?: string[]; + /** + * this is transformers-specific + */ + autoArchitecture?: string; + /** + * Pipeline type + */ + pipeline_tag?: (keyof typeof PipelineType) | undefined; + /** + * for relevant models, get mask token + */ + mask_token?: string | undefined; + /** + * Example data that will be fed into the widget. + * + * can be set in the model card metadata (under `widget`), + * or by default in `DefaultWidget.ts` + */ + widgetData?: Record[] | undefined; +} diff --git a/widgets/.gitignore b/widgets/.gitignore new file mode 100644 index 0000000000..2d66ec0563 --- /dev/null +++ b/widgets/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +node_modules +/.svelte-kit +/package diff --git a/widgets/.netlify/state.json b/widgets/.netlify/state.json new file mode 100644 index 0000000000..d2a4efd907 --- /dev/null +++ b/widgets/.netlify/state.json @@ -0,0 +1,3 @@ +{ + "siteId": "69b9df00-bfdd-4499-bd7f-6add4d703d99" +} diff --git a/widgets/.prettierignore b/widgets/.prettierignore new file mode 100644 index 0000000000..d42907aceb --- /dev/null +++ b/widgets/.prettierignore @@ -0,0 +1,10 @@ +.svelte-kit/** +static/** +build/** +node_modules/** +*.js +*.mjs +*.cjs +*.md +*.ts +*.css diff --git a/widgets/.prettierrc b/widgets/.prettierrc new file mode 100644 index 0000000000..c959087670 --- /dev/null +++ b/widgets/.prettierrc @@ -0,0 +1,3 @@ +{ + "useTabs": true +} diff --git a/widgets/README.md b/widgets/README.md new file mode 100644 index 0000000000..2e03ececd1 --- /dev/null +++ b/widgets/README.md @@ -0,0 +1,31 @@ +# huggingface-widgets + +Open-source version of the inference widgets from huggingface.co + +> Built with Svelte and SvelteKit + +**Demo page:** https://huggingface-widgets.netlify.app/ + +## Documentation + +For now checkout the Pull Request's description: https://github.com/huggingface/huggingface_hub/pull/87 + +TODO: write more documentation + +## How to develop + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Build for production + +```bash +npm run build +``` + diff --git a/widgets/package-lock.json b/widgets/package-lock.json new file mode 100644 index 0000000000..6b6e0f8262 --- /dev/null +++ b/widgets/package-lock.json @@ -0,0 +1,1512 @@ +{ + "name": "huggingface-widgets", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@fullhuman/postcss-purgecss": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz", + "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==", + "dev": true, + "requires": { + "purgecss": "^3.1.3" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/pluginutils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", + "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@sveltejs/adapter-static": { + "version": "1.0.0-next.13", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.13.tgz", + "integrity": "sha512-zaXJlWK9JfrjrE6nG5etB8kf4DSkbE3H8Ql6gmCk3WjdvpY85a60TMYBU9OK2iunkqpHnPYiMUGEnOGYmWlLYA==", + "dev": true + }, + "@sveltejs/kit": { + "version": "1.0.0-next.113", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.113.tgz", + "integrity": "sha512-X7feyAD9ZWQ79W5MXgF0t3JBsA+pTqCrnl2l8y8PNCP7pEJwizPCfmFAjwx7luz3OZUA2FTFBB7bqG7K1IUaYg==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.10", + "cheap-watch": "^1.0.3", + "sade": "^1.7.4", + "vite": "2.3.6" + } + }, + "@sveltejs/vite-plugin-svelte": { + "version": "1.0.0-next.10", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.10.tgz", + "integrity": "sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.0", + "chalk": "^4.1.1", + "debug": "^4.3.2", + "hash-sum": "^2.0.0", + "require-relative": "^0.8.7", + "slash": "^4.0.0", + "source-map": "^0.7.3", + "svelte-hmr": "^0.14.2" + } + }, + "@tailwindcss/forms": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.3.tgz", + "integrity": "sha512-U8Fi/gq4mSuaLyLtFISwuDYzPB73YzgozjxOIHsK6NXgg/IWD1FLaHbFlWmurAMyy98O+ao74ksdQefsquBV1Q==", + "dev": true, + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@tailwindcss/line-clamp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.2.1.tgz", + "integrity": "sha512-Hq2KJY1+T2v7jw/mnT3mnC7CKbp5kj1XTqzSb2xbEt1j+JkxIR6N3ijsN/WevZtsKJfVE1KOejA/3IRKuhZEsQ==", + "dev": true + }, + "@types/dom-mediacapture-record": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/dom-mediacapture-record/-/dom-mediacapture-record-1.0.7.tgz", + "integrity": "sha512-ddDIRTO1ajtbxaNo2o7fPJggpN54PZf1ZUJKOjto2ENMJE/9GKUvaw3ZRuQzlS/p0E+PnIcssxfoqYJ4yiXSBw==", + "dev": true + }, + "@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/pug": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.4.tgz", + "integrity": "sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI=", + "dev": true + }, + "@types/sass": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.0.tgz", + "integrity": "sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001236", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz", + "integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cheap-watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.3.tgz", + "integrity": "sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", + "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + } + } + }, + "esbuild": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.8.tgz", + "integrity": "sha512-sx/LwlP/SWTGsd9G4RlOPrXnIihAJ2xwBUmzoqe2nWwbXORMQWtAGNJNYLBJJqa3e9PWvVzxdrtyFZJcr7D87g==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "mini-svg-data-uri": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.3.3.tgz", + "integrity": "sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "dev": true + }, + "mri": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", + "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "postcss": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.1.tgz", + "integrity": "sha512-9qH0MGjsSm+fjxOi3GnwViL1otfi7qkj+l/WX5gcRGmZNGsIcqc+A5fBkE6PUobEQK4APqYVaES+B3Uti98TCw==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", + "dev": true, + "requires": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + } + }, + "postcss-load-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" + } + }, + "postcss-nested": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", + "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + }, + "prettier-plugin-svelte": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.3.0.tgz", + "integrity": "sha512-HTzXvSq7lWFuLsSaxYOUkGkVNCl3RrSjDCOgQjkBX5FQGmWjL8o3IFACSGhjPMMfWKADpapAr0zdbBWkND9mqw==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "purgecss": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz", + "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==", + "dev": true, + "requires": { + "commander": "^6.0.0", + "glob": "^7.0.0", + "postcss": "^8.2.1", + "postcss-selector-parser": "^6.0.2" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "2.51.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.51.1.tgz", + "integrity": "sha512-8xfDbAtBleXotb6qKEHWuo/jkn94a9dVqGc7Rwl3sqspCVlnCfbRek7ldhCARSi7h32H0xR4QThm1t9zHN+3uw==", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "sade": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", + "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svelte": { + "version": "3.38.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.38.2.tgz", + "integrity": "sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==", + "dev": true + }, + "svelte-check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.1.0.tgz", + "integrity": "sha512-kKLXkFt0XZTn+O1fnilGTQ1SFLsOFF+lXp1YjPfeN9nX+Y3ZpELtZSQCkbuK6HMkWugFvsOM17FCOSa1mfrEFA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "chokidar": "^3.4.1", + "glob": "^7.1.6", + "import-fresh": "^3.2.1", + "minimist": "^1.2.5", + "sade": "^1.7.4", + "source-map": "^0.7.3", + "svelte-preprocess": "^4.0.0", + "typescript": "*" + } + }, + "svelte-hmr": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.4.tgz", + "integrity": "sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==", + "dev": true + }, + "svelte-preprocess": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.7.3.tgz", + "integrity": "sha512-Zx1/xLeGOIBlZMGPRCaXtlMe4ZA0faato5Dc3CosEqwu75MIEPuOstdkH6cy+RYTUYynoxzNaDxkPX4DbrPwRA==", + "dev": true, + "requires": { + "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", + "detect-indent": "^6.0.0", + "strip-indent": "^3.0.0" + } + }, + "tailwindcss": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.4.tgz", + "integrity": "sha512-fh1KImDLg6se/Suaelju/5oFbqq1b0ntagmGLu0aG9LlnNPGHgO1n/4E57CbKcCtyz/VYnvVXUiWmfyfBBZQ6g==", + "dev": true, + "requires": { + "@fullhuman/postcss-purgecss": "^3.1.3", + "bytes": "^3.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.1", + "color": "^3.1.3", + "detective": "^5.2.0", + "didyoumean": "^1.2.1", + "dlv": "^1.1.3", + "fast-glob": "^3.2.5", + "fs-extra": "^9.1.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.0.0", + "node-emoji": "^1.8.1", + "normalize-path": "^3.0.0", + "object-hash": "^2.1.1", + "parse-glob": "^3.0.4", + "postcss-functions": "^3", + "postcss-js": "^3.0.3", + "postcss-nested": "5.0.5", + "postcss-selector-parser": "^6.0.4", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vite": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.3.6.tgz", + "integrity": "sha512-fsEpNKDHgh3Sn66JH06ZnUBnIgUVUtw6ucDhlOj1CEqxIkymU25yv1/kWDPlIjyYHnalr0cN6V+zzUJ+fmWHYw==", + "dev": true, + "requires": { + "esbuild": "^0.12.5", + "fsevents": "~2.3.1", + "postcss": "^8.2.10", + "resolve": "^1.19.0", + "rollup": "^2.38.5" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/widgets/package.json b/widgets/package.json new file mode 100644 index 0000000000..dd3721dee1 --- /dev/null +++ b/widgets/package.json @@ -0,0 +1,32 @@ +{ + "name": "huggingface-widgets", + "version": "0.0.1", + "scripts": { + "dev": "svelte-kit dev", + "build": "svelte-kit build", + "preview": "svelte-kit preview", + "check": "svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check --plugin-search-dir=. .", + "format": "prettier --write --plugin-search-dir=. ." + }, + "devDependencies": { + "@sveltejs/adapter-static": "^1.0.0-next.13", + "@sveltejs/kit": "next", + "@tailwindcss/forms": "^0.3.3", + "@tailwindcss/line-clamp": "^0.2.1", + "@types/dom-mediacapture-record": "^1.0.7", + "autoprefixer": "^10.2.6", + "postcss": "^8.3.1", + "postcss-load-config": "^3.0.1", + "prettier": "2.3.0", + "prettier-plugin-svelte": "2.3.0", + "svelte": "^3.34.0", + "svelte-check": "^2.0.0", + "svelte-preprocess": "^4.0.0", + "tailwindcss": "^2.1.4", + "tslib": "^2.0.0", + "typescript": "^4.0.0" + }, + "type": "module" +} diff --git a/widgets/postcss.config.cjs b/widgets/postcss.config.cjs new file mode 100644 index 0000000000..e873f1a4f2 --- /dev/null +++ b/widgets/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/widgets/src/app.html b/widgets/src/app.html new file mode 100644 index 0000000000..9ef9f9ce2a --- /dev/null +++ b/widgets/src/app.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/widgets/src/global.d.ts b/widgets/src/global.d.ts new file mode 100644 index 0000000000..63908c66cf --- /dev/null +++ b/widgets/src/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/widgets/src/lib/Icons/IconAudioSourceSeparation.svelte b/widgets/src/lib/Icons/IconAudioSourceSeparation.svelte new file mode 100644 index 0000000000..dd6420347f --- /dev/null +++ b/widgets/src/lib/Icons/IconAudioSourceSeparation.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconAutomaticSpeechRecognition.svelte b/widgets/src/lib/Icons/IconAutomaticSpeechRecognition.svelte new file mode 100644 index 0000000000..7a213a3b29 --- /dev/null +++ b/widgets/src/lib/Icons/IconAutomaticSpeechRecognition.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconCode.svelte b/widgets/src/lib/Icons/IconCode.svelte new file mode 100644 index 0000000000..d6135c5119 --- /dev/null +++ b/widgets/src/lib/Icons/IconCode.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconConversational.svelte b/widgets/src/lib/Icons/IconConversational.svelte new file mode 100644 index 0000000000..27f04a6d28 --- /dev/null +++ b/widgets/src/lib/Icons/IconConversational.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconCross.svelte b/widgets/src/lib/Icons/IconCross.svelte new file mode 100644 index 0000000000..9b92588297 --- /dev/null +++ b/widgets/src/lib/Icons/IconCross.svelte @@ -0,0 +1,21 @@ + + + diff --git a/widgets/src/lib/Icons/IconFeatureExtraction.svelte b/widgets/src/lib/Icons/IconFeatureExtraction.svelte new file mode 100644 index 0000000000..08e0e50343 --- /dev/null +++ b/widgets/src/lib/Icons/IconFeatureExtraction.svelte @@ -0,0 +1,21 @@ + + + diff --git a/widgets/src/lib/Icons/IconFile.svelte b/widgets/src/lib/Icons/IconFile.svelte new file mode 100644 index 0000000000..9c695d70f0 --- /dev/null +++ b/widgets/src/lib/Icons/IconFile.svelte @@ -0,0 +1,21 @@ + + + diff --git a/widgets/src/lib/Icons/IconFillMask.svelte b/widgets/src/lib/Icons/IconFillMask.svelte new file mode 100644 index 0000000000..03a8e90267 --- /dev/null +++ b/widgets/src/lib/Icons/IconFillMask.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconImageClassification.svelte b/widgets/src/lib/Icons/IconImageClassification.svelte new file mode 100644 index 0000000000..53c7ee4de5 --- /dev/null +++ b/widgets/src/lib/Icons/IconImageClassification.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconImageSegmentation.svelte b/widgets/src/lib/Icons/IconImageSegmentation.svelte new file mode 100644 index 0000000000..cbfba2b605 --- /dev/null +++ b/widgets/src/lib/Icons/IconImageSegmentation.svelte @@ -0,0 +1,24 @@ + + + diff --git a/widgets/src/lib/Icons/IconInfo.svelte b/widgets/src/lib/Icons/IconInfo.svelte new file mode 100644 index 0000000000..f85188cb99 --- /dev/null +++ b/widgets/src/lib/Icons/IconInfo.svelte @@ -0,0 +1,26 @@ + + + diff --git a/widgets/src/lib/Icons/IconLightning.svelte b/widgets/src/lib/Icons/IconLightning.svelte new file mode 100644 index 0000000000..95932bf0a5 --- /dev/null +++ b/widgets/src/lib/Icons/IconLightning.svelte @@ -0,0 +1,18 @@ + + + diff --git a/widgets/src/lib/Icons/IconMaximize.svelte b/widgets/src/lib/Icons/IconMaximize.svelte new file mode 100644 index 0000000000..546872c7be --- /dev/null +++ b/widgets/src/lib/Icons/IconMaximize.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconMicrophone.svelte b/widgets/src/lib/Icons/IconMicrophone.svelte new file mode 100644 index 0000000000..319280a52d --- /dev/null +++ b/widgets/src/lib/Icons/IconMicrophone.svelte @@ -0,0 +1,25 @@ + + + diff --git a/widgets/src/lib/Icons/IconObjectDetection.svelte b/widgets/src/lib/Icons/IconObjectDetection.svelte new file mode 100644 index 0000000000..8f48031d2f --- /dev/null +++ b/widgets/src/lib/Icons/IconObjectDetection.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconQuestionAnswering.svelte b/widgets/src/lib/Icons/IconQuestionAnswering.svelte new file mode 100644 index 0000000000..d9b3ffd7b8 --- /dev/null +++ b/widgets/src/lib/Icons/IconQuestionAnswering.svelte @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/widgets/src/lib/Icons/IconRow.svelte b/widgets/src/lib/Icons/IconRow.svelte new file mode 100644 index 0000000000..69492209e4 --- /dev/null +++ b/widgets/src/lib/Icons/IconRow.svelte @@ -0,0 +1,16 @@ + + + diff --git a/widgets/src/lib/Icons/IconSentenceSimilarity.svelte b/widgets/src/lib/Icons/IconSentenceSimilarity.svelte new file mode 100644 index 0000000000..d8569bb595 --- /dev/null +++ b/widgets/src/lib/Icons/IconSentenceSimilarity.svelte @@ -0,0 +1,29 @@ + + + diff --git a/widgets/src/lib/Icons/IconSpin.svelte b/widgets/src/lib/Icons/IconSpin.svelte new file mode 100644 index 0000000000..81e90b07fc --- /dev/null +++ b/widgets/src/lib/Icons/IconSpin.svelte @@ -0,0 +1,33 @@ + + + diff --git a/widgets/src/lib/Icons/IconSummarization.svelte b/widgets/src/lib/Icons/IconSummarization.svelte new file mode 100644 index 0000000000..3a00d7e826 --- /dev/null +++ b/widgets/src/lib/Icons/IconSummarization.svelte @@ -0,0 +1,24 @@ + + + diff --git a/widgets/src/lib/Icons/IconTableQuestionAnswering.svelte b/widgets/src/lib/Icons/IconTableQuestionAnswering.svelte new file mode 100644 index 0000000000..744677ee35 --- /dev/null +++ b/widgets/src/lib/Icons/IconTableQuestionAnswering.svelte @@ -0,0 +1,21 @@ + + + diff --git a/widgets/src/lib/Icons/IconText2textGeneration.svelte b/widgets/src/lib/Icons/IconText2textGeneration.svelte new file mode 100644 index 0000000000..66c48c4a75 --- /dev/null +++ b/widgets/src/lib/Icons/IconText2textGeneration.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconTextClassification.svelte b/widgets/src/lib/Icons/IconTextClassification.svelte new file mode 100644 index 0000000000..35983ddd4c --- /dev/null +++ b/widgets/src/lib/Icons/IconTextClassification.svelte @@ -0,0 +1,33 @@ + + + diff --git a/widgets/src/lib/Icons/IconTextGeneration.svelte b/widgets/src/lib/Icons/IconTextGeneration.svelte new file mode 100644 index 0000000000..af79418885 --- /dev/null +++ b/widgets/src/lib/Icons/IconTextGeneration.svelte @@ -0,0 +1,27 @@ + + + diff --git a/widgets/src/lib/Icons/IconTextToSpeech.svelte b/widgets/src/lib/Icons/IconTextToSpeech.svelte new file mode 100644 index 0000000000..b978e5b4c3 --- /dev/null +++ b/widgets/src/lib/Icons/IconTextToSpeech.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconTokenClassification.svelte b/widgets/src/lib/Icons/IconTokenClassification.svelte new file mode 100644 index 0000000000..3e476cb440 --- /dev/null +++ b/widgets/src/lib/Icons/IconTokenClassification.svelte @@ -0,0 +1,33 @@ + + + diff --git a/widgets/src/lib/Icons/IconTranslation.svelte b/widgets/src/lib/Icons/IconTranslation.svelte new file mode 100644 index 0000000000..9252598818 --- /dev/null +++ b/widgets/src/lib/Icons/IconTranslation.svelte @@ -0,0 +1,24 @@ + + + diff --git a/widgets/src/lib/Icons/IconVoiceActivityDetection.svelte b/widgets/src/lib/Icons/IconVoiceActivityDetection.svelte new file mode 100644 index 0000000000..c0a2fa184e --- /dev/null +++ b/widgets/src/lib/Icons/IconVoiceActivityDetection.svelte @@ -0,0 +1,23 @@ + + + diff --git a/widgets/src/lib/Icons/IconZeroShotClassification.svelte b/widgets/src/lib/Icons/IconZeroShotClassification.svelte new file mode 100644 index 0000000000..a4635a0449 --- /dev/null +++ b/widgets/src/lib/Icons/IconZeroShotClassification.svelte @@ -0,0 +1,51 @@ + + + diff --git a/widgets/src/lib/InferenceWidget/InferenceWidget.svelte b/widgets/src/lib/InferenceWidget/InferenceWidget.svelte new file mode 100644 index 0000000000..78d6e18042 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/InferenceWidget.svelte @@ -0,0 +1,73 @@ + + +{#if widgetComponent} + +{/if} diff --git a/widgets/src/lib/InferenceWidget/shared/ViewUtils.ts b/widgets/src/lib/InferenceWidget/shared/ViewUtils.ts new file mode 100644 index 0000000000..a93920ab3c --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/ViewUtils.ts @@ -0,0 +1,104 @@ + +const ESCAPED = { + '"': '"', + "'": ''', + '&': '&', + '<': '<', + '>': '>' +}; + + +/** + * HTML escapes the passed string + */ +export function escape(html) { + return String(html).replace(/["'&<>]/g, match => ESCAPED[match]); +} + + +/** + * Returns a promise that will resolve after the specified time + * @param ms Number of ms to wait + */ + export function delay(ms: number): Promise { + return new Promise((resolve) => { + setTimeout(() => resolve(), ms); + }); +} + +/** + * Return a unique-ish random id string + */ +export function randomId(prefix = '_'): string { + // Math.random should be unique because of its seeding algorithm. + // Convert it to base 36 (numbers + letters), and grab the first 9 characters + // after the decimal. + return `${prefix}${Math.random().toString(36).substr(2, 9)}`; +}; + +/** + * "Real" modulo (always >= 0), not remainder. + */ + export function mod(a: number, n: number): number { + return ((a % n) + n) % n; +} + +/** + * Sum of elements in array + */ + export function sum(arr: number[]): number { + return arr.reduce((a, b) => a + b, 0); +} + +/** + * Return a random item from an array + */ +export function randomItem(arr: T[]): T { + return arr[Math.floor(Math.random() * arr.length)]; +} + +/** + * Safely parse JSON + */ +export function parseJSON(x: unknown): T | undefined { + if (!x || typeof x !== 'string') { + return undefined; + } + try { + return JSON.parse(x); + } catch (e) { + if (e instanceof SyntaxError) { + console.error(e.name); + } else { + console.error(e.message); + } + return undefined; + } +} + +/* + * Check if a value is a dictionary-like object + */ +export function isObject(arg: any): arg is object { + return arg !== null && typeof arg === 'object' && !Array.isArray(arg); +} + + + +/* + * Return true if an HTML element is scrolled all the way + */ +export function isFullyScrolled(elt: HTMLElement) { + return elt.scrollHeight - Math.abs(elt.scrollTop) === elt.clientHeight; +} + +/* + * Smoothly scroll an element all the way + */ +export function scrollToMax(elt: HTMLElement, axis: 'x' | 'y' = 'y') { + elt.scroll({ + behavior: "smooth", + left: axis === 'x' ? elt.scrollWidth : undefined, + top: axis === 'y' ? elt.scrollHeight : undefined, + }); +} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte new file mode 100644 index 0000000000..ab88c2ea7a --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetAddSentenceBtn/WidgetAddSentenceBtn.svelte @@ -0,0 +1,14 @@ + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte new file mode 100644 index 0000000000..092d156c8e --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetAudioTrack/WidgetAudioTrack.svelte @@ -0,0 +1,17 @@ + + +
+ {#if $$slots.default} + + {:else if label.length} +
{label}
+ {/if} + +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte new file mode 100644 index 0000000000..560e57d335 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetCheckbox/WidgetCheckbox.svelte @@ -0,0 +1,17 @@ + + + + + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte new file mode 100644 index 0000000000..87bd34b2d5 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetDropzone/WidgetDropzone.svelte @@ -0,0 +1,66 @@ + + + +
{ + fileInput.click(); + }} + on:dragenter={() => { + isDragging = true; + }} + on:dragleave={() => { + isDragging = false; + }} + on:dragover|preventDefault + on:drop|preventDefault={(e) => { + isDragging = false; + fileInput.files = e.dataTransfer?.files ?? null; + onChange(); + }} +> + {#if !imgSrc} + {label} + {:else} + + {/if} + {#if isLoading} +
+ +
+ {/if} +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte new file mode 100644 index 0000000000..28ce4cc5a3 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetFileInput/WidgetFileInput.svelte @@ -0,0 +1,46 @@ + + +
{ + isDragging = true; + }} + on:dragover|preventDefault + on:dragleave={() => { + isDragging = false; + }} + on:drop|preventDefault={(e) => { + isDragging = false; + fileInput.files = e.dataTransfer?.files ?? null; + onChange(); + }} +> + +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte new file mode 100644 index 0000000000..44b0ca03b1 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetFooter/WidgetFooter.svelte @@ -0,0 +1,35 @@ + + +
+ + +
+{#if outputJson && isOutputJsonVisible} +
{outputJson}
+{/if} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte new file mode 100644 index 0000000000..3b0129b663 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetHeader/WidgetHeader.svelte @@ -0,0 +1,28 @@ + + +
+ {#if !noTitle} +
+ + Hosted inference API +
+ + + + {/if} +
+
+ {#if pipeline} + + {/if} +
+ +
+
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte new file mode 100644 index 0000000000..3865ea99aa --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetInfo/WidgetInfo.svelte @@ -0,0 +1,26 @@ + + +
+
+ {#if computeTime} + Computation time on cpu: {computeTime} + {:else if modelStatus} + {status[modelStatus]} + {/if} +
+ {#if error} +
{error}
+ {/if} +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte new file mode 100644 index 0000000000..56b9df7289 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetLabel/WidgetLabel.svelte @@ -0,0 +1,13 @@ + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte new file mode 100644 index 0000000000..26af7388d5 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetModelLoading/WidgetModelLoading.svelte @@ -0,0 +1,39 @@ + + +
+
+
+ + Model is loading +
+
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte new file mode 100644 index 0000000000..76fb8edc89 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOuputConvoBubble/WidgetOutputConvoBubble.svelte @@ -0,0 +1,12 @@ + + +
+ {text} +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte new file mode 100644 index 0000000000..6642bbfb23 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOutputChart/WidgetOutputChart.svelte @@ -0,0 +1,29 @@ + + +{#if output.length} +
+ {#each output as { label, score }, index} +
+
+
+

{label}

+
+

{score.toFixed(3)}

+
+ {/each} +
+{/if} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte new file mode 100644 index 0000000000..77bc77d837 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOutputConvo/WidgetOutputConvo.svelte @@ -0,0 +1,35 @@ + + +
+
+ Input a message to start chatting with + {modelId}. +
+
+ {#each output as exchange} + + + {/each} +
+
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte new file mode 100644 index 0000000000..47a488ca11 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOutputTableQA/WidgetOutputTableQA.svelte @@ -0,0 +1,44 @@ + + +
+ + {#if output.cells.length} + {output.cells.length} + match{output.cells.length > 1 ? "es" : ""} + : + {:else} + No matches + {/if} + + {#if output.cells.length} + {#each output.cells as answer} + {answer} + {/each} + {#if output.aggregator !== "NONE"} + {output.aggregator} + {/if} + {/if} +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte new file mode 100644 index 0000000000..6c4c8b15e7 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOutputText/WidgetOutputText.svelte @@ -0,0 +1,10 @@ + + +{#if output.length} +

+ {output} +

+{/if} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte new file mode 100644 index 0000000000..ac6563d1c9 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetOutputTokens/WidgetOutputTokens.svelte @@ -0,0 +1,106 @@ + + +{#if text && output.length} + +
+ {@html render(text, output)} +
+{/if} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte new file mode 100644 index 0000000000..2541108e9d --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetQuickInput/WidgetQuickInput.svelte @@ -0,0 +1,28 @@ + + +
+ + +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte new file mode 100644 index 0000000000..a462892632 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetRadio/WidgetRadio.svelte @@ -0,0 +1,21 @@ + + + + + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/Recorder.ts b/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/Recorder.ts new file mode 100644 index 0000000000..f558a54b10 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/Recorder.ts @@ -0,0 +1,55 @@ +import { delay } from '../ViewUtils'; + +export default class Recorder { + // see developers.google.com/web/updates/2016/01/mediarecorder + type: 'audio' | 'video' = 'audio'; + private stream: MediaStream; + private mediaRecorder: MediaRecorder; + private recordedBlobs: Blob[] = []; + public outputBlob?: Blob; + + get desiredMimeType(): string { + return this.type === 'video' ? 'video/webm' : 'audio/webm'; + } + get mimeType() { + return this.mediaRecorder.mimeType; + } + async start() { + this.recordedBlobs = []; + + const constraints: MediaStreamConstraints = + this.type === 'video' ? { audio: true, video: true } : { audio: true }; + this.stream = await navigator.mediaDevices.getUserMedia(constraints); + this.startRecording(); + } + private startRecording() { + this.outputBlob = undefined; + this.mediaRecorder = new MediaRecorder(this.stream, { + mimeType: this.desiredMimeType, + }); + this.mediaRecorder.onstop = this.handleStop.bind(this); + this.mediaRecorder.ondataavailable = this.handleDataAvailable.bind(this); + this.mediaRecorder.start(10); // timeslice in ms + } + handleStop(evt) {} + handleDataAvailable(evt) { + if (evt.data && evt.data.size > 0) { + this.recordedBlobs.push(evt.data); + } + } + async stopRecording(): Promise { + if (this.mediaRecorder) { + this.mediaRecorder.stop(); + } + if (this.stream) { + this.stream.getTracks().forEach((t) => t.stop()); // Stop stream. + } + + await delay(30); + // Wait for the last blob in handleDataAvailable. + // Alternative: hook into `onstop` event. + const superBuffer = new Blob(this.recordedBlobs, { type: this.mimeType }); + this.outputBlob = superBuffer; + return superBuffer; + } +} diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte new file mode 100644 index 0000000000..ad482885e8 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetRecorder/WidgetRecorder.svelte @@ -0,0 +1,44 @@ + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetState/WidgetState.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetState/WidgetState.svelte new file mode 100644 index 0000000000..53283fc075 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetState/WidgetState.svelte @@ -0,0 +1,17 @@ + + +
+
+
+ This model is currently loaded and running on the Inference API. +
+
+ ⚠️ This model could not be loaded by the inference API. ⚠️ +
+
+ This model can be loaded on the Inference API on-demand. +
+
+
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte new file mode 100644 index 0000000000..0f40e8b872 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetSubmitBtn/WidgetSubmitBtn.svelte @@ -0,0 +1,22 @@ + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte new file mode 100644 index 0000000000..0fd7d49af6 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetTableInput/WidgetTableInput.svelte @@ -0,0 +1,108 @@ + + +
+ + + + {#each table[0] as header, x} + + {/each} + + + + {#each table.slice(1) as row, y} + yCor === y) + ? "bg-green-50" + : "bg-white"} + > + {#each row as cell, x} + + {/each} + + {/each} + +
editCell(e, [x, 0])}> + {header} +
yCor === y && xCor === x + ) + ? "bg-green-100 border-green-100" + : "border-gray-100"} + contenteditable + on:input={(e) => editCell(e, [x, y + 1])}>{cell}
+
+ +
+ + + +
diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte new file mode 100644 index 0000000000..7bfb10a141 --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetTextInput/WidgetTextInput.svelte @@ -0,0 +1,18 @@ + + + + + + + diff --git a/widgets/src/lib/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte b/widgets/src/lib/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte new file mode 100644 index 0000000000..bcc9ace34c --- /dev/null +++ b/widgets/src/lib/InferenceWidget/shared/WidgetTextarea/WidgetTextarea.svelte @@ -0,0 +1,20 @@ + + + + +