diff --git a/README.md b/README.md index ef5b39a00..4fedf02aa 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ | ------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | Core | [`@juntossomosmais/atomium`](https://github.com/juntossomosmais/atomium/pkgs/npm/atomium) | version | [README](./packages/core/README.md) | | React | [`@juntossomosmais/atomium/react`](https://github.com/juntossomosmais/atomium/pkgs/npm/atomium) | version | [README](./packages/react/README.md) | +| Vue | [`@juntossomosmais/atomium/vue`](https://github.com/juntossomosmais/atomium/pkgs/npm/atomium) | version | [README](./packages/react/README.md) | | Tokens | [`@juntossomosmais/atomium-tokens`](https://github.com/juntossomosmais/atomium/pkgs/npm/atomium-tokens) | version | [README](./packages/tokens/README.md) | ## About @@ -69,6 +70,12 @@ If you want to run React Stories locally, you need to run the following command npm run docs-react:start ``` +And if you want to run Vue Stories locally, you need to run the following command before `npm start`: + +```bash +npm run docs-vue:start +``` + ### Running Tests ```bash @@ -89,8 +96,10 @@ npm run docs:build * `apps/docs`: Contains the main documentation for the project. * `apps/docs-react`: Provides a React version of Storybook for showcasing components. +* `apps/docs-vue`: Provides a Vue version of Storybook for showcasing components. * `packages/core`: The core of Atomium, responsible for building all the components. * `packages/react`: The React version of Atomium, automatically generated by Stencil. +* `packages/vue`: The Vue version of Atomium, automatically generated by Stencil. * `packages/tokens`: Contains the design tokens for Atomium, where all the tokens are defined. * `packages/icons`: Contains the icons used in Atomium, where all the icons are stored. * `utils/**`: Contains utility modules used throughout the project, providing various helper functions and tools. diff --git a/apps/docs-react/.storybook/preview.ts b/apps/docs-react/.storybook/preview.ts index 0c521b403..6689d19e9 100644 --- a/apps/docs-react/.storybook/preview.ts +++ b/apps/docs-react/.storybook/preview.ts @@ -1,5 +1,3 @@ -import { defineCustomElements } from '@juntossomosmais/atomium/loader' - import { CustomViewports } from '@atomium/storybook-utils/custom-viewports' import DocumentationTemplate from '@atomium/storybook-utils/DocumentationTemplate.mdx' @@ -8,8 +6,6 @@ import '@atomium/storybook-utils/preview.css' import '@juntossomosmais/atomium-tokens/tokens.css' import '@juntossomosmais/atomium/dist/core/core.css' -defineCustomElements() - const preview = { parameters: { viewport: { diff --git a/apps/docs-vue/.storybook/main.ts b/apps/docs-vue/.storybook/main.ts new file mode 100644 index 000000000..1efc25c8d --- /dev/null +++ b/apps/docs-vue/.storybook/main.ts @@ -0,0 +1,21 @@ +module.exports = { + stories: [ + '../stories/*.stories.@(js|jsx|ts|tsx|mdx)', + '../../../packages/core/src/**/*.vue.stories.@(js|jsx|ts|tsx|mdx)', + ], + addons: [ + '@storybook/addon-essentials', + '@storybook/addon-docs', + '@storybook/addon-actions', + '@storybook/addon-a11y', + '@storybook/addon-viewport', + '@storybook/theming', + ], + framework: { + name: '@storybook/vue3-vite', + options: {}, + }, + docs: { + autodocs: true, + }, +} diff --git a/apps/docs-vue/.storybook/manager-head.html b/apps/docs-vue/.storybook/manager-head.html new file mode 100644 index 000000000..a971f32f5 --- /dev/null +++ b/apps/docs-vue/.storybook/manager-head.html @@ -0,0 +1,7 @@ + + + diff --git a/apps/docs-vue/.storybook/manager.ts b/apps/docs-vue/.storybook/manager.ts new file mode 100644 index 000000000..859d761e4 --- /dev/null +++ b/apps/docs-vue/.storybook/manager.ts @@ -0,0 +1,7 @@ +import { addons } from '@storybook/addons' + +import theme from '@atomium/storybook-utils/theme' + +addons.setConfig({ + theme, +}) diff --git a/apps/docs-vue/.storybook/preview.ts b/apps/docs-vue/.storybook/preview.ts new file mode 100644 index 000000000..6689d19e9 --- /dev/null +++ b/apps/docs-vue/.storybook/preview.ts @@ -0,0 +1,21 @@ +import { CustomViewports } from '@atomium/storybook-utils/custom-viewports' +import DocumentationTemplate from '@atomium/storybook-utils/DocumentationTemplate.mdx' + +import '@atomium/storybook-utils/preview.css' + +import '@juntossomosmais/atomium-tokens/tokens.css' +import '@juntossomosmais/atomium/dist/core/core.css' + +const preview = { + parameters: { + viewport: { + viewports: CustomViewports, + }, + actions: { argTypesRegex: '^atom.*' }, + docs: { + page: DocumentationTemplate, + }, + }, +} + +export default preview diff --git a/apps/docs-vue/package.json b/apps/docs-vue/package.json new file mode 100644 index 000000000..7743855d8 --- /dev/null +++ b/apps/docs-vue/package.json @@ -0,0 +1,22 @@ +{ + "name": "@atomium/docs-vue", + "private": true, + "scripts": { + "start": "storybook dev -p 8006 --no-open", + "build": "storybook build -o ../docs/storybook-static/vue" + }, + "nx": { + "targets": { + "build": { + "dependsOn": [ + { + "projects": [ + "@juntossomosmais/atomium-vue" + ], + "target": "build" + } + ] + } + } + } +} diff --git a/apps/docs-vue/stories/0_Introduction.stories.mdx b/apps/docs-vue/stories/0_Introduction.stories.mdx new file mode 100644 index 000000000..222625dd0 --- /dev/null +++ b/apps/docs-vue/stories/0_Introduction.stories.mdx @@ -0,0 +1,34 @@ +import { Meta } from '@storybook/addon-docs' + + + +# About Vue Components + +All [Vue Components is generated by Stencil](https://stenciljs.com/docs/vue) using [Stencil's output target](https://stenciljs.com/docs/vue#output-targets) to automatically generate Vue components from our Atomium's web components. + +The target of this stories is run Atomium's web components in Vue environment and show how to use the components. + +**!important** + +There is a problem to render the code of [Vue's components outputed by Stencil in Storybook](https://github.com/storybookjs/storybook/issues/22287), so the code of the components is not shown correctly in the stories. + +Example, in [Button component](?path=/docs/react_components-button--docs): + +```jsx +{ + render: args => createButton(args), + args: { + ...ButtonComponentArgs + } +} +``` + +The code above is not shown correctly in the stories, but it is correct in the source code: + +```jsx + + Button + +``` + +Just keep in mind that when check the code of the components inside Storybook diff --git a/apps/docs-vue/vite.config.js b/apps/docs-vue/vite.config.js new file mode 100644 index 000000000..baf6fcbb6 --- /dev/null +++ b/apps/docs-vue/vite.config.js @@ -0,0 +1,14 @@ +import { fileURLToPath, URL } from 'node:url' + +import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, +}) diff --git a/apps/docs/.storybook/main.ts b/apps/docs/.storybook/main.ts index 2af4cc8b3..08874cb68 100644 --- a/apps/docs/.storybook/main.ts +++ b/apps/docs/.storybook/main.ts @@ -1,5 +1,32 @@ import type { StorybookConfig } from '@storybook/web-components-webpack5' +function getStorybookRefs(configType: string) { + if (configType === 'DEVELOPMENT') { + return { + react: { + title: 'React (localhost:7006)', + url: 'http://localhost:7006', + }, + vue: { + title: 'Vue (localhost:8006)', + url: 'http://localhost:8006', + }, + } + } + return { + react: { + title: 'React Library', + url: 'react', + expanded: false, + }, + vue: { + title: 'Vue Library', + url: 'vue', + expanded: false, + }, + } +} + const config: StorybookConfig = { stories: [ '../stories/**/*.stories.@(js|jsx|ts|tsx|mdx)', @@ -23,22 +50,8 @@ const config: StorybookConfig = { docs: { autodocs: true, }, - refs: (config, { configType }) => { - if (configType === 'DEVELOPMENT') { - return { - react: { - title: 'React (localhost:7006)', - url: 'http://localhost:7006', - }, - } - } - return { - react: { - title: 'React Library', - url: 'react', - expanded: false, - }, - } + refs: (config, { configType = '' }) => { + return getStorybookRefs(configType) }, } diff --git a/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-not-for-vue.stories.mdx b/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-not-for-vue.stories.mdx deleted file mode 100644 index 0ea4d461b..000000000 --- a/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-not-for-vue.stories.mdx +++ /dev/null @@ -1,34 +0,0 @@ -import { Meta } from '@storybook/addon-docs' - - - -# ADR 0007: Why do we transpile Web Components for React and not for Vue? - -๐Ÿ—“๏ธ 2023-04 ยท โœ๏ธ [@felipefialho](https://twitter.com/felipefialho_) - -## Context - -We need to use Web Components in our projects built with Vue and React (Next.js) while maintaining a good Developer Experience (DX). - -## Problems - -### React - -- We need to use `Event Listeners` to handle events and methods when using Web Components -- React [use `SyntheticEvent` to handle events](https://legacy.reactjs.org/docs/events.html), and we need to convert it to `CustomEvent` to use Web Components -- Props that use `array` or `object` need to be converted to JSON for compatibility -- We need to use `ref` to access the Web Component API in React -- Sometimes, we need to create wrappers to effectively use Web Components in React -- Overall, the Developer Experience in React is not optimal when working with Web Components - -### Vue - -- Props that use `array` or `object` need to be converted to JSON for compatibility - -## Decision - -To address these challenges, we have decided to use Stencil to create a transpiled version of Web Components specifically for React, while keeping the original version for Vue. - -Currently, we are using Vue 2 (as of April 2022), and the transpiler of Stencil is not compatible with Vue 2, however, Vue provides a good DX and seamless compatibility with Web Components. - -In the future, when we migrate to Vue 3, we may reevaluate this decision and consider transpiling Web Components for Vue as well. diff --git a/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-vue.stories.mdx b/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-vue.stories.mdx new file mode 100644 index 000000000..89c174bb0 --- /dev/null +++ b/apps/docs/stories/architecture-decision-records/0007-why-do-we-transpile-web-components-for-react-and-vue.stories.mdx @@ -0,0 +1,40 @@ +import { Meta } from '@storybook/addon-docs' + + + +# ADR 0007: Why do we transpile Web Components for React and Vue? + +๐Ÿ—“๏ธ ~2023-04~ 2024-05 ยท โœ๏ธ [@felipefialho](https://twitter.com/felipefialho_) + +## Context + +We need to use Web Components in our projects built with Vue and React (Next.js) while maintaining a good Developer Experience (DX). + +## Problems + +### React + +- We need to use `Event Listeners` to handle events and methods when using Web Components +- React [use `SyntheticEvent` to handle events](https://legacy.reactjs.org/docs/events.html), and we need to convert it to `CustomEvent` to use Web Components +- Props that use `array` or `object` need to be converted to JSON for compatibility +- We need to use `ref` to access the Web Component API in React +- Sometimes, we need to create wrappers to effectively use Web Components in React +- Overall, the Developer Experience in React is not optimal when working with Web Components + +### Vue + +- Props that use `array` or `object` need to be converted to JSON for compatibility +- We need to use `ref` to access the Web Component API in Vue +- We need to create wrappers to effectively use Web Components in Vue and it is not always straightforward + +## Decision + +~To address these challenges, we have decided to use Stencil to create a transpiled version of Web Components specifically for React, while keeping the original version for Vue.~ + +~Currently, we are using Vue 2 (as of April 2022), and the transpiler of Stencil is not compatible with Vue 2, however, Vue provides a good DX and seamless compatibility with Web Components.~ + +~In the future, when we migrate to Vue 3, we may reevaluate this decision and consider transpiling Web Components for Vue as well.~ + +### Update + +Now we are using Vue 3, and we have decided to transpile Web Components for both React and Vue to provide a better Developer Experience (DX) and to ensure compatibility with the latest versions of both libraries. diff --git a/package-lock.json b/package-lock.json index bd65de40e..dc5b2cfa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,8 @@ "@storybook/react": "^7.6.17", "@storybook/react-webpack5": "^7.6.17", "@storybook/theming": "^7.6.17", + "@storybook/vue3": "^7.6.6", + "@storybook/vue3-vite": "^7.6.6", "@storybook/web-components": "^7.6.17", "@storybook/web-components-webpack5": "^7.6.17", "@testing-library/jest-dom": "^6.4.4", @@ -48,6 +50,7 @@ "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", + "@vitejs/plugin-vue": "^4.0.0", "autoprefixer": "^10.4.19", "babel-loader": "^9.1.3", "babel-plugin-transform-scss": "^1.2.0", @@ -84,6 +87,7 @@ "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.4.5", + "vite": "^4.1.4", "vue": "^3.4.26" }, "engines": { @@ -98,6 +102,9 @@ "apps/docs-react": { "name": "@atomium/docs-react" }, + "apps/docs-vue": { + "name": "@atomium/docs-vue" + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "dev": true, @@ -132,6 +139,10 @@ "resolved": "apps/docs-react", "link": true }, + "node_modules/@atomium/docs-vue": { + "resolved": "apps/docs-vue", + "link": true + }, "node_modules/@atomium/scss-utils": { "resolved": "utils/scss", "link": true @@ -6969,297 +6980,430 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.17.tgz", - "integrity": "sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==", + "node_modules/@storybook/builder-vite": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.19.tgz", + "integrity": "sha512-llYpfYCHQCD0nPy+5J+H67iKcOpBrexIFO13wXxHQyl27Z+1T2JJj4cHqZs5S3a2XLiwf4df44NBvvwV5cmJmQ==", "dev": true, "dependencies": { - "@babel/core": "^7.23.2", - "@storybook/channels": "7.6.17", - "@storybook/client-logger": "7.6.17", - "@storybook/core-common": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/core-webpack": "7.6.17", - "@storybook/node-logger": "7.6.17", - "@storybook/preview": "7.6.17", - "@storybook/preview-api": "7.6.17", - "@swc/core": "^1.3.82", - "@types/node": "^18.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/csf-plugin": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/preview": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/types": "7.6.19", + "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "cjs-module-lexer": "^1.2.3", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "es-module-lexer": "^1.4.1", + "es-module-lexer": "^0.9.3", "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^8.0.0", + "find-cache-dir": "^3.0.0", "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "magic-string": "^0.30.5", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "url": "^0.11.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" + "magic-string": "^0.30.0", + "rollup": "^2.25.0 || ^3.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, + "peerDependencies": { + "@preact/preset-vite": "*", + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0", + "vite-plugin-glimmerx": "*" + }, "peerDependenciesMeta": { + "@preact/preset-vite": { + "optional": true + }, "typescript": { "optional": true + }, + "vite-plugin-glimmerx": { + "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", - "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/channels": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz", + "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/client-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz", + "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/core-common": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz", + "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@storybook/core-events": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/core-events": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz", + "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-plugin": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.19.tgz", + "integrity": "sha512-yUP0xfJyR8e6fmCgKoEt4c1EvslF8dZ8wtwVLE5hnC3kfs7xt8RVDiKLB/9NhYjY3mD/oOesX60HqRXDgJQHwA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" + "@storybook/csf-tools": "7.6.19", + "unplugin": "^1.3.1" }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-tools": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.19.tgz", + "integrity": "sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.19", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/node-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz", + "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==", "dev": true, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/preview": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.19.tgz", + "integrity": "sha512-VqRPua2koOQTOteB+VvuKNXFYQ7IDEopaPpj9Nx+3kom+bqp0hWdAysWcm6CtKN2GGzBQm+5PvGibMNdawsaVg==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/preview-api": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz", + "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.19", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/builder-vite/node_modules/@storybook/types": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz", + "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@storybook/channels": "7.6.19", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/@storybook/builder-vite/node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@storybook/channels": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", - "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", + "node_modules/@storybook/builder-vite/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/cli": { + "node_modules/@storybook/builder-vite/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/builder-vite/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/builder-vite/node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/@storybook/builder-vite/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/builder-vite/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-vite/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/builder-vite/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/builder-vite/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@storybook/builder-vite/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack5": { "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.17.tgz", - "integrity": "sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA==", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.17.tgz", + "integrity": "sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/types": "^7.23.0", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.17", + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", "@storybook/core-common": "7.6.17", "@storybook/core-events": "7.6.17", - "@storybook/core-server": "7.6.17", - "@storybook/csf-tools": "7.6.17", + "@storybook/core-webpack": "7.6.17", "@storybook/node-logger": "7.6.17", - "@storybook/telemetry": "7.6.17", - "@storybook/types": "7.6.17", + "@storybook/preview": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@swc/core": "^1.3.82", + "@types/node": "^18.0.0", "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", + "babel-loader": "^9.0.0", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "cjs-module-lexer": "^1.2.3", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "es-module-lexer": "^1.4.1", "express": "^4.17.3", - "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^8.0.0", "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", - "giget": "^1.0.0", - "globby": "^11.0.2", - "jscodeshift": "^0.15.1", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", + "html-webpack-plugin": "^5.5.0", + "magic-string": "^0.30.5", + "path-browserify": "^1.0.1", + "process": "^0.11.10", "semver": "^7.3.7", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", + "style-loader": "^3.3.1", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.1", "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@storybook/cli/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, - "engines": { - "node": ">= 6.0.0" + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/@storybook/cli/node_modules/ansi-styles": { + "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -7274,7 +7418,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/chalk": { + "node_modules/@storybook/builder-webpack5/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -7290,40 +7434,65 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "node_modules/@storybook/builder-webpack5/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/@storybook/cli/node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", + "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", "dev": true, "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" }, - "bin": { - "extract-zip": "cli.js" + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" } }, - "node_modules/@storybook/cli/node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/has-flag": { + "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -7332,13 +7501,214 @@ "node": ">=8" } }, - "node_modules/@storybook/cli/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "node_modules/@storybook/builder-webpack5/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "agent-base": "5", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/channels": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.17.tgz", + "integrity": "sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/core-server": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/telemetry": "7.6.17", + "@storybook/types": "7.6.17", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^2.8.0", + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/cli/node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/@storybook/cli/node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "dependencies": { + "agent-base": "5", "debug": "4" }, "engines": { @@ -8380,217 +8750,921 @@ "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.17.tgz", "integrity": "sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-api": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz", + "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.17", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.17.tgz", + "integrity": "sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-client": "7.6.17", + "@storybook/docs-tools": "7.6.17", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.6.17", + "@storybook/react-dom-shim": "7.6.17", + "@storybook/types": "7.6.17", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^18.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.1.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.6--canary.9.0c3f3b7.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", + "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "typescript": ">= 4.x", + "webpack": ">= 4" + } + }, + "node_modules/@storybook/react-dom-shim": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz", + "integrity": "sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/react-webpack5": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.17.tgz", + "integrity": "sha512-qGc2JxaSmvPXV7ndxA/8qPtPLK7lAwejL/QdrzLXhxEmVdZLMew640FBYgOV/zWnehV3BnivThln/8PsQyst/g==", + "dev": true, + "dependencies": { + "@storybook/builder-webpack5": "7.6.17", + "@storybook/preset-react-webpack": "7.6.17", + "@storybook/react": "7.6.17", + "@types/node": "^18.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.22.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-webpack5/node_modules/@types/node": { + "version": "18.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "18.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/router": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz", + "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz", + "integrity": "sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/theming": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz", + "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.6.17", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/types": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-7.6.19.tgz", + "integrity": "sha512-u3Lp9IeqOpsG6NwMK5AiimGwu/Jn3RAslLCdjqWvohXCZkcTMRCNAn+7W5ax7fa/kY/MeW3cm4RSUtWis0fphg==", + "dev": true, + "dependencies": { + "@storybook/core-client": "7.6.19", + "@storybook/docs-tools": "7.6.19", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.6.19", + "@storybook/types": "7.6.19", + "@vue/compiler-core": "^3.0.0", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "vue-component-type-helpers": "latest" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@storybook/vue3-vite": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-7.6.19.tgz", + "integrity": "sha512-VYqJBLxZ3c+ZYEGbEHsc5DKE7iAmwWFk4QS7XRSxr7tKvmuwNr53SugsLhKfb4cRfTG3iJw8p48U0e6TkiHeug==", + "dev": true, + "dependencies": { + "@storybook/builder-vite": "7.6.19", + "@storybook/core-server": "7.6.19", + "@storybook/vue3": "7.6.19", + "@vitejs/plugin-vue": "^4.0.0", + "magic-string": "^0.30.0", + "vue-docgen-api": "^4.40.0" + }, + "engines": { + "node": "^14.18 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/builder-manager": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.19.tgz", + "integrity": "sha512-Dt5OLh97xeWh4h2mk9uG0SbCxBKHPhIiHLHAKEIDzIZBdwUhuyncVNDPHW2NlXM+S7U0/iKs2tw05waqh2lHvg==", + "dev": true, + "dependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.6.19", + "@storybook/manager": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/channels": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz", + "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/client-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz", + "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/core-common": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz", + "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/core-events": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz", + "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/core-server": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.19.tgz", + "integrity": "sha512-7mKL73Wv5R2bEl0kJ6QJ9bOu5YY53Idu24QgvTnUdNsQazp2yUONBNwHIrNDnNEXm8SfCi4Mc9o0mmNRMIoiRA==", + "dev": true, + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.6.19", + "@storybook/channels": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.19", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/telemetry": "7.6.19", + "@storybook/types": "7.6.19", + "@types/detect-port": "^1.3.0", + "@types/node": "^18.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.1", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/csf-tools": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.19.tgz", + "integrity": "sha512-8Vzia3cHhDdGHuS3XKXJReCRxmfRq3vmTm/Te9yKZnPSAsC58CCKcMh8FNEFJ44vxYF9itKTkRutjGs+DprKLQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.19", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/manager": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.19.tgz", + "integrity": "sha512-fZWQcf59x4P0iiBhrL74PZrqKJAPuk9sWjP8BIkGbf8wTZtUunbY5Sv4225fOL4NLJbuX9/RYLUPoxQ3nucGHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/node-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz", + "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/preview-api": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz", + "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.19", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/telemetry": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.19.tgz", + "integrity": "sha512-rA5xum4I36M57iiD3uzmW0MOdpl0vEpHWBSAa5hK0a0ALPeY9TgAsQlI/0dSyNYJ/K7aczEEN6d4qm1NC4u10A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.19", + "@storybook/core-common": "7.6.19", + "@storybook/csf-tools": "7.6.19", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@storybook/types": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz", + "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.19", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/vue3-vite/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/preview-api": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz", - "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", + "node_modules/@storybook/vue3/node_modules/@storybook/channels": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.19.tgz", + "integrity": "sha512-2JGh+i95GwjtjqWqhtEh15jM5ifwbRGmXeFqkY7dpdHH50EEWafYHr2mg3opK3heVDwg0rJ/VBptkmshloXuvA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.17", - "@storybook/client-logger": "7.6.17", - "@storybook/core-events": "7.6.17", - "@storybook/csf": "^0.1.2", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.17", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/react": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.17.tgz", - "integrity": "sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==", + "node_modules/@storybook/vue3/node_modules/@storybook/client-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.19.tgz", + "integrity": "sha512-oGzOxbmLmciSIfd5gsxDzPmX8DttWhoYdPKxjMuCuWLTO2TWpkCWp1FTUMWO72mm/6V/FswT/aqpJJBBvdZ3RQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.17", - "@storybook/core-client": "7.6.17", - "@storybook/docs-tools": "7.6.17", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.6.17", - "@storybook/react-dom-shim": "7.6.17", - "@storybook/types": "7.6.17", - "@types/escodegen": "^0.0.6", - "@types/estree": "^0.0.51", - "@types/node": "^18.0.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "escodegen": "^2.1.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^15.0.0", - "ts-dedent": "^2.0.0", - "type-fest": "~2.19", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=16.0.0" + "@storybook/global": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@storybook/react-docgen-typescript-plugin": { - "version": "1.0.6--canary.9.0c3f3b7.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", - "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", + "node_modules/@storybook/vue3/node_modules/@storybook/core-client": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.19.tgz", + "integrity": "sha512-F0V9nzcEnj6DIpnw2ilrxsV4d9ibyyQS+Wi2uQtXy+wCQQm9PeBVqrOywjXAY2F9pcoftXOaepfhp8jrxX4MXw==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.2.2", - "tslib": "^2.0.0" + "@storybook/client-logger": "7.6.19", + "@storybook/preview-api": "7.6.19" }, - "peerDependencies": { - "typescript": ">= 4.x", - "webpack": ">= 4" - } - }, - "node_modules/@storybook/react-dom-shim": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz", - "integrity": "sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/react-webpack5": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.6.17.tgz", - "integrity": "sha512-qGc2JxaSmvPXV7ndxA/8qPtPLK7lAwejL/QdrzLXhxEmVdZLMew640FBYgOV/zWnehV3BnivThln/8PsQyst/g==", + "node_modules/@storybook/vue3/node_modules/@storybook/core-common": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.19.tgz", + "integrity": "sha512-njwpGzFJrfbJr/AFxGP8KMrfPfxN85KOfSlxYnQwRm5Z0H1D/lT33LhEBf5m37gaGawHeG7KryxO6RvaioMt2Q==", "dev": true, "dependencies": { - "@storybook/builder-webpack5": "7.6.17", - "@storybook/preset-react-webpack": "7.6.17", - "@storybook/react": "7.6.17", - "@types/node": "^18.0.0" - }, - "engines": { - "node": ">=16.0.0" + "@storybook/core-events": "7.6.19", + "@storybook/node-logger": "7.6.19", + "@storybook/types": "7.6.19", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@babel/core": "^7.22.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "typescript": { - "optional": true - } } }, - "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "18.19.0", + "node_modules/@storybook/vue3/node_modules/@storybook/core-events": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.19.tgz", + "integrity": "sha512-K/W6Uvum0ocZSgjbi8hiotpe+wDEHDZlvN+KlPqdh9ae9xDK8aBNBq9IelCoqM+uKO1Zj+dDfSQds7CD781DJg==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/react/node_modules/@types/estree": { - "version": "0.0.51", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.0", + "node_modules/@storybook/vue3/node_modules/@storybook/docs-tools": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.19.tgz", + "integrity": "sha512-JuwV6wtm7Hb7Kb5ValChfxy4J7XngfrSQNpvwsDCSBNVcQUv2y843hvclpa26Ptfr/c7zpUX8r9FGSaMDy+2aQ==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "@storybook/core-common": "7.6.19", + "@storybook/preview-api": "7.6.19", + "@storybook/types": "7.6.19", + "@types/doctrine": "^0.0.3", + "assert": "^2.1.0", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/react/node_modules/acorn": { - "version": "7.4.1", + "node_modules/@storybook/vue3/node_modules/@storybook/node-logger": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.19.tgz", + "integrity": "sha512-2g29QC44Zl1jKY37DmQ0/dO7+VSKnGgPI/x0mwVwQffypSapxH3rwLLT5Q5XLHeFyD+fhRu5w9Cj4vTGynJgpA==", "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/router": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz", - "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", + "node_modules/@storybook/vue3/node_modules/@storybook/preview-api": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.19.tgz", + "integrity": "sha512-04hdMSQucroJT4dBjQzRd7ZwH2hij8yx2nm5qd4HYGkd1ORkvlH6GOLph4XewNJl5Um3xfzFQzBhvkqvG0WaCQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.17", + "@storybook/channels": "7.6.19", + "@storybook/client-logger": "7.6.19", + "@storybook/core-events": "7.6.19", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.19", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "qs": "^6.10.0" + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz", - "integrity": "sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==", + "node_modules/@storybook/vue3/node_modules/@storybook/types": { + "version": "7.6.19", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.19.tgz", + "integrity": "sha512-DeGYrRPRMGTVfT7o2rEZtRzyLT2yKTI2exgpnxbwPWEFAduZCSfzBrcBXZ/nb5B0pjA9tUNWls1YzGkJGlkhpg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.17", - "@storybook/core-common": "7.6.17", - "@storybook/csf-tools": "7.6.17", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "read-pkg-up": "^7.0.1" + "@storybook/channels": "7.6.19", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "node_modules/@storybook/vue3/node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@storybook/vue3/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -8605,7 +9679,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/telemetry/node_modules/chalk": { + "node_modules/@storybook/vue3/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/vue3/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -8621,61 +9704,71 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/telemetry/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@storybook/vue3/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/telemetry/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/vue3/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@storybook/theming": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz", - "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", + "node_modules/@storybook/vue3/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.17", - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/types": { - "version": "7.6.17", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", - "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", + "node_modules/@storybook/vue3/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/vue3/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.17", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=8" } }, "node_modules/@storybook/web-components": { @@ -9858,14 +10951,27 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, "node_modules/@vue/compiler-core": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz", - "integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", "dev": true, "dependencies": { "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.26", + "@vue/shared": "3.4.27", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" @@ -9884,26 +10990,26 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz", - "integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz", - "integrity": "sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", "dev": true, "dependencies": { "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.26", - "@vue/compiler-dom": "3.4.26", - "@vue/compiler-ssr": "3.4.26", - "@vue/shared": "3.4.26", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", "postcss": "^8.4.38", @@ -9911,62 +11017,62 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz", - "integrity": "sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", + "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/compiler-dom": "3.4.27", + "@vue/shared": "3.4.27" } }, "node_modules/@vue/reactivity": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.26.tgz", - "integrity": "sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", "dev": true, "dependencies": { - "@vue/shared": "3.4.26" + "@vue/shared": "3.4.27" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.26.tgz", - "integrity": "sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", "dev": true, "dependencies": { - "@vue/reactivity": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz", - "integrity": "sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", "dev": true, "dependencies": { - "@vue/runtime-core": "3.4.26", - "@vue/shared": "3.4.26", + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.26.tgz", - "integrity": "sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", "dev": true, "dependencies": { - "@vue/compiler-ssr": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" }, "peerDependencies": { - "vue": "3.4.26" + "vue": "3.4.27" } }, "node_modules/@vue/shared": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz", - "integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", "dev": true }, "node_modules/@webassemblyjs/ast": { @@ -10676,6 +11782,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -10689,6 +11801,12 @@ "util": "^0.12.5" } }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, "node_modules/assign-symbols": { "version": "1.0.0", "dev": true, @@ -11137,6 +12255,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/bail": { "version": "2.0.2", "dev": true, @@ -11676,6 +12806,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "dependencies": { + "is-regex": "^1.0.3" + } + }, "node_modules/chokidar": { "version": "3.5.3", "dev": true, @@ -12293,6 +13432,16 @@ "dev": true, "license": "ISC" }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -13274,6 +14423,12 @@ "node": ">=6.0.0" } }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true + }, "node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -14211,6 +15366,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esm-resolve": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/esm-resolve/-/esm-resolve-1.0.11.tgz", + "integrity": "sha512-LxF0wfUQm3ldUDHkkV2MIbvvY0TgzIpJ420jHSV1Dm+IlplBEWiJTKWM61GtxUfvjV6iD4OtTYFGAGM2uuIUWg==", + "dev": true + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -16017,6 +17178,12 @@ "node": ">=0.10.0" } }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, "node_modules/hasown": { "version": "2.0.0", "dev": true, @@ -16689,6 +17856,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/is-extendable": { "version": "1.0.1", "dev": true, @@ -16873,6 +18062,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "dev": true, @@ -20641,6 +21836,12 @@ "jiti": "bin/jiti.js" } }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "dev": true, @@ -20962,6 +22163,16 @@ "node": "*" } }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -24086,16 +25297,16 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -24930,6 +26141,15 @@ "node": ">=0.4.0" } }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, "node_modules/promise.series": { "version": "0.2.0", "dev": true, @@ -25069,6 +26289,130 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -28242,6 +29586,12 @@ "node": ">=0.6" } }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -28374,6 +29724,12 @@ "dev": true, "license": "ISC" }, + "node_modules/ts-map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-map/-/ts-map-1.0.3.tgz", + "integrity": "sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==", + "dev": true + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -29208,17 +30564,97 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vue": { - "version": "3.4.26", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.26.tgz", - "integrity": "sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==", + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", + "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.26", - "@vue/compiler-sfc": "3.4.26", - "@vue/runtime-dom": "3.4.26", - "@vue/server-renderer": "3.4.26", - "@vue/shared": "3.4.26" + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-sfc": "3.4.27", + "@vue/runtime-dom": "3.4.27", + "@vue/server-renderer": "3.4.27", + "@vue/shared": "3.4.27" }, "peerDependencies": { "typescript": "*" @@ -29229,6 +30665,65 @@ } } }, + "node_modules/vue-component-type-helpers": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.17.tgz", + "integrity": "sha512-2car49m8ciqg/JjgMBkx7o/Fd2A7fHESxNqL/2vJYFLXm4VwYO4yH0rexOi4a35vwNgDyvt17B07Vj126l9rAQ==", + "dev": true + }, + "node_modules/vue-docgen-api": { + "version": "4.78.0", + "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.78.0.tgz", + "integrity": "sha512-RsZf+qzTttCCAN9v7AKmBykc2QWmO8csVk1c2aXeOktomSOu0NA7sgK4ObuRB5lpmtOvTnwuxssyYmxXxABr+A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", + "@vue/compiler-dom": "^3.2.0", + "@vue/compiler-sfc": "^3.2.0", + "ast-types": "^0.16.1", + "esm-resolve": "^1.0.8", + "hash-sum": "^2.0.0", + "lru-cache": "^8.0.3", + "pug": "^3.0.2", + "recast": "^0.23.1", + "ts-map": "^1.0.3", + "vue-inbrowser-compiler-independent-utils": "^4.69.0" + }, + "peerDependencies": { + "vue": ">=2" + } + }, + "node_modules/vue-docgen-api/node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vue-docgen-api/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/vue-inbrowser-compiler-independent-utils": { + "version": "4.71.1", + "resolved": "https://registry.npmjs.org/vue-inbrowser-compiler-independent-utils/-/vue-inbrowser-compiler-independent-utils-4.71.1.tgz", + "integrity": "sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg==", + "dev": true, + "peerDependencies": { + "vue": ">=2" + } + }, "node_modules/vue-template-compiler": { "version": "2.7.14", "dev": true, @@ -29578,6 +31073,21 @@ "node": ">=8" } }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -29902,7 +31412,10 @@ }, "packages/core": { "name": "@juntossomosmais/atomium", - "version": "1.15.1" + "version": "1.16.0", + "devDependencies": { + "vue": "^3.4.27" + } }, "packages/icons": { "name": "@juntossomosmais/atomium-icons" diff --git a/package.json b/package.json index fbbd0adc7..4ec87f9af 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,10 @@ "utils/*" ], "scripts": { - "build": "nx build @juntossomosmais/atomium && nx build @juntossomosmais/atomium-react", - "docs:build": "nx build @atomium/docs && nx build @atomium/docs-react", + "build": "nx build @juntossomosmais/atomium && nx build @juntossomosmais/atomium-react && nx build @juntossomosmais/atomium-vue", + "docs:build": "nx build @atomium/docs && nx build @atomium/docs-react && nx build @atomium/docs-vue", "docs-react:start": "nx run @atomium/docs-react:start", + "docs-vue:start": "nx run @atomium/docs-vue:start", "icons:build": "nx build @juntossomosmais/atomium-icons", "postinstall": "nx run @juntossomosmais/atomium:prebuild", "pre-commit": "git rev-parse -q --no-revs --verify MERGE_HEAD || lint-staged", @@ -55,6 +56,9 @@ "@storybook/react": "^7.6.17", "@storybook/react-webpack5": "^7.6.17", "@storybook/theming": "^7.6.17", + "@storybook/vue3": "^7.6.6", + "@storybook/vue3-vite": "^7.6.6", + "@vitejs/plugin-vue": "^4.0.0", "@storybook/web-components": "^7.6.17", "@storybook/web-components-webpack5": "^7.6.17", "@testing-library/jest-dom": "^6.4.4", @@ -100,6 +104,7 @@ "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.4.5", + "vite": "^4.1.4", "vue": "^3.4.26" }, "lint-staged": { diff --git a/packages/core/src/components/alert/stories/alert.vue.stories.tsx b/packages/core/src/components/alert/stories/alert.vue.stories.tsx new file mode 100644 index 000000000..ac185a690 --- /dev/null +++ b/packages/core/src/components/alert/stories/alert.vue.stories.tsx @@ -0,0 +1,68 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomAlert } from '@juntossomosmais/atomium/vue' + +import { AlertComponentArgs, AlertStoryArgs } from './alert.args' + +export default { + title: 'Components/Alert', + ...AlertStoryArgs, +} as Meta + +const createAlert = (args) => ({ + components: { AtomAlert }, + setup() { + return { args } + }, + template: ` + + `, +}) + +export const Default: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + }, +} + +export const Info: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + color: 'info', + icon: 'account-multiple', + }, +} + +export const Success: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + color: 'success', + icon: 'heart', + }, +} + +export const Warning: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + color: 'warning', + icon: 'alert', + }, +} + +export const Danger: StoryObj = { + render: (args) => createAlert(args), + args: { + ...AlertComponentArgs, + color: 'danger', + icon: 'account-multiple', + }, +} diff --git a/packages/core/src/components/badge/stories/badge.vue.stories.tsx b/packages/core/src/components/badge/stories/badge.vue.stories.tsx new file mode 100644 index 000000000..351806127 --- /dev/null +++ b/packages/core/src/components/badge/stories/badge.vue.stories.tsx @@ -0,0 +1,84 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomBadge } from '@juntossomosmais/atomium/vue' + +import { BadgeStoryArgs } from './badge.args' + +export default { + title: 'Components/Badge', + ...BadgeStoryArgs, +} as Meta + +const createBadge = (args) => ({ + components: { AtomBadge }, + setup() { + return { args } + }, + template: ` + {{ args.label }} + `, +}) + +export const Primary: StoryObj = { + render: (args) => createBadge(args), + args: { + type: 'primary', + label: 'Badge', + }, +} + +export const Secondary: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'secondary', + }, +} + +export const Success: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'success', + }, +} + +export const Warning: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'warning', + }, +} + +export const Danger: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'danger', + }, +} + +export const Neutral: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'neutral', + }, +} + +export const Dark: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'dark', + }, +} + +export const Info: StoryObj = { + render: (args) => createBadge(args), + args: { + ...Primary.args, + type: 'info', + }, +} diff --git a/packages/core/src/components/breadcrumb/stories/breadcrumb.vue.stories.tsx b/packages/core/src/components/breadcrumb/stories/breadcrumb.vue.stories.tsx new file mode 100644 index 000000000..53f93c459 --- /dev/null +++ b/packages/core/src/components/breadcrumb/stories/breadcrumb.vue.stories.tsx @@ -0,0 +1,40 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomBreadcrumb } from '@juntossomosmais/atomium/vue' + +import { BreadcrumbStoryArgs } from './breadcrumb.args' + +export default { + title: 'Components/Breadcrumb', + ...BreadcrumbStoryArgs, +} as Meta + +const createBreadcrumb = (args) => ({ + components: { AtomBreadcrumb }, + setup() { + return { args } + }, + template: ``, +}) + +export const Default: StoryObj = { + render: (args) => createBreadcrumb(args), + args: { + items: [ + { + text: 'First level', + title: 'Go to first level', + redirect: () => console.log('/first'), + }, + { + text: 'Intermediary level', + title: 'Go to intermediary level', + redirect: () => console.log('/intermediary'), + }, + { + text: 'Current level', + title: 'This is the current level', + }, + ], + }, +} diff --git a/packages/core/src/components/button/stories/button.vue.stories.tsx b/packages/core/src/components/button/stories/button.vue.stories.tsx new file mode 100644 index 000000000..4679afea8 --- /dev/null +++ b/packages/core/src/components/button/stories/button.vue.stories.tsx @@ -0,0 +1,181 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomButton, AtomIcon } from '@juntossomosmais/atomium/vue' + +import { ButtonComponentArgs, ButtonStoryArgs } from './button.args' + +export default { + title: 'Components/Button', + ...ButtonStoryArgs, +} as Meta + +const createButton = (args, themeColor = 'light') => ({ + components: { AtomButton }, + setup() { + return { args, themeColor } + }, + template: ` +
+ + {{ args.label }} + +
+ `, +}) + +export const Primary: StoryObj = { + render: (args) => createButton(args), + args: { + ...ButtonComponentArgs, + }, +} + +export const Secondary: StoryObj = { + render: (args) => createButton(args), + args: { + ...Primary.args, + color: 'secondary', + fill: 'outline', + }, +} + +export const White: StoryObj = { + render: (args) => createButton(args, 'dark'), + args: { + ...Primary.args, + color: 'white', + fill: 'outline', + }, +} + +export const Text: StoryObj = { + render: (args) => createButton(args), + args: { + ...Primary.args, + color: 'secondary', + fill: 'clear', + }, +} + +export const CircleButton = { + render: (args) => ({ + components: { AtomButton, AtomIcon }, + setup() { + return { args } + }, + template: ` + + + + `, + }), + args: { + ...Primary.args, + color: 'secondary', + fill: 'outline', + shape: 'circle', + }, +} + +export const Disabled: StoryObj = { + render: (args) => createButton(args), + args: { + ...Primary.args, + disabled: true, + }, +} + +export const IconAndText = { + render: (args) => ({ + components: { AtomButton, AtomIcon }, + setup() { + return { args } + }, + template: ` + + + {{ args.label }} + + `, + }), + args: { + ...Primary.args, + }, +} + +export const Link = { + render: (args) => ({ + components: { AtomButton }, + setup() { + return { args } + }, + template: ` + + {{ args.label }} + + `, + }), + argTypes: { + href: { + options: ['Download', 'Navigate'], + mapping: { + Download: '/custom/jsm.svg', + Navigate: 'https://www.juntossomosmais.com.br', + }, + }, + download: { + control: 'text', + }, + target: { + options: ['_blank', '_self', '_parent', '_top'], + }, + }, + args: { + ...Primary.args, + href: undefined, + download: undefined, + target: undefined, + }, +} diff --git a/packages/core/src/components/carousel/stories/carousel.core.stories.tsx b/packages/core/src/components/carousel/stories/carousel.core.stories.tsx index 48dc74bb4..422284a4a 100644 --- a/packages/core/src/components/carousel/stories/carousel.core.stories.tsx +++ b/packages/core/src/components/carousel/stories/carousel.core.stories.tsx @@ -1,6 +1,8 @@ import { Meta, StoryObj } from '@storybook/web-components' import { html } from 'lit' +import './carousel.css' + import { CarouselComponentArgs, CarouselStoryArgs } from './carousel.args' export default { @@ -16,26 +18,14 @@ const createCarousel = (args) => { has-navigation=${args.hasNavigation} has-pagination=${args.hasPagination} > - -
- Example 1 -
+ +
Example 1
- -
- Example 2 -
+ +
Example 2
- -
- Example 3 -
+ +
Example 3
` @@ -67,19 +57,11 @@ export const Autoplay: StoryObj = { export const Thumbnails: StoryObj = { render: () => html` - -
- Example 1 -
+ +
Example 1
- -
- Example 2 -
+ +
Example 2
diff --git a/packages/core/src/components/carousel/stories/carousel.css b/packages/core/src/components/carousel/stories/carousel.css new file mode 100644 index 000000000..8e993fa0e --- /dev/null +++ b/packages/core/src/components/carousel/stories/carousel.css @@ -0,0 +1,20 @@ +.slide { + align-items: center; + background-color: var(--color-brand-primary-regular); + color: var(--color-neutral-white); + display: flex; + height: 300px; + justify-content: center; +} + +.slide:nth-child(1) { + background-color: var(--color-brand-primary-regular); +} + +.slide:nth-child(2) { + background-color: var(--color-brand-secondary-regular); +} + +.slide:nth-child(3) { + background-color: var(--color-contextual-success-regular); +} diff --git a/packages/core/src/components/carousel/stories/carousel.react.stories.tsx b/packages/core/src/components/carousel/stories/carousel.react.stories.tsx index d3c6fb32d..3384702cc 100644 --- a/packages/core/src/components/carousel/stories/carousel.react.stories.tsx +++ b/packages/core/src/components/carousel/stories/carousel.react.stories.tsx @@ -2,6 +2,8 @@ import { AtomCarousel, AtomCarouselItem } from '@juntossomosmais/atomium/react' import { Meta, StoryObj } from '@storybook/react' import React from 'react' +import './carousel.css' + import { CarouselComponentArgs, CarouselStoryArgs } from './carousel.args' export default { @@ -17,47 +19,14 @@ const createCarousel = (args) => ( hasNavigation={args.hasNavigation} hasPagination={args.hasPagination} > - -
- Example 1 -
+ +
Example 1
- -
- Example 2 -
+ +
Example 2
- -
- Example 3 -
+ +
Example 3
) @@ -93,33 +62,11 @@ export const Thumbnails = () => { return ( - -
- Example 1 -
+ +
Example 1
- -
- Example 2 -
+ +
Example 2
) diff --git a/packages/core/src/components/carousel/stories/carousel.vue.stories.tsx b/packages/core/src/components/carousel/stories/carousel.vue.stories.tsx new file mode 100644 index 000000000..5dee4afa6 --- /dev/null +++ b/packages/core/src/components/carousel/stories/carousel.vue.stories.tsx @@ -0,0 +1,96 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomCarousel, AtomCarouselItem } from '@juntossomosmais/atomium/vue' + +import './carousel.css' + +import { CarouselComponentArgs, CarouselStoryArgs } from './carousel.args' + +export default { + title: 'Components/Carousel', + ...CarouselStoryArgs, +} as Meta + +const createCarousel = (args) => ({ + components: { AtomCarousel, AtomCarouselItem }, + setup() { + return { args } + }, + template: ` + + +
+ Example 1 +
+
+ +
+ Example 2 +
+
+ +
+ Example 3 +
+
+
+ `, +}) + +export const Default: StoryObj = { + render: (args) => createCarousel(args), + args: { + ...CarouselComponentArgs, + }, +} + +export const Loop: StoryObj = { + render: (args) => createCarousel(args), + args: { + ...CarouselComponentArgs, + loop: true, + }, +} + +export const Autoplay: StoryObj = { + render: (args) => createCarousel(args), + args: { + ...CarouselComponentArgs, + autoplay: 3000, + }, +} + +const createCarouselWithThumbnails = () => ({ + components: { AtomCarousel, AtomCarouselItem }, + data() { + return { + thumbnails: [ + 'https://via.placeholder.com/50', + 'https://via.placeholder.com/50', + ], + } + }, + template: ` + + +
+ Example 1 +
+
+ +
+ Example 2 +
+
+
+ `, +}) + +export const Thumbnails = () => { + return createCarouselWithThumbnails() +} diff --git a/packages/core/src/components/chip/stories/chip.vue.stories.tsx b/packages/core/src/components/chip/stories/chip.vue.stories.tsx new file mode 100644 index 000000000..f655eb0a3 --- /dev/null +++ b/packages/core/src/components/chip/stories/chip.vue.stories.tsx @@ -0,0 +1,69 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomChip } from '@juntossomosmais/atomium/vue' + +import { ChipComponentArgs, ChipStoryArgs } from './chip.args' + +export default { + title: 'Components/Chip', + ...ChipStoryArgs, +} as Meta + +const createChip = (args) => ({ + components: { AtomChip }, + setup() { + return { args } + }, + template: ` + + {{ args.label }} + + `, +}) + +export const Default: StoryObj = { + render: (args) => createChip(args), + args: { + ...ChipComponentArgs, + }, +} + +export const Disabled: StoryObj = { + render: (args) => createChip(args), + args: { + ...ChipComponentArgs, + disabled: true, + }, +} + +export const Activated: StoryObj = { + render: (args) => createChip(args), + args: { + ...ChipComponentArgs, + activated: true, + }, +} + +export const WithIcon: StoryObj = { + render: (args) => createChip(args), + args: { + ...ChipComponentArgs, + icon: 'check', + }, +} + +export const WithClose: StoryObj = { + render: (args) => createChip(args), + args: { + ...ChipComponentArgs, + close: true, + }, +} diff --git a/packages/core/src/components/grid/stories/grid.args.ts b/packages/core/src/components/grid/stories/grid.args.ts index f9ac9b9c1..ad12f1c37 100644 --- a/packages/core/src/components/grid/stories/grid.args.ts +++ b/packages/core/src/components/grid/stories/grid.args.ts @@ -1,6 +1,6 @@ +import { Category } from '@atomium/storybook-utils/enums/table' import { withActions } from '@storybook/addon-actions/decorator' -import { Category } from '@atomium/storybook-utils/enums/table' export const GridStoryArgs = { decorators: [withActions], @@ -59,16 +59,3 @@ export const GridStoryArgs = { }, }, } - -export const GridCSS = ` - .col > div { - box-shadow: - 0px 2px 1px -1px var(--color-neutral-light-3), - 0px 1px 2px 0px var(--color-neutral-light-4), - 0px 1px 3px 0px var(--color-neutral-light-4); - border-radius: var(--border-radius); - color: var(--color-neutral-light-2); - padding: var(--spacing-xsmall); - text-align: center; - } -` diff --git a/packages/core/src/components/grid/stories/grid.core.stories.tsx b/packages/core/src/components/grid/stories/grid.core.stories.tsx index 64053e351..fae844dc7 100644 --- a/packages/core/src/components/grid/stories/grid.core.stories.tsx +++ b/packages/core/src/components/grid/stories/grid.core.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryObj } from '@storybook/web-components' - import { html } from 'lit' -import { GridCSS, GridStoryArgs } from './grid.args' +import { GridStoryArgs } from './grid.args' + +import './grid.css' export default { title: 'Components/Grid', @@ -34,10 +35,6 @@ export const Default: StoryObj = {
size=8 & size-md=6
- - `, } @@ -63,10 +60,6 @@ export const AutoSize: StoryObj = {
size=auto
- - `, } @@ -94,10 +87,6 @@ export const Offset: StoryObj = {
2
- - `, } @@ -119,9 +108,5 @@ export const PushAndPull: StoryObj = {
3
- - `, } diff --git a/packages/core/src/components/grid/stories/grid.css b/packages/core/src/components/grid/stories/grid.css new file mode 100644 index 000000000..7f064458b --- /dev/null +++ b/packages/core/src/components/grid/stories/grid.css @@ -0,0 +1,10 @@ +.col > div { + border-radius: var(--border-radius); + box-shadow: + 0 2px 1px -1px var(--color-neutral-light-3), + 0 1px 2px 0 var(--color-neutral-light-4), + 0 1px 3px 0 var(--color-neutral-light-4); + color: var(--color-neutral-light-2); + padding: var(--spacing-xsmall); + text-align: center; +} diff --git a/packages/core/src/components/grid/stories/grid.react.stories.tsx b/packages/core/src/components/grid/stories/grid.react.stories.tsx index d98b7caf9..4287f7c45 100644 --- a/packages/core/src/components/grid/stories/grid.react.stories.tsx +++ b/packages/core/src/components/grid/stories/grid.react.stories.tsx @@ -1,9 +1,11 @@ +import { AtomCol, AtomGrid } from '@juntossomosmais/atomium/react' import { Meta, StoryObj } from '@storybook/react' import React from 'react' -import { AtomCol, AtomGrid } from '@juntossomosmais/atomium/react' -import { GridCSS, GridStoryArgs } from './grid.args' +import { GridStoryArgs } from './grid.args' + +import './grid.css' export default { title: 'Components/Grid', @@ -37,8 +39,6 @@ export const Default: StoryObj = {
size=8 & sizeMd=6
- - ), } @@ -66,8 +66,6 @@ export const AutoSize: StoryObj = {
size=auto
- - ), } @@ -101,8 +99,6 @@ export const Offset: StoryObj = {
2
- - ), } @@ -126,8 +122,6 @@ export const PushAndPull: StoryObj = {
3
- - ), } diff --git a/packages/core/src/components/grid/stories/grid.vue.stories.tsx b/packages/core/src/components/grid/stories/grid.vue.stories.tsx new file mode 100644 index 000000000..59b3ad1e1 --- /dev/null +++ b/packages/core/src/components/grid/stories/grid.vue.stories.tsx @@ -0,0 +1,137 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomCol, AtomGrid } from '@juntossomosmais/atomium/vue' + +import { GridStoryArgs } from './grid.args' + +import './grid.css' + +export default { + title: 'Components/Grid', + ...GridStoryArgs, +} as Meta + +export const Default: StoryObj = { + render: () => ({ + components: { AtomGrid, AtomCol }, + template: ` +
+ + +
size=8
+
+ +
size=6 & sizeMd=4
+
+ +
size=4 & sizeMd=4
+
+ +
size=8 & sizeMd=6
+
+ +
size=8 & sizeMd=10
+
+ +
size=8 & sizeMd=10
+
+ +
size=8 & sizeMd=6
+
+
+
+ `, + }), +} + +export const AutoSize: StoryObj = { + render: () => ({ + components: { AtomGrid, AtomCol }, + template: ` +
+ + +
size=auto
+
+ +
size=auto
+
+ +
default
+
+ +
default
+
+ +
size=auto
+
+ +
size=auto
+
+
+
+ `, + }), +} + +export const Offset: StoryObj = { + render: () => ({ + components: { AtomGrid, AtomCol }, + template: ` +
+

+ Column 2 has offset set to "3" +

+ + +
1
+
+ +
2
+
+ +
3
+
+
+ +

+ Column 1 has offset set to "4" +

+ + +
1
+
+ +
2
+
+
+
+ `, + }), +} + +export const PushAndPull: StoryObj = { + render: () => ({ + components: { AtomGrid, AtomCol }, + template: ` +
+

+ Column 1 has push set to "4" and + column 2 has pull set to "4" +

+ + + +
1
+
+ +
2
+
+ +
3
+
+
+
+ `, + }), +} diff --git a/packages/core/src/components/icon/stories/icon.vue.stories.tsx b/packages/core/src/components/icon/stories/icon.vue.stories.tsx new file mode 100644 index 000000000..e33e1ba0d --- /dev/null +++ b/packages/core/src/components/icon/stories/icon.vue.stories.tsx @@ -0,0 +1,32 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomIcon } from '@juntossomosmais/atomium/vue' + +import { IconComponentArgs, IconStoryArgs } from './icon.args' + +export default { + title: 'Components/Icon', + component: AtomIcon, + ...IconStoryArgs, +} as Meta + +const createIcon = (args) => ({ + components: { AtomIcon }, + setup() { + return { args } + }, + template: ` + + `, +}) + +export const Default: StoryObj = { + render: (args) => createIcon(args), + args: { + ...IconComponentArgs, + }, +} diff --git a/packages/core/src/components/input/stories/input.args.ts b/packages/core/src/components/input/stories/input.args.ts index 34ae21804..3058514b2 100644 --- a/packages/core/src/components/input/stories/input.args.ts +++ b/packages/core/src/components/input/stories/input.args.ts @@ -312,4 +312,6 @@ export const InputComponentArgs = { clearInput: false, readonly: false, passwordToggle: false, + value: '', + helperText: '', } diff --git a/packages/core/src/components/input/stories/input.vue.stories.tsx b/packages/core/src/components/input/stories/input.vue.stories.tsx new file mode 100644 index 000000000..8452c877f --- /dev/null +++ b/packages/core/src/components/input/stories/input.vue.stories.tsx @@ -0,0 +1,112 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomInput } from '@juntossomosmais/atomium/vue' + +import { ref } from 'vue' + +import { InputComponentArgs, InputStoryArgs } from './input.args' + +export default { + title: 'Components/Input', + ...InputStoryArgs, +} as Meta + +const createInput = (args) => ({ + components: { AtomInput }, + setup() { + return { args } + }, + template: ` + + `, +}) + +export const Default: StoryObj = { + render: (args) => createInput(args), + args: { + ...InputComponentArgs, + }, +} + +export const Password: StoryObj = { + render: (args) => createInput(args), + args: { + ...InputComponentArgs, + type: 'password', + passwordToggle: true, + }, +} + +export const Disabled: StoryObj = { + render: (args) => createInput(args), + args: { + ...InputComponentArgs, + disabled: true, + }, +} + +export const InputIcon: StoryObj = { + render: (args) => createInput(args), + args: { + ...InputComponentArgs, + icon: 'magnify', + }, +} + +export const HelperText: StoryObj = { + render: (args) => createInput(args), + args: { + ...InputComponentArgs, + helperText: 'This is a helper text example', + }, +} + +export const ErrorState = { + render: () => ({ + components: { AtomInput }, + setup() { + const hasError = ref(false) + + const validateEmail = (email) => { + return email.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/) + } + + const validate = (value) => { + hasError.value = false + + if (value === '') return + + return validateEmail(value) + ? (hasError.value = false) + : (hasError.value = true) + } + + return { hasError, validate } + }, + template: ` + + `, + }), +} diff --git a/packages/core/src/components/select/stories/select.args.ts b/packages/core/src/components/select/stories/select.args.ts index 4cd6932b1..0d2cc8665 100644 --- a/packages/core/src/components/select/stories/select.args.ts +++ b/packages/core/src/components/select/stories/select.args.ts @@ -163,4 +163,8 @@ export const SelectComponentArgs = { placeholder: 'Select an option', mode: 'md', fill: 'solid', + value: '', + icon: '', + helperText: '', + errorText: '', } diff --git a/packages/core/src/components/select/stories/select.vue.stories.tsx b/packages/core/src/components/select/stories/select.vue.stories.tsx new file mode 100644 index 000000000..97c79e954 --- /dev/null +++ b/packages/core/src/components/select/stories/select.vue.stories.tsx @@ -0,0 +1,87 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomSelect } from '@juntossomosmais/atomium/vue' + +import { SelectComponentArgs, SelectStoryArgs } from './select.args' + +export default { + title: 'Components/Select', + ...SelectStoryArgs, +} as Meta + +const createSelect = (args) => ({ + components: { AtomSelect }, + setup() { + return { args } + }, + template: ` + + `, +}) + +export const Default: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + }, +} + +export const Disabled: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + disabled: true, + }, +} + +export const SelectIcon: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + icon: 'account-multiple', + }, +} + +export const HelperText: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + helperText: 'Example of helper text', + }, +} + +export const ErrorText: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + errorText: 'Example of error text', + }, +} + +export const Multiple: StoryObj = { + render: (args) => createSelect(args), + args: { + ...SelectComponentArgs, + multiple: true, + }, +} diff --git a/packages/core/src/components/tag/stories/tag.vue.stories.tsx b/packages/core/src/components/tag/stories/tag.vue.stories.tsx new file mode 100644 index 000000000..b2a96cb55 --- /dev/null +++ b/packages/core/src/components/tag/stories/tag.vue.stories.tsx @@ -0,0 +1,145 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomTag } from '@juntossomosmais/atomium/vue' + +import { TagStoryArgs } from './tag.args' + +export default { + title: 'Components/Tag', + ...TagStoryArgs, +} as Meta + +const createTag = (args) => ({ + components: { AtomTag }, + setup() { + return { args } + }, + template: ` + + {{ args.label }} + + `, +}) + +export const Success: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'success', + label: 'Promotion', + icon: '', + }, +} + +export const SuccessWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'success', + label: 'Promotion', + icon: 'tag', + }, +} + +export const Danger: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'danger', + label: 'Canceled', + icon: '', + }, +} + +export const DangerWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'danger', + label: 'Canceled', + icon: 'close-circle-outline', + }, +} + +export const Warning: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'warning', + label: 'In Progress', + icon: '', + }, +} + +export const WarningWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'warning', + label: 'In Progress', + icon: 'timer-outline', + }, +} + +export const Info: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'info', + label: 'Partial Delivery', + icon: '', + }, +} + +export const InfoWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'info', + label: 'Partial Delivery', + icon: 'truck', + }, +} + +export const Dark: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'dark', + label: 'Most rescued', + icon: '', + }, +} + +export const DarkWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'dark', + label: 'Most rescued', + icon: 'wallet-giftcard', + }, +} + +export const Light: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'light', + label: 'More Points', + icon: '', + }, +} + +export const LightWithIcon: StoryObj = { + render: (args) => createTag(args), + args: { + color: 'light', + label: 'More Points', + icon: 'plus-thick', + }, +} + +export const CustomColor: StoryObj = { + render: (args) => createTag(args), + args: { + label: 'Most Loved', + icon: 'heart', + customBackgroundColor: '#a006fa', + customTextColor: '#00ff95', + }, +} diff --git a/packages/core/src/components/textarea/stories/textarea.args.ts b/packages/core/src/components/textarea/stories/textarea.args.ts index 3da50d3f4..a54ffb85d 100644 --- a/packages/core/src/components/textarea/stories/textarea.args.ts +++ b/packages/core/src/components/textarea/stories/textarea.args.ts @@ -271,5 +271,7 @@ export const TextareaComponentArgs = { mode: 'md', disabled: false, readonly: false, - autoGrow: false, + value: '', + helperText: '', + icon: '', } diff --git a/packages/core/src/components/textarea/stories/textarea.vue.stories.tsx b/packages/core/src/components/textarea/stories/textarea.vue.stories.tsx new file mode 100644 index 000000000..1cb80c02d --- /dev/null +++ b/packages/core/src/components/textarea/stories/textarea.vue.stories.tsx @@ -0,0 +1,126 @@ +import { Meta, StoryObj } from '@storybook/vue3' + +import { AtomTextarea } from '@juntossomosmais/atomium/vue' + +import { ref } from 'vue' + +import { TextareaComponentArgs, TextareaStoryArgs } from './textarea.args' + +export default { + title: 'Components/Textarea', + ...TextareaStoryArgs, +} as Meta + +const createTextarea = (args) => ({ + components: { AtomTextarea }, + setup() { + return { args } + }, + template: ` + + `, +}) + +export const Default: StoryObj = { + render: (args) => createTextarea(args), + args: { + ...TextareaComponentArgs, + }, +} + +export const Disabled: StoryObj = { + render: (args) => createTextarea(args), + args: { + ...TextareaComponentArgs, + disabled: true, + }, +} + +export const TextareaIcon: StoryObj = { + render: (args) => createTextarea(args), + args: { + ...TextareaComponentArgs, + icon: 'account-multiple', + }, +} + +export const HelperText: StoryObj = { + render: (args) => createTextarea(args), + args: { + ...TextareaComponentArgs, + helperText: 'This is a helper text example', + }, +} + +export const ErrorState = { + render: () => ({ + components: { AtomTextarea }, + setup() { + const hasError = ref(false) + + const validateEmail = (email) => { + return email.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/) + } + + const validate = (value) => { + hasError.value = false + + if (value === '') return + + return validateEmail(value) + ? (hasError.value = false) + : (hasError.value = true) + } + + return { hasError, validate } + }, + template: ` + + `, + }), +} + +export const WithCounter: StoryObj = { + render: () => ({ + components: { AtomTextarea }, + methods: { + counterFormatter(inputLength, maxLength) { + return `${inputLength}/300` + }, + }, + template: ` + + `, + }), +} diff --git a/packages/core/stencil.config.ts b/packages/core/stencil.config.ts index c3d251131..e708c359c 100644 --- a/packages/core/stencil.config.ts +++ b/packages/core/stencil.config.ts @@ -6,6 +6,103 @@ import { vueOutputTarget } from '@stencil/vue-output-target' import { reactBooleanFixOutputTarget } from './output-target/react-boolean' +// Since Ionic components are imported in `global.ts` +// we need to exclude them here to avoid unnecessary imports in the React and Vue output module +const excludeComponents = [ + 'ion-accordion', + 'ion-accordion-group', + 'ion-action-sheet', + 'ion-alert', + 'ion-app', + 'ion-avatar', + 'ion-back-button', + 'ion-backdrop', + 'ion-badge', + 'ion-breadcrumb', + 'ion-breadcrumbs', + 'ion-button', + 'ion-buttons', + 'ion-card', + 'ion-card-content', + 'ion-card-header', + 'ion-card-subtitle', + 'ion-card-title', + 'ion-checkbox', + 'ion-chip', + 'ion-col', + 'ion-content', + 'ion-datetime', + 'ion-datetime-button', + 'ion-fab', + 'ion-fab-button', + 'ion-fab-list', + 'ion-footer', + 'ion-grid', + 'ion-header', + 'ion-icon', + 'ion-img', + 'ion-infinite-scroll', + 'ion-infinite-scroll-content', + 'ion-input', + 'ion-item', + 'ion-item-divider', + 'ion-item-group', + 'ion-item-option', + 'ion-item-options', + 'ion-item-sliding', + 'ion-label', + 'ion-list', + 'ion-list-header', + 'ion-loading', + 'ion-menu', + 'ion-menu-button', + 'ion-menu-toggle', + 'ion-modal', + 'ion-nav', + 'ion-nav-link', + 'ion-note', + 'ion-picker', + 'ion-picker-column', + 'ion-picker-column-internal', + 'ion-picker-internal', + 'ion-popover', + 'ion-progress-bar', + 'ion-radio', + 'ion-radio-group', + 'ion-range', + 'ion-refresher', + 'ion-refresher-content', + 'ion-reorder', + 'ion-reorder-group', + 'ion-ripple-effect', + 'ion-route', + 'ion-route-redirect', + 'ion-router', + 'ion-router-link', + 'ion-router-outlet', + 'ion-row', + 'ion-searchbar', + 'ion-segment', + 'ion-segment-button', + 'ion-select', + 'ion-select-option', + 'ion-select-popover', + 'ion-skeleton-text', + 'ion-spinner', + 'ion-split-pane', + 'ion-tab', + 'ion-tab-bar', + 'ion-tab-button', + 'ion-tabs', + 'ion-text', + 'ion-textarea', + 'ion-thumbnail', + 'ion-title', + 'ion-toast', + 'ion-toggle', + 'ion-toolbar', +] + export const config: Config = { namespace: 'core', plugins: [ @@ -28,108 +125,14 @@ export const config: Config = { proxiesFile: '../vue/src/components/index.ts', includeDefineCustomElements: true, includePolyfills: true, + excludeComponents, }), reactOutputTarget({ componentCorePackage: '@juntossomosmais/atomium', proxiesFile: '../react/src/components/index.ts', includeDefineCustomElements: true, includePolyfills: true, - // Since Ionic components are imported in `global.ts` - // we need to exclude them here to avoid unnecessary imports in the React output module - excludeComponents: [ - 'ion-accordion', - 'ion-accordion-group', - 'ion-action-sheet', - 'ion-alert', - 'ion-app', - 'ion-avatar', - 'ion-back-button', - 'ion-backdrop', - 'ion-badge', - 'ion-breadcrumb', - 'ion-breadcrumbs', - 'ion-button', - 'ion-buttons', - 'ion-card', - 'ion-card-content', - 'ion-card-header', - 'ion-card-subtitle', - 'ion-card-title', - 'ion-checkbox', - 'ion-chip', - 'ion-col', - 'ion-content', - 'ion-datetime', - 'ion-datetime-button', - 'ion-fab', - 'ion-fab-button', - 'ion-fab-list', - 'ion-footer', - 'ion-grid', - 'ion-header', - 'ion-icon', - 'ion-img', - 'ion-infinite-scroll', - 'ion-infinite-scroll-content', - 'ion-input', - 'ion-item', - 'ion-item-divider', - 'ion-item-group', - 'ion-item-option', - 'ion-item-options', - 'ion-item-sliding', - 'ion-label', - 'ion-list', - 'ion-list-header', - 'ion-loading', - 'ion-menu', - 'ion-menu-button', - 'ion-menu-toggle', - 'ion-modal', - 'ion-nav', - 'ion-nav-link', - 'ion-note', - 'ion-picker', - 'ion-picker-column', - 'ion-picker-column-internal', - 'ion-picker-internal', - 'ion-popover', - 'ion-progress-bar', - 'ion-radio', - 'ion-radio-group', - 'ion-range', - 'ion-refresher', - 'ion-refresher-content', - 'ion-reorder', - 'ion-reorder-group', - 'ion-ripple-effect', - 'ion-route', - 'ion-route-redirect', - 'ion-router', - 'ion-router-link', - 'ion-router-outlet', - 'ion-row', - 'ion-searchbar', - 'ion-segment', - 'ion-segment-button', - 'ion-select', - 'ion-select-option', - 'ion-select-popover', - 'ion-skeleton-text', - 'ion-spinner', - 'ion-split-pane', - 'ion-tab', - 'ion-tab-bar', - 'ion-tab-button', - 'ion-tabs', - 'ion-text', - 'ion-textarea', - 'ion-thumbnail', - 'ion-title', - 'ion-toast', - 'ion-toggle', - 'ion-toolbar', - ], + excludeComponents, }), reactBooleanFixOutputTarget({ attachPropsFile: diff --git a/packages/vue/README.md b/packages/vue/README.md index ed5ccf1c4..b501fee73 100644 --- a/packages/vue/README.md +++ b/packages/vue/README.md @@ -1,8 +1,6 @@ # Atomium - Vue -๐Ÿšง **This is a work in progress** ๐Ÿšง - -[Vue Integration of Stencil](https://stenciljs.com/docs/vue) just works with Vue 3. If you want to use Vue 2, please use the Web Components implementation of Atomium. +This is the Vue transpiled implementation of the Atomium design system to be used in Vue projects ## Getting Started @@ -17,24 +15,9 @@ npm i @juntossomosmais/atomium ```jsx import '@juntossomosmais/atomium/core.css' -import { - applyPolyfills, - defineCustomElements, -} from '@juntossomosmais/atomium/loader' - -applyPolyfills().then(() => defineCustomElements(window)) - -Click me -``` - -## Vue 2 - -For Vue 2, a configuration is need in order to avoid the warning about unknown component. Add the below code to your Vue initialization: +import { AtomButton } from '@juntossomosmais/atomium/vue' -```js -Vue.config.ignoredElements = [ - /^atom-/ -] +Click me ``` -The setting is explained at the [Vue docs](https://v2.vuejs.org/v2/api/#ignoredElements), the same doc exists for [Vue 3](https://vuejs.org/guide/extras/web-components.html#using-custom-elements-in-vue), but no worries, Stencil integrations just handle everything. +You could check the Vue components transpiled of Stencil in [Vue Stories](https://juntossomosmais.github.io/atomium/?path=/docs/Vue_introduction--docs) diff --git a/packages/vue/package.json b/packages/vue/package.json index 6d307f9d5..bcd6bd3b1 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -2,8 +2,39 @@ "name": "@juntossomosmais/atomium-vue", "description": "Vue transpiled for Atomium", "private": true, - "type": "module", "main": "dist/index.js", - "module": "dist/index.js", - "types": "dist/types/index.d.ts" + "types": "dist/index.d.ts", + "files": [ + "dist/" + ], + "scripts": { + "start": "tsc -p . --watch", + "build": "nx build @juntossomosmais/atomium && npm run compile && npm run copy", + "compile": "tsc --outDir ../core/vue/dist --declarationDir ../core/vue/dist/types", + "copy": "npx copyfiles --flat ./package.json ../core/vue" + }, + "nx": { + "targets": { + "build": { + "dependsOn": [ + { + "projects": [ + "@juntossomosmais/atomium" + ], + "target": "build" + } + ] + }, + "start": { + "dependsOn": [ + { + "projects": [ + "@juntossomosmais/atomium" + ], + "target": "build" + } + ] + } + } + } } diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index cb64ac1b5..e59f61ee0 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -1 +1,2 @@ export * from './components' +export * from './plugin' diff --git a/packages/vue/src/plugin.ts b/packages/vue/src/plugin.ts new file mode 100644 index 000000000..2ed0b5f84 --- /dev/null +++ b/packages/vue/src/plugin.ts @@ -0,0 +1,13 @@ +import { + applyPolyfills, + defineCustomElements, +} from '@juntossomosmais/atomium/loader' +import { Plugin } from 'vue' + +export const ComponentLibrary: Plugin = { + async install() { + applyPolyfills().then(() => { + defineCustomElements() + }) + }, +} diff --git a/packages/vue/tsconfig.json b/packages/vue/tsconfig.json index c918a7ba9..b794d7142 100644 --- a/packages/vue/tsconfig.json +++ b/packages/vue/tsconfig.json @@ -1,15 +1,22 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "rootDir": "src", - "outDir": "../core/vue", + "declaration": true, + "declarationDir": "dist/types", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, "lib": ["dom", "es2020"], "module": "es2015", "moduleResolution": "node", - "target": "es2017", + "noImplicitAny": false, + "noLib": false, + "rootDir": "src", + "outDir": "dist", + "removeComments": true, "skipLibCheck": true, - "declarationDir": "../core/vue/types" + "sourceMap": true, + "target": "es2017" }, - "include": ["src"], + "include": ["src/**/*.ts"], "exclude": ["node_modules"] }