From 2523bef6170ee195fef98f25689340755244e0ec Mon Sep 17 00:00:00 2001 From: metonym Date: Sat, 23 Mar 2024 14:27:39 -0700 Subject: [PATCH] feat!: library rewrite (#54) **Breaking Changes** - Remove all preprocessors except for `optimizeImports` - `optimizeImports`: drop support for `carbon-icons-svelte` version 10, `carbon-pictograms-svelte` version 10 - Rewrite `optimizeCss` plugin from scratch; it's now offered as a Vite/Rollup/Webpack plugin. `carbon-components-svelte@0.85.0` or greater is required --- .github/workflows/ci.yml | 24 - .github/workflows/publish-to-npm.yml | 27 + .github/workflows/test.yml | 16 + .gitignore | 10 +- .prettierignore | 5 - CONTRIBUTING.md | 37 +- LICENSE | 2 +- README.md | 510 +-- bun.lockb | Bin 0 -> 59097 bytes examples/rollup/.gitignore | 4 + examples/rollup/README.md | 32 + examples/rollup/bun.lockb | Bin 0 -> 38504 bytes examples/rollup/package.json | 19 + examples/rollup/public/index.html | 10 + examples/rollup/rollup.config.js | 30 + examples/rollup/src/App.svelte | 58 + examples/rollup/src/index.js | 5 + {tests/e2e => examples}/sveltekit/.gitignore | 4 +- examples/sveltekit/README.md | 32 + examples/sveltekit/bun.lockb | Bin 0 -> 46646 bytes examples/sveltekit/package.json | 18 + examples/sveltekit/src/app.html | 12 + examples/sveltekit/src/routes/+layout.js | 1 + examples/sveltekit/src/routes/+page.svelte | 58 + examples/sveltekit/static/favicon.png | Bin 0 -> 1571 bytes examples/sveltekit/svelte.config.js | 12 + examples/sveltekit/vite.config.js | 17 + examples/vite/.gitignore | 3 + examples/vite/README.md | 32 + examples/vite/bun.lockb | Bin 0 -> 31194 bytes .../src/app.html => examples/vite/index.html | 9 +- examples/vite/package.json | 16 + examples/vite/src/App.svelte | 58 + examples/vite/vite.config.ts | 22 + examples/webpack/.gitignore | 3 + examples/webpack/README.md | 35 + examples/webpack/bun.lockb | Bin 0 -> 155047 bytes examples/webpack/package.json | 19 + examples/webpack/src/App.svelte | 58 + examples/webpack/src/index.js | 5 + examples/webpack/webpack.config.js | 74 + examples/webpack/yarn.lock | 2960 +++++++++++++++++ package.json | 68 +- scripts/extract-selectors.ts | 81 + scripts/index-components.ts | 72 + src/build/build-components.ts | 66 - src/build/build-elements.ts | 186 -- src/build/build-icons.ts | 70 - src/build/build-pictograms.ts | 98 - src/build/index.ts | 22 - src/build/type.ts | 46 - src/carbon-components-svelte.js | 513 --- src/component-index.ts | 1922 +++++++++++ src/constants.ts | 25 +- src/extractors/extract-selectors.ts | 219 -- src/extractors/index.ts | 1 - src/global.d.ts | 60 + src/index.cjs.ts | 4 - src/index.ts | 7 +- src/plugins/OptimizeCssPlugin.ts | 75 + src/plugins/compare-diff.ts | 45 + src/plugins/create-optimized-css.ts | 126 + src/plugins/index.ts | 1 - src/plugins/optimize-css.cjs.ts | 87 - src/plugins/optimize-css.ts | 105 +- src/preprocessors/collect-headings.ts | 71 - src/preprocessors/elements.ts | 313 -- src/preprocessors/icons.ts | 92 - src/preprocessors/include.ts | 121 - src/preprocessors/index.ts | 6 - src/preprocessors/optimize-imports.ts | 137 +- src/preprocessors/pictograms.ts | 96 - src/presets/index.ts | 1 - src/presets/preset-carbon.ts | 12 - src/utils.ts | 55 +- src/walk-and-replace.ts | 211 -- .../optimize-imports.test.ts.snap | 35 + tests/compare-diff.test.ts | 22 + tests/e2e/sveltekit/jsconfig.json | 9 - tests/e2e/sveltekit/package.json | 16 - tests/e2e/sveltekit/src/global.d.ts | 3 - .../e2e/sveltekit/src/routes/__layout.svelte | 1 - tests/e2e/sveltekit/src/routes/index.svelte | 32 - tests/e2e/sveltekit/svelte.config.js | 45 - tests/e2e/sveltekit/yarn.lock | 257 -- tests/integration/collect-headings.test.ts | 27 - tests/integration/elements-css-vars.test.ts | 7 - tests/integration/elements.test.ts | 7 - tests/integration/extract-selectors.test.ts | 8 - tests/integration/icons.test.ts | 7 - tests/integration/include.test.ts | 27 - tests/integration/index.ts | 7 - .../input/collect-headings.test.svelte | 8 - .../input/elements-css-vars.test.svelte | 57 - tests/integration/input/elements.test.svelte | 77 - .../input/extract-selectors.test.svelte | 154 - tests/integration/input/icons.test.svelte | 9 - tests/integration/input/include.test.svelte | 5 - .../input/optimize-imports.test.svelte | 11 - .../integration/input/pictograms.test.svelte | 9 - tests/integration/optimize-imports.test.ts | 7 - .../output/collect-headings.test.svelte | 10 - .../output/elements-css-vars.test.svelte | 57 - tests/integration/output/elements.test.svelte | 77 - .../output/extract-selectors.test.json | 98 - tests/integration/output/icons.test.svelte | 9 - tests/integration/output/include.test.svelte | 7 - .../output/optimize-imports.test.svelte | 18 - .../integration/output/pictograms.test.svelte | 9 - tests/integration/pictograms.test.ts | 7 - tests/integration/utils.ts | 43 - tests/optimize-imports.test.ts | 46 + tests/unit/api.test.ts | 12 - tests/unit/elements.test.ts | 7 - tests/unit/index.ts | 3 - tests/unit/type.test.ts | 13 - tsconfig.build.json | 10 + tsconfig.json | 13 +- yarn.lock | 959 ------ 119 files changed, 6452 insertions(+), 5044 deletions(-) delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/publish-to-npm.yml create mode 100644 .github/workflows/test.yml delete mode 100644 .prettierignore create mode 100755 bun.lockb create mode 100644 examples/rollup/.gitignore create mode 100644 examples/rollup/README.md create mode 100755 examples/rollup/bun.lockb create mode 100644 examples/rollup/package.json create mode 100644 examples/rollup/public/index.html create mode 100644 examples/rollup/rollup.config.js create mode 100644 examples/rollup/src/App.svelte create mode 100644 examples/rollup/src/index.js rename {tests/e2e => examples}/sveltekit/.gitignore (68%) create mode 100644 examples/sveltekit/README.md create mode 100755 examples/sveltekit/bun.lockb create mode 100644 examples/sveltekit/package.json create mode 100644 examples/sveltekit/src/app.html create mode 100644 examples/sveltekit/src/routes/+layout.js create mode 100644 examples/sveltekit/src/routes/+page.svelte create mode 100644 examples/sveltekit/static/favicon.png create mode 100644 examples/sveltekit/svelte.config.js create mode 100644 examples/sveltekit/vite.config.js create mode 100644 examples/vite/.gitignore create mode 100644 examples/vite/README.md create mode 100755 examples/vite/bun.lockb rename tests/e2e/sveltekit/src/app.html => examples/vite/index.html (52%) create mode 100644 examples/vite/package.json create mode 100644 examples/vite/src/App.svelte create mode 100644 examples/vite/vite.config.ts create mode 100644 examples/webpack/.gitignore create mode 100644 examples/webpack/README.md create mode 100755 examples/webpack/bun.lockb create mode 100644 examples/webpack/package.json create mode 100644 examples/webpack/src/App.svelte create mode 100644 examples/webpack/src/index.js create mode 100644 examples/webpack/webpack.config.js create mode 100644 examples/webpack/yarn.lock create mode 100644 scripts/extract-selectors.ts create mode 100644 scripts/index-components.ts delete mode 100644 src/build/build-components.ts delete mode 100644 src/build/build-elements.ts delete mode 100644 src/build/build-icons.ts delete mode 100644 src/build/build-pictograms.ts delete mode 100644 src/build/index.ts delete mode 100644 src/build/type.ts delete mode 100644 src/carbon-components-svelte.js create mode 100644 src/component-index.ts delete mode 100644 src/extractors/extract-selectors.ts delete mode 100644 src/extractors/index.ts create mode 100644 src/global.d.ts delete mode 100644 src/index.cjs.ts create mode 100644 src/plugins/OptimizeCssPlugin.ts create mode 100644 src/plugins/compare-diff.ts create mode 100644 src/plugins/create-optimized-css.ts delete mode 100644 src/plugins/index.ts delete mode 100644 src/plugins/optimize-css.cjs.ts delete mode 100644 src/preprocessors/collect-headings.ts delete mode 100644 src/preprocessors/elements.ts delete mode 100644 src/preprocessors/icons.ts delete mode 100644 src/preprocessors/include.ts delete mode 100644 src/preprocessors/index.ts delete mode 100644 src/preprocessors/pictograms.ts delete mode 100644 src/presets/index.ts delete mode 100644 src/presets/preset-carbon.ts delete mode 100644 src/walk-and-replace.ts create mode 100644 tests/__snapshots__/optimize-imports.test.ts.snap create mode 100644 tests/compare-diff.test.ts delete mode 100644 tests/e2e/sveltekit/jsconfig.json delete mode 100644 tests/e2e/sveltekit/package.json delete mode 100644 tests/e2e/sveltekit/src/global.d.ts delete mode 100644 tests/e2e/sveltekit/src/routes/__layout.svelte delete mode 100644 tests/e2e/sveltekit/src/routes/index.svelte delete mode 100644 tests/e2e/sveltekit/svelte.config.js delete mode 100644 tests/e2e/sveltekit/yarn.lock delete mode 100644 tests/integration/collect-headings.test.ts delete mode 100644 tests/integration/elements-css-vars.test.ts delete mode 100644 tests/integration/elements.test.ts delete mode 100644 tests/integration/extract-selectors.test.ts delete mode 100644 tests/integration/icons.test.ts delete mode 100644 tests/integration/include.test.ts delete mode 100644 tests/integration/index.ts delete mode 100644 tests/integration/input/collect-headings.test.svelte delete mode 100644 tests/integration/input/elements-css-vars.test.svelte delete mode 100644 tests/integration/input/elements.test.svelte delete mode 100644 tests/integration/input/extract-selectors.test.svelte delete mode 100644 tests/integration/input/icons.test.svelte delete mode 100644 tests/integration/input/include.test.svelte delete mode 100644 tests/integration/input/optimize-imports.test.svelte delete mode 100644 tests/integration/input/pictograms.test.svelte delete mode 100644 tests/integration/optimize-imports.test.ts delete mode 100644 tests/integration/output/collect-headings.test.svelte delete mode 100644 tests/integration/output/elements-css-vars.test.svelte delete mode 100644 tests/integration/output/elements.test.svelte delete mode 100644 tests/integration/output/extract-selectors.test.json delete mode 100644 tests/integration/output/icons.test.svelte delete mode 100644 tests/integration/output/include.test.svelte delete mode 100644 tests/integration/output/optimize-imports.test.svelte delete mode 100644 tests/integration/output/pictograms.test.svelte delete mode 100644 tests/integration/pictograms.test.ts delete mode 100644 tests/integration/utils.ts create mode 100644 tests/optimize-imports.test.ts delete mode 100644 tests/unit/api.test.ts delete mode 100644 tests/unit/elements.test.ts delete mode 100644 tests/unit/index.ts delete mode 100644 tests/unit/type.test.ts create mode 100644 tsconfig.build.json delete mode 100644 yarn.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index ab5d598..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: CI - -on: - pull_request: - push: - branches: [main] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - uses: actions/cache@v4 - id: yarn-cache - with: - path: "**/node_modules" - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - - - name: Build and test the library - run: | - yarn - yarn prepack - yarn test diff --git a/.github/workflows/publish-to-npm.yml b/.github/workflows/publish-to-npm.yml new file mode 100644 index 0000000..f48462a --- /dev/null +++ b/.github/workflows/publish-to-npm.yml @@ -0,0 +1,27 @@ +on: + push: + tags: + - "v*" + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + + - name: Publish package + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} + + # Currently, only npm supports publishing packages with provenance + # https://docs.npmjs.com/generating-provenance-statements + run: | + npm install --force + npm publish --provenance --access public diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..fb8a606 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,16 @@ +on: + pull_request: + push: + branches: [master] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + + - name: Run unit tests + run: | + bun install + bun test diff --git a/.gitignore b/.gitignore index f571355..1a96244 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .DS_Store -/node_modules -/dist -/src/*.js -!/src/carbon-components-svelte.js \ No newline at end of file +node_modules +dist +build +public/build/ +.svelte-kit +*.tgz \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index ed4e54d..0000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -/dist -/src/*.js -/tests/**/build -/tests/**/*.test.svelte -/tests/**/.svelte \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1fb0fdc..a3af6d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## Prerequisites -For MacOS, prerequisites include [Node.js](https://nodejs.org/en/download/package-manager/#macos)(version 14 or greater) and [Yarn](https://yarnpkg.com/en/docs/install#mac-stable). +For MacOS, prerequisites include Node.js and Bun. ## Set-up @@ -16,7 +16,7 @@ cd carbon-preprocess-svelte Set the original repository as the upstream: ```sh -git remote add upstream git@github.com:IBM/carbon-preprocess-svelte.git +git remote add upstream git@github.com:carbon-design-system/carbon-preprocess-svelte.git # verify that the upstream is added git remote -v ``` @@ -24,35 +24,28 @@ git remote -v Finally, install the project dependencies: ```sh -yarn install +bun install ``` ## Workflow -Each preprocessor or plugin should have an integration test. Before running tests, be sure to build the library at least once. +Imports for `carbon-components-svelte` must be regenerated if the `carbon-components-svelte` package is updated. + +To update the imports, run the following command: ```sh -yarn prepack +bun run index:components ``` -### Unit tests - -Run `yarn test:unit` to execute the unit tests (located in `/tests/unit`). - -### Integration tests +This will update `src/component-index.ts`, which should be checked into source control. -Run `yarn test:integration` to execute the integration tests (located in `/tests/integration`). - -### Continuous Integration - -The `yarn prepack` command is executed in Travis CI. +### Unit tests -It does the following: +Run `bun test` to execute the unit tests (located in `/tests`). -1. Build the library -2. Run unit/integration tests in parallel +For watch mode, run `bun test --watch`. -The CI should pass if no unexpected errors occur. +To update snapshots, run `bun test --update-snapshots`. ## Submitting a Pull Request @@ -62,10 +55,10 @@ Before submitting a pull request, make sure your fork is up to date with the lat ```sh git fetch upstream -git checkout master -git merge upstream/master +git checkout main +git merge upstream/main ``` ### Submit a PR -After you've pushed your changes to remote, submit your PR. Make sure you are comparing `/feature` to `origin/master`. +After you've pushed your changes to remote, submit your PR. Make sure you are comparing `/feature` to `origin/main`. diff --git a/LICENSE b/LICENSE index 72f0361..a5d3e9e 100644 --- a/LICENSE +++ b/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md index ae3f81f..e28ee0f 100644 --- a/README.md +++ b/README.md @@ -4,42 +4,31 @@ ![GitHub](https://img.shields.io/github/license/ibm/carbon-preprocess-svelte?color=262626&style=for-the-badge) ![npm downloads to date](https://img.shields.io/npm/dt/carbon-preprocess-svelte?color=262626&style=for-the-badge) -> Collection of [Svelte preprocessors](https://svelte.dev/docs#svelte_preprocess) for the Carbon Design System +> [Svelte preprocessors](https://svelte.dev/docs/svelte-compiler#types-preprocessor) for the Carbon Design System ## Installation -**Yarn** +Install `carbon-preprocess-svelte` as a development dependency. ```sh +# Yarn yarn add -D carbon-preprocess-svelte -``` - -**NPM** -```sh +# npm npm i -D carbon-preprocess-svelte -``` - -**pnpm** -```sh +# pnpm pnpm i -D carbon-preprocess-svelte ``` ## Usage -This library contains the following preprocessors and plugins: - -- **optimizeImports**: rewrites Carbon Svelte imports to their source path in the `script` block -- **optimizeCss**: Rollup plugin that removes unused CSS using [PurgeCSS](https://github.com/FullHuman/purgecss) -- **elements**: computes [Carbon tokens](https://www.carbondesignsystem.com/guidelines/themes/overview#tokens) in the `style` block -- **icons**: inlines [Carbon icons](https://www.carbondesignsystem.com/guidelines/icons/library/) in the `markup` block -- **pictograms**: inlines [Carbon pictograms](https://www.carbondesignsystem.com/guidelines/pictograms/library/) in the `markup` block -- **collectHeadings**: extracts heading elements (e.g., `

`, `

`) from the `markup` +- [**optimizeImports**](#optimizeimports): Svelte preprocessor that rewrites Carbon Svelte imports to their source path in the `script` block, making development compile times dramatically faster. +- [**optimizeCss**](#optimizecss): Vite/Rollup plugin that removes unused Carbon styles, resulting in smaller CSS bundles. ### `optimizeImports` -`optimizeImports` is a Svelte script preprocessor that rewrites base imports from Carbon components/icons/pictograms packages to their source Svelte code paths. This can greatly speed up compile times during development while preserving typeahead and autocompletion hinting offered by integrated development environments (IDE) like VSCode. +`optimizeImports` is a Svelte preprocessor that rewrites barrel imports from Carbon components/icons/pictograms packages to their source Svelte code paths. This can significantly speed up development and production build compile times while preserving typeahead and autocompletion offered by integrated development environments (IDE) like VS Code. The preprocessor optimizes imports from the following packages: @@ -47,420 +36,245 @@ The preprocessor optimizes imports from the following packages: - [carbon-icons-svelte](https://github.com/carbon-design-system/carbon-icons-svelte) - [carbon-pictograms-svelte](https://github.com/carbon-design-system/carbon-pictograms-svelte) -**Example** - ```diff - import { Button } from "carbon-components-svelte"; -- import { Add16 } from "carbon-icons-svelte"; -- import { Airplane } from "carbon-pictograms-svelte"; -+ import Button from "carbon-components-svelte/Button.svelte"; -+ import Add16 from "carbon-icons-svelte/lib/Add16.svelte"; -+ import Airplane from "carbon-pictograms-svelte/lib/Airplane.svelte"; -``` - -**Note** - -A minimum version of `carbon-preprocess-svelte@0.9.0` is required for `carbon-component-svelte@0.63.0`. - -A minimum version of `carbon-preprocess-svelte@0.8.0` is required for `carbon-icons-svelte@11`. ++ import Button from "carbon-components-svelte/src/Button/Button.svelte"; -#### Usage - -```js -// svelte.config.js -import { optimizeImports } from "carbon-preprocess-svelte"; +- import { Add } from "carbon-icons-svelte"; ++ import Add from "carbon-icons-svelte/lib/Add.svelte"; -export default { - preprocess: [optimizeImports()], -}; +- import { Airplane } from "carbon-pictograms-svelte"; ++ import Airplane from "carbon-pictograms-svelte/lib/Airplane.svelte"; ``` -### `optimizeCss` +> [!NOTE] +> When this preprocessor was first created, there was no workaround to optimize slow cold start times with Vite in development. +> As of today, [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte) enables [`prebundleSvelteLibraries`](https://github.com/sveltejs/vite-plugin-svelte/blob/ba4ac32cf5c3e9c048d1ac430c1091ca08eaa130/docs/config.md#prebundlesveltelibraries), which pre-bundles Svelte libraries to improve cold start times for Vite-based set-ups. +> However, this preprocessor is still useful for non-Vite bundlers, like Rollup and Webpack. -`optimizeCss` is a Rollup plugin that removes unused Carbon CSS. It extracts selectors based on a Svelte component's markup and style content and uses [PurgeCSS](https://github.com/FullHuman/purgecss) to prune any unused styles. +#### SvelteKit -#### Usage - -`optimizeCss` should be added to the list of `vite.plugins`. Take care to only run the plugin when building for production. +See [examples/sveltekit](examples/sveltekit). ```js // svelte.config.js import adapter from "@sveltejs/adapter-static"; -import { optimizeCss } from "carbon-preprocess-svelte"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; +import { optimizeImports } from "carbon-preprocess-svelte"; -export default { +/** @type {import('@sveltejs/kit').Config} */ +const config = { + preprocess: [ + // Preprocessors are run in sequence. + // If using TypeScript, the code must be transpiled first. + vitePreprocess(), + optimizeImports(), + ], kit: { adapter: adapter(), - vite: { - plugins: [process.env.NODE_ENV === "production" && optimizeCss()], - }, }, }; -``` -#### API - -```ts -interface OptimizeCssOptions { - safelist: { - standard?: Array; - deep?: RegExp[]; - greedy?: RegExp[]; - }; -} +export default config; ``` -### `elements` - -`elements` is a Svelte style preprocessor that rewrites [Carbon Design System tokens](https://www.carbondesignsystem.com/guidelines/themes/overview#tokens) to their computed values. The purpose is to use design system token names (e.g., `"interactive-01"`) instead of hardcoded values (e.g., `"#0f62fe"`). - -**Before** +#### Vite -```svelte - +/** @type {import('vite').UserConfig} */ +export default { + plugins: [ + svelte({ + preprocess: [ + // Preprocessors are run in sequence. + // If using TypeScript, the code must be transpiled first. + vitePreprocess(), + optimizeImports(), + ], + }), + ], +}; ``` -**After** - -```svelte - -``` +#### Rollup -#### Usage +This code is abridged; see [examples/rollup](examples/rollup) for a full set-up. ```js -// svelte.config.js -import { elements } from "carbon-preprocess-svelte"; +// rollup.config.js +import svelte from "rollup-plugin-svelte"; +import { optimizeImports } from "carbon-preprocess-svelte"; export default { - preprocess: [elements()], + plugins: [ + svelte({ + preprocess: [optimizeImports()], + }), + ], }; ``` -#### API +#### Webpack -```ts -interface ElementsOptions { - /** - * Specify the Carbon theme - * Setting to "all" will also enable `cssVars` - * @default "white" - */ - theme: "white" | "g10" | "g90" | "g100" | "all"; +This code is abridged; see [examples/webpack](examples/webpack) for a full set-up. - /** - * Set to `true` for tokens to be re-written as CSS variables - * Automatically set to `true` if theme is "all" - * @example - * "spacing-05" --> var(--cds-spacing-05) - * "ui-01" --> var(--cds-ui-01) - * @default false - */ - cssVars: boolean; -} +```js +// webpack.config.js +const { optimizeImports } = require("carbon-preprocess-svelte"); + +module.exports = { + module: { + rules: [ + { + test: /\.svelte$/, + use: { + loader: "svelte-loader", + options: { + hotReload: !PROD, + preprocess: [optimizeImports()], + compilerOptions: { dev: !PROD }, + }, + }, + }, + ], + }, +}; ``` -### `icons` - -`icons` is a Svelte markup preprocessor that inlines [Carbon SVG icons](https://www.carbondesignsystem.com/guidelines/icons/library/). +### `optimizeCss` -The only required attribute is `name`, which represents the module name of the icon. Refer to [carbon-icons-svelte/ICON_INDEX.md](https://github.com/carbon-design-system/carbon-icons-svelte/blob/master/ICON_INDEX.md) for a list of supported icons. +`optimizeCss` is a Vite plugin that removes unused Carbon styles at build time. The plugin is compatible with Rollup ([Vite](https://vitejs.dev/guide/api-plugin) extends the Rollup plugin API). -**Example** +`carbon-components-svelte@0.85.0` or greater is required. ```diff -- -+ -``` +$ vite build -#### Usage +Optimized index-CU4gbKFa.css +- Before: 606.26 kB ++ After: 53.22 kB (-91.22%) -```js -// svelte.config.js -import { icons } from "carbon-preprocess-svelte"; - -export default { - preprocess: [icons()], -}; +dist/index.html 0.34 kB │ gzip: 0.24 kB +dist/assets/index-CU4gbKFa.css 53.22 kB │ gzip: 6.91 kB +dist/assets/index-Ceijs3eO.js 53.65 kB │ gzip: 15.88 kB ``` -### `pictograms` - -`pictograms` is a Svelte markup preprocessor that inlines [Carbon SVG pictograms](https://www.carbondesignsystem.com/guidelines/pictograms/library/). +> [!NOTE] +> This is a plugin and not a Svelte preprocessor. It should be added to the list of `vite.plugins`. For Vite set-ups, this plugin is only run when building the app. For Rollup and Webpack, you should conditionally apply the plugin to only execute when building for production. -The only required attribute is `name`, which represents the module name of the pictogram. Refer to [carbon-pictograms-svelte/PICTOGRAM_INDEX.md](https://github.com/carbon-design-system/carbon-pictograms-svelte/blob/master/PICTOGRAM_INDEX.md) for a list of supported pictograms. +#### SvelteKit -**Example** +See [examples/sveltekit](examples/sveltekit). -```diff -- -+ +```js +// vite.config.js +import { sveltekit } from "@sveltejs/kit/vite"; +import { optimizeCss } from "carbon-preprocess-svelte"; +import { defineConfig } from "vite"; +export default defineConfig({ + plugins: [sveltekit(), optimizeCss()], +}); ``` -#### Usage +#### Vite + +See [examples/vite](examples/vite). ```js -// svelte.config.js -import { pictograms } from "carbon-preprocess-svelte"; +// vite.config.js +import { svelte } from "@sveltejs/vite-plugin-svelte"; +import { optimizeCss } from "carbon-preprocess-svelte"; +/** @type {import('vite').UserConfig} */ export default { - preprocess: [pictograms()], + plugins: [svelte(), optimizeCss()], }; ``` -### `collectHeadings` - -`collectHeadings` extracts heading elements from markup with an optional callback to modify the source content. This can be used to create a table of contents. - -**Example** - -Markup: - -```svelte -
- -

Heading 1

-

Heading 2

-

Heading 3

-
-``` +#### Rollup -Extracted headings: +This code is abridged; see [examples/rollup](examples/rollup) for a full set-up. ```js -const headings = [ - { id: "h1", text: "Heading 1", level: 1 }, - { id: "h2-0", text: "Heading 2", level: 2 }, - { id: "h2-1", text: "Heading 2", level: 2 }, - { id: undefined, text: "Heading 3", level: 3 }, -]; -``` - -#### Usage +// rollup.config.js +import svelte from "rollup-plugin-svelte"; +import { optimizeCss } from "carbon-preprocess-svelte"; -In the following example, we create a table of contents from the `

` elements in a Svelte file. In the `afterCollect` callback, we replace `` with the table of contents. - -```js -// svelte.config.js -import { collectHeadings } from "carbon-preprocess-svelte"; +const production = !process.env.ROLLUP_WATCH; export default { - preprocess: [ - collectHeadings({ - afterCollect: (headings, content) => { - const toc = headings - .filter((heading) => heading.level === 2) - .map((item) => `
  • ${item.text}
  • `) - .join(""); - - return content.replace("", `
      ${toc}
    `); - }, + plugins: [ + svelte({ + preprocess: [optimizeImports()], }), + + // Only apply the plugin when building for production. + production && optimizeCss(), ], }; ``` -#### API - -```js -interface CollectHeadingsOptions { - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test: RegExp; - - /** - * Optional callback to transform the content after extracting all headings - */ - afterCollect: ( - headings: Array<{ - id?: string, - text: string, - level: 1 | 2 | 3 | 4 | 5 | 6, - }>, - content: string - ) => string; -} -``` - -### `include` - -`include` prepends or appends arbitrary content to the script and markup blocks. - -**Example** - -```diff - - -+ - -

    Title

    - -+

    Summary

    -``` +#### Webpack -#### Usage +Webpack users should use the `OptimizeCssPlugin`. The plugin API is identical to the Vite plugin. -In the above example, we prepend script content that imports the `CodeSnippet` component from `carbon-components-svelte`. In the markup, we prepend `` and append `

    Summary

    `. +This code is abridged; see [examples/webpack](examples/webpack) for a full set-up. ```js -// svelte.config.js -import { include } from "carbon-preprocess-svelte"; +// webpack.config.js +const { OptimizeCssPlugin } = require("carbon-preprocess-svelte"); -export default { - preprocess: [ - include({ - script: [ - { - content: 'import { CodeSnippet } from "carbon-components-svelte";', - }, - ], - markup: [ - { content: "" }, - { - content: "

    Summary

    ", - behavior: "append", - }, - ], - }), +const PROD = process.env.NODE_ENV === "production"; + +module.exports = { + plugins: [ + // Only apply the plugin when building for production. + PROD && new OptimizeCssPlugin(), ], }; ``` -#### API +#### `optimizeCss` API -By default, the `include` preprocessor will _prepend_ content to the content block. Set `behavior` to `"append"` to append the content. - -```js -interface PreprocessIncludeOptions { +```ts +optimizeCss({ /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ + * By default, the plugin will print the size + * difference between the original and optimized CSS. + * + * Set to `false` to disable verbose logging. + * @default true */ - test?: RegExp; - - script: Array<{ - /** - * Specify the content the prepend or append - * @example - * import { CodeSnippet } from "carbon-components-svelte"; - */ - content: string, - - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test?: RegExp, - - /** - * Specify whether the content should be prepended or appended - * @default "prepend" - */ - behavior?: "prepend" | "append", - }>; - - markup: Array<{ - /** - * Specify the content the prepend or append - * @example - *
      Table of Contents
    - */ - content: string, - - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test?: RegExp, - - /** - * Specify whether the content should be prepended or appended - * @default "prepend" - */ - behavior?: "prepend" | "append", - }>; -} -``` - -## Presets - -```js -// svelte.config.js -import { presetCarbon } from "carbon-preprocess-svelte"; + verbose: false, -export default { - preprocess: presetCarbon(), - - // if using other preprocessors - // preprocess: [...presetCarbon()], -}; + /** + * By default, pre-compiled Carbon StyleSheets ship `@font-face` rules + * for all available IBM Plex fonts, many of which are not actually + * used in Carbon Svelte components. + * + * The default behavior is to preserve the following IBM Plex fonts: + * - IBM Plex Sans (300/400/600-weight and normal-font-style rules) + * - IBM Plex Mono (400-weight and normal-font-style rules) + * + * Set to `true` to disable this behavior and + * retain *all* IBM Plex `@font-face` rules. + * @default false + */ + preserveAllIBMFonts: false, +}); ``` -## Sample SvelteKit set-up +## Examples -```js -// svelte.config.js -import adapter from "@sveltejs/adapter-static"; -import { optimizeImports, optimizeCss } from "carbon-preprocess-svelte"; - -/** @type {import('@sveltejs/kit').Config} */ -export default { - preprocess: [optimizeImports()], - kit: { - adapter: adapter(), - vite: { - plugins: [process.env.NODE_ENV === "production" && optimizeCss()], - }, - }, -}; -``` +Refer to [examples](examples) for common set-ups. ## Contributing diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..a051597ac3a8c4f09eb36bb3a4957a979a177598 GIT binary patch literal 59097 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 literal 0 HcmV?d00001 diff --git a/examples/rollup/.gitignore b/examples/rollup/.gitignore new file mode 100644 index 0000000..faa19f7 --- /dev/null +++ b/examples/rollup/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +.vscode +node_modules +public/build diff --git a/examples/rollup/README.md b/examples/rollup/README.md new file mode 100644 index 0000000..cab9b67 --- /dev/null +++ b/examples/rollup/README.md @@ -0,0 +1,32 @@ +# rollup + +> Used for end-to-end testing and development purposes. + +## Quick Start + +```sh +# Rebuild the library when making changes +bun prepack -w + +# Create a local link to the library +bun link +``` + +In this folder, you can run the following commands: + +```sh +# Install dependencies +bun i +``` + +Run the app in development mode. This should only apply the `optimizeImports` preprocessor. + +```sh +bun run dev +``` + +Build the app for production. This should run both the `optimizeImports` and `optimizeCss` preprocessors. + +```sh +bun run build +``` diff --git a/examples/rollup/bun.lockb b/examples/rollup/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..dbd5f6c22edc46d82549a317382a78a4dab32b7c GIT binary patch literal 38504 zcmeIb30RC@_&44%Q6i+x5~V^i?fardiBKXXRHkXF$<)*|MV5q6*6gxomwic5WZ$wB zvSdpL6;gJ>d*9E@si#o!{lCBKegCg>UB{W{ob&md``l+g&y!nA(;y~VU=YZSFyKVQ zY6Qkav;xoM@!8{oxjYUtm@f!t37N5mt)wI*By#e1W;?yVx23nM^lIDEEIF%T9(Ugt z=&HZH`)(xX>am17%ODdtwkVL0Z4f4ipM3(wKWc;MSPoCfk&sv>DIw8HLLwm?!qyPl zK-dPtvEndU9N!Yc&JZ65VLJ%f(a}tyfWz4(Ey^Dr6u}H)30Z7@5Qiz?1i=qM1e7)m z@+(08AWl>aizgv50G_eD?htl_aHoufgerv9kXISPVJ$?@2O-4gbck1iP{8N$Vj?9Z z%;h8`)Zw`kgk2!~235xArw}6F83;8X+zMe=2ooXf4j~7^ZV>hthrPtk5%BKb)>S38!pROP*R3*U_LZC=^3?b$t?LHOqVSPw?2t2F7 zv#~gw0}oWaAw)T$4Jo||IMIAwEJvb8Cy~CpK#1}vKnN;IfO_-CM@UGF1tp`ryP(mK zXElV#V*-teaxE6eCqjrgpr`r?>8Bw)KGmoB5p3wi5)$JDtjNeX35jy(49K?#8XtL{ zL5O&6L?}nV6-IL-f_dDKP+>9TL%n&3^CJhkisdCC*7KLES#@#`yVkx}@x}5F#ntmR z6!!I(I$BsMTYPG&dkMcd$A5X|piQzCXFh&z&l&gK^h#<#NS7(k$FJM_AW>$+s+a?O zy_=f^*Tx+f(=~LLy6#QpN3A0%+xzZZX11X_+n;<7Q*X6ysK}eJXgJb z?T~iu`=K8%t6O!-)5%d%QS@7wI{k3Ubk&)!lO9%0AN6CKmZanIb_tFqetTS=zRd1) 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 literal 0 HcmV?d00001 diff --git a/examples/rollup/package.json b/examples/rollup/package.json new file mode 100644 index 0000000..847bcb8 --- /dev/null +++ b/examples/rollup/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "rollup -cw", + "build": "rollup -c" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "latest", + "@rollup/plugin-node-resolve": "latest", + "carbon-components-svelte": "^0.85.0", + "carbon-preprocess-svelte": "link:carbon-preprocess-svelte", + "rollup": "latest", + "rollup-plugin-css-only": "latest", + "rollup-plugin-svelte": "latest", + "rollup-plugin-terser": "latest", + "svelte": "latest" + } +} diff --git a/examples/rollup/public/index.html b/examples/rollup/public/index.html new file mode 100644 index 0000000..3231907 --- /dev/null +++ b/examples/rollup/public/index.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/rollup/rollup.config.js b/examples/rollup/rollup.config.js new file mode 100644 index 0000000..04d367f --- /dev/null +++ b/examples/rollup/rollup.config.js @@ -0,0 +1,30 @@ +import commonjs from "@rollup/plugin-commonjs"; +import resolve from "@rollup/plugin-node-resolve"; +import { optimizeCss, optimizeImports } from "carbon-preprocess-svelte"; +import css from "rollup-plugin-css-only"; +import svelte from "rollup-plugin-svelte"; +import { terser } from "rollup-plugin-terser"; + +const production = !process.env.ROLLUP_WATCH; + +export default { + input: "src/index.js", + output: { + sourcemap: !production, + format: "iife", + name: "app", + file: "public/build/bundle.js", + inlineDynamicImports: true, + }, + plugins: [ + svelte({ + preprocess: [optimizeImports()], + compilerOptions: { dev: !production }, + }), + resolve({ browser: true, dedupe: ["svelte"] }), + commonjs(), + css({ output: "bundle.css" }), + production && terser(), + production && optimizeCss(), + ], +}; diff --git a/examples/rollup/src/App.svelte b/examples/rollup/src/App.svelte new file mode 100644 index 0000000..af1a4c5 --- /dev/null +++ b/examples/rollup/src/App.svelte @@ -0,0 +1,58 @@ + + + diff --git a/examples/rollup/src/index.js b/examples/rollup/src/index.js new file mode 100644 index 0000000..aba70f6 --- /dev/null +++ b/examples/rollup/src/index.js @@ -0,0 +1,5 @@ +import App from "./App.svelte"; + +const app = new App({ target: document.body }); + +export default app; diff --git a/tests/e2e/sveltekit/.gitignore b/examples/sveltekit/.gitignore similarity index 68% rename from tests/e2e/sveltekit/.gitignore rename to examples/sveltekit/.gitignore index 380fd86..4c97a25 100644 --- a/tests/e2e/sveltekit/.gitignore +++ b/examples/sveltekit/.gitignore @@ -1,4 +1,4 @@ .DS_Store -/node_modules -/.svelte-kit +node_modules /build +/.svelte-kit diff --git a/examples/sveltekit/README.md b/examples/sveltekit/README.md new file mode 100644 index 0000000..e9f2572 --- /dev/null +++ b/examples/sveltekit/README.md @@ -0,0 +1,32 @@ +# sveltekit + +> Used for end-to-end testing and development purposes. + +## Quick Start + +```sh +# Rebuild the library when making changes +bun prepack -w + +# Create a local link to the library +bun link +``` + +In this folder, you can run the following commands: + +```sh +# Install dependencies +bun i +``` + +Run the app in development mode. This should only apply the `optimizeImports` preprocessor. + +```sh +bun run dev +``` + +Build the app for production. This should run both the `optimizeImports` and `optimizeCss` preprocessors. + +```sh +bun run build +``` diff --git a/examples/sveltekit/bun.lockb b/examples/sveltekit/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..e99ee2d4cae7e87640145cb64ef0a9a09af01dfb GIT binary patch literal 46646 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%0A3|3>18#zy{HPbqQ4sfzFRF3$do(TOGG{ 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 YdQboTHjj)RSrd@BRD#0RsF?&Hw-a literal 0 HcmV?d00001 diff --git a/examples/sveltekit/package.json b/examples/sveltekit/package.json new file mode 100644 index 0000000..c1bd324 --- /dev/null +++ b/examples/sveltekit/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/adapter-static": "latest", + "@sveltejs/kit": "latest", + "@sveltejs/vite-plugin-svelte": "latest", + "carbon-components-svelte": "^0.85.0", + "carbon-preprocess-svelte": "link:carbon-preprocess-svelte", + "svelte": "latest", + "vite": "latest" + }, + "type": "module" +} diff --git a/examples/sveltekit/src/app.html b/examples/sveltekit/src/app.html new file mode 100644 index 0000000..84ffad1 --- /dev/null +++ b/examples/sveltekit/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
    %sveltekit.body%
    + + diff --git a/examples/sveltekit/src/routes/+layout.js b/examples/sveltekit/src/routes/+layout.js new file mode 100644 index 0000000..189f71e --- /dev/null +++ b/examples/sveltekit/src/routes/+layout.js @@ -0,0 +1 @@ +export const prerender = true; diff --git a/examples/sveltekit/src/routes/+page.svelte b/examples/sveltekit/src/routes/+page.svelte new file mode 100644 index 0000000..af1a4c5 --- /dev/null +++ b/examples/sveltekit/src/routes/+page.svelte @@ -0,0 +1,58 @@ + + + diff --git a/examples/sveltekit/static/favicon.png b/examples/sveltekit/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH Used for end-to-end testing and development purposes. + +## Quick Start + +```sh +# Rebuild the library when making changes +bun prepack -w + +# Create a local link to the library +bun link +``` + +In this folder, you can run the following commands: + +```sh +# Install dependencies +bun i +``` + +Run the app in development mode. This should only apply the `optimizeImports` preprocessor. + +```sh +bun run dev +``` + +Build the app for production. This should run both the `optimizeImports` and `optimizeCss` preprocessors. + +```sh +bun run build +``` diff --git a/examples/vite/bun.lockb b/examples/vite/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..fb0ae52a049dfaa2a1521ee726d9fe81fec77a9d GIT binary patch literal 31194 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

    A9ZJR(&mG_*=2tl8y!48^{VOy48>if6 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 N@qo@fHT%!|`(J(3oR + - %svelte.head% -

    %svelte.body%
    + diff --git a/examples/vite/package.json b/examples/vite/package.json new file mode 100644 index 0000000..dc95559 --- /dev/null +++ b/examples/vite/package.json @@ -0,0 +1,16 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "latest", + "carbon-components-svelte": "^0.85.0", + "carbon-preprocess-svelte": "link:carbon-preprocess-svelte", + "svelte": "latest", + "vite": "latest" + } +} diff --git a/examples/vite/src/App.svelte b/examples/vite/src/App.svelte new file mode 100644 index 0000000..70e7f60 --- /dev/null +++ b/examples/vite/src/App.svelte @@ -0,0 +1,58 @@ + + + diff --git a/examples/vite/vite.config.ts b/examples/vite/vite.config.ts new file mode 100644 index 0000000..a010759 --- /dev/null +++ b/examples/vite/vite.config.ts @@ -0,0 +1,22 @@ +import { svelte, vitePreprocess } from "@sveltejs/vite-plugin-svelte"; +import { optimizeCss, optimizeImports } from "carbon-preprocess-svelte"; + +/** @type {import('vite').UserConfig} */ +export default { + plugins: [ + svelte({ + preprocess: [vitePreprocess(), optimizeImports()], + }), + optimizeCss(), + ], + + // Optional, but recommended for even faster cold starts. + // Instruct Vite to exclude packages that `optimizeImports` will resolve. + optimizeDeps: { + exclude: [ + "carbon-components-svelte", + "carbon-icons-svelte", + "carbon-pictograms-svelte", + ], + }, +}; diff --git a/examples/webpack/.gitignore b/examples/webpack/.gitignore new file mode 100644 index 0000000..690975f --- /dev/null +++ b/examples/webpack/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +node_modules +public diff --git a/examples/webpack/README.md b/examples/webpack/README.md new file mode 100644 index 0000000..efb8321 --- /dev/null +++ b/examples/webpack/README.md @@ -0,0 +1,35 @@ +# example + +> Used for end-to-end testing and development purposes. + +> [!NOTE] +> Currently, the `optimizeCss` plugin does not support Webpack. + +## Quick Start + +```sh +# Rebuild the library when making changes +bun prepack -w + +# Create a local link to the library +bun link +``` + +In this folder, you can run the following commands: + +```sh +# Install dependencies +bun i +``` + +Run the app in development mode. This should only apply the `optimizeImports` preprocessor. + +```sh +bun run dev +``` + +Build the app for production. This should run both the `optimizeImports` and `optimizeCss` preprocessors. + +```sh +bun run build +``` diff --git a/examples/webpack/bun.lockb b/examples/webpack/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..698e810e50a737f69391ea98f8ddea8233c6086c GIT binary patch literal 155047 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 + import "carbon-components-svelte/css/g100.css"; + import { DataTable } from "carbon-components-svelte"; + + + diff --git a/examples/webpack/src/index.js b/examples/webpack/src/index.js new file mode 100644 index 0000000..aba70f6 --- /dev/null +++ b/examples/webpack/src/index.js @@ -0,0 +1,5 @@ +import App from "./App.svelte"; + +const app = new App({ target: document.body }); + +export default app; diff --git a/examples/webpack/webpack.config.js b/examples/webpack/webpack.config.js new file mode 100644 index 0000000..81ae1ba --- /dev/null +++ b/examples/webpack/webpack.config.js @@ -0,0 +1,74 @@ +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const path = require("path"); +const { + optimizeImports, + OptimizeCssPlugin, +} = require("carbon-preprocess-svelte"); + +const NODE_ENV = process.env.NODE_ENV || "development"; +const PROD = NODE_ENV === "production"; + +module.exports = { + entry: { "build/bundle": ["./src/index.js"] }, + resolve: { + alias: { + svelte: path.resolve("node_modules", "svelte/src/runtime"), + }, + extensions: [".mjs", ".js", ".svelte"], + mainFields: ["svelte", "browser", "module", "main"], + conditionNames: ["svelte", "browser", "import"], + }, + output: { + publicPath: "/", + path: path.join(__dirname, "/public"), + filename: PROD ? "[name].[contenthash].js" : "[name].js", + chunkFilename: "[name].[id].js", + clean: true, + }, + module: { + rules: [ + { + test: /\.svelte$/, + use: { + loader: "svelte-loader", + options: { + hotReload: !PROD, + preprocess: [optimizeImports()], + compilerOptions: { dev: !PROD }, + }, + }, + }, + { + test: /\.css$/, + use: [MiniCssExtractPlugin.loader, "css-loader"], + }, + { + test: /node_modules\/svelte\/.*\.mjs$/, + resolve: { fullySpecified: false }, + }, + ], + }, + mode: NODE_ENV, + plugins: [ + PROD && new OptimizeCssPlugin(), + new MiniCssExtractPlugin({ + filename: PROD ? "[name].[chunkhash].css" : "[name].css", + }), + new HtmlWebpackPlugin({ + templateContent: ` + + + + + + + + + `, + }), + ], + stats: "errors-only", + devtool: PROD ? false : "source-map", + devServer: { hot: true, historyApiFallback: true }, +}; diff --git a/examples/webpack/yarn.lock b/examples/webpack/yarn.lock new file mode 100644 index 0000000..e201c21 --- /dev/null +++ b/examples/webpack/yarn.lock @@ -0,0 +1,2960 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.1": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@ibm/telemetry-js@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ibm/telemetry-js/-/telemetry-js-1.2.1.tgz#0b12801a683af23bcd2b90d1b83f332b3cca7f0e" + integrity sha512-ZNuqoclscha2RC089RBPkiGzv8g+mQfBOnHDJZEGBFrvsXg0B9lfRGFBSLzCuTR5nFDqVFYb6XqMRu36EiHIDA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" + integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.1", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/http-proxy@^1.17.8": + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "20.11.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f" + integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw== + dependencies: + undici-types "~5.26.4" + +"@types/pug@^2.0.6": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.10.tgz#52f8dbd6113517aef901db20b4f3fca543b88c1f" + integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== + +"@types/qs@*": + version "6.9.12" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.12.tgz#afa96b383a3a6fdc859453a1892d41b607fc7756" + integrity sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.15.5": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.10": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.10.0, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +axobject-query@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.0.0.tgz#04a4c90dce33cc5d606c76d6216e3b250ff70dab" + integrity sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw== + dependencies: + dequal "^2.0.3" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-crc32@^0.2.5: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001587: + version "1.0.30001596" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee" + integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ== + +carbon-components-svelte@^0.84.0: + version "0.84.0" + resolved "https://registry.yarnpkg.com/carbon-components-svelte/-/carbon-components-svelte-0.84.0.tgz#75b1a2c588e4c120af429f1f86e677ec3d842ff0" + integrity sha512-NSIGFYsmUJ04aOuQaS8e5ldnufj8gJpYnaPnMM3O+jQJdd6bEpGKhuh7fpdB0U67QEQYbSrxmuRzThLh85Qpnw== + dependencies: + "@ibm/telemetry-js" "^1.2.1" + flatpickr "4.6.9" + +carbon-preprocess-svelte@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/carbon-preprocess-svelte/-/carbon-preprocess-svelte-0.10.0.tgz#6a8790d5bf38e3cf26e6d5ac8a72c742768c4a88" + integrity sha512-jsmVvLcCKuxyoEkyRXvBux4JdatglTuqlDt95TiXiXmOS4XCcrHYSNiBzJ9vsOHpQIaRy8lGQxx6mh6G1lr6FQ== + dependencies: + purgecss "^4.1.3" + svelte-preprocess "^5.0.3" + typescript "^4.7.4" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +clean-css@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +code-red@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" + integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + "@types/estree" "^1.0.1" + acorn "^8.10.0" + estree-walker "^3.0.3" + periscopic "^3.1.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^8.0.0, commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-loader@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" + integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.4" + postcss-modules-scope "^3.1.1" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.668: + version "1.4.699" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz#dd53c939e13da64e94b341e563f0a3011b4ef0e9" + integrity sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +enhanced-resolve@^5.15.0: + version "5.15.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz#384391e025f099e67b4b00bfd7f0906a408214e1" + integrity sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.11.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" + integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + +es6-promise@^3.1.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^3.0.0, estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" + integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatpickr@4.6.9: + version "4.6.9" + resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499" + integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw== + +follow-redirects@^1.0.0: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.4.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-network-error@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.0.1.tgz#a68061a20387e9144e145571bea693056a370b92" + integrity sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-reference@^3.0.0, is-reference@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" + integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== + dependencies: + "@types/estree" "*" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +launch-editor@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-character@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" + integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +magic-string@^0.30.4, magic-string@^0.30.5: + version "0.30.8" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^4.6.0: + version "4.7.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.7.7.tgz#bcf09cab1646d655f659e7cf832dfc75ccb95b2d" + integrity sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw== + dependencies: + tslib "^2.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" + integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== + dependencies: + schema-utils "^4.0.0" + tapable "^2.2.1" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-retry@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" + integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== + dependencies: + "@types/retry" "0.12.2" + is-network-error "^1.0.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +periscopic@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" + integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^3.0.0" + is-reference "^3.0.0" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" + integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" + integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6: + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.3.5, postcss@^8.4.33: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +purgecss@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-4.1.3.tgz#683f6a133c8c4de7aa82fe2746d1393b214918f7" + integrity sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw== + dependencies: + commander "^8.0.0" + glob "^7.1.7" + postcss "^8.3.5" + postcss-selector-parser "^6.0.6" + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +rimraf@^2.5.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sander@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" + integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== + dependencies: + es6-promise "^3.1.2" + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" + +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0, schema-utils@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sorcery@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" + integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.14" + buffer-crc32 "^0.2.5" + minimist "^1.2.0" + sander "^0.5.0" + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svelte-dev-helper@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/svelte-dev-helper/-/svelte-dev-helper-1.1.9.tgz#7d187db5c6cdbbd64d75a32f91b8998bde3273c3" + integrity sha512-oU+Xv7Dl4kRU2kdFjsoPLfJfnt5hUhsFUZtuzI3Ku/f2iAFZqBoEuXOqK3N9ngD4dxQOmN4OKWPHVi3NeAeAfQ== + +svelte-hmr@^0.14.2: + version "0.14.12" + resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.12.tgz#a127aec02f1896500b10148b2d4d21ddde39973f" + integrity sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w== + +svelte-loader@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/svelte-loader/-/svelte-loader-3.1.9.tgz#950015ad5b30fb205fceee0dd6d37f228237605c" + integrity sha512-RITPqze3TppOhaZF8SEFTDTwFHov17k3UkOjpxyL/No/YVrvckKmXWOEj7QEpsZZZSNQPb28tMZbHEI2xLhJMQ== + dependencies: + loader-utils "^2.0.4" + svelte-dev-helper "^1.1.9" + svelte-hmr "^0.14.2" + +svelte-preprocess@^5.0.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz#7682239fe53f724c845b53026816fdfe15d028f9" + integrity sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw== + dependencies: + "@types/pug" "^2.0.6" + detect-indent "^6.1.0" + magic-string "^0.30.5" + sorcery "^0.11.0" + strip-indent "^3.0.0" + +svelte@^4.2.12: + version "4.2.12" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.12.tgz#13d98d2274d24d3ad216c8fdc801511171c70bb1" + integrity sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/estree" "^1.0.1" + acorn "^8.9.0" + aria-query "^5.3.0" + axobject-query "^4.0.0" + code-red "^1.0.3" + css-tree "^2.3.1" + estree-walker "^3.0.3" + is-reference "^3.0.1" + locate-character "^3.0.0" + magic-string "^0.30.4" + periscopic "^3.1.0" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.10.0, terser@^5.26.0: + version "5.29.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.1.tgz#44e58045b70c09792ba14bfb7b4e14ca8755b9fa" + integrity sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tslib@^2.0.0, tslib@^2.0.3: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@^4.7.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.0.0.tgz#13595dc038a400e3ac9c76f0c9a8c75a59a7d4da" + integrity sha512-tZ5hqsWwww/8DislmrzXE3x+4f+v10H1z57mA2dWFrILb4i3xX+dPhTkcdR0DLyQztrhF2AUmO5nN085UYjd/Q== + dependencies: + colorette "^2.0.10" + memfs "^4.6.0" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.2.tgz#3035972dae4b768de020f91418de471e4ef12b6c" + integrity sha512-IVj3qsQhiLJR82zVg3QdPtngMD05CYP/Am+9NG5QSl+XwUR/UPtFwllRBKrMwM9ttzFsC6Zj3DMgniPyn/Z0hQ== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" + ansi-html-community "^0.0.8" + bonjour-service "^1.2.1" + chokidar "^3.6.0" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.4.0" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + rimraf "^5.0.5" + schema-utils "^4.2.0" + selfsigned "^2.4.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^7.0.0" + ws "^8.16.0" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.90.3: + version "5.90.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" + integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/package.json b/package.json index 20fc838..068b004 100644 --- a/package.json +++ b/package.json @@ -2,58 +2,32 @@ "name": "carbon-preprocess-svelte", "version": "0.10.0", "license": "Apache-2.0", - "description": "Collection of Svelte preprocessors for the Carbon Design System", - "module": "./dist/index.mjs", + "description": "Svelte preprocessors for the Carbon Design System", + "author": "Eric Liu (https://github.com/metonym)", "main": "./dist/index.js", "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.mjs", - "require": "./dist/index.js" - } - }, "scripts": { - "build:api": "run-p build:api:*", - "build:api:components": "ts-node src/build/build-components", - "build:api:elements": "ts-node src/build/build-elements", - "build:api:icons": "ts-node src/build/build-icons", - "build:api:pictograms": "ts-node src/build/build-pictograms", - "build:lib": "run-p build:lib:*", - "build:lib:cjs": "esbuild src/index.cjs.ts --bundle --platform=node --target=node10.4 --external:purgecss --external:svelte-preprocess --external:typescript --outfile=dist/index.js", - "build:lib:esm": "esbuild src/index.ts --bundle --platform=node --target=es6 --format=esm --external:purgecss --external:svelte-preprocess --external:typescript --outfile=dist/index.mjs", - "build:lib:types": "tsc", - "prepack": "run-s build:api build:lib", - "test": "run-p test:*", - "test:unit": "ts-node tests/unit", - "test:integration": "ts-node tests/integration", - "format": "prettier --write '.'" + "index:components": "bun scripts/index-components.ts", + "prepack": "tsc -p tsconfig.build.json", + "format": "prettier --write ." }, "dependencies": { - "purgecss": "^4.1.3", - "svelte-preprocess": "^5.0.3", - "typescript": "^4.7.4" + "magic-string": "^0.30.8", + "postcss": "^8.4.36", + "postcss-discard-empty": "^6.0.3" }, "devDependencies": { - "@carbon/elements": "10.31.0", - "@carbon/icon-helpers": "^10.16.0", - "@carbon/icons": "^11.0.1", - "@carbon/pictograms": "^12.0.2", - "@types/carbon__elements": "10.31.0", - "@types/carbon__icon-helpers": "^10.7.1", - "@types/node": "^15.0.2", - "carbon-components-svelte": "^0.75.1", - "esbuild": "^0.11.19", - "npm-run-all": "^4.1.5", - "prettier": "^2.6.2", - "prettier-plugin-svelte": "^2.7.0", - "rollup": "^2.70.2", - "svelte": "^3.47.0", - "totalist": "^3.0.0", - "ts-node": "^10.7.0" + "@types/bun": "latest", + "carbon-components-svelte": "0.85.0", + "prettier": "latest", + "svelte": "latest", + "typescript": "latest", + "vite": "latest", + "webpack": "latest" }, "repository": { "type": "git", - "url": "https://github.com/carbon-design-system/carbon-preprocess-svelte.git" + "url": "git+https://github.com/carbon-design-system/carbon-preprocess-svelte.git" }, "homepage": "https://github.com/carbon-design-system/carbon-preprocess-svelte", "bugs": "https://github.com/carbon-design-system/carbon-preprocess-svelte/issues", @@ -63,15 +37,13 @@ "carbon preprocess", "svelte", "preprocessor", - "optimize imports" + "optimize imports", + "optimize CSS" ], "files": [ "dist" ], - "contributors": [ + "maintainers": [ "Eric Liu (https://github.com/metonym)" - ], - "resolutions": { - "path-parse": ">=1.0.7" - } + ] } diff --git a/scripts/extract-selectors.ts b/scripts/extract-selectors.ts new file mode 100644 index 0000000..4ef4962 --- /dev/null +++ b/scripts/extract-selectors.ts @@ -0,0 +1,81 @@ +import { parse, walk } from "svelte/compiler"; + +const CARBON_PREFIX = /bx--/; + +type ExtractSelectorsProps = { + code: string; + filename: string; +}; + +export function extractSelectors(props: ExtractSelectorsProps) { + const { code, filename } = props; + const ast = parse(code, { filename }); + const selectors: Map = new Map(); + + walk(ast, { + enter(node) { + if (node.type === "Attribute" && node.name === "class") { + // class="c1" + // class="c1 c2" + // class="{c} c1 c2 c3" + node.value?.map((value) => { + if (value.type === "Text") { + value.data + .split(/\s+/) + .filter(Boolean) + .forEach((selector) => + selectors.set(selector, { type: node.type }), + ); + } + }); + } + + // class:directive + if (node.type === "Class") { + selectors.set(node.name, { type: node.type }); + } + + if (node.type === "PseudoClassSelector" && node.name === "global") { + // global selector + // :global(div) {} + node.children[0]?.value.split(",").forEach((selector: string) => { + selectors.set(selector.trim(), { type: node.type, name: node.name }); + }); + } + + if (node.type === "Literal" && CARBON_PREFIX.test(node.value)) { + selectors.set(node.value, { type: "Class" }); + } + + if ( + node.type === "TemplateElement" && + CARBON_PREFIX.test(node.value.raw) + ) { + selectors.set(node.value.raw, { type: "Class" }); + } + }, + }); + + const classes: string[] = []; + + // Iterate through all class attribute identifiers + Array.from(selectors).forEach((selector) => { + const [v = ""] = selector; + + if (typeof v === "string") { + const value = v.trim(); + + if (value.startsWith("bx--") && !value.startsWith(".")) { + classes.push("." + value); + } else { + if (value.startsWith(".")) { + classes.push(value); + } else { + classes.push("." + value); + } + } + } + }); + + return classes; +} diff --git a/scripts/index-components.ts b/scripts/index-components.ts new file mode 100644 index 0000000..2dcddd2 --- /dev/null +++ b/scripts/index-components.ts @@ -0,0 +1,72 @@ +import { Glob } from "bun"; +import path from "node:path"; +import { parse, walk } from "svelte/compiler"; +import { CarbonSvelte } from "../src/constants"; +import { isSvelteFile } from "../src/utils"; +import { extractSelectors } from "./extract-selectors"; + +const carbon_path = path.join("node_modules", CarbonSvelte.Components); +const index_js = path.join(carbon_path, "src/index.js"); +const index_file = await Bun.file(index_js).text(); + +/** + * The exportee from `carbon-components-svelte`. + * @example Accordion, breakpoints, etc. + */ +type Identifier = string; + +type IdentifierValue = { path: string; classes: string[] }; + +const exports_map = new Map(); + +walk(parse(``), { + enter(node) { + if (node.type === "Identifier") { + exports_map.set(node.name, null); + } + }, +}); + +const files = new Glob("**/*.{js,svelte}").scan(path.join(carbon_path, "src")); + +for await (const file of files) { + const moduleName = path.parse(file).name; + + if (exports_map.has(moduleName)) { + const map: IdentifierValue = { + path: `${CarbonSvelte.Components}/src/${file}`, + classes: [], + }; + + if (isSvelteFile(file)) { + const file_path = path.join(carbon_path, "src/", file); + const file_text = await Bun.file(file_path).text(); + map.classes = extractSelectors({ code: file_text, filename: file }); + } + + exports_map.set(moduleName, map); + } +} + +// Sort Map keys alphabetically and convert to object. +const components = Object.fromEntries( + new Map( + [...exports_map.entries()] + .sort((a, b) => a.toLocaleString().localeCompare(b.toLocaleString())) + .filter(([_, value]) => value !== null), + ), +); + +await Bun.write( + "src/component-index.ts", + `// @generated +// This file was automatically generated and should not be edited. +// @see scripts/index-components.ts +// prettier-ignore + +export const components: Record = Object.freeze(${JSON.stringify( + components, + null, + 2, + )});\n`, +); diff --git a/src/build/build-components.ts b/src/build/build-components.ts deleted file mode 100644 index d3fb206..0000000 --- a/src/build/build-components.ts +++ /dev/null @@ -1,66 +0,0 @@ -import path from "path"; -import fs from "fs"; -import { totalist } from "totalist"; -import { parse, walk } from "svelte/compiler"; -import { getPackageJson, writeFile } from "../utils"; -import { CARBON_SVELTE, API_COMPONENTS } from "../constants"; -import type { BuildApi } from "../build"; -import type { Node } from "../walk-and-replace"; - -type ExportName = string; - -interface BuildComponentsApi { - path: string; -} -export interface BuildComponents extends BuildApi { - components: Record; -} - -(async () => { - const pkg = getPackageJson("node_modules/carbon-components-svelte"); - const components: BuildComponents = { - metadata: { - package: pkg.name!, - version: pkg.version!, - exports: 0, - }, - components: {}, - }; - - const indexJs = fs.readFileSync( - `node_modules/${CARBON_SVELTE.components}/src/index.js`, - "utf-8" - ); - const ast = parse(``); - const exports = new Set(); - - walk(ast, { - enter(node: Node) { - if (node.type === "Identifier") { - exports.add(node.name); - } - }, - }); - - components.metadata.exports = exports.size; - - const moduleNames = new Map(); - - await totalist(`node_modules/${CARBON_SVELTE.components}/src`, (file) => { - const moduleName = path.parse(file).name; - - if (exports.has(moduleName)) { - const path = `${CARBON_SVELTE.components}/src/${file}`; - moduleNames.set(moduleName, { path }); - } - }); - - [...moduleNames.entries()].sort().forEach(([moduleName, value]) => { - components.components[moduleName] = value; - }); - - await writeFile( - API_COMPONENTS, - `export const components = ${JSON.stringify(components, null, 2)}` - ); -})(); diff --git a/src/build/build-elements.ts b/src/build/build-elements.ts deleted file mode 100644 index 0c5d2aa..0000000 --- a/src/build/build-elements.ts +++ /dev/null @@ -1,186 +0,0 @@ -import * as elements from "@carbon/elements"; -import * as build from "../build"; -import { API_ELEMENTS } from "../constants"; -import { getPackageJson, writeFile } from "../utils"; - -export type TokenTypeStyles = - | build.type.TypeStylesComputed - | { - css: string; - breakpoints: Array<{ mediaQuery: string; css: string }>; - }; - -export type TokenUI = - | "interactive-01" - | "interactive-02" - | "interactive-03" - | "interactive-04" - | "ui-background" - | "ui-01" - | "ui-02" - | "ui-03" - | "ui-04" - | "ui-05" - | "text-01" - | "text-02" - | "text-03" - | "text-04" - | "text-05" - | "text-error" - | "icon-01" - | "icon-02" - | "icon-03" - | "link-01" - | "inverse-link" - | "field-01" - | "field-02" - | "inverse-01" - | "inverse-02" - | "support-01" - | "support-02" - | "support-03" - | "support-04" - | "inverse-support-01" - | "inverse-support-02" - | "inverse-support-03" - | "inverse-support-04" - | "overlay-01" - | "danger-01" - | "danger-02" - | "focus" - | "inverse-focus-ui" - | "hover-primary" - | "active-primary" - | "hover-primary-text" - | "hover-secondary" - | "active-secondary" - | "hover-tertiary" - | "active-tertiary" - | "hover-ui" - | "hover-light-ui" - | "hover-selected-ui" - | "active-ui" - | "active-light-ui" - | "selected-ui" - | "selected-light-ui" - | "inverse-hover-ui" - | "hover-danger" - | "active-danger" - | "hover-row" - | "visited-link" - | "disabled-01" - | "disabled-02" - | "disabled-03" - | "highlight" - | "decorative-01" - | "button-separator" - | "skeleton-01" - | "skeleton-02" - | "brand-01" - | "brand-02" - | "brand-03" - | "active-01" - | "hover-field" - | "danger"; - -export type v10_theme = "white" | "g10" | "g90" | "g100"; - -interface BuildElements extends build.BuildApi { - tokens: Record; - tokens_ui: Record>; -} - -const v10_THEMES: v10_theme[] = ["white", "g10", "g90", "g100"]; - -(async () => { - const pkg = getPackageJson("node_modules/@carbon/elements"); - const buildElements: BuildElements = { - metadata: { - package: pkg.name!, - version: pkg.version!, - exports: 0, - }, - - tokens: {}, - - // @ts-ignore - tokens_ui: {}, - }; - - function addToken(token: string, value?: any) { - const formatted = elements.formatTokenName(token); - buildElements.tokens[formatted] = value ?? formatted; - } - - // colors - const { colors } = elements; - - Object.entries(colors).forEach(([color, colorMap]) => { - Object.entries(colorMap).forEach(([grade, hex]) => { - const name = elements.formatTokenName(color); - const token = grade === "0" ? name : `${name}-${grade}`; - - buildElements.tokens[token] = hex; - }); - }); - - elements.tokens.type.forEach((type) => { - const { css, breakpoints } = build.type.serializeTypeStyles(elements[type]); - - buildElements.tokens[elements.formatTokenName(type)] = { - css, - breakpoints, - }; - }); - - // UI Colors - elements.tokens.colors.forEach((color) => { - addToken(color, undefined); - - const name = elements.formatTokenName(color) as TokenUI; - - buildElements.tokens_ui[name] = { - white: {}, - g10: {}, - g90: {}, - g100: {}, - }; - - v10_THEMES.forEach((theme) => { - buildElements.tokens_ui[name][theme] = elements[theme][color]; - }); - }); - - elements.tokens.layout.forEach((token) => { - const formatted = elements.formatTokenName(token); - buildElements.tokens[formatted] = elements[token]; - }); - - Object.entries(elements.fontWeights).forEach(([fontWeight, value]) => { - buildElements.tokens[elements.formatTokenName(fontWeight)] = value; - }); - - Object.entries(elements.fontFamilies).forEach(([fontFamily, value]) => { - buildElements.tokens[elements.formatTokenName(fontFamily)] = value; - }); - - // motion tokens - addToken("fast01", elements.fast01); - addToken("fast02", elements.fast02); - addToken("moderate01", elements.moderate01); - addToken("moderate02", elements.moderate02); - addToken("slow01", elements.slow01); - addToken("slow02", elements.slow02); - - Object.entries(elements.easings).forEach(([easing, types]) => { - Object.entries(types).forEach(([type, value]) => { - const key = `easing.${easing}.${type}`; - buildElements.tokens[key] = value; - }); - }); - - await writeFile( - API_ELEMENTS, - `export const elements = ${JSON.stringify(buildElements, null, 2)}` - ); -})(); diff --git a/src/build/build-icons.ts b/src/build/build-icons.ts deleted file mode 100644 index 1570826..0000000 --- a/src/build/build-icons.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { toString } from "@carbon/icon-helpers"; -import { getPackageJson, readFile, writeFile } from "../utils"; -import { API_ICONS } from "../constants"; -import { BuildApi } from "../build"; - -/** - * @example - * "Add16" - * "Add20" - */ -export type IconName = string; - -export interface BuildIcons extends BuildApi { - icons: Record; -} - -interface CarbonIconModule { - attributes: Record; - children: string; -} - -interface CarbonIconsMetadata { - icons: Array<{ - output: Array<{ - moduleName: IconName; - descriptor: { attrs: Record; content: any[] }; - }>; - }>; -} - -(async () => { - const pkg = getPackageJson("node_modules/@carbon/icons"); - const icons: BuildIcons = { - metadata: { - package: pkg.name!, - version: pkg.version!, - exports: 0, - }, - icons: {}, - }; - - const metadataJson = await readFile( - "node_modules/@carbon/icons/metadata.json", - "utf-8" - ); - const metadata: CarbonIconsMetadata = JSON.parse(metadataJson); - - icons.metadata.exports = metadata.icons.length; - - metadata.icons.map(({ output }) => { - output.forEach((output) => { - const { moduleName, descriptor } = output; - - icons.icons[moduleName] = { - attributes: { - width: descriptor.attrs.width, - height: descriptor.attrs.height, - }, - children: descriptor.content - .map((element) => toString(element)) - .join(""), - }; - }); - }); - - await writeFile( - API_ICONS, - `export const icons = ${JSON.stringify(icons, null, 2)}` - ); -})(); diff --git a/src/build/build-pictograms.ts b/src/build/build-pictograms.ts deleted file mode 100644 index 15cc65d..0000000 --- a/src/build/build-pictograms.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { toString } from "@carbon/icon-helpers"; -import { getPackageJson, readFile, writeFile } from "../utils"; -import { API_PICTOGRAMS } from "../constants"; -import { BuildApi } from "../build"; - -/** - * @example - * "Airplane" - * "ActiveServer" - */ -export type PictogramName = string; - -export interface BuildPictograms extends BuildApi { - pictograms: Record; -} - -interface CarbonPictogramModule { - attributes: Record; - children: string; -} - -export interface CarbonPictogramsMetadata { - icons: ReadonlyArray<{ - name: string; - friendlyName: string; - namespace: []; - assets: [ - { - filepath: string; - source: string; - optimized: { - data: string; - info: {}; - path: string; - }; - } - ]; - output: [ - pictogram: { - moduleName: PictogramName; - filepath: string; - descriptor: { - elem: "svg"; - attrs: { - xmlns: "http://www.w3.org/2000/svg"; - viewBox: "0 0 48 48"; - width: "48"; - height: "48"; - }; - content: { elem: string; attrs: object }[]; - name: string; - }; - } - ]; - category: string; - }>; -} - -(async () => { - const pkg = getPackageJson("node_modules/@carbon/pictograms"); - const pictograms: BuildPictograms = { - metadata: { - package: pkg.name!, - version: pkg.version!, - exports: 0, - }, - pictograms: {}, - }; - - const metadataJson = await readFile( - "node_modules/@carbon/pictograms/metadata.json", - "utf-8" - ); - const metadata: CarbonPictogramsMetadata = JSON.parse(metadataJson); - - pictograms.metadata.exports = metadata.icons.length; - - metadata.icons.map(({ output }) => { - output.forEach((output) => { - const { moduleName, descriptor } = output; - - pictograms.pictograms[moduleName] = { - attributes: { - width: descriptor.attrs.width, - height: descriptor.attrs.height, - }, - children: descriptor.content - .map((element) => toString(element)) - .join(""), - }; - }); - }); - - await writeFile( - API_PICTOGRAMS, - `export const pictograms = ${JSON.stringify(pictograms, null, 2)}` - ); -})(); diff --git a/src/build/index.ts b/src/build/index.ts deleted file mode 100644 index 2870c1c..0000000 --- a/src/build/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -export * as type from "./type"; - -export interface BuildApi { - metadata: { - /** - * Package name - * @example "carbon-components-svelte" - */ - package: string; - - /** - * Package version - * @example "0.32.0" - */ - version: string; - - /** - * Number of exports - */ - exports: number; - }; -} diff --git a/src/build/type.ts b/src/build/type.ts deleted file mode 100644 index 83c525e..0000000 --- a/src/build/type.ts +++ /dev/null @@ -1,46 +0,0 @@ -import * as elements from "@carbon/elements"; - -type TypeStylesBreakpoint = Partial< - Record ->; - -interface TypeStyles - extends Record { - breakpoints?: TypeStylesBreakpoint; -} - -export interface TypeStylesComputed { - css: string; - breakpoints: Array; -} - -export function serializeTypeStyles(type: TypeStyles): TypeStylesComputed { - let fn: TypeStylesComputed = { - css: "", - breakpoints: [], - }; - - const entries = Object.entries(type); - - entries.forEach(([key, value], i) => { - const property = elements.formatTokenName(key); - - if (key === "breakpoints") { - fn.breakpoints = Object.entries(value as TypeStylesBreakpoint).map( - ([breakpointName, value]) => { - const mediaQuery = elements.breakpoint( - breakpointName as elements.BreakpointName - ); - - return { mediaQuery, css: serializeTypeStyles(value!).css }; - } - ); - } else { - const semicolon = i === entries.length - 1 ? "" : ";"; - - fn.css += `${property}: ${value}${semicolon}`; - } - }); - - return fn; -} diff --git a/src/carbon-components-svelte.js b/src/carbon-components-svelte.js deleted file mode 100644 index ef90297..0000000 --- a/src/carbon-components-svelte.js +++ /dev/null @@ -1,513 +0,0 @@ -export const components = { - "metadata": { - "package": "carbon-components-svelte", - "version": "0.75.1", - "exports": 169 - }, - "components": { - "Accordion": { - "path": "carbon-components-svelte/src/Accordion/Accordion.svelte" - }, - "AccordionItem": { - "path": "carbon-components-svelte/src/Accordion/AccordionItem.svelte" - }, - "AccordionSkeleton": { - "path": "carbon-components-svelte/src/Accordion/AccordionSkeleton.svelte" - }, - "AspectRatio": { - "path": "carbon-components-svelte/src/AspectRatio/AspectRatio.svelte" - }, - "Breadcrumb": { - "path": "carbon-components-svelte/src/Breadcrumb/Breadcrumb.svelte" - }, - "BreadcrumbItem": { - "path": "carbon-components-svelte/src/Breadcrumb/BreadcrumbItem.svelte" - }, - "BreadcrumbSkeleton": { - "path": "carbon-components-svelte/src/Breadcrumb/BreadcrumbSkeleton.svelte" - }, - "Breakpoint": { - "path": "carbon-components-svelte/src/Breakpoint/Breakpoint.svelte" - }, - "Button": { - "path": "carbon-components-svelte/src/Button/Button.svelte" - }, - "ButtonSet": { - "path": "carbon-components-svelte/src/Button/ButtonSet.svelte" - }, - "ButtonSkeleton": { - "path": "carbon-components-svelte/src/Button/ButtonSkeleton.svelte" - }, - "Checkbox": { - "path": "carbon-components-svelte/src/Checkbox/Checkbox.svelte" - }, - "CheckboxSkeleton": { - "path": "carbon-components-svelte/src/Checkbox/CheckboxSkeleton.svelte" - }, - "ClickableTile": { - "path": "carbon-components-svelte/src/Tile/ClickableTile.svelte" - }, - "CodeSnippet": { - "path": "carbon-components-svelte/src/CodeSnippet/CodeSnippet.svelte" - }, - "CodeSnippetSkeleton": { - "path": "carbon-components-svelte/src/CodeSnippet/CodeSnippetSkeleton.svelte" - }, - "Column": { - "path": "carbon-components-svelte/src/Grid/Column.svelte" - }, - "ComboBox": { - "path": "carbon-components-svelte/src/ComboBox/ComboBox.svelte" - }, - "ComposedModal": { - "path": "carbon-components-svelte/src/ComposedModal/ComposedModal.svelte" - }, - "Content": { - "path": "carbon-components-svelte/src/UIShell/Content.svelte" - }, - "ContentSwitcher": { - "path": "carbon-components-svelte/src/ContentSwitcher/ContentSwitcher.svelte" - }, - "ContextMenu": { - "path": "carbon-components-svelte/src/ContextMenu/ContextMenu.svelte" - }, - "ContextMenuDivider": { - "path": "carbon-components-svelte/src/ContextMenu/ContextMenuDivider.svelte" - }, - "ContextMenuGroup": { - "path": "carbon-components-svelte/src/ContextMenu/ContextMenuGroup.svelte" - }, - "ContextMenuOption": { - "path": "carbon-components-svelte/src/ContextMenu/ContextMenuOption.svelte" - }, - "ContextMenuRadioGroup": { - "path": "carbon-components-svelte/src/ContextMenu/ContextMenuRadioGroup.svelte" - }, - "CopyButton": { - "path": "carbon-components-svelte/src/CopyButton/CopyButton.svelte" - }, - "DataTable": { - "path": "carbon-components-svelte/src/DataTable/DataTable.svelte" - }, - "DataTableSkeleton": { - "path": "carbon-components-svelte/src/DataTable/DataTableSkeleton.svelte" - }, - "DatePicker": { - "path": "carbon-components-svelte/src/DatePicker/DatePicker.svelte" - }, - "DatePickerInput": { - "path": "carbon-components-svelte/src/DatePicker/DatePickerInput.svelte" - }, - "DatePickerSkeleton": { - "path": "carbon-components-svelte/src/DatePicker/DatePickerSkeleton.svelte" - }, - "Dropdown": { - "path": "carbon-components-svelte/src/Dropdown/Dropdown.svelte" - }, - "DropdownSkeleton": { - "path": "carbon-components-svelte/src/Dropdown/DropdownSkeleton.svelte" - }, - "ExpandableTile": { - "path": "carbon-components-svelte/src/Tile/ExpandableTile.svelte" - }, - "FileUploader": { - "path": "carbon-components-svelte/src/FileUploader/FileUploader.svelte" - }, - "FileUploaderButton": { - "path": "carbon-components-svelte/src/FileUploader/FileUploaderButton.svelte" - }, - "FileUploaderDropContainer": { - "path": "carbon-components-svelte/src/FileUploader/FileUploaderDropContainer.svelte" - }, - "FileUploaderItem": { - "path": "carbon-components-svelte/src/FileUploader/FileUploaderItem.svelte" - }, - "FileUploaderSkeleton": { - "path": "carbon-components-svelte/src/FileUploader/FileUploaderSkeleton.svelte" - }, - "Filename": { - "path": "carbon-components-svelte/src/FileUploader/Filename.svelte" - }, - "FluidForm": { - "path": "carbon-components-svelte/src/FluidForm/FluidForm.svelte" - }, - "Form": { - "path": "carbon-components-svelte/src/Form/Form.svelte" - }, - "FormGroup": { - "path": "carbon-components-svelte/src/FormGroup/FormGroup.svelte" - }, - "FormItem": { - "path": "carbon-components-svelte/src/FormItem/FormItem.svelte" - }, - "FormLabel": { - "path": "carbon-components-svelte/src/FormLabel/FormLabel.svelte" - }, - "Grid": { - "path": "carbon-components-svelte/src/Grid/Grid.svelte" - }, - "Header": { - "path": "carbon-components-svelte/src/UIShell/Header.svelte" - }, - "HeaderAction": { - "path": "carbon-components-svelte/src/UIShell/HeaderAction.svelte" - }, - "HeaderActionLink": { - "path": "carbon-components-svelte/src/UIShell/HeaderActionLink.svelte" - }, - "HeaderGlobalAction": { - "path": "carbon-components-svelte/src/UIShell/HeaderGlobalAction.svelte" - }, - "HeaderNav": { - "path": "carbon-components-svelte/src/UIShell/HeaderNav.svelte" - }, - "HeaderNavItem": { - "path": "carbon-components-svelte/src/UIShell/HeaderNavItem.svelte" - }, - "HeaderNavMenu": { - "path": "carbon-components-svelte/src/UIShell/HeaderNavMenu.svelte" - }, - "HeaderPanelDivider": { - "path": "carbon-components-svelte/src/UIShell/HeaderPanelDivider.svelte" - }, - "HeaderPanelLink": { - "path": "carbon-components-svelte/src/UIShell/HeaderPanelLink.svelte" - }, - "HeaderPanelLinks": { - "path": "carbon-components-svelte/src/UIShell/HeaderPanelLinks.svelte" - }, - "HeaderSearch": { - "path": "carbon-components-svelte/src/UIShell/HeaderSearch.svelte" - }, - "HeaderUtilities": { - "path": "carbon-components-svelte/src/UIShell/HeaderUtilities.svelte" - }, - "ImageLoader": { - "path": "carbon-components-svelte/src/ImageLoader/ImageLoader.svelte" - }, - "InlineLoading": { - "path": "carbon-components-svelte/src/InlineLoading/InlineLoading.svelte" - }, - "InlineNotification": { - "path": "carbon-components-svelte/src/Notification/InlineNotification.svelte" - }, - "Link": { - "path": "carbon-components-svelte/src/Link/Link.svelte" - }, - "ListBox": { - "path": "carbon-components-svelte/src/ListBox/ListBox.svelte" - }, - "ListBoxField": { - "path": "carbon-components-svelte/src/ListBox/ListBoxField.svelte" - }, - "ListBoxMenu": { - "path": "carbon-components-svelte/src/ListBox/ListBoxMenu.svelte" - }, - "ListBoxMenuIcon": { - "path": "carbon-components-svelte/src/ListBox/ListBoxMenuIcon.svelte" - }, - "ListBoxMenuItem": { - "path": "carbon-components-svelte/src/ListBox/ListBoxMenuItem.svelte" - }, - "ListBoxSelection": { - "path": "carbon-components-svelte/src/ListBox/ListBoxSelection.svelte" - }, - "ListItem": { - "path": "carbon-components-svelte/src/ListItem/ListItem.svelte" - }, - "Loading": { - "path": "carbon-components-svelte/src/Loading/Loading.svelte" - }, - "LocalStorage": { - "path": "carbon-components-svelte/src/LocalStorage/LocalStorage.svelte" - }, - "Modal": { - "path": "carbon-components-svelte/src/Modal/Modal.svelte" - }, - "ModalBody": { - "path": "carbon-components-svelte/src/ComposedModal/ModalBody.svelte" - }, - "ModalFooter": { - "path": "carbon-components-svelte/src/ComposedModal/ModalFooter.svelte" - }, - "ModalHeader": { - "path": "carbon-components-svelte/src/ComposedModal/ModalHeader.svelte" - }, - "MultiSelect": { - "path": "carbon-components-svelte/src/MultiSelect/MultiSelect.svelte" - }, - "NotificationActionButton": { - "path": "carbon-components-svelte/src/Notification/NotificationActionButton.svelte" - }, - "NotificationButton": { - "path": "carbon-components-svelte/src/Notification/NotificationButton.svelte" - }, - "NotificationIcon": { - "path": "carbon-components-svelte/src/Notification/NotificationIcon.svelte" - }, - "NumberInput": { - "path": "carbon-components-svelte/src/NumberInput/NumberInput.svelte" - }, - "NumberInputSkeleton": { - "path": "carbon-components-svelte/src/NumberInput/NumberInputSkeleton.svelte" - }, - "OrderedList": { - "path": "carbon-components-svelte/src/OrderedList/OrderedList.svelte" - }, - "OutboundLink": { - "path": "carbon-components-svelte/src/Link/OutboundLink.svelte" - }, - "OverflowMenu": { - "path": "carbon-components-svelte/src/OverflowMenu/OverflowMenu.svelte" - }, - "OverflowMenuItem": { - "path": "carbon-components-svelte/src/OverflowMenu/OverflowMenuItem.svelte" - }, - "Pagination": { - "path": "carbon-components-svelte/src/Pagination/Pagination.svelte" - }, - "PaginationNav": { - "path": "carbon-components-svelte/src/PaginationNav/PaginationNav.svelte" - }, - "PaginationSkeleton": { - "path": "carbon-components-svelte/src/Pagination/PaginationSkeleton.svelte" - }, - "PasswordInput": { - "path": "carbon-components-svelte/src/TextInput/PasswordInput.svelte" - }, - "Popover": { - "path": "carbon-components-svelte/src/Popover/Popover.svelte" - }, - "ProgressBar": { - "path": "carbon-components-svelte/src/ProgressBar/ProgressBar.svelte" - }, - "ProgressIndicator": { - "path": "carbon-components-svelte/src/ProgressIndicator/ProgressIndicator.svelte" - }, - "ProgressIndicatorSkeleton": { - "path": "carbon-components-svelte/src/ProgressIndicator/ProgressIndicatorSkeleton.svelte" - }, - "ProgressStep": { - "path": "carbon-components-svelte/src/ProgressIndicator/ProgressStep.svelte" - }, - "RadioButton": { - "path": "carbon-components-svelte/src/RadioButton/RadioButton.svelte" - }, - "RadioButtonGroup": { - "path": "carbon-components-svelte/src/RadioButtonGroup/RadioButtonGroup.svelte" - }, - "RadioButtonSkeleton": { - "path": "carbon-components-svelte/src/RadioButton/RadioButtonSkeleton.svelte" - }, - "RadioTile": { - "path": "carbon-components-svelte/src/Tile/RadioTile.svelte" - }, - "RecursiveList": { - "path": "carbon-components-svelte/src/RecursiveList/RecursiveList.svelte" - }, - "Row": { - "path": "carbon-components-svelte/src/Grid/Row.svelte" - }, - "Search": { - "path": "carbon-components-svelte/src/Search/Search.svelte" - }, - "SearchSkeleton": { - "path": "carbon-components-svelte/src/Search/SearchSkeleton.svelte" - }, - "Select": { - "path": "carbon-components-svelte/src/Select/Select.svelte" - }, - "SelectItem": { - "path": "carbon-components-svelte/src/Select/SelectItem.svelte" - }, - "SelectItemGroup": { - "path": "carbon-components-svelte/src/Select/SelectItemGroup.svelte" - }, - "SelectSkeleton": { - "path": "carbon-components-svelte/src/Select/SelectSkeleton.svelte" - }, - "SelectableTile": { - "path": "carbon-components-svelte/src/Tile/SelectableTile.svelte" - }, - "SideNav": { - "path": "carbon-components-svelte/src/UIShell/SideNav.svelte" - }, - "SideNavDivider": { - "path": "carbon-components-svelte/src/UIShell/SideNavDivider.svelte" - }, - "SideNavItems": { - "path": "carbon-components-svelte/src/UIShell/SideNavItems.svelte" - }, - "SideNavLink": { - "path": "carbon-components-svelte/src/UIShell/SideNavLink.svelte" - }, - "SideNavMenu": { - "path": "carbon-components-svelte/src/UIShell/SideNavMenu.svelte" - }, - "SideNavMenuItem": { - "path": "carbon-components-svelte/src/UIShell/SideNavMenuItem.svelte" - }, - "SkeletonPlaceholder": { - "path": "carbon-components-svelte/src/SkeletonPlaceholder/SkeletonPlaceholder.svelte" - }, - "SkeletonText": { - "path": "carbon-components-svelte/src/SkeletonText/SkeletonText.svelte" - }, - "SkipToContent": { - "path": "carbon-components-svelte/src/UIShell/SkipToContent.svelte" - }, - "Slider": { - "path": "carbon-components-svelte/src/Slider/Slider.svelte" - }, - "SliderSkeleton": { - "path": "carbon-components-svelte/src/Slider/SliderSkeleton.svelte" - }, - "StructuredList": { - "path": "carbon-components-svelte/src/StructuredList/StructuredList.svelte" - }, - "StructuredListBody": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListBody.svelte" - }, - "StructuredListCell": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListCell.svelte" - }, - "StructuredListHead": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListHead.svelte" - }, - "StructuredListInput": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListInput.svelte" - }, - "StructuredListRow": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListRow.svelte" - }, - "StructuredListSkeleton": { - "path": "carbon-components-svelte/src/StructuredList/StructuredListSkeleton.svelte" - }, - "Switch": { - "path": "carbon-components-svelte/src/ContentSwitcher/Switch.svelte" - }, - "Tab": { - "path": "carbon-components-svelte/src/Tabs/Tab.svelte" - }, - "TabContent": { - "path": "carbon-components-svelte/src/Tabs/TabContent.svelte" - }, - "Table": { - "path": "carbon-components-svelte/src/DataTable/Table.svelte" - }, - "TableBody": { - "path": "carbon-components-svelte/src/DataTable/TableBody.svelte" - }, - "TableCell": { - "path": "carbon-components-svelte/src/DataTable/TableCell.svelte" - }, - "TableContainer": { - "path": "carbon-components-svelte/src/DataTable/TableContainer.svelte" - }, - "TableHead": { - "path": "carbon-components-svelte/src/DataTable/TableHead.svelte" - }, - "TableHeader": { - "path": "carbon-components-svelte/src/DataTable/TableHeader.svelte" - }, - "TableRow": { - "path": "carbon-components-svelte/src/DataTable/TableRow.svelte" - }, - "Tabs": { - "path": "carbon-components-svelte/src/Tabs/Tabs.svelte" - }, - "TabsSkeleton": { - "path": "carbon-components-svelte/src/Tabs/TabsSkeleton.svelte" - }, - "Tag": { - "path": "carbon-components-svelte/src/Tag/Tag.svelte" - }, - "TagSkeleton": { - "path": "carbon-components-svelte/src/Tag/TagSkeleton.svelte" - }, - "TextArea": { - "path": "carbon-components-svelte/src/TextArea/TextArea.svelte" - }, - "TextAreaSkeleton": { - "path": "carbon-components-svelte/src/TextArea/TextAreaSkeleton.svelte" - }, - "TextInput": { - "path": "carbon-components-svelte/src/TextInput/TextInput.svelte" - }, - "TextInputSkeleton": { - "path": "carbon-components-svelte/src/TextInput/TextInputSkeleton.svelte" - }, - "Theme": { - "path": "carbon-components-svelte/src/Theme/Theme.svelte" - }, - "Tile": { - "path": "carbon-components-svelte/src/Tile/Tile.svelte" - }, - "TileGroup": { - "path": "carbon-components-svelte/src/Tile/TileGroup.svelte" - }, - "TimePicker": { - "path": "carbon-components-svelte/src/TimePicker/TimePicker.svelte" - }, - "TimePickerSelect": { - "path": "carbon-components-svelte/src/TimePicker/TimePickerSelect.svelte" - }, - "ToastNotification": { - "path": "carbon-components-svelte/src/Notification/ToastNotification.svelte" - }, - "Toggle": { - "path": "carbon-components-svelte/src/Toggle/Toggle.svelte" - }, - "ToggleSkeleton": { - "path": "carbon-components-svelte/src/Toggle/ToggleSkeleton.svelte" - }, - "Toolbar": { - "path": "carbon-components-svelte/src/DataTable/Toolbar.svelte" - }, - "ToolbarBatchActions": { - "path": "carbon-components-svelte/src/DataTable/ToolbarBatchActions.svelte" - }, - "ToolbarContent": { - "path": "carbon-components-svelte/src/DataTable/ToolbarContent.svelte" - }, - "ToolbarMenu": { - "path": "carbon-components-svelte/src/DataTable/ToolbarMenu.svelte" - }, - "ToolbarMenuItem": { - "path": "carbon-components-svelte/src/DataTable/ToolbarMenuItem.svelte" - }, - "ToolbarSearch": { - "path": "carbon-components-svelte/src/DataTable/ToolbarSearch.svelte" - }, - "Tooltip": { - "path": "carbon-components-svelte/src/Tooltip/Tooltip.svelte" - }, - "TooltipDefinition": { - "path": "carbon-components-svelte/src/TooltipDefinition/TooltipDefinition.svelte" - }, - "TooltipFooter": { - "path": "carbon-components-svelte/src/Tooltip/TooltipFooter.svelte" - }, - "TooltipIcon": { - "path": "carbon-components-svelte/src/TooltipIcon/TooltipIcon.svelte" - }, - "TreeView": { - "path": "carbon-components-svelte/src/TreeView/TreeView.svelte" - }, - "Truncate": { - "path": "carbon-components-svelte/src/Truncate/Truncate.svelte" - }, - "UnorderedList": { - "path": "carbon-components-svelte/src/UnorderedList/UnorderedList.svelte" - }, - "breakpointObserver": { - "path": "carbon-components-svelte/src/Breakpoint/breakpointObserver.js" - }, - "breakpoints": { - "path": "carbon-components-svelte/src/Breakpoint/breakpoints.js" - }, - "truncate": { - "path": "carbon-components-svelte/src/Truncate/truncate.js" - } - } -} \ No newline at end of file diff --git a/src/component-index.ts b/src/component-index.ts new file mode 100644 index 0000000..a2e6b99 --- /dev/null +++ b/src/component-index.ts @@ -0,0 +1,1922 @@ +// @generated +// This file was automatically generated and should not be edited. +// @see scripts/index-components.ts +// prettier-ignore + +export const components: Record = Object.freeze({ + "Accordion": { + "path": "carbon-components-svelte/src/Accordion/Accordion.svelte", + "classes": [ + ".bx--accordion", + ".bx--accordion--start", + ".bx--accordion--end", + ".bx--accordion--sm", + ".bx--accordion--xl" + ] + }, + "AccordionItem": { + "path": "carbon-components-svelte/src/Accordion/AccordionItem.svelte", + "classes": [ + ".bx--accordion__item", + ".bx--accordion__item--active", + ".bx--accordion__item--disabled", + ".bx--accordion__item--expanding", + ".bx--accordion__item--collapsing", + ".bx--accordion__heading", + ".bx--accordion__arrow", + ".bx--accordion__title", + ".bx--accordion__content" + ] + }, + "AccordionSkeleton": { + "path": "carbon-components-svelte/src/Accordion/AccordionSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--accordion", + ".bx--accordion--start", + ".bx--accordion--end", + ".bx--accordion--sm", + ".bx--accordion--xl", + ".bx--accordion__item", + ".bx--accordion__item--active", + ".bx--accordion__heading", + ".bx--accordion__arrow", + ".bx--accordion__title", + ".bx--accordion__content" + ] + }, + "AspectRatio": { + "path": "carbon-components-svelte/src/AspectRatio/AspectRatio.svelte", + "classes": [ + ".bx--aspect-ratio", + ".bx--aspect-ratio--2x1", + ".bx--aspect-ratio--2x3", + ".bx--aspect-ratio--16x9", + ".bx--aspect-ratio--4x3", + ".bx--aspect-ratio--1x1", + ".bx--aspect-ratio--3x4", + ".bx--aspect-ratio--3x2", + ".bx--aspect-ratio--9x16", + ".bx--aspect-ratio--1x2", + ".bx--aspect-ratio--object" + ] + }, + "Breadcrumb": { + "path": "carbon-components-svelte/src/Breadcrumb/Breadcrumb.svelte", + "classes": [ + ".bx--breadcrumb", + ".bx--breadcrumb--no-trailing-slash" + ] + }, + "BreadcrumbItem": { + "path": "carbon-components-svelte/src/Breadcrumb/BreadcrumbItem.svelte", + "classes": [ + ".bx--breadcrumb-item", + ".bx--breadcrumb-item--current", + ".bx--link" + ] + }, + "BreadcrumbSkeleton": { + "path": "carbon-components-svelte/src/Breadcrumb/BreadcrumbSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--breadcrumb", + ".bx--breadcrumb--no-trailing-slash", + ".bx--breadcrumb-item", + ".bx--link" + ] + }, + "Breakpoint": { + "path": "carbon-components-svelte/src/Breakpoint/Breakpoint.svelte", + "classes": [] + }, + "breakpointObserver": { + "path": "carbon-components-svelte/src/Breakpoint/breakpointObserver.js", + "classes": [] + }, + "breakpoints": { + "path": "carbon-components-svelte/src/Breakpoint/breakpoints.js", + "classes": [] + }, + "Button": { + "path": "carbon-components-svelte/src/Button/Button.svelte", + "classes": [ + ".bx--assistive-text", + ".bx--btn__icon", + ".bx--btn", + ".bx--btn--expressive", + ".bx--btn--sm", + ".bx--btn--md", + ".bx--btn--field", + ".bx--btn--lg", + ".bx--btn--xl", + ".bx--btn--", + ".bx--btn--disabled", + ".bx--btn--icon-only", + ".bx--tooltip__trigger", + ".bx--tooltip--a11y", + ".bx--btn--icon-only--", + ".bx--tooltip--align-", + ".bx--btn--selected" + ] + }, + "ButtonSet": { + "path": "carbon-components-svelte/src/Button/ButtonSet.svelte", + "classes": [ + ".bx--btn-set", + ".bx--btn-set--stacked" + ] + }, + "ButtonSkeleton": { + "path": "carbon-components-svelte/src/Button/ButtonSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--btn", + ".bx--btn--field", + ".bx--btn--sm", + ".bx--btn--lg", + ".bx--btn--xl" + ] + }, + "Checkbox": { + "path": "carbon-components-svelte/src/Checkbox/Checkbox.svelte", + "classes": [ + ".bx--form-item", + ".bx--checkbox-wrapper", + ".bx--checkbox", + ".bx--checkbox-label", + ".bx--checkbox-label-text", + ".bx--visually-hidden" + ] + }, + "CheckboxSkeleton": { + "path": "carbon-components-svelte/src/Checkbox/CheckboxSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--checkbox-wrapper", + ".bx--checkbox-label", + ".bx--checkbox-label-text", + ".bx--skeleton" + ] + }, + "ClickableTile": { + "path": "carbon-components-svelte/src/Tile/ClickableTile.svelte", + "classes": [ + ".bx--tile", + ".bx--tile--clickable", + ".bx--tile--is-clicked", + ".bx--tile--light" + ] + }, + "CodeSnippet": { + "path": "carbon-components-svelte/src/CodeSnippet/CodeSnippet.svelte", + "classes": [ + ".bx--snippet", + ".bx--snippet--expand", + ".bx--snippet--light", + ".bx--snippet--no-copy", + ".bx--snippet--wraptext", + ".bx--snippet--single", + ".bx--snippet--inline", + ".bx--snippet--multi", + ".bx--copy", + ".bx--btn--copy", + ".bx--copy-btn--animating", + ".bx--copy-btn--fade-in", + ".bx--copy-btn--fade-out", + ".bx--assistive-text", + ".bx--copy-btn__feedback", + ".bx--snippet--disabled", + ".bx--snippet-container", + ".bx--snippet-btn--expand", + ".bx--snippet-btn--text", + ".bx--icon-chevron--down", + ".bx--snippet__icon" + ] + }, + "CodeSnippetSkeleton": { + "path": "carbon-components-svelte/src/CodeSnippet/CodeSnippetSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--snippet", + ".bx--snippet--single", + ".bx--snippet--multi", + ".bx--snippet-container" + ] + }, + "Column": { + "path": "carbon-components-svelte/src/Grid/Column.svelte", + "classes": [ + ".bx--col-", + ".bx--offset-", + ".bx--col", + ".bx--no-gutter", + ".bx--no-gutter--left", + ".bx--no-gutter--right", + ".bx--aspect-ratio bx--aspect-ratio--", + ".bx--col-padding" + ] + }, + "ComboBox": { + "path": "carbon-components-svelte/src/ComboBox/ComboBox.svelte", + "classes": [ + ".bx--list-box__wrapper", + ".bx--label", + ".bx--label--disabled", + ".bx--combo-box", + ".bx--list-box--up", + ".bx--combo-box--warning", + ".bx--text-input", + ".bx--text-input--light", + ".bx--text-input--empty", + ".bx--list-box__invalid-icon", + ".bx--list-box__invalid-icon--warning", + ".bx--list-box__menu-item__selected-icon", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled" + ] + }, + "ComposedModal": { + "path": "carbon-components-svelte/src/ComposedModal/ComposedModal.svelte", + "classes": [ + ".bx--modal", + ".is-visible", + ".bx--modal--danger", + ".bx--modal-container", + ".bx--modal-container--xs", + ".bx--modal-container--sm", + ".bx--modal-container--lg" + ] + }, + "Content": { + "path": "carbon-components-svelte/src/UIShell/Content.svelte", + "classes": [ + ".bx--content" + ] + }, + "ContentSwitcher": { + "path": "carbon-components-svelte/src/ContentSwitcher/ContentSwitcher.svelte", + "classes": [ + ".bx--content-switcher", + ".bx--content-switcher--sm", + ".bx--content-switcher--xl" + ] + }, + "ContextMenu": { + "path": "carbon-components-svelte/src/ContextMenu/ContextMenu.svelte", + "classes": [ + ".bx--menu", + ".bx--menu--open", + ".bx--menu--invisible", + ".bx--menu--root" + ] + }, + "ContextMenuDivider": { + "path": "carbon-components-svelte/src/ContextMenu/ContextMenuDivider.svelte", + "classes": [ + ".bx--menu-divider" + ] + }, + "ContextMenuGroup": { + "path": "carbon-components-svelte/src/ContextMenu/ContextMenuGroup.svelte", + "classes": [] + }, + "ContextMenuOption": { + "path": "carbon-components-svelte/src/ContextMenu/ContextMenuOption.svelte", + "classes": [ + ".bx--menu-option", + ".bx--menu-option--disabled", + ".bx--menu-option--active", + ".bx--menu-option--danger", + ".bx--menu", + ".bx--menu-option__content", + ".bx--menu-option__content--disabled", + ".bx--menu-option__icon", + ".bx--menu-option__label", + ".bx--menu-option__info" + ] + }, + "ContextMenuRadioGroup": { + "path": "carbon-components-svelte/src/ContextMenu/ContextMenuRadioGroup.svelte", + "classes": [] + }, + "CopyButton": { + "path": "carbon-components-svelte/src/CopyButton/CopyButton.svelte", + "classes": [ + ".bx--copy-btn", + ".bx--copy", + ".bx--copy-btn--animating", + ".bx--copy-btn--fade-in", + ".bx--copy-btn--fade-out", + ".bx--snippet__icon", + ".bx--assistive-text", + ".bx--copy-btn__feedback" + ] + }, + "DataTable": { + "path": "carbon-components-svelte/src/DataTable/DataTable.svelte", + "classes": [ + ".bx--data-table-header", + ".bx--data-table-header__title", + ".bx--data-table-header__description", + ".bx--table-expand", + ".bx--table-expand__button", + ".bx--table-expand__svg", + ".bx--table-column-checkbox", + ".bx--data-table--selected", + ".bx--expandable-row", + ".bx--parent-row", + ".bx--expandable-row--hover", + ".bx--table-column-radio", + ".bx--table-column-menu", + ".bx--child-row-inner-container" + ] + }, + "DataTableSkeleton": { + "path": "carbon-components-svelte/src/DataTable/DataTableSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--data-table-container", + ".bx--data-table-header", + ".bx--data-table-header__title", + ".bx--data-table-header__description", + ".bx--table-toolbar", + ".bx--toolbar-content", + ".bx--btn", + ".bx--btn--sm", + ".bx--data-table", + ".bx--data-table--compact", + ".bx--data-table--short", + ".bx--data-table--tall", + ".bx--data-table--zebra" + ] + }, + "DatePicker": { + "path": "carbon-components-svelte/src/DatePicker/DatePicker.svelte", + "classes": [ + ".bx--form-item", + ".bx--date-picker", + ".bx--date-picker--short", + ".bx--date-picker--light", + ".bx--date-picker--simple", + ".bx--date-picker--single", + ".bx--date-picker--range", + ".bx--date-picker--nolabel" + ] + }, + "DatePickerInput": { + "path": "carbon-components-svelte/src/DatePicker/DatePickerInput.svelte", + "classes": [ + ".bx--date-picker-container", + ".bx--date-picker--nolabel", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--date-picker-input__wrapper", + ".bx--date-picker-input__wrapper--invalid", + ".bx--date-picker-input__wrapper--warn", + ".bx--date-picker__input", + ".bx--date-picker__input--invalid", + ".bx--date-picker__input--sm", + ".bx--date-picker__input--xl", + ".bx--date-picker__icon", + ".bx--date-picker__icon--invalid", + ".bx--date-picker__icon--warn", + ".bx--form-requirement", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled" + ] + }, + "DatePickerSkeleton": { + "path": "carbon-components-svelte/src/DatePicker/DatePickerSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--date-picker", + ".bx--skeleton", + ".bx--date-picker--range", + ".bx--date-picker--short", + ".bx--date-picker--simple", + ".bx--date-picker-container", + ".bx--label", + ".bx--date-picker__input" + ] + }, + "Dropdown": { + "path": "carbon-components-svelte/src/Dropdown/Dropdown.svelte", + "classes": [ + ".bx--dropdown__wrapper", + ".bx--list-box__wrapper", + ".bx--dropdown__wrapper--inline", + ".bx--list-box__wrapper--inline", + ".bx--dropdown__wrapper--inline--invalid", + ".bx--label", + ".bx--label--disabled", + ".bx--visually-hidden", + ".bx--dropdown", + ".bx--list-box--up", + ".bx--dropdown--invalid", + ".bx--dropdown--warning", + ".bx--dropdown--open", + ".bx--dropdown--sm", + ".bx--dropdown--xl", + ".bx--dropdown--inline", + ".bx--dropdown--disabled", + ".bx--dropdown--light", + ".bx--list-box__invalid-icon", + ".bx--list-box__invalid-icon--warning", + ".bx--list-box__field", + ".bx--list-box__label", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled" + ] + }, + "DropdownSkeleton": { + "path": "carbon-components-svelte/src/Dropdown/DropdownSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--dropdown-v2", + ".bx--list-box", + ".bx--form-item", + ".bx--list-box--inline", + ".bx--list-box__field", + ".bx--list-box__label" + ] + }, + "ExpandableTile": { + "path": "carbon-components-svelte/src/Tile/ExpandableTile.svelte", + "classes": [ + ".bx--tile", + ".bx--tile--expandable", + ".bx--tile--is-expanded", + ".bx--tile--light", + ".bx--tile-content", + ".bx--tile-content__above-the-fold", + ".bx--tile__chevron", + ".bx--tile-content__below-the-fold" + ] + }, + "Filename": { + "path": "carbon-components-svelte/src/FileUploader/Filename.svelte", + "classes": [ + ".bx--file-invalid", + ".bx--file-close", + ".bx--file-complete" + ] + }, + "FileUploader": { + "path": "carbon-components-svelte/src/FileUploader/FileUploader.svelte", + "classes": [ + ".bx--form-item", + ".bx--file--label", + ".bx--label-description--disabled", + ".bx--label-description", + ".bx--file-container", + ".bx--file__selected-file", + ".bx--file-filename", + ".bx--file__state-container" + ] + }, + "FileUploaderButton": { + "path": "carbon-components-svelte/src/FileUploader/FileUploaderButton.svelte", + "classes": [ + ".bx--btn", + ".bx--btn--disabled", + ".bx--btn--primary", + ".bx--btn--secondary", + ".bx--btn--tertiary", + ".bx--btn--ghost", + ".bx--btn--danger", + ".bx--btn--danger-tertiary", + ".bx--btn--danger-ghost", + ".bx--btn--sm", + ".bx--btn--field", + ".bx--btn--lg", + ".bx--btn--xl", + ".bx--visually-hidden" + ] + }, + "FileUploaderDropContainer": { + "path": "carbon-components-svelte/src/FileUploader/FileUploaderDropContainer.svelte", + "classes": [ + ".bx--file", + ".bx--file-browse-btn", + ".bx--file-browse-btn--disabled", + ".bx--file__drop-container", + ".bx--file__drop-container--drag-over", + ".bx--file-input" + ] + }, + "FileUploaderItem": { + "path": "carbon-components-svelte/src/FileUploader/FileUploaderItem.svelte", + "classes": [ + ".bx--file__selected-file", + ".bx--file__selected-file--invalid", + ".bx--file__selected-file--md", + ".bx--file__selected-file--sm", + ".bx--file-filename", + ".bx--file__state-container", + ".bx--form-requirement", + ".bx--form-requirement__title", + ".bx--form-requirement__supplement" + ] + }, + "FileUploaderSkeleton": { + "path": "carbon-components-svelte/src/FileUploader/FileUploaderSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label-description" + ] + }, + "FluidForm": { + "path": "carbon-components-svelte/src/FluidForm/FluidForm.svelte", + "classes": [ + ".bx--form--fluid" + ] + }, + "Form": { + "path": "carbon-components-svelte/src/Form/Form.svelte", + "classes": [ + ".bx--form" + ] + }, + "FormGroup": { + "path": "carbon-components-svelte/src/FormGroup/FormGroup.svelte", + "classes": [ + ".bx--fieldset", + ".bx--fieldset--no-margin", + ".bx--label", + ".bx--form__requirement" + ] + }, + "FormItem": { + "path": "carbon-components-svelte/src/FormItem/FormItem.svelte", + "classes": [ + ".bx--form-item" + ] + }, + "FormLabel": { + "path": "carbon-components-svelte/src/FormLabel/FormLabel.svelte", + "classes": [ + ".bx--label" + ] + }, + "Grid": { + "path": "carbon-components-svelte/src/Grid/Grid.svelte", + "classes": [ + ".bx--grid", + ".bx--grid--condensed", + ".bx--grid--narrow", + ".bx--grid--full-width", + ".bx--no-gutter", + ".bx--no-gutter--left", + ".bx--no-gutter--right", + ".bx--row-padding" + ] + }, + "Header": { + "path": "carbon-components-svelte/src/UIShell/Header.svelte", + "classes": [ + ".bx--header", + ".bx--header__name", + ".bx--header__name--prefix" + ] + }, + "HeaderAction": { + "path": "carbon-components-svelte/src/UIShell/HeaderAction.svelte", + "classes": [ + ".bx--header__action", + ".bx--header__action--active", + ".bx--header__action--text", + ".bx--header__action-text", + ".bx--header-panel", + ".bx--header-panel--expanded", + ".bx--header__action--text", + ".bx--header__action-text" + ] + }, + "HeaderActionLink": { + "path": "carbon-components-svelte/src/UIShell/HeaderActionLink.svelte", + "classes": [ + ".bx--header__action", + ".bx--header__action--active", + ".bx--header__action" + ] + }, + "HeaderGlobalAction": { + "path": "carbon-components-svelte/src/UIShell/HeaderGlobalAction.svelte", + "classes": [ + ".bx--header__action", + ".bx--header__action--active" + ] + }, + "HeaderNav": { + "path": "carbon-components-svelte/src/UIShell/HeaderNav.svelte", + "classes": [ + ".bx--header__nav", + ".bx--header__menu-bar" + ] + }, + "HeaderNavItem": { + "path": "carbon-components-svelte/src/UIShell/HeaderNavItem.svelte", + "classes": [ + ".bx--header__menu-item", + ".bx--text-truncate--end" + ] + }, + "HeaderNavMenu": { + "path": "carbon-components-svelte/src/UIShell/HeaderNavMenu.svelte", + "classes": [ + ".bx--header__submenu", + ".bx--header__submenu--current", + ".bx--header__menu-item", + ".bx--header__menu-title", + ".bx--header__menu-arrow", + ".bx--header__menu" + ] + }, + "HeaderPanelDivider": { + "path": "carbon-components-svelte/src/UIShell/HeaderPanelDivider.svelte", + "classes": [ + ".bx--header-panel-divider", + ".bx--switcher__item--divider", + ".bx--header-panel-divider" + ] + }, + "HeaderPanelLink": { + "path": "carbon-components-svelte/src/UIShell/HeaderPanelLink.svelte", + "classes": [ + ".bx--switcher__item", + ".bx--switcher__item-link" + ] + }, + "HeaderPanelLinks": { + "path": "carbon-components-svelte/src/UIShell/HeaderPanelLinks.svelte", + "classes": [ + ".bx--switcher__item" + ] + }, + "HeaderSearch": { + "path": "carbon-components-svelte/src/UIShell/HeaderSearch.svelte", + "classes": [ + ".bx--header__search", + ".bx--header__search--active", + ".bx--header__search-label", + ".bx--header__search-menu", + ".bx--header-search-button", + ".bx--header__action", + ".bx--header-search-button--disabled", + ".bx--header__search-input", + ".bx--header-search-button--hidden", + ".bx--header-search-menu", + ".bx--header-search-menu-item", + ".bx--header-search-menu-item--selected", + ".bx--header-search-menu-description", + ".bx--header__search-label", + ".bx--header__search", + ".bx--header__search:not(.bx--header__search--active)", + ".bx--header__search.bx--header__search--active", + ".bx--header__search-menu", + ".bx--header__search-input", + ".bx--header__search-input:not(.bx--header__search--active)", + ".bx--header-search-button", + ".bx--header-search-button--disabled", + ".bx--header-search-button:hover", + ".bx--header-search-button--hidden", + ".bx--header-search-menu", + ".bx--header-search-menu-item", + ".bx--header-search-menu-item--selected", + ".bx--header-search-menu-item:hover", + ".bx--header-search-menu-description" + ] + }, + "HeaderUtilities": { + "path": "carbon-components-svelte/src/UIShell/HeaderUtilities.svelte", + "classes": [ + ".bx--header__global" + ] + }, + "ImageLoader": { + "path": "carbon-components-svelte/src/ImageLoader/ImageLoader.svelte", + "classes": [] + }, + "InlineLoading": { + "path": "carbon-components-svelte/src/InlineLoading/InlineLoading.svelte", + "classes": [ + ".bx--inline-loading", + ".bx--inline-loading__animation", + ".bx--inline-loading--error", + ".bx--inline-loading__checkmark-container", + ".bx--inline-loading__text" + ] + }, + "InlineNotification": { + "path": "carbon-components-svelte/src/Notification/InlineNotification.svelte", + "classes": [ + ".bx--inline-notification", + ".bx--inline-notification--low-contrast", + ".bx--inline-notification--hide-close-button", + ".bx--inline-notification--error", + ".bx--inline-notification--info", + ".bx--inline-notification--info-square", + ".bx--inline-notification--success", + ".bx--inline-notification--warning", + ".bx--inline-notification--warning-alt", + ".bx--inline-notification__details", + ".bx--inline-notification__text-wrapper", + ".bx--inline-notification__title", + ".bx--inline-notification__subtitle" + ] + }, + "Link": { + "path": "carbon-components-svelte/src/Link/Link.svelte", + "classes": [ + ".bx--link", + ".bx--link--disabled", + ".bx--link--inline", + ".bx--link--visited", + ".bx--link__icon", + ".bx--link--sm", + ".bx--link--lg" + ] + }, + "ListBox": { + "path": "carbon-components-svelte/src/ListBox/ListBox.svelte", + "classes": [ + ".bx--list-box", + ".bx--list-box--sm", + ".bx--list-box--xl", + ".bx--list-box--inline", + ".bx--list-box--disabled", + ".bx--list-box--expanded", + ".bx--list-box--light", + ".bx--list-box--warning", + ".bx--form-requirement" + ] + }, + "ListBoxField": { + "path": "carbon-components-svelte/src/ListBox/ListBoxField.svelte", + "classes": [ + ".bx--list-box__field" + ] + }, + "ListBoxMenu": { + "path": "carbon-components-svelte/src/ListBox/ListBoxMenu.svelte", + "classes": [ + ".bx--list-box__menu" + ] + }, + "ListBoxMenuIcon": { + "path": "carbon-components-svelte/src/ListBox/ListBoxMenuIcon.svelte", + "classes": [ + ".bx--list-box__menu-icon", + ".bx--list-box__menu-icon--open" + ] + }, + "ListBoxMenuItem": { + "path": "carbon-components-svelte/src/ListBox/ListBoxMenuItem.svelte", + "classes": [ + ".bx--list-box__menu-item", + ".bx--list-box__menu-item--active", + ".bx--list-box__menu-item--highlighted", + ".bx--list-box__menu-item__option" + ] + }, + "ListBoxSelection": { + "path": "carbon-components-svelte/src/ListBox/ListBoxSelection.svelte", + "classes": [ + ".bx--tag", + ".bx--tag--filter", + ".bx--tag--high-contrast", + ".bx--tag--disabled", + ".bx--tag__label", + ".bx--tag__close-icon", + ".bx--list-box__selection", + ".bx--list-box__selection--multi" + ] + }, + "ListItem": { + "path": "carbon-components-svelte/src/ListItem/ListItem.svelte", + "classes": [ + ".bx--list__item" + ] + }, + "Loading": { + "path": "carbon-components-svelte/src/Loading/Loading.svelte", + "classes": [ + ".bx--loading-overlay", + ".bx--loading-overlay--stop", + ".bx--loading", + ".bx--loading--small", + ".bx--loading--stop", + ".bx--loading__svg", + ".bx--loading__background", + ".bx--loading__stroke" + ] + }, + "LocalStorage": { + "path": "carbon-components-svelte/src/LocalStorage/LocalStorage.svelte", + "classes": [] + }, + "Modal": { + "path": "carbon-components-svelte/src/Modal/Modal.svelte", + "classes": [ + ".bx--modal", + ".bx--modal-tall", + ".is-visible", + ".bx--modal--danger", + ".bx--modal-container", + ".bx--modal-container--xs", + ".bx--modal-container--sm", + ".bx--modal-container--lg", + ".bx--modal-header", + ".bx--modal-close", + ".bx--modal-close__icon", + ".bx--modal-header__label", + ".bx--modal-header__heading", + ".bx--modal-content", + ".bx--modal-content--with-form", + ".bx--modal-scroll-content", + ".bx--modal-content--overflow-indicator", + ".bx--modal-footer", + ".bx--modal-footer--three-button", + ".bx--modal-header__label--modal-", + ".bx--modal-header__heading--modal-", + ".bx--modal-body--" + ] + }, + "ModalBody": { + "path": "carbon-components-svelte/src/ComposedModal/ModalBody.svelte", + "classes": [ + ".bx--modal-content", + ".bx--modal-content--with-form", + ".bx--modal-scroll-content", + ".bx--modal-content--overflow-indicator" + ] + }, + "ModalFooter": { + "path": "carbon-components-svelte/src/ComposedModal/ModalFooter.svelte", + "classes": [ + ".bx--modal-footer", + ".bx--modal-footer--three-button" + ] + }, + "ModalHeader": { + "path": "carbon-components-svelte/src/ComposedModal/ModalHeader.svelte", + "classes": [ + ".bx--modal-header", + ".bx--modal-header__label", + ".bx--type-delta", + ".bx--modal-header__heading", + ".bx--type-beta", + ".bx--modal-close", + ".bx--modal-close__icon" + ] + }, + "MultiSelect": { + "path": "carbon-components-svelte/src/MultiSelect/MultiSelect.svelte", + "classes": [ + ".bx--multi-select__wrapper", + ".bx--list-box__wrapper", + ".bx--multi-select__wrapper--inline", + ".bx--list-box__wrapper--inline", + ".bx--multi-select__wrapper--inline--invalid", + ".bx--label", + ".bx--label--disabled", + ".bx--visually-hidden", + ".bx--multi-select", + ".bx--list-box--up", + ".bx--combo-box", + ".bx--multi-select--filterable", + ".bx--multi-select--invalid", + ".bx--multi-select--inline", + ".bx--multi-select--selected", + ".bx--list-box__invalid-icon", + ".bx--list-box__invalid-icon--warning", + ".bx--text-input", + ".bx--text-input--empty", + ".bx--text-input--light", + ".bx--list-box__label", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled" + ] + }, + "NotificationActionButton": { + "path": "carbon-components-svelte/src/Notification/NotificationActionButton.svelte", + "classes": [ + ".bx--inline-notification__action-button" + ] + }, + "NotificationButton": { + "path": "carbon-components-svelte/src/Notification/NotificationButton.svelte", + "classes": [ + ".bx--toast-notification__close-button", + ".bx--inline-notification__close-button", + ".bx--toast-notification__close-icon", + ".bx--inline-notification__close-icon" + ] + }, + "NotificationIcon": { + "path": "carbon-components-svelte/src/Notification/NotificationIcon.svelte", + "classes": [ + ".bx--toast-notification__icon", + ".bx--inline-notification__icon" + ] + }, + "NumberInput": { + "path": "carbon-components-svelte/src/NumberInput/NumberInput.svelte", + "classes": [ + ".bx--form-item", + ".bx--number", + ".bx--number--helpertext", + ".bx--number--readonly", + ".bx--number--light", + ".bx--number--nolabel", + ".bx--number--nosteppers", + ".bx--number--sm", + ".bx--number--xl", + ".bx--label", + ".bx--label--disabled", + ".bx--visually-hidden", + ".bx--number__input-wrapper", + ".bx--number__input-wrapper--warning", + ".bx--text-input__readonly-icon", + ".bx--number__invalid", + ".bx--number__invalid--warning", + ".bx--number__controls", + ".bx--number__control-btn", + ".down-icon", + ".bx--number__rule-divider", + ".up-icon", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled", + ".bx--form-requirement" + ] + }, + "NumberInputSkeleton": { + "path": "carbon-components-svelte/src/NumberInput/NumberInputSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--skeleton", + ".bx--number" + ] + }, + "OrderedList": { + "path": "carbon-components-svelte/src/OrderedList/OrderedList.svelte", + "classes": [ + ".bx--list--ordered", + ".bx--list--ordered--native", + ".bx--list--nested", + ".bx--list--expressive" + ] + }, + "OutboundLink": { + "path": "carbon-components-svelte/src/Link/OutboundLink.svelte", + "classes": [] + }, + "OverflowMenu": { + "path": "carbon-components-svelte/src/OverflowMenu/OverflowMenu.svelte", + "classes": [ + ".bx--overflow-menu", + ".bx--overflow-menu--open", + ".bx--overflow-menu--light", + ".bx--overflow-menu--sm", + ".bx--overflow-menu--xl", + ".bx--overflow-menu__icon", + ".bx--overflow-menu-options", + ".bx--overflow-menu--flip", + ".bx--overflow-menu-options--open", + ".bx--overflow-menu-options--light", + ".bx--overflow-menu-options--sm", + ".bx--overflow-menu-options--xl", + ".bx--breadcrumb-menu-options", + ".bx--overflow-menu-options.bx--overflow-menu-options:after {\n width:" + ] + }, + "OverflowMenuItem": { + "path": "carbon-components-svelte/src/OverflowMenu/OverflowMenuItem.svelte", + "classes": [ + ".bx--overflow-menu-options__option", + ".bx--overflow-menu--divider", + ".bx--overflow-menu-options__option--danger", + ".bx--overflow-menu-options__option--disabled", + ".bx--overflow-menu-options__option-content", + ".bx--overflow-menu-options__btn" + ] + }, + "Pagination": { + "path": "carbon-components-svelte/src/Pagination/Pagination.svelte", + "classes": [ + ".bx--pagination", + ".bx--pagination__left", + ".bx--pagination__text", + ".bx--select__item-count", + ".bx--pagination__right", + ".bx--select__page-number", + ".bx--pagination__button", + ".bx--pagination__button--backward", + ".bx--pagination__button--no-index", + ".bx--pagination__button--forward" + ] + }, + "PaginationNav": { + "path": "carbon-components-svelte/src/PaginationNav/PaginationNav.svelte", + "classes": [ + ".bx--pagination-nav", + ".bx--pagination-nav__list", + ".bx--pagination-nav__list-item", + ".bx--pagination-nav__accessibility-label" + ] + }, + "PaginationSkeleton": { + "path": "carbon-components-svelte/src/Pagination/PaginationSkeleton.svelte", + "classes": [ + ".bx--pagination", + ".bx--skeleton", + ".bx--pagination__left", + ".bx--pagination__right", + ".bx--pagination--inline" + ] + }, + "PasswordInput": { + "path": "carbon-components-svelte/src/TextInput/PasswordInput.svelte", + "classes": [ + ".bx--form-item", + ".bx--text-input-wrapper", + ".bx--password-input-wrapper", + ".bx--text-input-wrapper--light", + ".bx--text-input-wrapper--inline", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--label--inline", + ".bx--label--inline--sm", + ".bx--label--inline--xl", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled", + ".bx--form__helper-text--inline", + ".bx--text-input__field-outer-wrapper", + ".bx--text-input__field-outer-wrapper--inline", + ".bx--text-input__field-wrapper", + ".bx--text-input__field-wrapper--warning", + ".bx--text-input__invalid-icon", + ".bx--text-input__invalid-icon--warning", + ".bx--text-input", + ".bx--password-input", + ".bx--text-input--light", + ".bx--text-input--invalid", + ".bx--text-input--warning", + ".bx--text-input--sm", + ".bx--text-input--xl", + ".bx--text-input__divider", + ".bx--form-requirement", + ".bx--text-input--password__visibility__toggle", + ".bx--btn", + ".bx--btn--icon-only", + ".bx--btn--disabled", + ".bx--tooltip__trigger", + ".bx--tooltip--a11y", + ".bx--tooltip--top", + ".bx--tooltip--right", + ".bx--tooltip--bottom", + ".bx--tooltip--left", + ".bx--tooltip--align-start", + ".bx--tooltip--align-center", + ".bx--tooltip--align-end", + ".bx--assistive-text", + ".bx--icon-visibility-off", + ".bx--icon-visibility-on" + ] + }, + "Popover": { + "path": "carbon-components-svelte/src/Popover/Popover.svelte", + "classes": [ + ".bx--popover", + ".bx--popover--caret", + ".bx--popover--light", + ".bx--popover--high-contrast", + ".bx--popover--top", + ".bx--popover--top-left", + ".bx--popover--top-right", + ".bx--popover--bottom", + ".bx--popover--bottom-left", + ".bx--popover--bottom-right", + ".bx--popover--left", + ".bx--popover--left-bottom", + ".bx--popover--left-top", + ".bx--popover--right", + ".bx--popover--right-bottom", + ".bx--popover--right-top", + ".bx--popover--open", + ".bx--popover--relative", + ".bx--popover-contents" + ] + }, + "ProgressBar": { + "path": "carbon-components-svelte/src/ProgressBar/ProgressBar.svelte", + "classes": [ + ".bx--progress-bar", + ".bx--progress-bar--indeterminate", + ".bx--progress-bar--big", + ".bx--progress-bar--small", + ".bx--progress-bar--inline", + ".bx--progress-bar--indented", + ".bx--progress-bar--error", + ".bx--progress-bar--finished", + ".bx--progress-bar__label", + ".bx--visually-hidden", + ".bx--progress-bar__status-icon", + ".bx--progress-bar__track", + ".bx--progress-bar__bar", + ".bx--progress-bar__helper-text" + ] + }, + "ProgressIndicator": { + "path": "carbon-components-svelte/src/ProgressIndicator/ProgressIndicator.svelte", + "classes": [ + ".bx--progress", + ".bx--progress--vertical", + ".bx--progress--space-equal" + ] + }, + "ProgressIndicatorSkeleton": { + "path": "carbon-components-svelte/src/ProgressIndicator/ProgressIndicatorSkeleton.svelte", + "classes": [ + ".bx--progress", + ".bx--progress--vertical", + ".bx--skeleton", + ".bx--progress-step", + ".bx--progress-step--incomplete", + ".bx--progress-step-button", + ".bx--progress-step-button--unclickable", + ".bx--progress-label", + ".bx--progress-line" + ] + }, + "ProgressStep": { + "path": "carbon-components-svelte/src/ProgressIndicator/ProgressStep.svelte", + "classes": [ + ".bx--progress-step", + ".bx--progress-step--current", + ".bx--progress-step--complete", + ".bx--progress-step--incomplete", + ".bx--progress-step--disabled", + ".bx--progress-step-button", + ".bx--progress-step-button--unclickable", + ".bx--progress__warning", + ".bx--progress-text", + ".bx--progress-label", + ".bx--progress-optional", + ".bx--progress-line" + ] + }, + "RadioButton": { + "path": "carbon-components-svelte/src/RadioButton/RadioButton.svelte", + "classes": [ + ".bx--radio-button-wrapper", + ".bx--radio-button-wrapper--label-left", + ".bx--radio-button", + ".bx--radio-button__label", + ".bx--radio-button__appearance", + ".bx--visually-hidden" + ] + }, + "RadioButtonGroup": { + "path": "carbon-components-svelte/src/RadioButtonGroup/RadioButtonGroup.svelte", + "classes": [ + ".bx--form-item", + ".bx--radio-button-group", + ".bx--radio-button-group--vertical", + ".bx--radio-button-group--label-left", + ".bx--radio-button-group--label-right", + ".bx--label", + ".bx--visually-hidden" + ] + }, + "RadioButtonSkeleton": { + "path": "carbon-components-svelte/src/RadioButton/RadioButtonSkeleton.svelte", + "classes": [ + ".bx--radio-button-wrapper", + ".bx--radio-button", + ".bx--skeleton", + ".bx--radio-button__label" + ] + }, + "RadioTile": { + "path": "carbon-components-svelte/src/Tile/RadioTile.svelte", + "classes": [ + ".bx--tile-input", + ".bx--tile", + ".bx--tile--selectable", + ".bx--tile--is-selected", + ".bx--tile--light", + ".bx--tile--disabled", + ".bx--tile__checkmark", + ".bx--tile-content" + ] + }, + "RecursiveList": { + "path": "carbon-components-svelte/src/RecursiveList/RecursiveList.svelte", + "classes": [] + }, + "Row": { + "path": "carbon-components-svelte/src/Grid/Row.svelte", + "classes": [ + ".bx--row", + ".bx--row--condensed", + ".bx--row--narrow", + ".bx--no-gutter", + ".bx--no-gutter--left", + ".bx--no-gutter--right", + ".bx--row-padding" + ] + }, + "Search": { + "path": "carbon-components-svelte/src/Search/Search.svelte", + "classes": [ + ".bx--search", + ".bx--search--light", + ".bx--search--disabled", + ".bx--search--sm", + ".bx--search--lg", + ".bx--search--xl", + ".bx--search--expandable", + ".bx--search--expanded", + ".bx--search-magnifier", + ".bx--search-magnifier-icon", + ".bx--label", + ".bx--search-input", + ".bx--search-close", + ".bx--search-close--hidden" + ] + }, + "SearchSkeleton": { + "path": "carbon-components-svelte/src/Search/SearchSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--search--sm", + ".bx--search--lg", + ".bx--search--xl", + ".bx--label", + ".bx--search-input" + ] + }, + "Select": { + "path": "carbon-components-svelte/src/Select/Select.svelte", + "classes": [ + ".bx--form-item", + ".bx--select", + ".bx--select--inline", + ".bx--select--light", + ".bx--select--invalid", + ".bx--select--disabled", + ".bx--select--warning", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--select-input--inline__wrapper", + ".bx--select-input__wrapper", + ".bx--select-input", + ".bx--select-input--sm", + ".bx--select-input--xl", + ".bx--select__arrow", + ".bx--select__invalid-icon", + ".bx--form-requirement", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled", + ".bx--select__invalid-icon--warning" + ] + }, + "SelectableTile": { + "path": "carbon-components-svelte/src/Tile/SelectableTile.svelte", + "classes": [ + ".bx--tile-input", + ".bx--tile", + ".bx--tile--selectable", + ".bx--tile--is-selected", + ".bx--tile--light", + ".bx--tile--disabled", + ".bx--tile__checkmark", + ".bx--tile-content" + ] + }, + "SelectItem": { + "path": "carbon-components-svelte/src/Select/SelectItem.svelte", + "classes": [ + ".bx--select-option" + ] + }, + "SelectItemGroup": { + "path": "carbon-components-svelte/src/Select/SelectItemGroup.svelte", + "classes": [ + ".bx--select-optgroup" + ] + }, + "SelectSkeleton": { + "path": "carbon-components-svelte/src/Select/SelectSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--skeleton", + ".bx--select", + ".bx--select-input" + ] + }, + "SideNav": { + "path": "carbon-components-svelte/src/UIShell/SideNav.svelte", + "classes": [ + ".bx--side-nav__overlay", + ".bx--side-nav__overlay-active", + ".bx--side-nav__navigation", + ".bx--side-nav", + ".bx--side-nav--ux", + ".bx--side-nav--expanded", + ".bx--side-nav--collapsed", + ".bx--side-nav--rail" + ] + }, + "SideNavDivider": { + "path": "carbon-components-svelte/src/UIShell/SideNavDivider.svelte", + "classes": [ + ".bx--side-nav__divider" + ] + }, + "SideNavItems": { + "path": "carbon-components-svelte/src/UIShell/SideNavItems.svelte", + "classes": [ + ".bx--side-nav__items" + ] + }, + "SideNavLink": { + "path": "carbon-components-svelte/src/UIShell/SideNavLink.svelte", + "classes": [ + ".bx--side-nav__item", + ".bx--side-nav__link", + ".bx--side-nav__link--current", + ".bx--side-nav__icon", + ".bx--side-nav__icon--small", + ".bx--side-nav__link-text" + ] + }, + "SideNavMenu": { + "path": "carbon-components-svelte/src/UIShell/SideNavMenu.svelte", + "classes": [ + ".bx--side-nav__item", + ".bx--side-nav__item--icon", + ".bx--side-nav__submenu", + ".bx--side-nav__icon", + ".bx--side-nav__submenu-title", + ".bx--side-nav__icon--small", + ".bx--side-nav__submenu-chevron", + ".bx--side-nav__menu" + ] + }, + "SideNavMenuItem": { + "path": "carbon-components-svelte/src/UIShell/SideNavMenuItem.svelte", + "classes": [ + ".bx--side-nav__menu-item", + ".bx--side-nav__link", + ".bx--side-nav__link-text" + ] + }, + "SkeletonPlaceholder": { + "path": "carbon-components-svelte/src/SkeletonPlaceholder/SkeletonPlaceholder.svelte", + "classes": [ + ".bx--skeleton__placeholder" + ] + }, + "SkeletonText": { + "path": "carbon-components-svelte/src/SkeletonText/SkeletonText.svelte", + "classes": [ + ".bx--skeleton__text", + ".bx--skeleton__heading" + ] + }, + "SkipToContent": { + "path": "carbon-components-svelte/src/UIShell/SkipToContent.svelte", + "classes": [ + ".bx--skip-to-content" + ] + }, + "Slider": { + "path": "carbon-components-svelte/src/Slider/Slider.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--label--disabled", + ".bx--visually-hidden", + ".bx--slider-container", + ".bx--slider__range-label", + ".bx--slider", + ".bx--slider--disabled", + ".bx--slider__thumb", + ".bx--slider__track", + ".bx--slider__filled-track", + ".bx--text-input", + ".bx--slider-text-input", + ".bx--text-input--light", + ".bx--text-input--invalid" + ] + }, + "SliderSkeleton": { + "path": "carbon-components-svelte/src/Slider/SliderSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--skeleton", + ".bx--slider-container", + ".bx--slider__range-label", + ".bx--slider", + ".bx--slider__track", + ".bx--slider__filled-track", + ".bx--slider__thumb" + ] + }, + "StructuredList": { + "path": "carbon-components-svelte/src/StructuredList/StructuredList.svelte", + "classes": [ + ".bx--structured-list", + ".bx--structured-list--selection", + ".bx--structured-list--condensed", + ".bx--structured-list--flush" + ] + }, + "StructuredListBody": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListBody.svelte", + "classes": [ + ".bx--structured-list-tbody" + ] + }, + "StructuredListCell": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListCell.svelte", + "classes": [ + ".bx--structured-list-th", + ".bx--structured-list-td", + ".bx--structured-list-content--nowrap" + ] + }, + "StructuredListHead": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListHead.svelte", + "classes": [ + ".bx--structured-list-thead" + ] + }, + "StructuredListInput": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListInput.svelte", + "classes": [ + ".bx--structured-list-input" + ] + }, + "StructuredListRow": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListRow.svelte", + "classes": [ + ".bx--structured-list-row", + ".bx--structured-list-row--header-row" + ] + }, + "StructuredListSkeleton": { + "path": "carbon-components-svelte/src/StructuredList/StructuredListSkeleton.svelte", + "classes": [ + ".bx--skeleton", + ".bx--structured-list", + ".bx--structured-list-thead", + ".bx--structured-list-row", + ".bx--structured-list-row--header-row", + ".bx--structured-list-th", + ".bx--structured-list-tbody", + ".bx--structured-list-td" + ] + }, + "Switch": { + "path": "carbon-components-svelte/src/ContentSwitcher/Switch.svelte", + "classes": [ + ".bx--content-switcher-btn", + ".bx--content-switcher--selected", + ".bx--content-switcher__label" + ] + }, + "Tab": { + "path": "carbon-components-svelte/src/Tabs/Tab.svelte", + "classes": [ + ".bx--tabs__nav-item", + ".bx--tabs__nav-item--disabled", + ".bx--tabs__nav-item--selected", + ".bx--tabs__nav-link" + ] + }, + "TabContent": { + "path": "carbon-components-svelte/src/Tabs/TabContent.svelte", + "classes": [ + ".bx--tab-content" + ] + }, + "Table": { + "path": "carbon-components-svelte/src/DataTable/Table.svelte", + "classes": [ + ".bx--data-table_inner-container", + ".bx--data-table", + ".bx--data-table--compact", + ".bx--data-table--short", + ".bx--data-table--tall", + ".bx--data-table--md", + ".bx--data-table--sort", + ".bx--data-table--zebra", + ".bx--data-table--static", + ".bx--data-table--sticky-header" + ] + }, + "TableBody": { + "path": "carbon-components-svelte/src/DataTable/TableBody.svelte", + "classes": [] + }, + "TableCell": { + "path": "carbon-components-svelte/src/DataTable/TableCell.svelte", + "classes": [] + }, + "TableContainer": { + "path": "carbon-components-svelte/src/DataTable/TableContainer.svelte", + "classes": [ + ".bx--data-table-container", + ".bx--data-table-container--static", + ".bx--data-table--max-width", + ".bx--data-table-header", + ".bx--data-table-header__title", + ".bx--data-table-header__description" + ] + }, + "TableHead": { + "path": "carbon-components-svelte/src/DataTable/TableHead.svelte", + "classes": [] + }, + "TableHeader": { + "path": "carbon-components-svelte/src/DataTable/TableHeader.svelte", + "classes": [ + ".bx--table-sort", + ".bx--table-sort--active", + ".bx--table-sort--ascending", + ".bx--table-header-label", + ".bx--table-sort__icon", + ".bx--table-sort__icon-unsorted" + ] + }, + "TableRow": { + "path": "carbon-components-svelte/src/DataTable/TableRow.svelte", + "classes": [] + }, + "Tabs": { + "path": "carbon-components-svelte/src/Tabs/Tabs.svelte", + "classes": [ + ".bx--tabs", + ".bx--tabs--container", + ".bx--tabs-trigger", + ".bx--tabs-trigger-text", + ".bx--tabs__nav", + ".bx--tabs__nav--hidden" + ] + }, + "TabsSkeleton": { + "path": "carbon-components-svelte/src/Tabs/TabsSkeleton.svelte", + "classes": [ + ".bx--tabs", + ".bx--skeleton", + ".bx--tabs--scrollable", + ".bx--tabs--scrollable--container", + ".bx--tabs--scrollable__nav", + ".bx--tabs--scrollable__nav-item", + ".bx--tabs__nav-link" + ] + }, + "Tag": { + "path": "carbon-components-svelte/src/Tag/Tag.svelte", + "classes": [ + ".bx--tag", + ".bx--tag--disabled", + ".bx--tag--filter", + ".bx--tag--sm", + ".bx--tag--red", + ".bx--tag--magenta", + ".bx--tag--purple", + ".bx--tag--blue", + ".bx--tag--cyan", + ".bx--tag--teal", + ".bx--tag--green", + ".bx--tag--gray", + ".bx--tag--cool-gray", + ".bx--tag--warm-gray", + ".bx--tag--high-contrast", + ".bx--tag--outline", + ".bx--tag__label", + ".bx--tag__close-icon", + ".bx--tag--interactive", + ".bx--tag__custom-icon" + ] + }, + "TagSkeleton": { + "path": "carbon-components-svelte/src/Tag/TagSkeleton.svelte", + "classes": [ + ".bx--tag", + ".bx--tag--sm", + ".bx--skeleton" + ] + }, + "TextArea": { + "path": "carbon-components-svelte/src/TextArea/TextArea.svelte", + "classes": [ + ".bx--form-item", + ".bx--text-area__label-wrapper", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--text-area__wrapper", + ".bx--text-area__invalid-icon", + ".bx--text-area", + ".bx--text-area--light", + ".bx--text-area--invalid", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled", + ".bx--form-requirement" + ] + }, + "TextAreaSkeleton": { + "path": "carbon-components-svelte/src/TextArea/TextAreaSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--skeleton", + ".bx--text-area" + ] + }, + "TextInput": { + "path": "carbon-components-svelte/src/TextInput/TextInput.svelte", + "classes": [ + ".bx--form-item", + ".bx--text-input-wrapper", + ".bx--text-input-wrapper--inline", + ".bx--text-input-wrapper--light", + ".bx--text-input-wrapper--readonly", + ".bx--text-input__label-helper-wrapper", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--label--inline", + ".bx--label--inline--sm", + ".bx--label--inline--xl", + ".bx--form__helper-text", + ".bx--form__helper-text--disabled", + ".bx--form__helper-text--inline", + ".bx--label--inline-sm", + ".bx--label--inline-xl", + ".bx--text-input__field-outer-wrapper", + ".bx--text-input__field-outer-wrapper--inline", + ".bx--text-input__field-wrapper", + ".bx--text-input__field-wrapper--warning", + ".bx--text-input__readonly-icon", + ".bx--text-input__invalid-icon", + ".bx--text-input__invalid-icon--warning", + ".bx--text-input", + ".bx--text-input--light", + ".bx--text-input--invalid", + ".bx--text-input--warning", + ".bx--text-input--sm", + ".bx--text-input--xl", + ".bx--text-input__divider", + ".bx--form-requirement" + ] + }, + "TextInputSkeleton": { + "path": "carbon-components-svelte/src/TextInput/TextInputSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--label", + ".bx--skeleton", + ".bx--text-input" + ] + }, + "Theme": { + "path": "carbon-components-svelte/src/Theme/Theme.svelte", + "classes": [] + }, + "Tile": { + "path": "carbon-components-svelte/src/Tile/Tile.svelte", + "classes": [ + ".bx--tile", + ".bx--tile--light" + ] + }, + "TileGroup": { + "path": "carbon-components-svelte/src/Tile/TileGroup.svelte", + "classes": [ + ".bx--tile-group", + ".bx--label" + ] + }, + "TimePicker": { + "path": "carbon-components-svelte/src/TimePicker/TimePicker.svelte", + "classes": [ + ".bx--form-item", + ".bx--time-picker", + ".bx--time-picker--light", + ".bx--time-picker--invalid", + ".bx--time-picker--sm", + ".bx--time-picker--xl", + ".bx--select--light", + ".bx--time-picker__input", + ".bx--label", + ".bx--visually-hidden", + ".bx--label--disabled", + ".bx--time-picker__input-field", + ".bx--text-input", + ".bx--text-input--light", + ".bx--text-input--invalid", + ".bx--form-requirement" + ] + }, + "TimePickerSelect": { + "path": "carbon-components-svelte/src/TimePicker/TimePickerSelect.svelte", + "classes": [ + ".bx--select", + ".bx--time-picker__select", + ".bx--label", + ".bx--visually-hidden", + ".bx--select-input", + ".bx--select__arrow" + ] + }, + "ToastNotification": { + "path": "carbon-components-svelte/src/Notification/ToastNotification.svelte", + "classes": [ + ".bx--toast-notification", + ".bx--toast-notification--low-contrast", + ".bx--toast-notification--error", + ".bx--toast-notification--info", + ".bx--toast-notification--info-square", + ".bx--toast-notification--success", + ".bx--toast-notification--warning", + ".bx--toast-notification--warning-alt", + ".bx--toast-notification__details", + ".bx--toast-notification__title", + ".bx--toast-notification__subtitle", + ".bx--toast-notification__caption" + ] + }, + "Toggle": { + "path": "carbon-components-svelte/src/Toggle/Toggle.svelte", + "classes": [ + ".bx--form-item", + ".bx--toggle-input", + ".bx--toggle-input--small", + ".bx--toggle-input__label", + ".bx--visually-hidden", + ".bx--toggle__switch", + ".bx--toggle__text--off", + ".bx--toggle__text--on" + ] + }, + "ToggleSkeleton": { + "path": "carbon-components-svelte/src/Toggle/ToggleSkeleton.svelte", + "classes": [ + ".bx--form-item", + ".bx--toggle", + ".bx--toggle--small", + ".bx--skeleton", + ".bx--toggle__label", + ".bx--toggle__label-text", + ".bx--toggle__text--left", + ".bx--toggle__appearance", + ".bx--toggle__text--right" + ] + }, + "Toolbar": { + "path": "carbon-components-svelte/src/DataTable/Toolbar.svelte", + "classes": [ + ".bx--table-toolbar", + ".bx--table-toolbar--small", + ".bx--table-toolbar--normal" + ] + }, + "ToolbarBatchActions": { + "path": "carbon-components-svelte/src/DataTable/ToolbarBatchActions.svelte", + "classes": [ + ".bx--batch-actions", + ".bx--batch-actions--active", + ".bx--batch-summary", + ".bx--batch-summary__para", + ".bx--action-list", + ".bx--batch-summary__cancel" + ] + }, + "ToolbarContent": { + "path": "carbon-components-svelte/src/DataTable/ToolbarContent.svelte", + "classes": [ + ".bx--toolbar-content" + ] + }, + "ToolbarMenu": { + "path": "carbon-components-svelte/src/DataTable/ToolbarMenu.svelte", + "classes": [ + ".bx--toolbar-action", + ".bx--overflow-menu" + ] + }, + "ToolbarMenuItem": { + "path": "carbon-components-svelte/src/DataTable/ToolbarMenuItem.svelte", + "classes": [] + }, + "ToolbarSearch": { + "path": "carbon-components-svelte/src/DataTable/ToolbarSearch.svelte", + "classes": [ + ".bx--toolbar-search-container-active", + ".bx--toolbar-search-container-persistent", + ".bx--toolbar-search-container-expandable", + ".bx--toolbar-search-container-disabled" + ] + }, + "Tooltip": { + "path": "carbon-components-svelte/src/Tooltip/Tooltip.svelte", + "classes": [ + ".bx--tooltip__label", + ".bx--tooltip", + ".bx--tooltip--shown", + ".bx--tooltip--top", + ".bx--tooltip--right", + ".bx--tooltip--bottom", + ".bx--tooltip--left", + ".bx--tooltip--align-center", + ".bx--tooltip--align-start", + ".bx--tooltip--align-end", + ".bx--tooltip__caret", + ".bx--tooltip__content", + ".bx--tooltip__trigger" + ] + }, + "TooltipDefinition": { + "path": "carbon-components-svelte/src/TooltipDefinition/TooltipDefinition.svelte", + "classes": [ + ".bx--tooltip--definition", + ".bx--tooltip--a11y", + ".bx--tooltip__trigger", + ".bx--tooltip__trigger--definition", + ".bx--tooltip--hidden", + ".bx--tooltip--visible", + ".bx--tooltip--top", + ".bx--tooltip--bottom", + ".bx--tooltip--align-start", + ".bx--tooltip--align-center", + ".bx--tooltip--align-end", + ".bx--assistive-text" + ] + }, + "TooltipFooter": { + "path": "carbon-components-svelte/src/Tooltip/TooltipFooter.svelte", + "classes": [ + ".bx--tooltip__footer" + ] + }, + "TooltipIcon": { + "path": "carbon-components-svelte/src/TooltipIcon/TooltipIcon.svelte", + "classes": [ + ".bx--tooltip__trigger", + ".bx--tooltip--a11y", + ".bx--tooltip--hidden", + ".bx--tooltip--top", + ".bx--tooltip--right", + ".bx--tooltip--bottom", + ".bx--tooltip--left", + ".bx--tooltip--align-start", + ".bx--tooltip--align-center", + ".bx--tooltip--align-end", + ".bx--assistive-text" + ] + }, + "TreeView": { + "path": "carbon-components-svelte/src/TreeView/TreeView.svelte", + "classes": [ + ".bx--label", + ".bx--tree", + ".bx--tree--default", + ".bx--tree--compact", + ".li.bx--tree-node:not(.bx--tree-node--disabled)", + ".bx--tree-node--disabled", + ".li.bx--tree-node" + ] + }, + "truncate": { + "path": "carbon-components-svelte/src/Truncate/truncate.js", + "classes": [] + }, + "Truncate": { + "path": "carbon-components-svelte/src/Truncate/Truncate.svelte", + "classes": [ + ".bx--text-truncate--end", + ".bx--text-truncate--front" + ] + }, + "UnorderedList": { + "path": "carbon-components-svelte/src/UnorderedList/UnorderedList.svelte", + "classes": [ + ".bx--list--unordered", + ".bx--list--nested", + ".bx--list--expressive" + ] + } +}); diff --git a/src/constants.ts b/src/constants.ts index 70f182e..389f650 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,19 +1,12 @@ -export const CARBON_SVELTE = { - components: "carbon-components-svelte", - icons: "carbon-icons-svelte", - pictograms: "carbon-pictograms-svelte", -}; +export const enum CarbonSvelte { + Components = "carbon-components-svelte", + Icons = "carbon-icons-svelte", + Pictograms = "carbon-pictograms-svelte", +} -export const LATEST_MAJOR_VERSION = { - [CARBON_SVELTE.components]: "0", - [CARBON_SVELTE.icons]: "11", - [CARBON_SVELTE.pictograms]: "12", -}; +export const RE_EXT_SVELTE = /\.svelte$/; -export const API_COMPONENTS = `src/${CARBON_SVELTE.components}.js`; -export const API_ELEMENTS = "src/carbon-elements.js"; -export const API_ICONS = "src/carbon-icons.js"; -export const API_PICTOGRAMS = "src/carbon-pictograms.js"; +export const RE_EXT_CSS = /\.css$/; -export const EXT_SVELTE = /\.(svelte)$/; -export const EXT_CSS = /\.(css)$/; +// Vite uses the decimal system for file sizes. +export const BITS_DENOM = 1_000; diff --git a/src/extractors/extract-selectors.ts b/src/extractors/extract-selectors.ts deleted file mode 100644 index 99a0d37..0000000 --- a/src/extractors/extract-selectors.ts +++ /dev/null @@ -1,219 +0,0 @@ -import { parse, walk } from "svelte/compiler"; - -interface SelectorMarkup { - type: "Element" | "Attribute" | "Class"; -} - -interface SelectorStyle { - type: "PseudoClassSelector"; - name: "global" | string; -} - -interface SelectorFromIdentifier { - type: "FromIdentifier"; -} - -type Selector = SelectorMarkup | SelectorStyle | SelectorFromIdentifier; - -export type ExtractedSelectors = [string, Selector][]; - -interface NodeClassAttributeMustacheTag { - type: "MustacheTag"; - expression?: { - type: "Identifier"; - name: string; - }; -} - -interface NodeClassAttributeText { - type: "Text"; - data: string; -} - -type NodeClassAttribute = - | NodeClassAttributeMustacheTag - | NodeClassAttributeText; - -interface NodeIdentifierLiteral { - init?: { - type: "Literal"; - value: string; - }; -} - -interface NodeIdentifierCallExpression { - init?: { - type: "CallExpression"; - callee?: { - object?: { - elements?: Array< - | { type: "Literal"; value: string } - | { type: "LogicalExpression"; right?: { value: string } } - >; - }; - }; - }; -} - -type ParentNode = NodeIdentifierLiteral | NodeIdentifierCallExpression; - -interface NodeIdentifier { - type: "Identifier"; - name: string; -} - -interface NodeElement { - type: "Element"; - name: string; -} - -interface NodeAttribute { - type: "Attribute"; - name: string; - value?: NodeClassAttribute[]; -} - -interface NodeClass { - type: "Class"; - name: string; -} - -interface NodePseudoClassSelector { - type: "PseudoClassSelector"; - name: "global" | string; - children: [child?: { value: string }]; -} - -interface NodeLiteral { - type: "Literal"; - value: string; -} - -interface NodeTemplateElement { - type: "TemplateElement"; - value: { raw: string }; -} - -type Node = - | NodeIdentifier - | NodeElement - | NodeAttribute - | NodeClass - | NodePseudoClassSelector - | NodeLiteral - | NodeTemplateElement; - -function toArray(value: any) { - if (typeof value === "string") { - return value.split(/\s+/).map((value) => value.trim()); - } - - return []; -} - -const MARKUP_SELECTOR = ["Element"]; -const CLASS_SELECTOR = ["Attribute", "Class", "FromIdentifier"]; -const STYLE_SELECTOR = ["PseudoClassSelector"]; -const CARBON_PREFIX = /bx--/; - -export function extractSelectors( - template: string, - filename?: string -): ExtractedSelectors { - const ast = parse(template, { filename }); - const selectors: Map = new Map(); - const identifiers: Set = new Set(); - const ids: Map = new Map(); - - walk(ast, { - enter(node: Node, parent: ParentNode) { - if (node.type === "Identifier") { - const id = node.name; - - if (parent.init?.type === "Literal") { - ids.set(id, { value: toArray(parent.init.value) }); - } - - if (parent.init?.type === "CallExpression") { - parent.init.callee?.object?.elements?.forEach((element) => { - if (element.type === "Literal") { - ids.set(id, { value: toArray(element.value) }); - } - - if (element.type === "LogicalExpression" && element.right?.value) { - ids.set(id, { value: toArray(element.right?.value) }); - } - }); - } - } - - if (node.type === "Element") { - //
    - selectors.set(node.name, { type: node.type }); - } - - if (node.type === "Attribute" && node.name === "class") { - // class="c1" - // class="c1 c2" - // class="{c} c1 c2 c3" - node.value?.map((value: NodeClassAttribute) => { - if (value.type === "MustacheTag") { - if (value.expression?.type === "Identifier") { - identifiers.add(value.expression.name); - } - } else if (value.type === "Text") { - value.data - .split(/\s+/) - .filter(Boolean) - .forEach((selector) => - selectors.set(selector, { type: node.type }) - ); - } - }); - } - - // class:directive - if (node.type === "Class") { - selectors.set(node.name, { type: node.type }); - } - - if (node.type === "PseudoClassSelector" && node.name === "global") { - // global selector - // :global(div) {} - node.children[0]?.value.split(",").forEach((selector: string) => { - selectors.set(selector.trim(), { type: node.type, name: node.name }); - }); - } - - if (node.type === "Literal" && CARBON_PREFIX.test(node.value)) { - selectors.set(node.value, { type: "Class" }); - } - - if ( - node.type === "TemplateElement" && - CARBON_PREFIX.test(node.value.raw) - ) { - selectors.set(node.value.raw, { type: "Class" }); - } - }, - }); - - identifiers.forEach((id) => { - if (ids.has(id)) { - ids.get(id)!.value.forEach((value) => { - selectors.set(value, { type: "FromIdentifier" }); - }); - } - }); - - // iterate through all class attribute identifiers - return Array.from(selectors).map((selector) => { - const [value, meta] = selector; - - if (CLASS_SELECTOR.includes(meta.type)) { - return ["." + value, meta]; - } - - return selector; - }); -} diff --git a/src/extractors/index.ts b/src/extractors/index.ts deleted file mode 100644 index 09ef185..0000000 --- a/src/extractors/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./extract-selectors"; diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..fa59a96 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,60 @@ +declare module "svelte/compiler" { + import type { Ast, Element, Text } from "svelte/types/compiler/interfaces"; + + type CustomElement = Omit & T; + + type Literal = CustomElement<{ + type: "Literal"; + value: string; + }>; + + type TemplateElement = CustomElement<{ + type: "TemplateElement"; + value: { raw: string }; + }>; + + type PseudoClassSelector = CustomElement<{ + type: "PseudoClassSelector"; + name: "global" | string; + }>; + + type Class = CustomElement<{ + type: "Class"; + }>; + + type Attribute = CustomElement<{ + type: "Attribute"; + name: string; + value?: Array; + }>; + + type Identifier = CustomElement<{ + type: "Identifier"; + }>; + + type ImportDeclaration = CustomElement<{ + type: "ImportDeclaration"; + source: { value: string }; + specifiers: Array<{ + local: { name: string }; + imported: { name: string }; + }>; + }>; + + type ANode = + | Element + | Literal + | TemplateElement + | PseudoClassSelector + | Class + | Attribute + | Identifier + | ImportDeclaration; + + export function walk( + ast: Ast, + options: { + enter: (node: ANode, parentNode: ANode) => void; + }, + ): void; +} diff --git a/src/index.cjs.ts b/src/index.cjs.ts deleted file mode 100644 index eef2022..0000000 --- a/src/index.cjs.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./preprocessors"; -export * from "./extractors"; -export * from "./plugins/optimize-css.cjs"; -export * from "./presets"; diff --git a/src/index.ts b/src/index.ts index 5a83bd2..7d64e5a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -export * from "./preprocessors"; -export * from "./extractors"; -export * from "./plugins"; -export * from "./presets"; +export { default as OptimizeCssPlugin } from "./plugins/OptimizeCssPlugin"; +export { optimizeCss } from "./plugins/optimize-css"; +export { optimizeImports } from "./preprocessors/optimize-imports"; diff --git a/src/plugins/OptimizeCssPlugin.ts b/src/plugins/OptimizeCssPlugin.ts new file mode 100644 index 0000000..4734582 --- /dev/null +++ b/src/plugins/OptimizeCssPlugin.ts @@ -0,0 +1,75 @@ +import type { Compiler } from "webpack"; +import { isCarbonSvelteImport, isCssFile } from "../utils"; +import { compareDiff } from "./compare-diff"; +import type { OptimizeCssOptions } from "./create-optimized-css"; +import { createOptimizedCss } from "./create-optimized-css"; + +// Webpack plugin to optimize CSS for Carbon Svelte components. +class OptimizeCssPlugin { + private options: OptimizeCssOptions; + + public constructor(options?: OptimizeCssOptions) { + this.options = { + verbose: options?.verbose !== false, + preserveAllIBMFonts: options?.preserveAllIBMFonts === true, + }; + } + + public apply(compiler: Compiler) { + const { + webpack: { + Compilation, + NormalModule, + sources: { RawSource }, + }, + } = compiler; + + compiler.hooks.thisCompilation.tap( + OptimizeCssPlugin.name, + (compilation) => { + const hooks = NormalModule.getCompilationHooks(compilation); + const ids: string[] = []; + + hooks.beforeSnapshot.tap(OptimizeCssPlugin.name, ({ buildInfo }) => { + if (buildInfo?.fileDependencies) { + for (const id of buildInfo.fileDependencies) { + if (isCarbonSvelteImport(id)) { + ids.push(id); + } + } + } + }); + + compilation.hooks.processAssets.tap( + { + name: OptimizeCssPlugin.name, + stage: Compilation.PROCESS_ASSETS_STAGE_DERIVED, + }, + (assets) => { + // Skip processing if no Carbon Svelte imports are found. + if (ids.length === 0) return; + + for (const [id] of Object.entries(assets)) { + if (isCssFile(id)) { + const original_css = assets[id].source(); + const optimized_css = createOptimizedCss( + original_css, + ids, + this.options, + ); + + compilation.updateAsset(id, new RawSource(optimized_css)); + + if (this.options.verbose) { + compareDiff({ original_css, optimized_css, id }); + } + } + } + }, + ); + }, + ); + } +} + +export default OptimizeCssPlugin; diff --git a/src/plugins/compare-diff.ts b/src/plugins/compare-diff.ts new file mode 100644 index 0000000..44c97e5 --- /dev/null +++ b/src/plugins/compare-diff.ts @@ -0,0 +1,45 @@ +import { BITS_DENOM } from "../constants"; + +const formatter = new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }); + +function toHumanReadableSize(size_in_kb: number) { + if (size_in_kb >= BITS_DENOM) { + return formatter.format(size_in_kb / BITS_DENOM) + " MB"; + } + + return formatter.format(size_in_kb) + " kB"; +} + +function percentageDiff(a: number, b: number) { + return formatter.format(((a - b) / a) * 100) + "%"; +} + +function stringSizeInKB(str: string) { + const blob = new Blob([str], { type: "text/plain" }); + return blob.size / BITS_DENOM; +} + +function padIfNeeded(a: string, b: string) { + return a.length > b.length ? a : a.padStart(b.length, " "); +} + +export function compareDiff(props: { + original_css: Uint8Array | Buffer | string; + optimized_css: string; + id: string; +}) { + const { original_css, optimized_css, id } = props; + + const original_size = stringSizeInKB(original_css.toString()); + const optimized_size = stringSizeInKB(optimized_css); + const original = toHumanReadableSize(original_size); + const optimized = toHumanReadableSize(optimized_size); + const original_display = padIfNeeded(original, optimized); + const optimized_display = padIfNeeded(optimized, original); + const diff = percentageDiff(original_size, optimized_size); + + console.log("\n"); + console.log("Optimized", id); + console.log("Before:", original_display); + console.log("After: ", optimized_display, `(-${diff})\n`); +} diff --git a/src/plugins/create-optimized-css.ts b/src/plugins/create-optimized-css.ts new file mode 100644 index 0000000..44186fb --- /dev/null +++ b/src/plugins/create-optimized-css.ts @@ -0,0 +1,126 @@ +import path from "node:path"; +import postcss from "postcss"; +import discardEmpty from "postcss-discard-empty"; +import { components } from "../component-index"; + +export type OptimizeCssOptions = { + /** + * By default, the plugin will print the size + * difference between the original and optimized CSS. + * + * Set to `false` to disable verbose logging. + * @default true + */ + verbose?: boolean; + + /** + * By default, pre-compiled Carbon StyleSheets ship `@font-face` rules + * for all available IBM Plex fonts, many of which are not actually + * used in Carbon Svelte components. + * + * The default behavior is to preserve the following IBM Plex fonts: + * - IBM Plex Sans (300/400/600-weight and normal-font-style rules) + * - IBM Plex Mono (400-weight and normal-font-style rules) + * + * Set to `true` to disable this behavior and + * retain *all* IBM Plex `@font-face` rules. + * @default false + */ + preserveAllIBMFonts?: boolean; +}; + +export function createOptimizedCss( + original_css: Uint8Array | string, + ids: string[], + options?: OptimizeCssOptions, +) { + const preserveAllIBMFonts = options?.preserveAllIBMFonts === true; + + // List of Carbon classes that must be preserved in the CSS + // but that are not referenced in Carbon Svelte components. + const css_allowlist = [".bx--body"]; + + for (const id of ids) { + const { name } = path.parse(id); + + if (name in components) { + css_allowlist.push(...components[name].classes); + } + } + + return postcss([ + { + postcssPlugin: "postcss-plugin:carbon:optimize-css", + Rule(node) { + const selector = node.selector; + + // Ensure that the selector contains a class. + if (selector.includes(".")) { + // Selectors may contain multiple classes, separated by a comma. + const classes = selector.split(",").filter((selectee) => { + const value = selectee.trim() ?? ""; + // Some Carbon classes are prefixed with a tag for higher specificity. + // E.g., a.bx--header + const [, rest] = value.split("."); + return Boolean(rest); + }); + + let remove_rule = true; + + for (const name of classes) { + for (const selector of css_allowlist) { + // If at least one class is in the allowlist, keep the rule. + // This is a simplistic approach and can be further optimized. + if (name.includes(selector)) { + remove_rule = false; + break; + } + } + } + + if (remove_rule) { + node.remove(); + } + } + }, + AtRule(node) { + if (!preserveAllIBMFonts && node.name === "font-face") { + const attributes = { + "font-family": "", + "font-style": "", + "font-weight": "", + }; + + node.walkDecls((decl) => { + switch (decl.prop) { + case "font-family": + attributes["font-family"] = decl.value; + break; + case "font-style": + attributes["font-style"] = decl.value; + break; + case "font-weight": + attributes["font-weight"] = decl.value; + break; + } + }); + + const is_mono = + attributes["font-style"] === "normal" && + attributes["font-family"] === "IBM Plex Mono" && + attributes["font-weight"] === "400"; + + const is_sans = + attributes["font-style"] === "normal" && + attributes["font-family"] === "IBM Plex Sans" && + ["300", "400", "600"].includes(attributes["font-weight"]); + + if (!(is_sans || is_mono)) { + node.remove(); + } + } + }, + }, + discardEmpty(), + ]).process(original_css).css; +} diff --git a/src/plugins/index.ts b/src/plugins/index.ts deleted file mode 100644 index 723533d..0000000 --- a/src/plugins/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./optimize-css"; diff --git a/src/plugins/optimize-css.cjs.ts b/src/plugins/optimize-css.cjs.ts deleted file mode 100644 index e9e09fd..0000000 --- a/src/plugins/optimize-css.cjs.ts +++ /dev/null @@ -1,87 +0,0 @@ -import Rollup from "rollup"; -import sveltePreprocess from "svelte-preprocess"; -import { preprocess } from "svelte/compiler"; -import { extractSelectors, ExtractedSelectors } from "../extractors"; -import { PurgeCSS } from "purgecss"; -import { readFile } from "../utils"; -import { EXT_SVELTE, EXT_CSS } from "../constants"; - -// @ts-ignore -const { typescript } = sveltePreprocess; - -interface OptimizeCssOptions { - safelist: { - standard?: Array; - deep?: RegExp[]; - greedy?: RegExp[]; - }; -} - -export function optimizeCss( - options?: Partial -): Rollup.Plugin { - const selectors: ExtractedSelectors = []; - const standard = [ - "*", - "html", - "body", - /aria-current/, - /^svelte-/, - ...(options?.safelist?.standard ?? []), - ]; - const deep = options?.safelist?.deep ?? []; - const greedy = options?.safelist?.greedy ?? []; - - return { - name: "plugin-optimize-css", - async transform(code, id) { - if (EXT_SVELTE.test(id)) { - const source = await readFile(id, "utf-8"); - const result = await preprocess(source, [typescript()], { - filename: id, - }); - selectors.push(...extractSelectors(result.code, id)); - return { code, map: null }; - } - }, - async generateBundle({}, bundle) { - for (const fileName in bundle) { - const chunkOrAsset = bundle[fileName]; - - if (chunkOrAsset.type === "asset" && EXT_CSS.test(fileName)) { - const content = [...selectors.map((selector) => selector[0] + "{}")]; - const purgeCSSResult = await new PurgeCSS().purge({ - content: [{ raw: content.join(" "), extension: "css" }], - css: [{ raw: chunkOrAsset.source as string }], - keyframes: true, - fontFace: true, - safelist: { - standard, - deep, - greedy: [ - ...greedy, - ...selectors - .filter((selector) => selector[0].endsWith("-")) - .map((selector) => { - if (selector[0][0] === ".") { - return new RegExp(selector[0].slice(1)); - } - - return new RegExp(selector[0]); - }), - ], - }, - }); - - if (purgeCSSResult[0]) { - this.emitFile({ - type: "asset", - fileName, - source: purgeCSSResult[0].css, - }); - } - } - } - }, - }; -} diff --git a/src/plugins/optimize-css.ts b/src/plugins/optimize-css.ts index a5984b9..613e657 100644 --- a/src/plugins/optimize-css.ts +++ b/src/plugins/optimize-css.ts @@ -1,90 +1,41 @@ -import Rollup from "rollup"; -import sveltePreprocess from "svelte-preprocess"; -import { preprocess } from "svelte/compiler"; -import { extractSelectors, ExtractedSelectors } from "../extractors"; -import purgecss from "purgecss"; -import { readFile } from "../utils"; -import { EXT_SVELTE, EXT_CSS } from "../constants"; +import type { Plugin } from "vite"; +import { isCarbonSvelteImport, isCssFile } from "../utils"; +import { compareDiff } from "./compare-diff"; +import type { OptimizeCssOptions } from "./create-optimized-css"; +import { createOptimizedCss } from "./create-optimized-css"; -// @ts-ignore -const { typescript } = sveltePreprocess; - -// @ts-ignore -const { PurgeCSS } = purgecss; - -interface OptimizeCssOptions { - safelist: { - standard?: Array; - deep?: RegExp[]; - greedy?: RegExp[]; - }; -} - -export function optimizeCss( - options?: Partial -): Rollup.Plugin { - const selectors: ExtractedSelectors = []; - const standard = [ - "*", - "html", - "body", - /aria-current/, - /^svelte-/, - ...(options?.safelist?.standard ?? []), - ]; - const deep = options?.safelist?.deep ?? []; - const greedy = options?.safelist?.greedy ?? []; +// Vite plugin (Rollup-compatible) to optimize CSS for Carbon Svelte components. +export const optimizeCss = (options?: OptimizeCssOptions): Plugin => { + const verbose = options?.verbose !== false; + const ids: string[] = []; return { - name: "plugin-optimize-css", - async transform(code, id) { - if (EXT_SVELTE.test(id)) { - const source = await readFile(id, "utf-8"); - const result = await preprocess(source, [typescript()], { - filename: id, - }); - selectors.push(...extractSelectors(result.code, id)); - return { code, map: null }; + name: "vite:carbon:optimize-css", + apply: "build", + enforce: "post", + transform(_, id) { + if (isCarbonSvelteImport(id)) { + ids.push(id); } }, - async generateBundle({}, bundle) { - for (const fileName in bundle) { - const chunkOrAsset = bundle[fileName]; + async generateBundle(_, bundle) { + // Skip processing if no Carbon Svelte imports are found. + if (ids.length === 0) return; + + for (const id in bundle) { + const file = bundle[id]; - if (chunkOrAsset.type === "asset" && EXT_CSS.test(fileName)) { - const content = [...selectors.map((selector) => selector[0] + "{}")]; - const purgeCSSResult = await new PurgeCSS().purge({ - content: [{ raw: content.join(" "), extension: "css" }], - css: [{ raw: chunkOrAsset.source as string }], - keyframes: true, - fontFace: true, - safelist: { - standard, - deep, - greedy: [ - ...greedy, - ...selectors - .filter((selector) => selector[0].endsWith("-")) - .map((selector) => { - if (selector[0][0] === ".") { - return new RegExp(selector[0].slice(1)); - } + if (file.type === "asset" && isCssFile(id)) { + const original_css = file.source; + const optimized_css = createOptimizedCss(original_css, ids, options); - return new RegExp(selector[0]); - }), - ], - }, - }); + file.source = optimized_css; - if (purgeCSSResult[0]) { - this.emitFile({ - type: "asset", - fileName, - source: purgeCSSResult[0].css, - }); + if (verbose) { + compareDiff({ original_css, optimized_css, id }); } } } }, }; -} +}; diff --git a/src/preprocessors/collect-headings.ts b/src/preprocessors/collect-headings.ts deleted file mode 100644 index c2d1e8a..0000000 --- a/src/preprocessors/collect-headings.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; -import { EXT_SVELTE } from "../constants"; -import { NodeText, walkAndReplace } from "../walk-and-replace"; - -/** - * Corresponds to the semantic heading element number - * @example - *

    --> 1 - *

    --> 2 - */ -type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6; - -type Headings = Array<{ id?: string; text: string; level: HeadingLevel }>; - -interface CollectHeadingsOptions { - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test: RegExp; - - /** - * Optional callback to transform the content after extracting all headings - */ - afterCollect: (headings: Headings, content: string) => string; -} - -const ELEMENT_HEADING = /^h(1|2|3|4|5|6)$/; - -export function collectHeadings( - options?: Partial -): Pick { - const test = options?.test ?? EXT_SVELTE; - - return { - markup({ filename, content }) { - if (filename && !/node_modules/.test(filename) && test.test(filename)) { - const headings: Headings = []; - - walkAndReplace({ type: "markup", content, filename }, ({ node }) => { - if (node.type === "Element" && ELEMENT_HEADING.test(node.name)) { - const id = node.attributes.find( - (attribute) => attribute.name === "id" - ); - - headings.push({ - id: Array.isArray(id?.value) ? id!.value[0].raw : undefined, - text: node.children - .flatMap((child) => { - if (child.type === "Element") return child.children; - return child; - }) - .filter((child) => child.type === "Text") - .map((child) => (child as NodeText).raw) - .join(""), - level: Number(node.name.slice(-1)) as HeadingLevel, - }); - } - }); - - content = - options?.afterCollect?.apply(this, [headings, content]) ?? content; - - return { code: content }; - } - - return { code: content }; - }, - }; -} diff --git a/src/preprocessors/elements.ts b/src/preprocessors/elements.ts deleted file mode 100644 index f4f2fe3..0000000 --- a/src/preprocessors/elements.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; -import { - rgba, - rem, - em, - px, - breakpoint, - breakpointDown, - breakpointUp, - breakpoints, - BreakpointName, -} from "@carbon/elements"; -import { TokenTypeStyles, TokenUI, v10_theme } from "../build/build-elements"; -import { MediaFeature, walkAndReplace } from "../walk-and-replace"; -import * as carbonElements from "../carbon-elements"; - -interface PreprocessElementsOptions { - /** - * Specify the Carbon theme - * Setting to "all" will also enable `cssVars` - * @default "white" - */ - theme: v10_theme | "all"; - - /** - * Set to `true` for tokens to be re-written as CSS variables - * Automatically set to `true` if theme is "all" - * @example - * "spacing-05" --> var(--cds-spacing-05) - * "ui-01" --> var(--cds-ui-01) - * @default false - */ - cssVars: boolean; -} - -export type ElementsOptions = Partial; - -type Token = keyof typeof carbonElements.elements.tokens; - -const PROPERTY_ALIAS = { - font: "font", -}; - -const TOKEN_TYPE = { - font: "font", -}; - -const BREAKPOINTS = Object.keys(breakpoints); - -function getMediaFeatureValue(feature: MediaFeature) { - if (feature.value == null) { - if (BREAKPOINTS.includes(feature.name)) { - return breakpoints[feature.name as BreakpointName].width; - } else { - console.warn( - `[carbon:elements] Invalid breakpoint name "${feature.name}"` - ); - - return null; - } - } - - if ("unit" in feature.value) { - return feature.value.value + feature.value.unit; - } -} - -export function elements( - options?: ElementsOptions -): Pick { - const theme = options?.theme ?? "white"; - const cssVars = options?.cssVars === true || theme === "all"; - - return { - style({ filename, content }) { - if (filename && !/node_modules/.test(filename)) { - const code = walkAndReplace( - { type: "style", content, filename }, - ({ node }, replaceContent, getContent) => { - if (node.type === "Rule") { - node.block.children.forEach((child) => { - let operator: string | undefined = undefined; - let operatorValue: string | undefined = undefined; - - const hasOperator = child.value.children.some( - (child, index) => index > 0 && child.type === "Operator" - ); - - if (hasOperator) { - operator = child.value.children.find( - (child) => child.type === "Operator" - )!.value; - - operatorValue = child.value.children.find( - (child) => child.type === "Number" - )?.value; - } - - child.value.children.forEach((childValue) => { - if (childValue.type === "String") { - const token = childValue.value.replace(/(\"|\')/g, ""); - - if ( - token !== undefined && - token in carbonElements.elements.tokens - ) { - const tokenValue = - carbonElements.elements.tokens[token as Token]; - if (child.property in TOKEN_TYPE) { - if ( - (tokenValue as TokenTypeStyles).breakpoints.length > 0 - ) { - // TODO: generate responsive styles - } - - replaceContent( - node, - (tokenValue as TokenTypeStyles).css, - getContent(child) - ); - - return (tokenValue as TokenTypeStyles).css; - } - - if (token in carbonElements.elements.tokens_ui) { - let Value: TokenUI | string; - - if (theme === "all" || cssVars) - Value = `var(--cds-${token})`; - else - Value = - carbonElements.elements.tokens_ui[token as TokenUI][ - theme - ]; - - const oldValue = getContent(child.value); - const newValue = oldValue.replace( - childValue.value, - Value - ); - - replaceContent( - node, - `${child.property}: ${newValue}`, - getContent(child) - ); - - if (theme === "all") return `var(--cds-${token})`; - return carbonElements.elements.tokens_ui[ - token as TokenUI - ][theme]; - } - - const oldValue = getContent(child.value); - - let newValue = oldValue.replace( - childValue.value, - tokenValue as string - ); - - if (hasOperator && operatorValue !== undefined) { - newValue = `calc(${tokenValue} ${operator} ${operatorValue})`; - } - - replaceContent( - node, - `${child.property}: ${newValue}`, - getContent(child) - ); - - return tokenValue; - } - } - - return getContent(childValue); - }); - }); - } - - if (node.type === "Atrule" && node.name === "media") { - const mediaFeatures: MediaFeature[] = []; - - node.prelude.children - .flatMap((child) => child.children ?? []) - .forEach((node) => { - node.children.forEach((child) => { - if (child.type === "MediaFeature") { - mediaFeatures.push(child); - } - }); - }); - - if (mediaFeatures.length === 1) { - const { name, value } = mediaFeatures[0]; - - let featureValue: string = ""; - - if (value != null && "name" in value) { - featureValue = value.name; - } - - if (BREAKPOINTS.includes(featureValue)) { - switch (name) { - case "up": - replaceContent( - node, - `${breakpointUp( - featureValue as BreakpointName - )} ${getContent(node.block)}` - ); - break; - case "down": - replaceContent( - node, - `${breakpointDown( - featureValue as BreakpointName - )} ${getContent(node.block)}` - ); - break; - case "bp": - replaceContent( - node, - `${breakpoint( - featureValue as BreakpointName - )} ${getContent(node.block)}` - ); - break; - } - } else { - console.warn( - `[carbon:elements] Invalid breakpoint name "${name}"` - ); - } - } else { - const firstValue = getMediaFeatureValue(mediaFeatures[0]); - const secondValue = getMediaFeatureValue(mediaFeatures[1]); - - if (firstValue && secondValue) { - replaceContent( - node, - `@media (min-width: ${firstValue}) and (max-width: ${secondValue}) ${getContent( - node.block - )}` - ); - } - } - } - - if (node.type === "Function") { - if (node.name === "rgba") { - const [hex, operator, number] = node.children; - - if (hex.value.length < 6) { - console.warn( - `[carbon:elements] rgba hex value must be six characters. Received "#${hex.value}"` - ); - return; - } - - let opacity = 1; - - if (number !== undefined) { - opacity = Number(number.value); - - if (opacity > 1) { - console.warn( - `[carbon:elements] rgba opacity value cannot be greater than 1. Received ${opacity}` - ); - opacity = 1; - } - - if (opacity < 0) { - console.warn( - `[carbon:elements] rgba opacity value cannot be less than 0. Received ${opacity}` - ); - opacity = 0; - } - } - - replaceContent(node, rgba(hex.value, opacity)); - } - - if (node.name === "rem") { - const dimension = node.children[0]; - const px = Number(dimension?.value ?? 0); - - replaceContent(node, rem(px)); - } - - if (node.name === "em") { - const dimension = node.children[0]; - const px = Number(dimension?.value ?? 0); - - replaceContent(node, em(px)); - } - - if (node.name === "px") { - const dimension = node.children[0]; - const value = Number(dimension?.value ?? 0); - - replaceContent(node, px(value)); - } - } - } - ); - - return { code }; - } - - return { code: content }; - }, - }; -} diff --git a/src/preprocessors/icons.ts b/src/preprocessors/icons.ts deleted file mode 100644 index 8915cd3..0000000 --- a/src/preprocessors/icons.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; -import { BuildIcons, IconName } from "../build/build-icons"; -import { walkAndReplace } from "../walk-and-replace"; -import * as Icons from "../carbon-icons"; -import { EXT_SVELTE } from "../constants"; - -const carbonIcons = Icons.icons as BuildIcons; - -const defaultIconAttributes = { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 32 32", - fill: "currentColor", - focusable: "false", - preserveAspectRatio: "xMidYMid meet", -}; - -export function icons(): Pick { - return { - markup({ filename, content }) { - if (filename && !/node_modules/.test(filename) && EXT_SVELTE.test(filename)) { - const code = walkAndReplace( - { type: "markup", content, filename }, - ({ node }, replaceContent, getContent) => { - if (node.type === "Element" && node.name === "icon") { - let name: string | undefined; - - const attributes = node.attributes - .map((attribute) => { - if (attribute.name === "name") { - if (Array.isArray(attribute.value)) { - name = attribute.value[0].raw; - } - - return undefined; - } - - return attribute; - }) - .filter(Boolean); - - if (name === undefined) - console.warn("[carbon:icons] Icon name is required"); - - if (name !== undefined && name in carbonIcons.icons) { - const icon = carbonIcons.icons[name as IconName]; - const svgAttributes: Record = {}; - - Object.entries(defaultIconAttributes).forEach( - ([attribute, value]) => { - svgAttributes[attribute] = JSON.stringify(value); - } - ); - - Object.entries(icon.attributes).forEach( - ([attribute, value]) => { - svgAttributes[attribute] = JSON.stringify(value); - } - ); - - attributes.forEach((attribute) => { - const value = getContent(attribute!); - - if (/^\{|$\}/.test(value)) { - svgAttributes[attribute!.name] = value; - } else { - svgAttributes[attribute!.name] = value.slice( - attribute!.name.length + 1 - ); - } - }); - - const attrs = Object.entries(svgAttributes) - .map(([attribute, value]) => `${attribute}=${value}`) - .join(" "); - - const markup = `${icon.children}`; - - replaceContent(node, markup); - } else { - console.warn(`[carbon:icons] invalid icon name "${name}"`); - } - } - } - ); - - return { code }; - } - - return { code: content }; - }, - }; -} diff --git a/src/preprocessors/include.ts b/src/preprocessors/include.ts deleted file mode 100644 index 0a54f84..0000000 --- a/src/preprocessors/include.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; -import { EXT_SVELTE } from "../constants"; -import { parse } from "path"; - -interface PreprocessIncludeOptions { - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test?: RegExp; - - script: Array<{ - /** - * Specify the content the prepend or append - * @example - * import { CodeSnippet } from "carbon-components-svelte"; - */ - content: string; - - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test?: RegExp; - - /** - * Specify whether the content should be prepended or appended - * @default "prepend" - */ - behavior?: "prepend" | "append"; - }>; - - markup: Array<{ - /** - * Specify the content the prepend or append - * @example - *
      Table of Contents
    - */ - content: string; - - /** - * Specify the filename pattern to process - * Defaults to files ending with ".svelte" - * @default /\.(svelte)$/ - */ - test?: RegExp; - - /** - * Specify whether the content should be prepended or appended - * @default "prepend" - */ - behavior?: "prepend" | "append"; - }>; -} - -export function include( - options?: Partial -): Pick { - const script = options?.script ?? []; - const markup = options?.markup ?? []; - const test = options?.test ?? EXT_SVELTE; - - return { - script({ filename, content }) { - if ( - script.length > 0 && - filename !== undefined && - !/node_modules/.test(filename) && - test.test(filename) - ) { - script.forEach((entry) => { - const behavior = entry.behavior ?? "prepend"; - const testEntry = entry.test ?? test; - - if (testEntry.test(filename)) { - if (behavior === "prepend") { - content = entry.content + content; - } else if (behavior === "append") { - content += entry.content; - } - } - }); - - return { code: content }; - } - - return { code: content }; - }, - markup({ filename, content }) { - - if ( - markup.length > 0 && - filename && - !/node_modules/.test(filename) && - // ignore SvelteKit layout/error files to prevent duplicate markup - !/.svelte-kit/.test(filename) && - !/^(__layout)/.test(parse(filename).name) && - test.test(filename) - ) { - markup.forEach((entry) => { - const behavior = entry.behavior ?? "prepend"; - const testEntry = entry.test ?? test; - - if (testEntry.test(filename)) { - if (behavior === "prepend") { - content = entry.content + content; - } else if (behavior === "append") { - content += entry.content; - } - } - }); - - return { code: content }; - } - - return { code: content }; - }, - }; -} diff --git a/src/preprocessors/index.ts b/src/preprocessors/index.ts deleted file mode 100644 index 198355f..0000000 --- a/src/preprocessors/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./elements"; -export * from "./optimize-imports"; -export * from "./collect-headings"; -export * from "./icons"; -export * from "./pictograms"; -export * from "./include"; diff --git a/src/preprocessors/optimize-imports.ts b/src/preprocessors/optimize-imports.ts index eeb0df5..6abc6c5 100644 --- a/src/preprocessors/optimize-imports.ts +++ b/src/preprocessors/optimize-imports.ts @@ -1,93 +1,70 @@ -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; -import { BuildComponents } from "../build/build-components"; -import { components } from "../carbon-components-svelte.js"; -import { CARBON_SVELTE } from "../constants"; -import { getCarbonVersions } from "../utils"; -import { walkAndReplace } from "../walk-and-replace"; +import MagicString from "magic-string"; +import type { ImportDeclaration } from "svelte/compiler"; +import { parse, walk } from "svelte/compiler"; +import type { SveltePreprocessor } from "svelte/types/compiler/preprocess"; +import { components } from "../component-index"; +import { CarbonSvelte } from "../constants"; -const Components: Pick = components; -const CARBON_VERSIONS: Record = getCarbonVersions(); +function rewriteImport( + s: MagicString, + node: ImportDeclaration, + map: (specifier: ImportDeclaration["specifiers"][0]) => string, +) { + let content = ""; -export function optimizeImports(): Pick { - return { - script({ filename, content }) { - if (filename && !/node_modules/.test(filename)) { - const code = walkAndReplace( - { - type: "script", - content, - filename, - }, - ({ node }, replaceContent) => { - if (node.type === "ImportDeclaration") { - switch (node.source.value) { - case CARBON_SVELTE.components: - replaceContent( - node, - node.specifiers - .map(({ local, imported }) => { - if (imported.name in Components.components) { - return `import ${local.name} from "${ - Components.components[imported.name].path - }";`; - } + for (const specifier of node.specifiers) { + const fragment = map(specifier); + if (fragment) content += fragment; + } + + if (content) s.overwrite(node.start, node.end, content); +} - console.warn( - `[carbon:optimizeImports] ${imported.name} is not a valid Carbon component` - ); - return ""; - }) - .join("\n") - ); - break; +export const optimizeImports: SveltePreprocessor<"script"> = () => { + return { + name: "carbon:optimize-imports", + script({ filename, content: raw }) { + // Skip files in node_modules to minimize unnecessary preprocessing + if (!filename) return; + if (/node_modules/.test(filename)) return; - case CARBON_SVELTE.icons: - replaceContent( - node, - node.specifiers - .map(({ local, imported }) => { - if ( - CARBON_VERSIONS[CARBON_SVELTE.icons] === "11" || - CARBON_VERSIONS[CARBON_SVELTE.icons] === "12" - ) { - return `import ${local.name} from "${CARBON_SVELTE.icons}/lib/${imported.name}.svelte";`; - } + // Wrap the content in a ``; + const s = new MagicString(content); - return `import ${local.name} from "${CARBON_SVELTE.icons}/lib/${imported.name}/${imported.name}.svelte";`; - }) - .join("\n") - ); - break; + walk(parse(content), { + enter(node) { + if (node.type === "ImportDeclaration") { + const import_name = node.source.value; - case CARBON_SVELTE.pictograms: - replaceContent( - node, - node.specifiers - .map(({ local, imported }) => { - if ( - CARBON_VERSIONS[CARBON_SVELTE.pictograms] === "11" || - CARBON_VERSIONS[CARBON_SVELTE.pictograms] === "12" - ) { - return `import ${local.name} from "${CARBON_SVELTE.pictograms}/lib/${imported.name}.svelte";`; - } + switch (import_name) { + case CarbonSvelte.Components: + rewriteImport(s, node, ({ imported, local }) => { + const import_path = components[imported.name]?.path; + return import_path + ? `import ${local.name} from "${import_path}";` + : ""; + }); + break; - return `import ${local.name} from "${CARBON_SVELTE.pictograms}/lib/${imported.name}/${imported.name}.svelte";`; - }) - .join("\n") - ); - break; - } + case CarbonSvelte.Icons: + case CarbonSvelte.Pictograms: + rewriteImport(s, node, ({ imported, local }) => { + return `import ${local.name} from "${import_name}/lib/${imported.name}.svelte";`; + }); + break; } } - ); + }, + }); - return { code }; - } + s.replace(/^`; - case "style": - return ``; - default: - return content; - } -}; - -type GetAst = (type: ContentType, ast: Ast) => TemplateNode | Style | Script | undefined; - -const getAst: GetAst = (type, ast) => { - switch (type) { - case "script": - return ast.instance; - case "style": - return ast.css; - case "markup": - return ast.html; - default: - return undefined - } -}; - -interface NodeMeta { - start: number; - end: number; -} - -interface NodeElement extends NodeMeta { - type: "Element"; - name: string; - attributes: Array< - NodeMeta & { - type: "Attribute"; - name: string; - value: true | [{ type?: "Text"; raw: string }]; - } - >; - children: Array; -} - -export interface NodeText { - type?: "Text"; - raw: string; -} - -interface NodeImportDeclaration extends NodeMeta { - type: "ImportDeclaration"; - source: { value: string }; - specifiers: Array<{ - local: { name: string }; - imported: { name: string }; - }>; -} - -interface NodeIdentifier extends NodeMeta { - type: "Identifier"; - name: string; -} - -interface NodeDeclaration extends NodeMeta { - type: "Declaration"; - property: string; - value: NodeMeta & { - children: NodeChildString[]; - }; -} - -interface NodeRule extends NodeMeta { - type: "Rule"; - prelude: NodeMeta & { - type: "SelectorList"; - children: Array< - NodeMeta & { - type: "Selector"; - name: "div"; - } - >; - }; - block: NodeMeta & { - children: NodeDeclaration[]; - }; -} - -export interface MediaFeature { - type: "MediaFeature"; - name: "down" | "up" | "bp" | "between" | BreakpointName; - value: - | null - | { name: BreakpointName } - | { type: "Dimension"; value: string; unit: string }; -} - -interface NodeAtRule extends NodeMeta { - type: "Atrule"; - name: string; - prelude: NodeMeta & { - type: string; - children: Array<{ - type: "MediaQueryList"; - children: Array<{ - type: "MediaQuery"; - children: Array< - | MediaFeature - | { - type: "WhiteSpace"; - } - | { - type: "Identifier"; - name: string; // "and" | "lg" | "321px" - } - >; - }>; - }>; - }; - block: NodeMeta & { - type: "Block"; - }; -} - -interface NodeFunction extends NodeMeta { - type: "Function"; - name: string; // "rgba" | "rem" | "em" | "px"; - children: Array<{ - type: "HexColor" | "Operator" | "Number" | "Dimension"; - value: string; - }>; -} - -export interface NodeChildString extends NodeMeta { - type?: string; - value: string; -} - -export type Node = - | NodeElement - | NodeImportDeclaration - | NodeIdentifier - | NodeDeclaration - | NodeRule - | NodeAtRule - | NodeFunction; -export function walkAndReplace( - options: WalkAndReplaceOptions, - replaceWith: ( - enter: { node: Node; parentNode: Node }, - replaceContent: ( - node: Node, - replaceWith: string, - replacee?: string - ) => void, - getContent: (node: NodeMeta) => string - ) => void -) { - let content = options.content; - - const ast = parse(clampContent(options.type, content), { - filename: options.filename, - }); - - let cursor = -1 * OFFSET[options.type].length; - - function replaceContent(node: Node, replaceWith: string, replacee?: string) { - let replaced = - replacee ?? content.slice(node.start + cursor, node.end + cursor); - content = content.replace(replaced, replaceWith); - cursor += replaceWith.length - replaced.length; - } - - function getContent(node: NodeMeta) { - return content.slice(node.start + cursor, node.end + cursor); - } - - walk(getAst(options.type, ast), { - enter(node: Node, parentNode: Node) { - replaceWith.apply(this, [ - { node, parentNode }, - replaceContent, - getContent, - ]); - }, - }); - - return content; -} diff --git a/tests/__snapshots__/optimize-imports.test.ts.snap b/tests/__snapshots__/optimize-imports.test.ts.snap new file mode 100644 index 0000000..7ca30cd --- /dev/null +++ b/tests/__snapshots__/optimize-imports.test.ts.snap @@ -0,0 +1,35 @@ +// Bun Snapshot v1, https://goo.gl/fbAQLP + +exports[`optimizeImports 1`] = ` +" + import Accordion from "carbon-components-svelte/src/Accordion/Accordion.svelte";import AccordionItem from "carbon-components-svelte/src/Accordion/AccordionItem.svelte"; + import Accordion2 from "carbon-components-svelte/src/Accordion/Accordion.svelte"; + import breakpoints from "carbon-components-svelte/src/Breakpoint/breakpoints.js"; + import { invalid } from "carbon-components-svelte"; + + import Add from "carbon-icons-svelte/lib/Add.svelte"; + import Add2 from "carbon-icons-svelte/lib/Add.svelte"; + import Add3 from "carbon-icons-svelte/lib/Add.svelte"; + + import Airplane from "carbon-pictograms-svelte/lib/Airplane.svelte"; + import Airplane2 from "carbon-pictograms-svelte/lib/Airplane.svelte"; + import Airplane3 from "carbon-pictograms-svelte/lib/Airplane.svelte"; + " +`; + +exports[`optimizeImports barrel imports 1`] = ` +" + import Accordion from "carbon-components-svelte/src/Accordion/Accordion.svelte";import AccordionItem from "carbon-components-svelte/src/Accordion/AccordionItem.svelte"; + import Accordion2 from "carbon-components-svelte/src/Accordion/Accordion.svelte"; + import breakpoints from "carbon-components-svelte/src/Breakpoint/breakpoints.js"; + import { invalid } from "carbon-components-svelte"; + + import Add from "carbon-icons-svelte/lib/Add.svelte"; + import Add2 from "carbon-icons-svelte/lib/Add.svelte"; + import Add3 from "carbon-icons-svelte/lib/Add.svelte"; + + import Airplane from "carbon-pictograms-svelte/lib/Airplane.svelte"; + import Airplane2 from "carbon-pictograms-svelte/lib/Airplane.svelte"; + import Airplane3 from "carbon-pictograms-svelte/lib/Airplane.svelte"; + " +`; diff --git a/tests/compare-diff.test.ts b/tests/compare-diff.test.ts new file mode 100644 index 0000000..5409dc5 --- /dev/null +++ b/tests/compare-diff.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, spyOn, test } from "bun:test"; +import { compareDiff } from "../src/plugins/compare-diff"; + +describe("compare-diff", () => { + test("output", () => { + const log = spyOn(console, "log"); + + expect( + compareDiff({ + original_css: "body { color: red; } .bx--btn {}", + optimized_css: "body { color: red; }", + id: "id", + }), + ); + expect(log.mock.calls).toEqual([ + ["\n"], + ["Optimized", "id"], + ["Before:", "0.03 kB"], + ["After: ", "0.02 kB", "(-37.5%)\n"], + ]); + }); +}); diff --git a/tests/e2e/sveltekit/jsconfig.json b/tests/e2e/sveltekit/jsconfig.json deleted file mode 100644 index 0588bc6..0000000 --- a/tests/e2e/sveltekit/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/tests/e2e/sveltekit/package.json b/tests/e2e/sveltekit/package.json deleted file mode 100644 index be36e3a..0000000 --- a/tests/e2e/sveltekit/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "private": true, - "type": "module", - "scripts": { - "dev": "svelte-kit dev", - "build": "svelte-kit build", - "preview": "svelte-kit preview" - }, - "devDependencies": { - "carbon-components-svelte": "^0.32.2", - "@sveltejs/adapter-static": "next", - "@sveltejs/kit": "next", - "svelte": "^3.37.0", - "vite": "^2.2.2" - } -} diff --git a/tests/e2e/sveltekit/src/global.d.ts b/tests/e2e/sveltekit/src/global.d.ts deleted file mode 100644 index 79d7d7f..0000000 --- a/tests/e2e/sveltekit/src/global.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -/// -/// diff --git a/tests/e2e/sveltekit/src/routes/__layout.svelte b/tests/e2e/sveltekit/src/routes/__layout.svelte deleted file mode 100644 index 4fa864c..0000000 --- a/tests/e2e/sveltekit/src/routes/__layout.svelte +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/e2e/sveltekit/src/routes/index.svelte b/tests/e2e/sveltekit/src/routes/index.svelte deleted file mode 100644 index 99b9e44..0000000 --- a/tests/e2e/sveltekit/src/routes/index.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - -

    Welcome to SvelteKit

    -

    - Visit kit.svelte.dev to read the documentation -

    - -

    Carbon button

    - - - -

    Inline pictograms

    - - - - -{JSON.stringify(data, null, 2)} - - diff --git a/tests/e2e/sveltekit/svelte.config.js b/tests/e2e/sveltekit/svelte.config.js deleted file mode 100644 index 7762837..0000000 --- a/tests/e2e/sveltekit/svelte.config.js +++ /dev/null @@ -1,45 +0,0 @@ -import adapter from "@sveltejs/adapter-static"; -import * as carbon from "carbon-preprocess-svelte"; - -/** @type {import('@sveltejs/kit').Config} */ -export default { - preprocess: [ - ...carbon.presetCarbon(), - carbon.pictograms(), - carbon.icons(), - carbon.collectHeadings({ - afterCollect: (headings, content) => { - const h2 = headings - .filter((heading) => heading.level === 2) - .map((heading) => `
  • ${heading.text}
  • `) - .join("\n"); - - return content.replace("", h2); - }, - }), - carbon.include({ - script: [ - { - content: `const data = {};`, - }, - ], - markup: [ - { - content: "", - }, - { - content: "

    Summary

    ", - behavior: "append", - }, - ], - }), - ], - kit: { - target: "#svelte", - adapter: adapter(), - vite: { - optimizeDeps: { include: ["clipboard-copy"] }, - plugins: [process.env.NODE_ENV === "production" && carbon.optimizeCss()], - }, - }, -}; diff --git a/tests/e2e/sveltekit/yarn.lock b/tests/e2e/sveltekit/yarn.lock deleted file mode 100644 index 240f9ad..0000000 --- a/tests/e2e/sveltekit/yarn.lock +++ /dev/null @@ -1,257 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@rollup/pluginutils@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" - integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@sveltejs/adapter-static@next": - version "1.0.0-next.11" - resolved "https://registry.yarnpkg.com/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.11.tgz#f7bac062b96644d7a4617a3f44bf6f084b0e0052" - integrity sha512-flqdt6nJxzRPfhYDZbvrw1iFmc87E3rLJ/Rz7K+d4or/slyqHSxH+yOmQ7CJKej5DidliuTpAOvulithuDc0yw== - -"@sveltejs/kit@next": - version "1.0.0-next.109" - resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-1.0.0-next.109.tgz#27eb301f891449d1ac374690eab50b32d2fbda09" - integrity sha512-72iHsgcZTj9WU2VMq/qzMdFidTrSlJ1+KE0Iiw43Gee8TkKi5tMOyeu/f8lWa4HzdHLFZ2CJdvmcL7w3F4SWjg== - dependencies: - "@sveltejs/vite-plugin-svelte" "^1.0.0-next.10" - cheap-watch "^1.0.3" - sade "^1.7.4" - vite "^2.3.1" - -"@sveltejs/vite-plugin-svelte@^1.0.0-next.10": - version "1.0.0-next.10" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.10.tgz#15526067ea2edd334420b1e14602e29b370be25e" - integrity sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg== - dependencies: - "@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" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -carbon-components-svelte@^0.32.2: - version "0.32.2" - resolved "https://registry.yarnpkg.com/carbon-components-svelte/-/carbon-components-svelte-0.32.2.tgz#3b29d3c67836f5336bd00c056a8ed9f8b9e30512" - integrity sha512-hEfUqM2Fen1CqUYh0u+zbWiNZcGJ9at5oX4bDbsFk+kbS5BQzFY8DxGy3bfeWKVKpJvi/qiPdxn4MYOmmDnWHA== - dependencies: - carbon-icons-svelte "^10.27.0" - clipboard-copy "3.2.0" - flatpickr "4.6.9" - -carbon-icons-svelte@^10.27.0: - version "10.28.0" - resolved "https://registry.yarnpkg.com/carbon-icons-svelte/-/carbon-icons-svelte-10.28.0.tgz#812a6eae858d0c9e043067c714910fcfb6249cd2" - integrity sha512-C3K+U2PRy63WHFZme1HQNju89rhVIQmUkfgBrZzcezdutkhXbSPOY+o/MI0B2mDcQ7G9gfhEpqsXET8gBTWfJQ== - -chalk@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -cheap-watch@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cheap-watch/-/cheap-watch-1.0.3.tgz#3c4265718bcf8f1ae08f5e450f9f4693432e028e" - integrity sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg== - -clipboard-copy@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-3.2.0.tgz#3c5b8651d3512dcfad295d77a9eb09e7fac8d5fb" - integrity sha512-vooFaGFL6ulEP1liiaWFBmmfuPm3cY3y7T9eB83ZTnYc/oFeAKsq3NcDrOkBC8XaauEE8zHQwI7k0+JSYiVQSQ== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -esbuild@^0.11.23: - version "0.11.23" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" - integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -flatpickr@4.6.9: - version "4.6.9" - resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499" - integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw== - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -mri@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nanoid@^3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -picomatch@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== - -postcss@^8.2.10: - version "8.3.0" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f" - integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== - dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" - source-map-js "^0.6.2" - -require-relative@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= - -resolve@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -rollup@^2.38.5: - version "2.48.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.48.0.tgz#fceb01ed771f991f29f7bd2ff7838146e55acb74" - integrity sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A== - optionalDependencies: - fsevents "~2.3.1" - -sade@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691" - integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== - dependencies: - mri "^1.1.0" - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -svelte-hmr@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.4.tgz#b7ef2bfeef23916e0e912828c50645ca572ac355" - integrity sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA== - -svelte@^3.37.0: - version "3.38.2" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.38.2.tgz#55e5c681f793ae349b5cc2fe58e5782af4275ef5" - integrity sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg== - -vite@^2.2.2, vite@^2.3.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.3.3.tgz#7e88a71abd03985c647789938d784cce0ee3b0fd" - integrity sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA== - dependencies: - esbuild "^0.11.23" - postcss "^8.2.10" - resolve "^1.19.0" - rollup "^2.38.5" - optionalDependencies: - fsevents "~2.3.1" diff --git a/tests/integration/collect-headings.test.ts b/tests/integration/collect-headings.test.ts deleted file mode 100644 index ef447bc..0000000 --- a/tests/integration/collect-headings.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import assert from "assert"; -import { testFiles } from "./utils"; -import { collectHeadings } from "../../src"; - -testFiles({ - name: "collect-headings", - preprocessor: [ - collectHeadings({ - afterCollect: (headings, content) => { - assert.deepStrictEqual(headings, [ - { id: "h1", text: "Heading 1", level: 1 }, - { id: undefined, text: "Heading 2 with missing id", level: 2 }, - { id: "h2-0", text: "Heading 2", level: 2 }, - { id: "h2-1", text: "Heading 2", level: 2 }, - { id: "h3", text: "Heading 3", level: 3 }, - ]); - - const h2 = headings - .filter((heading) => heading.level === 2) - .map((heading) => `
  • ${heading.text}
  • `) - .join("\n"); - - return content.replace("", h2); - }, - }), - ], -}); diff --git a/tests/integration/elements-css-vars.test.ts b/tests/integration/elements-css-vars.test.ts deleted file mode 100644 index e858d58..0000000 --- a/tests/integration/elements-css-vars.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { testFiles } from "./utils"; -import { elements } from "../../src"; - -testFiles({ - name: "elements-css-vars", - preprocessor: [elements({ cssVars: true })], -}); diff --git a/tests/integration/elements.test.ts b/tests/integration/elements.test.ts deleted file mode 100644 index 07bdc10..0000000 --- a/tests/integration/elements.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { testFiles } from "./utils"; -import { elements } from "../../src"; - -testFiles({ - name: "elements", - preprocessor: [elements()], -}); diff --git a/tests/integration/extract-selectors.test.ts b/tests/integration/extract-selectors.test.ts deleted file mode 100644 index 9b2a552..0000000 --- a/tests/integration/extract-selectors.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { testFiles } from "./utils"; -import { extractSelectors } from "../../src"; - -testFiles({ - name: "extract-selectors", - outFileFormat: "json", - onReadFile: (content, filename) => extractSelectors(content, filename), -}); diff --git a/tests/integration/icons.test.ts b/tests/integration/icons.test.ts deleted file mode 100644 index aa9a2a5..0000000 --- a/tests/integration/icons.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { testFiles } from "./utils"; -import { icons } from "../../src"; - -testFiles({ - name: "icons", - preprocessor: [icons()], -}); diff --git a/tests/integration/include.test.ts b/tests/integration/include.test.ts deleted file mode 100644 index 0265fab..0000000 --- a/tests/integration/include.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { testFiles } from "./utils"; -import { include } from "../../src"; - -testFiles({ - name: "include", - preprocessor: [ - include({ - script: [ - { - content: ` - import { CodeSnippet } from "carbon-components-svelte"; - `, - behavior: "append", - }, - ], - markup: [ - { - content: "", - }, - { - content: "

    Text

    ", - behavior: "append", - }, - ], - }), - ], -}); diff --git a/tests/integration/index.ts b/tests/integration/index.ts deleted file mode 100644 index b170aaa..0000000 --- a/tests/integration/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import "./elements.test"; -import "./icons.test"; -import "./optimize-imports.test"; -import "./collect-headings.test"; -import "./pictograms.test"; -import "./extract-selectors.test"; -import "./include.test"; diff --git a/tests/integration/input/collect-headings.test.svelte b/tests/integration/input/collect-headings.test.svelte deleted file mode 100644 index 512db86..0000000 --- a/tests/integration/input/collect-headings.test.svelte +++ /dev/null @@ -1,8 +0,0 @@ -
    - -

    Heading 1

    -

    Heading 2 with missing id

    -

    Heading 2

    -

    Heading 2

    -

    Heading 3

    -
    diff --git a/tests/integration/input/elements-css-vars.test.svelte b/tests/integration/input/elements-css-vars.test.svelte deleted file mode 100644 index 9cc04f6..0000000 --- a/tests/integration/input/elements-css-vars.test.svelte +++ /dev/null @@ -1,57 +0,0 @@ -

    Heading 1

    -

    Heading 2

    -
    Hello world
    - - diff --git a/tests/integration/input/elements.test.svelte b/tests/integration/input/elements.test.svelte deleted file mode 100644 index f24df56..0000000 --- a/tests/integration/input/elements.test.svelte +++ /dev/null @@ -1,77 +0,0 @@ -

    Heading 1

    -

    Heading 2

    -
    Hello world
    - - diff --git a/tests/integration/input/extract-selectors.test.svelte b/tests/integration/input/extract-selectors.test.svelte deleted file mode 100644 index f04d289..0000000 --- a/tests/integration/input/extract-selectors.test.svelte +++ /dev/null @@ -1,154 +0,0 @@ - - -{#if skeleton} - -{:else if as} - -{:else if href && !disabled} - - - {#if hasIconOnly} - {iconDescription} - {/if} - -{:else} - -{/if} diff --git a/tests/integration/input/icons.test.svelte b/tests/integration/input/icons.test.svelte deleted file mode 100644 index 89af44c..0000000 --- a/tests/integration/input/icons.test.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/tests/integration/input/include.test.svelte b/tests/integration/input/include.test.svelte deleted file mode 100644 index 4feae37..0000000 --- a/tests/integration/input/include.test.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -

    Heading 1

    \ No newline at end of file diff --git a/tests/integration/input/optimize-imports.test.svelte b/tests/integration/input/optimize-imports.test.svelte deleted file mode 100644 index 63d7795..0000000 --- a/tests/integration/input/optimize-imports.test.svelte +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/tests/integration/input/pictograms.test.svelte b/tests/integration/input/pictograms.test.svelte deleted file mode 100644 index 0f8879d..0000000 --- a/tests/integration/input/pictograms.test.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/tests/integration/optimize-imports.test.ts b/tests/integration/optimize-imports.test.ts deleted file mode 100644 index c442f24..0000000 --- a/tests/integration/optimize-imports.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { testFiles } from "./utils"; -import { optimizeImports } from "../../src"; - -testFiles({ - name: "optimize-imports", - preprocessor: [optimizeImports()], -}); diff --git a/tests/integration/output/collect-headings.test.svelte b/tests/integration/output/collect-headings.test.svelte deleted file mode 100644 index 61271fd..0000000 --- a/tests/integration/output/collect-headings.test.svelte +++ /dev/null @@ -1,10 +0,0 @@ -
    -
  • Heading 2 with missing id
  • -
  • Heading 2
  • -
  • Heading 2
  • -

    Heading 1

    -

    Heading 2 with missing id

    -

    Heading 2

    -

    Heading 2

    -

    Heading 3

    -
    diff --git a/tests/integration/output/elements-css-vars.test.svelte b/tests/integration/output/elements-css-vars.test.svelte deleted file mode 100644 index 3de522b..0000000 --- a/tests/integration/output/elements-css-vars.test.svelte +++ /dev/null @@ -1,57 +0,0 @@ -

    Heading 1

    -

    Heading 2

    -
    Hello world
    - - diff --git a/tests/integration/output/elements.test.svelte b/tests/integration/output/elements.test.svelte deleted file mode 100644 index 4b9678f..0000000 --- a/tests/integration/output/elements.test.svelte +++ /dev/null @@ -1,77 +0,0 @@ -

    Heading 1

    -

    Heading 2

    -
    Hello world
    - - diff --git a/tests/integration/output/extract-selectors.test.json b/tests/integration/output/extract-selectors.test.json deleted file mode 100644 index 501e67a..0000000 --- a/tests/integration/output/extract-selectors.test.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - [ - "a", - { - "type": "Element" - } - ], - [ - "span", - { - "type": "Element" - } - ], - [ - ".bx--assistive-text", - { - "type": "Class" - } - ], - [ - ".bx--btn__icon", - { - "type": "Attribute" - } - ], - [ - "button", - { - "type": "Element" - } - ], - [ - ".bx--btn", - { - "type": "Class" - } - ], - [ - ".bx--btn--field", - { - "type": "Class" - } - ], - [ - ".bx--btn--sm", - { - "type": "Class" - } - ], - [ - ".bx--btn--", - { - "type": "Class" - } - ], - [ - ".bx--btn--disabled", - { - "type": "Class" - } - ], - [ - ".bx--btn--icon-only", - { - "type": "Class" - } - ], - [ - ".bx--tooltip__trigger", - { - "type": "Class" - } - ], - [ - ".bx--tooltip--a11y", - { - "type": "Class" - } - ], - [ - ".bx--tooltip--", - { - "type": "Class" - } - ], - [ - ".bx--tooltip--align-", - { - "type": "Class" - } - ], - [ - ".bx--btn--selected", - { - "type": "Class" - } - ] -] \ No newline at end of file diff --git a/tests/integration/output/icons.test.svelte b/tests/integration/output/icons.test.svelte deleted file mode 100644 index 3708cff..0000000 --- a/tests/integration/output/icons.test.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/tests/integration/output/include.test.svelte b/tests/integration/output/include.test.svelte deleted file mode 100644 index 1a609d6..0000000 --- a/tests/integration/output/include.test.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - -

    Heading 1

    Text

    \ No newline at end of file diff --git a/tests/integration/output/optimize-imports.test.svelte b/tests/integration/output/optimize-imports.test.svelte deleted file mode 100644 index 7cfb4eb..0000000 --- a/tests/integration/output/optimize-imports.test.svelte +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/tests/integration/output/pictograms.test.svelte b/tests/integration/output/pictograms.test.svelte deleted file mode 100644 index 3bb2c34..0000000 --- a/tests/integration/output/pictograms.test.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/tests/integration/pictograms.test.ts b/tests/integration/pictograms.test.ts deleted file mode 100644 index 0a4872e..0000000 --- a/tests/integration/pictograms.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { testFiles } from "./utils"; -import { pictograms } from "../../src"; - -testFiles({ - name: "pictograms", - preprocessor: [pictograms()], -}); diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts deleted file mode 100644 index dc23ca9..0000000 --- a/tests/integration/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -import path from "path"; -import { totalist } from "totalist"; -import { preprocess } from "svelte/compiler"; -import { readFile, writeFile } from "../../src/utils"; -import { EXT_SVELTE } from "../../src/constants"; -import { PreprocessorGroup } from "svelte/types/compiler/preprocess"; - -interface TestFilesOptions { - name: string; - outFileFormat?: "json"; - preprocessor?: Partial[]; - onReadFile?: (content: string, filename: string) => string | object; -} - -export async function testFiles(options: TestFilesOptions) { - const input = path.resolve(__dirname, "input"); - const testFile = new RegExp(`^${options.name}.test`); - - await totalist(input, async (file, filename) => { - if (testFile.test(file)) { - let content = await readFile(filename, "utf-8"); - let outfile = filename.replace(/input/, "output"); - let result: string | object = ""; - - if (options.onReadFile) { - result = options.onReadFile.apply(null, [content, filename]); - } else { - const { code } = await preprocess(content, options.preprocessor!, { - filename, - }); - result = code; - } - - if (options.outFileFormat === "json") { - outfile = outfile.replace(EXT_SVELTE, ".json"); - result = JSON.stringify(result, null, 2); - } - - await writeFile(outfile, result as string); - console.info(`[tests:${options.name}] processed ${file}`); - } - }); -} diff --git a/tests/optimize-imports.test.ts b/tests/optimize-imports.test.ts new file mode 100644 index 0000000..b2b42e2 --- /dev/null +++ b/tests/optimize-imports.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, test } from "bun:test"; +import type { Preprocessor, Processed } from "svelte/types/compiler/preprocess"; +import { optimizeImports } from "../src"; + +const preprocess = (options?: Partial[0]>) => { + return ( + optimizeImports().script({ + attributes: {}, + filename: "test.svelte", + content: "", + markup: "", + ...options, + }) as Processed + )?.code; +}; + +describe("optimizeImports", () => { + test("preprocessor is skipped", () => { + expect(preprocess({ filename: undefined })).toBeUndefined(); + expect(preprocess({ filename: "node_modules" })).toBeUndefined(); + expect( + preprocess({ filename: "node_modules/carbon-components-svelte" }), + ).toBeUndefined(); + }); + + test("barrel imports", () => { + expect( + preprocess({ + content: ` + import { Accordion, AccordionItem } from "carbon-components-svelte"; + import { Accordion as Accordion2 } from "carbon-components-svelte"; + import { breakpoints } from "carbon-components-svelte"; + import { invalid } from "carbon-components-svelte"; + + import { Add } from "carbon-icons-svelte"; + import { Add as Add2 } from "carbon-icons-svelte"; + import Add3 from "carbon-icons-svelte/lib/Add.svelte"; + + import { Airplane } from "carbon-pictograms-svelte"; + import { Airplane as Airplane2 } from "carbon-pictograms-svelte"; + import Airplane3 from "carbon-pictograms-svelte/lib/Airplane.svelte"; + `, + }), + ).toMatchSnapshot(); + }); +}); diff --git a/tests/unit/api.test.ts b/tests/unit/api.test.ts deleted file mode 100644 index 998162f..0000000 --- a/tests/unit/api.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import assert from "assert"; -import * as api from "../../src"; - -assert.strictEqual(typeof api.collectHeadings, "function"); -assert.strictEqual(typeof api.elements, "function"); -assert.strictEqual(typeof api.extractSelectors, "function"); -assert.strictEqual(typeof api.icons, "function"); -assert.strictEqual(typeof api.optimizeCss, "function"); -assert.strictEqual(typeof api.optimizeImports, "function"); -assert.strictEqual(typeof api.optimizeCarbonImports, "function"); -assert.strictEqual(typeof api.pictograms, "function"); -assert.strictEqual(typeof api.presetCarbon, "function"); diff --git a/tests/unit/elements.test.ts b/tests/unit/elements.test.ts deleted file mode 100644 index 5d8b604..0000000 --- a/tests/unit/elements.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import assert from "assert"; -import { elements } from "../../src/carbon-elements"; - -assert.strictEqual( - elements.tokens["expressive-heading-03"].breakpoints.length, - 2 -); diff --git a/tests/unit/index.ts b/tests/unit/index.ts deleted file mode 100644 index d34359f..0000000 --- a/tests/unit/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import "./type.test"; -import "./elements.test"; -import "./api.test"; diff --git a/tests/unit/type.test.ts b/tests/unit/type.test.ts deleted file mode 100644 index 98f7efe..0000000 --- a/tests/unit/type.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import assert from "assert"; -import * as build from "../../src/build"; - -const result = build.type.serializeTypeStyles({ - fontSize: 4, - breakpoints: { md: { fontSize: 2 } }, -}); - -assert.strictEqual(result.css, "font-size: 4;"); -assert.deepStrictEqual(result.breakpoints[0], { - css: "font-size: 2", - mediaQuery: "@media (min-width: 42rem)", -}); diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..2702017 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "outDir": "dist", + "target": "ES6", + "module": "CommonJS" + }, + "include": ["src/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index d48fd38..6cacb39 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,12 @@ { "compilerOptions": { - "allowJs": true, - "declaration": true, - "emitDeclarationOnly": true, "esModuleInterop": true, - "downlevelIteration": true, - "lib": ["ESNext", "DOM.Iterable"], - "moduleResolution": "Node", - "outDir": "dist", + "target": "ESNext", + "module": "ESNext", + "lib": ["ESNext"], + "moduleResolution": "node", "skipLibCheck": true, "strict": true }, - "include": ["src/**/*"] + "include": ["scripts/**/*", "src/**/*", "tests/**/*"] } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 7edca1a..0000000 --- a/yarn.lock +++ /dev/null @@ -1,959 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@carbon/colors@^10.22.0": - version "10.22.0" - resolved "https://registry.yarnpkg.com/@carbon/colors/-/colors-10.22.0.tgz#a8cb6c9ee23ab6f49173bb7e71acfe41a1ee9d9d" - integrity sha512-09QWa1EmoO6VYJhe5Wj2MVJ4wbQY+fKcnVFFJ0DHkc5K4Pw0K6Kt7CoVKgRDl+pzr1gfcdNDCnG8O5F4UQFb3w== - -"@carbon/elements@10.31.0": - version "10.31.0" - resolved "https://registry.yarnpkg.com/@carbon/elements/-/elements-10.31.0.tgz#b89b505a2ebfbfd32df301599ebb8d07d7add902" - integrity sha512-0lOsiAEc8ag3fYdKp4KvbSvJpYYG5bjliMR0k7pNthKVC0u5mZoTxJtHyJMo9y5TDbq7xAL0TFJhV93XsIIvQA== - dependencies: - "@carbon/colors" "^10.22.0" - "@carbon/grid" "^10.24.0" - "@carbon/icons" "^10.29.0" - "@carbon/import-once" "^10.6.0" - "@carbon/layout" "^10.22.0" - "@carbon/motion" "^10.15.0" - "@carbon/themes" "^10.31.0" - "@carbon/type" "^10.25.0" - -"@carbon/grid@^10.24.0": - version "10.24.0" - resolved "https://registry.yarnpkg.com/@carbon/grid/-/grid-10.24.0.tgz#2d1ad3fad152bf0462eeb4dd8112f5e48314ce64" - integrity sha512-ZZFHbQQi9wpwq+0PtvEF+1tq0RoS3vghPRnoxKH/MbvbD9VQg9V8az+FKRIwQVkUtxUxAw+CBcMTP/FiLkXEwg== - dependencies: - "@carbon/import-once" "^10.6.0" - "@carbon/layout" "^10.22.0" - -"@carbon/icon-helpers@^10.16.0": - version "10.16.0" - resolved "https://registry.yarnpkg.com/@carbon/icon-helpers/-/icon-helpers-10.16.0.tgz#66f20b9bba49c6ec4c956b8e9e7ec65bdf40da8f" - integrity sha512-cN1sM0xvlDEN1pYPDWoHcikGysCTnfA49/12H92dBkn14fpRmB87shIe3hzKlW6h4QP7CrnF0hB5SCkA2KC7Ng== - -"@carbon/icons@^10.29.0": - version "10.29.0" - resolved "https://registry.yarnpkg.com/@carbon/icons/-/icons-10.29.0.tgz#98d33c721b7621614bbfdcf5862fb389f9dfc999" - integrity sha512-HMlQTUfCI50UDBUHKnk5DvTCypEQS3fzJQDi5anbzf7zcvljnkrdZy7jT42qAYAn6oV04TCWEH5CSshm4Nej9A== - -"@carbon/icons@^11.0.1": - version "11.0.1" - resolved "https://registry.yarnpkg.com/@carbon/icons/-/icons-11.0.1.tgz#a23e7716ce10b1af5a3cc6b4d162153351aa9ea9" - integrity sha512-mS/cO6dGbdNZuWBmYKfV89p+HwCk0u2Bf53lzRX5Sn2Bahel4T0Q04beXKMpncP3wBjCpgww7usJ70kl7CbjRw== - -"@carbon/import-once@^10.6.0": - version "10.6.0" - resolved "https://registry.yarnpkg.com/@carbon/import-once/-/import-once-10.6.0.tgz#a8fb846d9dc3eea9d45d9131a235e898d0f8db1e" - integrity sha512-vi0lnmZot9J5uW2p9chtyLBwe3nCTY4HrDWuglLOZVOHu7dbLQiRjD/r3uOjB4lr5qduRwk2hblBXKBhpVDBpg== - -"@carbon/layout@^10.22.0": - version "10.22.0" - resolved "https://registry.yarnpkg.com/@carbon/layout/-/layout-10.22.0.tgz#470833b5862be984213658c7f06f83e4c8713959" - integrity sha512-XJ7FZzNbRtGrgC4WK7G5RF9NvlscHoW3xg0DAZZxxumqcR3t7E9ARF78aNVjsATUA7+dEN54yQ0TM7WRSTTXlg== - -"@carbon/motion@^10.15.0": - version "10.15.0" - resolved "https://registry.yarnpkg.com/@carbon/motion/-/motion-10.15.0.tgz#ddf38a5d4bf594abf0adb9302bb1101c5ae93346" - integrity sha512-hyGUNm+5TB9NlXgtbAmXlVN7ivjdBxoV8h/f+461eQ5BLiu/MibcLtTM3zeIypUYxd3PUNAx9DcMN12t/J3EpA== - -"@carbon/pictograms@^12.0.2": - version "12.0.2" - resolved "https://registry.yarnpkg.com/@carbon/pictograms/-/pictograms-12.0.2.tgz#5f561f72de870e952b0755e6fcae3f5214e39efa" - integrity sha512-vxiNC9kZkNAFMJIMKZtlNVYFuVIx6+27kqY+SJcoH9DhkGem8B6TRUAbQKp5YTjlDRnY/WgJ38tNq79nVxMIZw== - -"@carbon/themes@^10.31.0": - version "10.31.0" - resolved "https://registry.yarnpkg.com/@carbon/themes/-/themes-10.31.0.tgz#bd193fa3932c8eea09dbf870a7e8324d4177270a" - integrity sha512-OzrS6vOuuN7+BbFQ/UdfGZUhDYHtqBJHeSPBX5P0hU5YZOd7HiWCu1uDAZq4M6JtcfgC5RxL777flSXgdoFr4A== - dependencies: - "@carbon/colors" "^10.22.0" - "@carbon/layout" "^10.22.0" - "@carbon/type" "^10.25.0" - color "^3.1.2" - -"@carbon/type@^10.25.0": - version "10.25.0" - resolved "https://registry.yarnpkg.com/@carbon/type/-/type-10.25.0.tgz#23e3ff0c2829912335ac17d09e2dbd609707c30e" - integrity sha512-lsYQ2gTUubD7ZVPa+SNrjZe0zZzdd8069jooaNXRv2i18/QQeBcDAvogOFRfRA/8NDMQ1Q9jlnlQdkLcijoZDg== - dependencies: - "@carbon/import-once" "^10.6.0" - "@carbon/layout" "^10.22.0" - -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - -"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== - -"@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== - -"@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== - -"@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== - -"@types/carbon__elements@10.31.0": - version "10.31.0" - resolved "https://registry.yarnpkg.com/@types/carbon__elements/-/carbon__elements-10.31.0.tgz#6e3ea3b0c830e0c3a8d225b4e7390a386ced64e2" - integrity sha512-oA/jW/CmalR1xNePwfxUG6bpTniPh4yrhh1KrrFW9/lAsmsXs8+rlbBwNQm2ytjLK0+CpH7zOFBITo3HJ4exLg== - -"@types/carbon__icon-helpers@^10.7.1": - version "10.7.1" - resolved "https://registry.yarnpkg.com/@types/carbon__icon-helpers/-/carbon__icon-helpers-10.7.1.tgz#f1c4d637308d87f83906aea4c7c2399592e408ef" - integrity sha512-At07tODyK5f1tsPIg8ziZm3SHpHbfjh8YdyXLNbD9RdUa416EgUEFa6Xlxb9lgt2YHtRS/qLmy+ysbGx+zMgQg== - -"@types/node@^15.0.2": - version "15.0.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.2.tgz#51e9c0920d1b45936ea04341aa3e2e58d339fb67" - integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== - -"@types/pug@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6" - integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -buffer-crc32@^0.2.5: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -carbon-components-svelte@^0.75.1: - version "0.75.1" - resolved "https://registry.yarnpkg.com/carbon-components-svelte/-/carbon-components-svelte-0.75.1.tgz#3cb70fe57869d220303deda52188fbcf38ede20e" - integrity sha512-q1aCDbUW9U8NJMLj/FesL9E2ymqWONWlGDEKoawRtVK7XvsD5ynK1amu2l3cs5mFvagLnkVAcSmyzyTAaie5ug== - dependencies: - flatpickr "4.6.9" - -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -commander@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= - -esbuild@^0.11.19: - version "0.11.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.19.tgz#59289d9c6ee3f45d0db289a662c31473da25c199" - integrity sha512-X2h8UThAwKLxmc1OChHVegIScphS/qU9cUB5vCEV2T0A024E8Ptpg9xssXXcs+j1uEgXrDJZuVRzx2JsmGzq7A== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -flatpickr@4.6.9: - version "4.6.9" - resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.9.tgz#9a13383e8a6814bda5d232eae3fcdccb97dc1499" - integrity sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -glob@^7.1.3, glob@^7.1.7: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - 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" - -graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.1.3: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -nanoid@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557" - integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@>=1.0.7, path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -postcss-selector-parser@^6.0.6: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss@^8.3.5: - version "8.4.12" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" - integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== - dependencies: - nanoid "^3.3.1" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prettier-plugin-svelte@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-2.7.0.tgz#ecfa4fe824238a4466a3497df1a96d15cf43cabb" - integrity sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA== - -prettier@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - -purgecss@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-4.1.3.tgz#683f6a133c8c4de7aa82fe2746d1393b214918f7" - integrity sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw== - dependencies: - commander "^8.0.0" - glob "^7.1.7" - postcss "^8.3.5" - postcss-selector-parser "^6.0.6" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -resolve@^1.10.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rollup@^2.70.2: - version "2.70.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.2.tgz#808d206a8851628a065097b7ba2053bd83ba0c0d" - integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg== - optionalDependencies: - fsevents "~2.3.2" - -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" - integrity sha1-dB4kXiMfB8r7b98PEzrfohalAq0= - dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sorcery@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" - integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.14" - buffer-crc32 "^0.2.5" - minimist "^1.2.0" - sander "^0.5.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -svelte-preprocess@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz#2123898e079a074f7f4ef1799e10e037f5bcc55b" - integrity sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw== - dependencies: - "@types/pug" "^2.0.6" - detect-indent "^6.1.0" - magic-string "^0.27.0" - sorcery "^0.11.0" - strip-indent "^3.0.0" - -svelte@^3.47.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.47.0.tgz#ba46fe4aea99fc650d6939c215cd4694f5325a19" - integrity sha512-4JaJp3HEoTCGARRWZQIZDUanhYv0iyoHikklVHVLH9xFE9db22g4TDv7CPeNA8HD1JgjXI1vlhR1JZvvhaTu2Q== - -totalist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.0.tgz#4ef9c58c5f095255cdc3ff2a0a55091c57a3a1bd" - integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== - -ts-node@^10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== - dependencies: - "@cspotcode/source-map-support" "0.7.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" - yn "3.1.1" - -typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -v8-compile-cache-lib@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" - integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==