diff --git a/.storybook/main.ts b/.storybook/main.ts index e409de02..fcfff918 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -11,6 +11,7 @@ const config: StorybookConfig = { '@storybook/addon-essentials', '@chromatic-com/storybook', '@storybook/addon-interactions', + '@storybook/addon-viewport', ], framework: { name: '@storybook/react-webpack5', diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 838f72d8..1fdf2555 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,6 +1,19 @@ import type { Preview } from '@storybook/react'; +import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'; import '../src/styles/reset.css'; +const customViewports = { + mobile: { + name: 'mobile', + styles: { + width: '430px', + height: '400px', + }, + type: 'mobile', + }, +}; + + const preview: Preview = { parameters: { controls: { @@ -9,7 +22,13 @@ const preview: Preview = { date: /Date$/i, }, }, + viewport: { + viewports: { + ...INITIAL_VIEWPORTS, + ...customViewports + }, + }, }, }; -export default preview; +export default preview; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b3ffdcfb..e37a8bdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "@storybook/addon-interactions": "^8.1.9", "@storybook/addon-links": "^8.1.9", "@storybook/addon-onboarding": "^8.1.9", + "@storybook/addon-viewport": "^8.4.7", "@storybook/addon-webpack5-compiler-swc": "^1.0.3", "@storybook/blocks": "^8.1.9", "@storybook/react": "^8.1.9", @@ -109,18 +110,6 @@ "node": ">=6.0.0" } }, - "node_modules/@aw-web-design/x-default-browser": { - "version": "1.4.126", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", - "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", - "dev": true, - "dependencies": { - "default-browser-id": "3.0.0" - }, - "bin": { - "x-default-browser": "bin/x-default-browser.js" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -670,21 +659,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", @@ -1132,22 +1106,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz", - "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-flow": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", @@ -1867,23 +1825,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-flow-strip-types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1937,97 +1878,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", - "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/register/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -2141,16 +1991,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2756,12 +2596,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fal-works/esbuild-plugin-global-externals": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", - "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", - "dev": true - }, "node_modules/@floating-ui/core": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", @@ -3343,17 +3177,6 @@ } } }, - "node_modules/@ndelangen/get-tarball": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", - "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", - "dev": true, - "dependencies": { - "gunzip-maybe": "^1.4.2", - "pump": "^3.0.0", - "tar-fs": "^2.1.1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3802,18 +3625,6 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@storybook/addon-actions": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.9.tgz", @@ -3921,6 +3732,19 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-viewport": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.9.tgz", + "integrity": "sha512-ZCoqzNWp2w9TLJL8RC0fjv1RQcuGhwI64jjlGvszZm7TxP82C1SS71X/jbx5LWc2Dyl5xMt1/yOGFXvkAB2SUg==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, "node_modules/@storybook/addon-highlight": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.9.tgz", @@ -4027,9 +3851,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.9.tgz", - "integrity": "sha512-ZCoqzNWp2w9TLJL8RC0fjv1RQcuGhwI64jjlGvszZm7TxP82C1SS71X/jbx5LWc2Dyl5xMt1/yOGFXvkAB2SUg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.4.7.tgz", + "integrity": "sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -4037,6 +3861,9 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-webpack5-compiler-swc": { @@ -4100,32 +3927,6 @@ } } }, - "node_modules/@storybook/builder-manager": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.9.tgz", - "integrity": "sha512-CmDXVrx3moUde6VWmdb49eCYHNu4e2wxeANKSsW1yEC0OLysQ9N6W9B5CuVWeoV3axVX/tKDqC83YY/008/4Qg==", - "dev": true, - "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.1.9", - "@storybook/manager": "8.1.9", - "@storybook/node-logger": "8.1.9", - "@types/ejs": "^3.1.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.10", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/builder-webpack5": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.1.9.tgz", @@ -4287,399 +4088,126 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli": { + "node_modules/@storybook/client-logger": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.9.tgz", - "integrity": "sha512-+4DQJf5yrdmKrAs8sx0WvKu/ja49oOLQU2MxRPKhXW3bxDFjkTYvWuCKwSbMwUa7Npt96CK3bwAPP53jz/+mXA==", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", + "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", + "dev": true, + "dependencies": { + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", + "@storybook/client-logger": "8.1.9", + "@storybook/csf": "^0.1.7", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.5", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", + "memoizerific": "^1.11.3", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + } + }, + "node_modules/@storybook/core": { + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.4.7.tgz", + "integrity": "sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "better-opn": "^3.0.2", + "browser-assert": "^1.2.1", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", + "esbuild-register": "^3.5.0", + "jsdoc-type-pratt-parser": "^4.0.0", + "process": "^0.11.10", + "recast": "^0.23.5", + "semver": "^7.6.2", + "util": "^0.12.5", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.9.tgz", + "integrity": "sha512-+KReoo41FUknTxk3fbnoul995SnZdKAVSK6MuqKOQnC9PH6bh864k6i1LShVZx/wk3n25h9xorD3UgyRI6sZ0w==", "dev": true, "dependencies": { - "@babel/core": "^7.24.4", - "@babel/types": "^7.24.0", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.1.9", - "@storybook/core-common": "8.1.9", "@storybook/core-events": "8.1.9", - "@storybook/core-server": "8.1.9", "@storybook/csf-tools": "8.1.9", "@storybook/node-logger": "8.1.9", - "@storybook/telemetry": "8.1.9", "@storybook/types": "8.1.9", - "@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", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", + "esbuild-register": "^3.5.0", "execa": "^5.0.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", "find-up": "^5.0.0", "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "giget": "^1.0.0", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^3.1.1", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", + "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", + "prettier-fallback": "npm:prettier@^3", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", "semver": "^7.3.7", - "strip-json-comments": "^3.0.1", "tempy": "^3.1.0", "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0" - }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" + "ts-dedent": "^2.0.0", + "util": "^0.12.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, - "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/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/cli/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/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/cli/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/client-logger": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", - "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/codemod": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.9.tgz", - "integrity": "sha512-thTdwiAO/eUUyiCzgkyGjA4fE3BAdXqf3WdTRjH4Vqk4yby9EalwcBitkj/M6bCDGjdoxU2q2ByUDD9opwyMiw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/preset-env": "^7.24.4", - "@babel/types": "^7.24.0", - "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.9", - "@storybook/node-logger": "8.1.9", - "@storybook/types": "8.1.9", - "@types/cross-spawn": "^6.0.2", - "cross-spawn": "^7.0.3", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "lodash": "^4.17.21", - "prettier": "^3.1.1", - "recast": "^0.23.5", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/codemod/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/codemod/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/codemod/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/components": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", - "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", - "dev": true, - "dependencies": { - "@radix-ui/react-dialog": "^1.0.5", - "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.1.9", - "@storybook/csf": "^0.1.7", - "@storybook/global": "^5.0.0", - "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.1.9", - "@storybook/types": "8.1.9", - "memoizerific": "^1.11.3", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" - } - }, - "node_modules/@storybook/core-common": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.9.tgz", - "integrity": "sha512-+KReoo41FUknTxk3fbnoul995SnZdKAVSK6MuqKOQnC9PH6bh864k6i1LShVZx/wk3n25h9xorD3UgyRI6sZ0w==", - "dev": true, - "dependencies": { - "@storybook/core-events": "8.1.9", - "@storybook/csf-tools": "8.1.9", - "@storybook/node-logger": "8.1.9", - "@storybook/types": "8.1.9", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "cross-spawn": "^7.0.3", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", - "esbuild-register": "^3.5.0", - "execa": "^5.0.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", - "prettier-fallback": "npm:prettier@^3", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "semver": "^7.3.7", - "tempy": "^3.1.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "node_modules/@storybook/core-common/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==", @@ -4991,127 +4519,24 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server": { + "node_modules/@storybook/core-webpack": { "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.9.tgz", - "integrity": "sha512-bn3M264vr3GY9kgAdRRIUdVV4PcUqtYvttQ/h6XDVJWC1UYUQW49zQNxQLQUXSQo4KLISnvTKHmP5qgbY6BASQ==", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.1.9.tgz", + "integrity": "sha512-BuTuotH62S7izi3x04WXtPqBFU98qBB87z+GiEEerCMk4l2+rPKyKdkZHULhhH+0vzstLE39hq2YrWdqjdfwqA==", "dev": true, "dependencies": { - "@aw-web-design/x-default-browser": "1.4.126", - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.1.9", - "@storybook/channels": "8.1.9", "@storybook/core-common": "8.1.9", - "@storybook/core-events": "8.1.9", - "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.9", - "@storybook/docs-mdx": "3.1.0-next.0", - "@storybook/global": "^5.0.0", - "@storybook/manager": "8.1.9", - "@storybook/manager-api": "8.1.9", "@storybook/node-logger": "8.1.9", - "@storybook/preview-api": "8.1.9", - "@storybook/telemetry": "8.1.9", "@storybook/types": "8.1.9", - "@types/detect-port": "^1.3.0", - "@types/diff": "^5.0.9", "@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", - "diff": "^5.2.0", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "globby": "^14.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" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/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/core-server/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/core-server/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-server/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-server/node_modules/semver": { + "node_modules/@storybook/core/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", @@ -5123,47 +4548,6 @@ "node": ">=10" } }, - "node_modules/@storybook/core-server/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-server/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/core-webpack": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.1.9.tgz", - "integrity": "sha512-BuTuotH62S7izi3x04WXtPqBFU98qBB87z+GiEEerCMk4l2+rPKyKdkZHULhhH+0vzstLE39hq2YrWdqjdfwqA==", - "dev": true, - "dependencies": { - "@storybook/core-common": "8.1.9", - "@storybook/node-logger": "8.1.9", - "@storybook/types": "8.1.9", - "@types/node": "^18.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/csf": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", @@ -5220,12 +4604,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/docs-mdx": { - "version": "3.1.0-next.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-3.1.0-next.0.tgz", - "integrity": "sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==", - "dev": true - }, "node_modules/@storybook/docs-tools": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.9.tgz", @@ -5284,16 +4662,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.9.tgz", - "integrity": "sha512-sp1N7ZgOtGK5uhCgwuPQlJ4JYKr3TyNeahotwAf2FUb5n70YyXDzqoqO8q8H0y9NarX+EcP1gJ4GmpT9+qTxsQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/manager-api": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.9.tgz", @@ -5703,69 +5071,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.9.tgz", - "integrity": "sha512-ayNt4g6MKIQCj5fPmB2WhYbEEH+AMVswUOedFp2DtPojeDnVJMp38lSFykTbjaq+/HrDpnoZn6fG4pd+05N+dg==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "8.1.9", - "@storybook/core-common": "8.1.9", - "@storybook/csf-tools": "8.1.9", - "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/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/test": { "version": "8.1.9", "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.9.tgz", @@ -6677,15 +5982,6 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, - "node_modules/@types/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -6695,30 +5991,12 @@ "@types/ms": "*" } }, - "node_modules/@types/detect-port": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz", - "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==", - "dev": true - }, - "node_modules/@types/diff": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz", - "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==", - "dev": true - }, "node_modules/@types/doctrine": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", "dev": true }, - "node_modules/@types/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", - "dev": true - }, "node_modules/@types/emscripten": { "version": "1.39.13", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", @@ -6876,23 +6154,11 @@ "@types/node": "*" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, - "node_modules/@types/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==", - "dev": true - }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", @@ -7572,22 +6838,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "esbuild": ">=0.10.0" - } + "dev": true }, "node_modules/@yarnpkg/fslib": { "version": "2.10.3", @@ -7677,15 +6928,6 @@ "node": ">=0.4.0" } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8044,12 +7286,6 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "node_modules/asynciterator.prototype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", @@ -8112,15 +7348,6 @@ "dequal": "^2.0.3" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/babel-loader": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", @@ -8288,15 +7515,6 @@ "node": ">=12.0.0" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -8390,18 +7608,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8430,15 +7636,6 @@ "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", "dev": true }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", - "dev": true, - "dependencies": { - "pako": "~0.2.0" - } - }, "node_modules/browserslist": { "version": "4.24.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", @@ -8680,15 +7877,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/chromatic": { "version": "11.5.4", "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.5.4.tgz", @@ -8721,15 +7909,6 @@ "node": ">=6.0" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "dependencies": { - "consola": "^3.2.3" - } - }, "node_modules/cjs-module-lexer": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", @@ -8772,21 +7951,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -8998,15 +8162,6 @@ "node": ">=0.8" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -9372,22 +8527,6 @@ "node": ">=0.10.0" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -9455,12 +8594,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9497,15 +8630,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -9518,44 +8642,6 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "dev": true }, - "node_modules/detect-package-manager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", - "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", - "dev": true, - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "dev": true, - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -9720,39 +8806,6 @@ "node": ">=12" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -9765,21 +8818,6 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.65", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", @@ -9810,15 +8848,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/endent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", @@ -10081,12 +9110,6 @@ "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/esbuild-plugin-alias": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", - "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", - "dev": true - }, "node_modules/esbuild-register": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", @@ -11185,12 +10208,6 @@ "node": ">=0.8.0" } }, - "node_modules/fetch-retry": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", - "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", - "dev": true - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -11259,36 +10276,6 @@ "ramda": "0.29.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/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/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/filesize": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.2.tgz", @@ -11491,15 +10478,6 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/flow-parser": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz", - "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/follow-redirects": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", @@ -11684,12 +10662,6 @@ "node": ">= 0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, "node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -11704,36 +10676,6 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/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/fs-monkey": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", @@ -11850,15 +10792,6 @@ "node": ">=6" } }, - "node_modules/get-npm-tarball-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz", - "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==", - "dev": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -11899,25 +10832,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/giget": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", - "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", - "dev": true, - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.3", - "nypm": "^0.3.8", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "tar": "^6.2.0" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -12038,23 +10952,6 @@ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/gunzip-maybe": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", - "dev": true, - "dependencies": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" - }, - "bin": { - "gunzip-maybe": "bin.js" - } - }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -12224,12 +11121,6 @@ "react-is": "^16.7.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -12894,12 +11785,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -12972,15 +11857,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -13279,80 +12155,19 @@ "node_modules/jackspeak": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/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/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/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" + "url": "https://github.com/sponsors/isaacs" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jest-worker": { @@ -13395,86 +12210,13 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jscodeshift": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", - "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/preset-flow": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@babel/register": "^7.22.15", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.23.3", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - }, - "peerDependenciesMeta": { - "@babel/preset-env": { - "optional": true - } - } - }, - "node_modules/jscodeshift/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/jscodeshift/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/jscodeshift/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/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, "node_modules/jsesc": { @@ -13568,15 +12310,6 @@ "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -13619,15 +12352,6 @@ "node": ">=14.0.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -13813,28 +12537,6 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", @@ -14017,55 +12719,6 @@ "node": ">=8" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -14261,18 +12914,6 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -14293,232 +12934,52 @@ } } }, - "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", - "dev": true - }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nypm": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", - "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", - "dev": true, - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "execa": "^8.0.1", - "pathe": "^1.1.2", - "ufo": "^1.4.0" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/nypm/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/nypm/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nypm/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/nypm/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nypm/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nypm/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nypm/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6.13.0" } }, - "node_modules/nypm/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/nypm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "engines": { - "node": ">=14" + "dependencies": { + "path-key": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, - "node_modules/nypm/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/object-assign": { @@ -14666,12 +13127,6 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", - "dev": true - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -14887,12 +13342,6 @@ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -15036,12 +13485,6 @@ "node": ">=8" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -15051,17 +13494,6 @@ "node": "*" } }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -15079,24 +13511,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -15345,19 +13759,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -15395,37 +13796,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -15812,56 +14182,6 @@ "react-dom": ">=16.6.0" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -16661,12 +14981,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -16744,38 +15058,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true - }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -16834,28 +15116,31 @@ "dev": true }, "node_modules/storybook": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.9.tgz", - "integrity": "sha512-Jymrfn299+MJBIZVDYPJlIGJMZM33udFCjbeRdOHIXF2BfpqOSS2FoEfmlp3zya3gwyZDq/BE7uiBc7HIVZa4g==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.4.7.tgz", + "integrity": "sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==", "dev": true, "dependencies": { - "@storybook/cli": "8.1.9" + "@storybook/core": "8.4.7" }, "bin": { - "sb": "index.js", - "storybook": "index.js" + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true - }, "node_modules/strict-event-emitter": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", @@ -17237,63 +15522,6 @@ "node": ">=6" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/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/telejson": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", @@ -17303,18 +15531,6 @@ "memoizerific": "^1.11.3" } }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -17324,19 +15540,6 @@ "node": ">=14.16" } }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/tempy": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", @@ -17443,37 +15646,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -17833,12 +16005,6 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", - "dev": true - }, "node_modules/uglify-js": { "version": "3.18.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", @@ -17913,18 +16079,6 @@ "node": ">=4" } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -18021,15 +16175,6 @@ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -18197,16 +16342,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18803,17 +16938,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", @@ -18835,15 +16959,6 @@ } } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 4af34519..ce18167f 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@storybook/addon-interactions": "^8.1.9", "@storybook/addon-links": "^8.1.9", "@storybook/addon-onboarding": "^8.1.9", + "@storybook/addon-viewport": "^8.4.7", "@storybook/addon-webpack5-compiler-swc": "^1.0.3", "@storybook/blocks": "^8.1.9", "@storybook/react": "^8.1.9", diff --git a/public/index.html b/public/index.html index d683a159..c828820d 100644 --- a/public/index.html +++ b/public/index.html @@ -1,6 +1,7 @@ + PICK-O diff --git a/src/App.tsx b/src/App.tsx index 42ed6274..afc3e23a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import React from 'react'; +import React, { useEffect } from 'react'; import { LocalizationProvider } from '@mui/x-date-pickers'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import 'dayjs/locale/ko'; @@ -39,10 +39,25 @@ import BalanceGameCreationPage from './pages/BalanceGameCreationPage/BalanceGame // import PostPage from './pages/PostPage/PostPage'; // import SearchResultPage from './pages/SearchResultPage/SearchResultPage'; // import SignUpPage from './pages/SignUpPage/SignUpPage'; -// import { useNewSelector } from './store'; -// import { selectAccessToken } from './store/auth'; +import { getCookie } from './utils/cookie'; +import { axiosInstance } from './api/interceptor'; +import { useNewDispatch } from './store'; +import { tokenActions } from './store/auth'; const App: React.FC = () => { + const dispatch = useNewDispatch(); + + useEffect(() => { + const token = getCookie('accessToken'); + if (token) { + localStorage.setItem('accessToken', token); + localStorage.setItem('refreshToken', 'refreshToken'); + + dispatch(tokenActions.setToken(token)); + axiosInstance.defaults.headers.Authorization = `Bearer ${token}`; + } + }, [dispatch]); + // const accessToken = useNewSelector(selectAccessToken); // const { member } = useMemberQuery(useParseJwt(accessToken).memberId); const isLoggedIn = !!localStorage.getItem('accessToken'); diff --git a/src/api/game.ts b/src/api/game.ts index cd4ccf7b..49ff1299 100644 --- a/src/api/game.ts +++ b/src/api/game.ts @@ -4,6 +4,7 @@ import { BalanceGame, Game, GameContent, + GameParams, GameSet, TempGame, } from '@/types/game'; @@ -61,21 +62,35 @@ export const getNewGames = async () => { }; export const getBestGames = async (tagName: string) => { + const params: GameParams = { + page: GAME_VALUE.PAGE, + size: GAME_VALUE.SIZE, + }; + + if (tagName !== '인기') { + params.tagName = tagName; + } + const { data } = await axiosInstance.get( `${END_POINT.BEST_GAME}`, - { - params: { tagName, page: GAME_VALUE.PAGE, size: GAME_VALUE.SIZE }, - }, + { params }, ); return data; }; export const getLatestGames = async (tagName: string) => { + const params: GameParams = { + page: GAME_VALUE.PAGE, + size: GAME_VALUE.SIZE, + }; + + if (tagName !== '인기') { + params.tagName = tagName; + } + const { data } = await axiosInstance.get( `${END_POINT.LATEST_GAME}`, - { - params: { tagName, page: GAME_VALUE.PAGE, size: GAME_VALUE.SIZE }, - }, + { params }, ); return data; }; diff --git a/src/api/mypages.ts b/src/api/mypages.ts index 71521241..80178222 100644 --- a/src/api/mypages.ts +++ b/src/api/mypages.ts @@ -62,6 +62,6 @@ export const getGameBookmark = async (page: number, size: number) => { }; export const getMyInfo = async (memberId: Id): Promise => { - const response = await axiosInstance.get(`/members/${memberId}`); - return response.data; + const { data } = await axiosInstance.get(`/members/${memberId}`); + return data; }; diff --git a/src/assets/index.ts b/src/assets/index.ts index fa163110..5946521a 100644 --- a/src/assets/index.ts +++ b/src/assets/index.ts @@ -91,6 +91,31 @@ export { default as IcMobileVote } from './svg/MobileVote.svg'; export { default as IcMobileVoteDF } from './svg/MobileVoteDF.svg'; export { default as IcMobileWritten } from './svg/MobileWritten.svg'; export { default as IcMobileWrittenDF } from './svg/MobileWrittenDF.svg'; +export { default as ListIcon } from './svg/list.svg'; +export { default as LogoSmall } from './svg/logo-small.svg'; +export { default as PickVoteSmall } from './svg/pick-vote-small.svg'; +export { default as RandomGameSmall } from './svg/random-game-small.svg'; +export { default as CheckSmall } from './svg/check-small.svg'; +export { default as PopularSmall } from './svg/popular-small.svg'; +export { default as CoupleSmall } from './svg/couple-small.svg'; +export { default as TasteSmall } from './svg/taste-small.svg'; +export { default as WorldcupSmall } from './svg/worldcup-small.svg'; +export { default as TriangleDown } from './svg/triangle-down.svg'; +export { default as TriangleUp } from './svg/triangle-up.svg'; +export { default as BookmarkDFSmall } from './svg/bookmark-df-sm.svg'; +export { default as BookmarkPRSmall } from './svg/bookmark-pr-sm.svg'; +export { default as CirclePencil } from './svg/circle-pencil.svg'; +export { default as CircleClose } from './svg/circle-close.svg'; +export { default as CircleGame } from './svg/circle-game.svg'; +export { default as CircleTalkPick } from './svg/circle-talkpick.svg'; +export { default as MobileBookmarkDF } from './svg/mobile-bookmark-df.svg'; +export { default as MobileBookmarkPR } from './svg/mobile-bookmark-pr.svg'; +export { default as MobileShare } from './svg/mobile-share.svg'; +export { default as MobileModalClose } from './svg/mobile-modal-close.svg'; +export { default as MobileFolder } from './svg/mobile-folder.svg'; +export { default as MobileFolderCheck } from './svg/mobile-folder-check.svg'; +export { default as MobileCheckIcon } from './svg/mobile-check-icon.svg'; +export { default as MobileTempIcon } from './svg/mobile-temp-icon.svg'; // TODO: 이전 SVG export { default as Email } from './svg/email.svg'; diff --git a/src/assets/svg/bookmark-df-sm.svg b/src/assets/svg/bookmark-df-sm.svg new file mode 100644 index 00000000..ec9b0085 --- /dev/null +++ b/src/assets/svg/bookmark-df-sm.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/bookmark-df.svg b/src/assets/svg/bookmark-df.svg index 89eb93d1..7e5564a3 100644 --- a/src/assets/svg/bookmark-df.svg +++ b/src/assets/svg/bookmark-df.svg @@ -1,10 +1,10 @@ - + - \ No newline at end of file + diff --git a/src/assets/svg/bookmark-pr-sm.svg b/src/assets/svg/bookmark-pr-sm.svg new file mode 100644 index 00000000..18378deb --- /dev/null +++ b/src/assets/svg/bookmark-pr-sm.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/check-small.svg b/src/assets/svg/check-small.svg new file mode 100644 index 00000000..dddd9a86 --- /dev/null +++ b/src/assets/svg/check-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/circle-close.svg b/src/assets/svg/circle-close.svg new file mode 100644 index 00000000..d0cf7663 --- /dev/null +++ b/src/assets/svg/circle-close.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/circle-game.svg b/src/assets/svg/circle-game.svg new file mode 100644 index 00000000..7ddf5dca --- /dev/null +++ b/src/assets/svg/circle-game.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/circle-pencil.svg b/src/assets/svg/circle-pencil.svg new file mode 100644 index 00000000..75e16a94 --- /dev/null +++ b/src/assets/svg/circle-pencil.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/circle-talkpick.svg b/src/assets/svg/circle-talkpick.svg new file mode 100644 index 00000000..7c669882 --- /dev/null +++ b/src/assets/svg/circle-talkpick.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/couple-small.svg b/src/assets/svg/couple-small.svg new file mode 100644 index 00000000..9e503224 --- /dev/null +++ b/src/assets/svg/couple-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/svg/list.svg b/src/assets/svg/list.svg new file mode 100644 index 00000000..10ad71c9 --- /dev/null +++ b/src/assets/svg/list.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/logo-small.svg b/src/assets/svg/logo-small.svg new file mode 100644 index 00000000..16739f01 --- /dev/null +++ b/src/assets/svg/logo-small.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/mobile-bookmark-df.svg b/src/assets/svg/mobile-bookmark-df.svg new file mode 100644 index 00000000..07f5e9cd --- /dev/null +++ b/src/assets/svg/mobile-bookmark-df.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/mobile-bookmark-pr.svg b/src/assets/svg/mobile-bookmark-pr.svg new file mode 100644 index 00000000..ea6fae8f --- /dev/null +++ b/src/assets/svg/mobile-bookmark-pr.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/mobile-check-icon.svg b/src/assets/svg/mobile-check-icon.svg new file mode 100644 index 00000000..8f1c6e73 --- /dev/null +++ b/src/assets/svg/mobile-check-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/svg/mobile-folder-check.svg b/src/assets/svg/mobile-folder-check.svg new file mode 100644 index 00000000..6e33df9e --- /dev/null +++ b/src/assets/svg/mobile-folder-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/svg/mobile-folder.svg b/src/assets/svg/mobile-folder.svg new file mode 100644 index 00000000..c815ebf1 --- /dev/null +++ b/src/assets/svg/mobile-folder.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/svg/mobile-modal-close.svg b/src/assets/svg/mobile-modal-close.svg new file mode 100644 index 00000000..5a75ae98 --- /dev/null +++ b/src/assets/svg/mobile-modal-close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/svg/mobile-share.svg b/src/assets/svg/mobile-share.svg new file mode 100644 index 00000000..faae4e31 --- /dev/null +++ b/src/assets/svg/mobile-share.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/mobile-temp-icon.svg b/src/assets/svg/mobile-temp-icon.svg new file mode 100644 index 00000000..88c27224 --- /dev/null +++ b/src/assets/svg/mobile-temp-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/svg/pick-vote-small.svg b/src/assets/svg/pick-vote-small.svg new file mode 100644 index 00000000..09056124 --- /dev/null +++ b/src/assets/svg/pick-vote-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/svg/popular-small.svg b/src/assets/svg/popular-small.svg new file mode 100644 index 00000000..a4d7f805 --- /dev/null +++ b/src/assets/svg/popular-small.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/random-game-small.svg b/src/assets/svg/random-game-small.svg new file mode 100644 index 00000000..62f97593 --- /dev/null +++ b/src/assets/svg/random-game-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/svg/taste-small.svg b/src/assets/svg/taste-small.svg new file mode 100644 index 00000000..b79afbfb --- /dev/null +++ b/src/assets/svg/taste-small.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/svg/triangle-down.svg b/src/assets/svg/triangle-down.svg new file mode 100644 index 00000000..a8520511 --- /dev/null +++ b/src/assets/svg/triangle-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/triangle-up.svg b/src/assets/svg/triangle-up.svg new file mode 100644 index 00000000..49a27ed9 --- /dev/null +++ b/src/assets/svg/triangle-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/svg/worldcup-small.svg b/src/assets/svg/worldcup-small.svg new file mode 100644 index 00000000..e367c3f3 --- /dev/null +++ b/src/assets/svg/worldcup-small.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/components/atoms/BalanceGameCategoryButton/BalanceGameCategoryButton.style.ts b/src/components/atoms/BalanceGameCategoryButton/BalanceGameCategoryButton.style.ts index c04a9ff7..61ace0fa 100644 --- a/src/components/atoms/BalanceGameCategoryButton/BalanceGameCategoryButton.style.ts +++ b/src/components/atoms/BalanceGameCategoryButton/BalanceGameCategoryButton.style.ts @@ -12,6 +12,9 @@ export const buttonStyle = css({ border: 'none', outline: 'none', width: '284px', + '@media (max-width: 430px)': { + width: '84px', + }, }); export const buttonTitleStyle = css({ @@ -20,18 +23,32 @@ export const buttonTitleStyle = css({ alignItems: 'center', marginBottom: '8px', transition: 'color 0.3s ease-in-out', + '@media (max-width: 430px)': { + marginBottom: '2px', + }, }); export const iconStyle = css({ marginLeft: '8px', + '@media (max-width: 430px)': { + marginLeft: '2px', + }, }); -export const activeStyle = css(typo.Component.Bold, { +export const activeStyle = css({ + ...typo.Component.Bold, color: color.MAIN, + '@media (max-width: 430px)': { + ...typo.Mobile.Text.Bold_12, + }, }); -export const inactiveStyle = css(typo.Component.Medium, { +export const inactiveStyle = css({ + ...typo.Component.Medium, color: color.GY[1], + '@media (max-width: 430px)': { + ...typo.Mobile.Text.Medium_12, + }, }); export const inactiveBadgeWrapStyle = css({ @@ -40,6 +57,9 @@ export const inactiveBadgeWrapStyle = css({ justifyContent: 'center', width: '100%', marginTop: '22px', + '@media (max-width: 430px)': { + marginTop: '6px', + }, }); export const badgeWrapStyle = css({ @@ -48,21 +68,32 @@ export const badgeWrapStyle = css({ justifyContent: 'center', width: '100%', marginTop: '14px', + '@media (max-width: 430px)': { + marginTop: '2px', + }, }); export const inactiveLineStyle = (label: string) => { - let borderRadius = '0'; + let baseBorderRadius = '0'; + let mobileBorderRadius = '0'; + if (label === '인기') { - borderRadius = '10px 0 0 10px'; + baseBorderRadius = '10px 0 0 10px'; + mobileBorderRadius = '3px 0 0 3px'; } else if (label === 'μ›”λ“œμ»΅') { - borderRadius = '0 10px 10px 0'; + baseBorderRadius = '0 10px 10px 0'; + mobileBorderRadius = '0 3px 3px 0'; } return css({ flex: 1, height: '5px', backgroundColor: color.GY[2], - borderRadius, + borderRadius: baseBorderRadius, + '@media (max-width: 430px)': { + height: '1.5px', + borderRadius: mobileBorderRadius, + }, }); }; @@ -71,6 +102,10 @@ export const leftLineStyle = css({ height: '5px', borderRadius: '10px 0 0 10px', backgroundColor: color.MAIN, + '@media (max-width: 430px)': { + height: '1.5px', + borderRadius: '3px 0 0 3px', + }, }); export const rightLineStyle = css({ @@ -78,11 +113,20 @@ export const rightLineStyle = css({ height: '5px', borderRadius: '0 10px 10px 0', backgroundColor: color.MAIN, + '@media (max-width: 430px)': { + height: '1.5px', + borderRadius: '0 3px 3px 0', + }, }); -export const badgeStyle = css(typo.Comment.SemiBold, { +export const badgeStyle = css({ + ...typo.Comment.SemiBold, padding: '4.5px 32px', borderRadius: '30px', backgroundColor: color.MAIN, color: color.WT, + '@media (max-width: 430px)': { + ...typo.Mobile.Text.SemiBold_7, + padding: '0.5px 5.5px', + }, }); diff --git a/src/components/atoms/Bookmark/Bookmark.style.ts b/src/components/atoms/Bookmark/Bookmark.style.ts index f863a744..7b9468e2 100644 --- a/src/components/atoms/Bookmark/Bookmark.style.ts +++ b/src/components/atoms/Bookmark/Bookmark.style.ts @@ -11,6 +11,10 @@ export const bookmarkButton = css` border: none; cursor: pointer; padding: 0; + @media (max-width: 430px) { + width: 19px; + height: 19px; + } `; export const icon = css` diff --git a/src/components/atoms/Bookmark/Bookmark.tsx b/src/components/atoms/Bookmark/Bookmark.tsx index 6c395ca7..af3b2287 100644 --- a/src/components/atoms/Bookmark/Bookmark.tsx +++ b/src/components/atoms/Bookmark/Bookmark.tsx @@ -1,5 +1,11 @@ import React, { useState, useEffect, ComponentPropsWithRef } from 'react'; -import { BookmarkDF, BookmarkPR } from '@/assets'; +import { + BookmarkDF, + BookmarkDFSmall, + BookmarkPR, + BookmarkPRSmall, +} from '@/assets'; +import useIsMobile from '@/hooks/common/useIsMobile'; import * as S from './Bookmark.style'; export interface BookmarkProps extends ComponentPropsWithRef<'button'> { @@ -8,6 +14,7 @@ export interface BookmarkProps extends ComponentPropsWithRef<'button'> { const Bookmark = ({ bookmarked = false, ...attributes }: BookmarkProps) => { const [isPressed, setIsPressed] = useState(bookmarked); + const isMobile = useIsMobile(); useEffect(() => { setIsPressed(bookmarked); @@ -17,6 +24,13 @@ const Bookmark = ({ bookmarked = false, ...attributes }: BookmarkProps) => { setIsPressed((prevState) => !prevState); }; + const renderIcon = () => { + if (isPressed) { + return isMobile ? : ; + } + return isMobile ? : ; + }; + return ( ); }; diff --git a/src/components/atoms/Button/Button.style.ts b/src/components/atoms/Button/Button.style.ts index a3cc3094..0b273039 100644 --- a/src/components/atoms/Button/Button.style.ts +++ b/src/components/atoms/Button/Button.style.ts @@ -107,12 +107,14 @@ export const getSizeByVariantStyling = ( padding: '8px 16px', }), medium: css({}), + small: css({}), }, primarySquare: { large: css(typo.Main.SemiBold, { padding: '15.5px 120px', }), medium: css({}), + small: css({}), }, roundPrimary: { large: css(typo.SubTitle, { @@ -124,6 +126,7 @@ export const getSizeByVariantStyling = ( padding: '10px 25px', borderRadius: '25px', }), + small: css({}), }, roundPrimary2: { large: css(typo.Main.SemiBold, { @@ -131,18 +134,21 @@ export const getSizeByVariantStyling = ( borderRadius: '25px', }), medium: css({}), + small: css({}), }, outlinePrimary: { large: css(typo.Main.SemiBold, { padding: '10px 25px', }), medium: css({}), + small: css({}), }, outlineSecondary: { large: css(typo.Main.SemiBold, { padding: '10px 25px', }), medium: css({}), + small: css({}), }, outlinePrimarySquare: { large: css(typo.Main.SemiBold, { @@ -151,6 +157,7 @@ export const getSizeByVariantStyling = ( medium: css(typo.Main.SemiBold_16, { padding: '8px 16px', }), + small: css({}), }, outlineShadow: { large: css(typo.Main.SemiBold, { @@ -163,6 +170,15 @@ export const getSizeByVariantStyling = ( color: color.MAIN, boxShadow: '1px 2px 7px rgba(0, 0, 0, 0.15)', }), + small: css(typo.Mobile.Text.SemiBold_10, { + padding: '7.2px 14.4px', + color: color.BK, + boxShadow: '1px 2px 7px rgba(0, 0, 0, 0.15)', + '& svg': { + width: '10.5px', + height: '10.5px', + }, + }), }, outlineHighlightR: { large: css(typo.Component.Bold, { @@ -170,6 +186,7 @@ export const getSizeByVariantStyling = ( padding: '22px 50px', }), medium: css({}), + small: css({}), }, outlineHighlightB: { large: css(typo.Component.Bold, { @@ -177,6 +194,7 @@ export const getSizeByVariantStyling = ( padding: '22px 50px', }), medium: css({}), + small: css({}), }, circle: { large: css({ @@ -186,7 +204,14 @@ export const getSizeByVariantStyling = ( height: '22px', }, }), - medium: css({}), + medium: css({ + padding: '8.5px', + '& svg': { + width: '10.5px', + height: '10.5px', + }, + }), + small: css({}), }, }; diff --git a/src/components/atoms/Button/Button.tsx b/src/components/atoms/Button/Button.tsx index 5ef6fd59..8033c1e1 100644 --- a/src/components/atoms/Button/Button.tsx +++ b/src/components/atoms/Button/Button.tsx @@ -8,7 +8,7 @@ import { } from './Button.style'; export interface ButtonProps extends ComponentPropsWithRef<'button'> { - size?: Extract; + size?: Extract; variant?: | 'primary' | 'primarySquare' diff --git a/src/components/atoms/CategoryButton/CategoryButton.style.ts b/src/components/atoms/CategoryButton/CategoryButton.style.ts index 3b96b103..6d6f3648 100644 --- a/src/components/atoms/CategoryButton/CategoryButton.style.ts +++ b/src/components/atoms/CategoryButton/CategoryButton.style.ts @@ -2,27 +2,37 @@ import { css } from '@emotion/react'; import color from '@/styles/color'; import typo from '@/styles/typo'; -export const categoryButtonBaseStyle = css` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 367px; - height: 189px; - padding: 40px 85px; - border-radius: 20px; - border: 1px solid #dedede; - background-color: ${color.WT}; - box-shadow: 1px 1px 15px 0 rgba(0, 0, 0, 0.1); - cursor: pointer; - transition: all 0.3s ease-in; -`; +export const categoryButtonBaseStyle = css({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + width: '367px', + height: '189px', + padding: '40px 85px', + borderRadius: '20px', + border: '1px solid #dedede', + backgroundColor: color.WT, + boxShadow: '1px 1px 15px 0 rgba(0, 0, 0, 0.1)', + cursor: 'pointer', + transition: 'all 0.3s ease-in', + '@media (max-width: 430px)': { + width: '164px', + height: '70px', + padding: '5px 45px 14px 45px', + borderRadius: '7px', + border: '0.35px solid #dedede', + }, +}); -export const imgWrap = css` - flex-shrink: 0; -`; +export const imgWrap = css({ + flexShrink: 0, +}); -export const labelStyle = css` - ${typo.SubTitle} - margin-top: auto; -`; +export const labelStyle = css({ + ...typo.SubTitle, + marginTop: 'auto', + '@media (max-width: 430px)': { + ...typo.Mobile.Text.Medium_8, + }, +}); diff --git a/src/components/atoms/CategoryButton/CategoryButton.tsx b/src/components/atoms/CategoryButton/CategoryButton.tsx index 23cb951b..61250b54 100644 --- a/src/components/atoms/CategoryButton/CategoryButton.tsx +++ b/src/components/atoms/CategoryButton/CategoryButton.tsx @@ -1,25 +1,33 @@ import React from 'react'; import type { ComponentPropsWithRef } from 'react'; -import { PickVote, RandomGame, TodayPick } from '@/assets'; +import { + PickVote, + PickVoteSmall, + RandomGame, + RandomGameSmall, + TodayPick, +} from '@/assets'; import * as S from './CategoryButton.style'; export interface CategoryButtonProps extends ComponentPropsWithRef<'button'> { imageType: 'PickVote' | 'RandomGame' | 'TodayPick'; label: string; + isMobile?: boolean; } const CategoryButton = ({ imageType, label, + isMobile = false, ...attributes }: CategoryButtonProps) => { let ImageComponent; switch (imageType) { case 'PickVote': - ImageComponent = PickVote; + ImageComponent = isMobile ? PickVoteSmall : PickVote; break; case 'RandomGame': - ImageComponent = RandomGame; + ImageComponent = isMobile ? RandomGameSmall : RandomGame; break; case 'TodayPick': ImageComponent = TodayPick; diff --git a/src/components/atoms/CheckBoxButton/CheckBoxButton.style.ts b/src/components/atoms/CheckBoxButton/CheckBoxButton.style.ts index 9662a9d5..fbf5b81e 100644 --- a/src/components/atoms/CheckBoxButton/CheckBoxButton.style.ts +++ b/src/components/atoms/CheckBoxButton/CheckBoxButton.style.ts @@ -48,6 +48,6 @@ export const checkBoxRadioStyling = css({ export const checkBoxTextStyling = css(typo.Main.Medium, { marginLeft: '14px', - color: color.GY[4], + color: '#555555', cursor: 'pointer', }); diff --git a/src/components/atoms/Chips/Chips.style.ts b/src/components/atoms/Chips/Chips.style.ts index 667292fe..7f21fefe 100644 --- a/src/components/atoms/Chips/Chips.style.ts +++ b/src/components/atoms/Chips/Chips.style.ts @@ -3,7 +3,8 @@ import color from '@/styles/color'; import typo from '@/styles/typo'; import type { ChipsProps } from './Chips'; -export const chipsStyling = css(typo.Main.SemiBold, { +export const chipsStyling = css({ + ...typo.Main.SemiBold, display: 'flex', justifyContent: 'center', alignItems: 'center', @@ -11,6 +12,10 @@ export const chipsStyling = css(typo.Main.SemiBold, { backgroundColor: color.WT, color: color.MAIN, outline: `1px solid ${color.MAIN}`, + '@media (max-width: 430px)': { + ...typo.Mobile.Text.SemiBold_10, + padding: '4px 9px', + }, }); export const getChipStyling = (variant: Required['variant']) => { @@ -18,6 +23,10 @@ export const getChipStyling = (variant: Required['variant']) => { outline: css({ padding: '10px 18px', borderRadius: '12px', + '@media (max-width: 430px)': { + padding: '4px 9px', + borderRadius: '7.2px', + }, }), roundOutline: css({ padding: '10px 25px', diff --git a/src/components/atoms/SearchBar/SearchBar.style.ts b/src/components/atoms/SearchBar/SearchBar.style.ts index 9a45ab66..2c78c88f 100644 --- a/src/components/atoms/SearchBar/SearchBar.style.ts +++ b/src/components/atoms/SearchBar/SearchBar.style.ts @@ -12,6 +12,11 @@ export const searchBarStyling = css({ outline: `1px solid ${color.GY[2]}`, borderRadius: '50px', boxShadow: '1px 2px 15px rgba(0, 0, 0, 0.05)', + '@media (max-width: 430px)': { + width: '335px', + height: '36px', + padding: '0 5px', + }, }); export const inputStyling = css(typo.SubTitle, { @@ -20,3 +25,9 @@ export const inputStyling = css(typo.SubTitle, { outline: 'none', padding: '0 35px', }); + +export const mobileInputStyling = css(typo.Mobile.Text.Medium_12, { + width: '100%', + height: '36px', + padding: '0 5px', +}); diff --git a/src/components/atoms/SearchBar/SearchBar.tsx b/src/components/atoms/SearchBar/SearchBar.tsx index c7065c24..7f0519bf 100644 --- a/src/components/atoms/SearchBar/SearchBar.tsx +++ b/src/components/atoms/SearchBar/SearchBar.tsx @@ -10,24 +10,52 @@ import * as S from './SearchBar.style'; export interface SearchBarProps extends ComponentPropsWithoutRef<'input'> { onSearchClick: () => void; onInputChange: (e: React.ChangeEvent) => void; + isMobile?: boolean; } const SearchBar = ( - { onSearchClick, onInputChange, ...props }: SearchBarProps, + { onSearchClick, onInputChange, isMobile = false, ...props }: SearchBarProps, ref: ForwardedRef, -) => ( -
- - -
-); +) => { + const handleInputKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + onSearchClick(); + } + }; + + return ( +
+ {isMobile ? ( + <> + + + + ) : ( + <> + + + + )} +
+ ); +}; export default forwardRef(SearchBar); diff --git a/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.style.ts b/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.style.ts index 77d12aa3..4f86089e 100644 --- a/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.style.ts +++ b/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.style.ts @@ -3,6 +3,7 @@ import color from '@/styles/color'; import typo from '@/styles/typo'; export const searchTalkPickItemStyle = css({ + all: 'unset', display: 'flex', flexDirection: 'row', width: '1065px', @@ -36,12 +37,13 @@ export const dateStyle = css(typo.Number.Regular, { }); export const contentWrapStyle = css({ - display: 'flex', + display: 'inline', + height: '45px', + overflowY: 'hidden', }); + export const contentStyle = (highlighted: boolean) => css(typo.Comment.Regular, { - overflowY: 'hidden', - height: '45px', color: highlighted ? color.MAIN : color.GY[1], }); diff --git a/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.tsx b/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.tsx index 68a2e1e6..0fda6e2b 100644 --- a/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.tsx +++ b/src/components/atoms/SearchTalkPickItem/SearchTalkPickItem.tsx @@ -9,6 +9,7 @@ export interface SearchTalkPickItemProps { content: string; firstImgUrl: string; keyword: string; + onClick: () => void; } const SearchTalkPickItem = ({ @@ -17,9 +18,10 @@ const SearchTalkPickItem = ({ content, firstImgUrl, keyword, + onClick, }: SearchTalkPickItemProps) => { return ( -
+
+ {firstImgUrl && ( +
+ representativeImage +
+ )} + ); }; export default SearchTalkPickItem; diff --git a/src/components/atoms/SelectGroup/SelectGroup.style.ts b/src/components/atoms/SelectGroup/SelectGroup.style.ts index e756ac7f..6b73ceff 100644 --- a/src/components/atoms/SelectGroup/SelectGroup.style.ts +++ b/src/components/atoms/SelectGroup/SelectGroup.style.ts @@ -7,7 +7,7 @@ export const selectGroupStyling = css({ alignItems: 'center', backgroundColor: 'transparent', padding: '4px', - width: '100%', + width: '912px', justifyContent: 'space-between', position: 'relative', }); diff --git a/src/components/atoms/SelectGroup/SelectGroup.tsx b/src/components/atoms/SelectGroup/SelectGroup.tsx index d03008a6..8593904e 100644 --- a/src/components/atoms/SelectGroup/SelectGroup.tsx +++ b/src/components/atoms/SelectGroup/SelectGroup.tsx @@ -1,34 +1,39 @@ import React from 'react'; import * as S from './SelectGroup.style'; -export type SelectGroupItem = { +export type SelectGroupItem = { label: string; - value: string; + value: T; }; -export interface SelectGroupProps { - items: SelectGroupItem[]; - selectedValue?: string; - onSelect?: (value: string) => void; +export interface SelectGroupProps { + items: [SelectGroupItem, SelectGroupItem]; + selectedValue?: T; + onSelect?: (value: T) => void; } -const SelectGroup = ({ items, selectedValue, onSelect }: SelectGroupProps) => ( -
- {Array.isArray(items) && - items.length === 2 && - items.map((item) => ( - - ))} + +const SelectGroup = ({ + items, + selectedValue, + onSelect, +}: SelectGroupProps) => ( +
+ {items.map(({ label, value }) => ( + + ))}
); diff --git a/src/components/atoms/ToggleGroup/ToggleGroup.tsx b/src/components/atoms/ToggleGroup/ToggleGroup.tsx index e55d3d0e..5c3da7d0 100644 --- a/src/components/atoms/ToggleGroup/ToggleGroup.tsx +++ b/src/components/atoms/ToggleGroup/ToggleGroup.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { ToggleGroupItem, ToggleGroupProps } from '@/types/toggle'; import { selectedStyling, firstItemRadius, @@ -7,22 +8,21 @@ import { toggleButtonItemStyling, } from './ToggleGroup.style'; -export type ToggleGroupItem = { - label: string; - value: string; -}; - -export interface ToggleGroupProps { - items?: ToggleGroupItem[]; - selectedValue?: string; - onClick?: (value: string) => void; -} - const defaultItems: ToggleGroupItem[] = [ - { label: '인기순', value: 'views' }, - { label: 'μ΅œμ‹ μˆœ', value: 'createdAt' }, + { label: '인기순', value: { field: 'views', order: 'desc' } }, + { label: 'μ΅œμ‹ μˆœ', value: { field: 'createdAt', order: 'desc' } }, ]; +const isSelected = ( + selectedValue: { field: string; order: 'asc' | 'desc' } | undefined, + value: { field: string; order: 'asc' | 'desc' }, +): boolean => { + if (!selectedValue) return false; + return ( + selectedValue.field === value.field && selectedValue.order === value.order + ); +}; + const ToggleGroup = ({ items = defaultItems, selectedValue, @@ -31,18 +31,18 @@ const ToggleGroup = ({
{Array.isArray(items) && items.length === 2 && - items.map((item, idx) => ( + items.map(({ label, value }, idx) => ( ))}
diff --git a/src/components/mobile/atoms/Button/Button.style.ts b/src/components/mobile/atoms/Button/Button.style.ts new file mode 100644 index 00000000..14a4b850 --- /dev/null +++ b/src/components/mobile/atoms/Button/Button.style.ts @@ -0,0 +1,85 @@ +import color from '@/styles/color'; +import typo from '@/styles/typo'; +import { css } from '@emotion/react'; +import type { ButtonProps } from './Button'; + +export const getVariantStyling = ( + variant: Required['variant'], + active: boolean, +) => { + const style = { + primary: css({ + borderRadius: '10px', + backgroundColor: active ? color.MAIN : color.GY[2], + color: color.WT, + }), + roundPrimary: css({ + borderRadius: '80px', + backgroundColor: active ? color.MAIN : color.GY[2], + color: color.WT, + }), + Primary2: css({ + borderRadius: '6px', + backgroundColor: color.MAIN, + color: color.WT, + }), + outlineShadow: css({ + border: `1px solid ${color.GY[4]}`, + borderRadius: '6px', + backgroundColor: color.GY[5], + color: color.GY[1], + }), + }; + + return style[variant]; +}; + +export const getSizeByVariantStyling = ( + variant: Required['variant'], + size: Required['size'], +) => { + const style = { + primary: { + large: css(typo.Main.SemiBold, { + width: '335px', + height: '50px', + }), + medium: css(typo.Main.SemiBold, { + width: '130px', + height: '50px', + }), + }, + roundPrimary: { + large: css(typo.Mobile.Text.SemiBold_14, { + width: '295px', + height: '40px', + }), + medium: css({}), + }, + Primary2: { + large: css({}), + medium: css({ + width: '64px', + height: '34px', + }), + }, + outlineShadow: { + large: css({}), + medium: css({ + width: '64px', + height: '34px', + }), + }, + }; + + return style[variant][size]; +}; + +export const buttonStyling = css({ + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + border: 'none', + whiteSpace: 'nowrap', + cursor: 'pointer', +}); diff --git a/src/components/mobile/atoms/Button/Button.tsx b/src/components/mobile/atoms/Button/Button.tsx new file mode 100644 index 00000000..097dde0e --- /dev/null +++ b/src/components/mobile/atoms/Button/Button.tsx @@ -0,0 +1,35 @@ +import React, { forwardRef } from 'react'; +import type { ComponentPropsWithRef, ForwardedRef } from 'react'; +import * as S from './Button.style'; + +export interface ButtonProps extends ComponentPropsWithRef<'button'> { + size?: 'large' | 'medium'; + variant?: 'primary' | 'roundPrimary' | 'Primary2' | 'outlineShadow'; + active?: boolean; +} + +const Button = ( + { + size = 'medium', + variant = 'primary', + active = true, + children, + ...attributes + }: ButtonProps, + ref: ForwardedRef, +) => ( + +); + +export default forwardRef(Button); diff --git a/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.style.ts b/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.style.ts new file mode 100644 index 00000000..85dfa057 --- /dev/null +++ b/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.style.ts @@ -0,0 +1,10 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const buttonStyle = css(typo.Comment.SemiBold, { + outline: 'none', + color: color.MAIN, + padding: '10px', + cursor: 'pointer', +}); diff --git a/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.tsx b/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.tsx new file mode 100644 index 00000000..75a6ed8d --- /dev/null +++ b/src/components/mobile/atoms/DraftSaveButton/DraftSaveButton.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import * as S from './DraftSaveButton.style'; + +interface DraftSaveButtonProps { + onClick: () => void; +} + +const DraftSaveButton = ({ onClick }: DraftSaveButtonProps) => { + return ( + + ); +}; +export default DraftSaveButton; diff --git a/src/components/mobile/atoms/FloatingButton/FloatingButton.style.ts b/src/components/mobile/atoms/FloatingButton/FloatingButton.style.ts new file mode 100644 index 00000000..22c4908c --- /dev/null +++ b/src/components/mobile/atoms/FloatingButton/FloatingButton.style.ts @@ -0,0 +1,31 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const categoryButtonBaseStyle = (imageType: 'talkpick' | 'game') => + css({ + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + gap: '13px', + padding: '5px 5px 5px 21px', + borderRadius: '500px', + backgroundColor: color.WT, + boxShadow: '1px 2px 15px 0 rgba(119, 130, 255, 0.2)', + cursor: 'pointer', + transition: 'all 0.3s ease-in', + width: imageType === 'talkpick' ? '102px' : '139px', + marginLeft: imageType === 'talkpick' ? '37px' : 0, + '&:hover': { + boxShadow: '1px 2px 15px 0 rgba(119, 130, 255, 0.8)', + }, + }); + +export const imgWrap = css({ + flexShrink: 0, +}); + +export const labelStyle = css(typo.Mobile.Text.SemiBold_14, { + color: color.MAIN, +}); diff --git a/src/components/mobile/atoms/FloatingButton/FloatingButton.tsx b/src/components/mobile/atoms/FloatingButton/FloatingButton.tsx new file mode 100644 index 00000000..0deeb216 --- /dev/null +++ b/src/components/mobile/atoms/FloatingButton/FloatingButton.tsx @@ -0,0 +1,42 @@ +import React, { ComponentPropsWithRef } from 'react'; +import { CircleGame, CircleTalkPick } from '@/assets'; +import * as S from './FloatingButton.style'; + +interface FloatingButtonProps extends ComponentPropsWithRef<'button'> { + imageType: 'talkpick' | 'game'; + label: string; + onClick?: () => void; +} + +const FloatingButton = ({ + imageType, + label, + onClick, + ...attributes +}: FloatingButtonProps) => { + let ImageComponent; + switch (imageType) { + case 'talkpick': + ImageComponent = CircleTalkPick; + break; + case 'game': + ImageComponent = CircleGame; + break; + default: + return null; + } + + return ( + + ); +}; + +export default FloatingButton; diff --git a/src/components/mobile/atoms/GameStageLabel/GameStageLabel.style.ts b/src/components/mobile/atoms/GameStageLabel/GameStageLabel.style.ts new file mode 100644 index 00000000..dc346252 --- /dev/null +++ b/src/components/mobile/atoms/GameStageLabel/GameStageLabel.style.ts @@ -0,0 +1,9 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const getStageLabelColor = (labelColor: string) => { + return css(typo.Mobile.Text.SemiBold_14, { + color: labelColor === 'main' ? color.MAIN : color.GY[1], + }); +}; diff --git a/src/components/mobile/atoms/GameStageLabel/GameStageLabel.tsx b/src/components/mobile/atoms/GameStageLabel/GameStageLabel.tsx new file mode 100644 index 00000000..93b27aa4 --- /dev/null +++ b/src/components/mobile/atoms/GameStageLabel/GameStageLabel.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import * as S from './GameStageLabel.style'; + +export interface GameStageLabelProps { + stage: number; + color?: 'main' | 'default'; +} + +const GameStageLabel = ({ stage, color = 'default' }: GameStageLabelProps) => ( +
{stage + 1} / 10
+); + +export default GameStageLabel; diff --git a/src/components/mobile/atoms/GameTag/GameTag.style.ts b/src/components/mobile/atoms/GameTag/GameTag.style.ts new file mode 100644 index 00000000..affcea54 --- /dev/null +++ b/src/components/mobile/atoms/GameTag/GameTag.style.ts @@ -0,0 +1,8 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const tagStyle = css(typo.Mobile.Text.SemiBold_20, { + color: color.MAIN, + gap: '5px', +}); diff --git a/src/components/mobile/atoms/GameTag/GameTag.tsx b/src/components/mobile/atoms/GameTag/GameTag.tsx new file mode 100644 index 00000000..4793e628 --- /dev/null +++ b/src/components/mobile/atoms/GameTag/GameTag.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import * as S from './GameTag.style'; + +export interface GameTagProps { + tag: string; +} + +const GameTag = ({ tag }: GameTagProps) => ( +
+ # {tag} +
+); + +export default GameTag; diff --git a/src/components/mobile/atoms/GameTagChip/GameTagChip.style.ts b/src/components/mobile/atoms/GameTagChip/GameTagChip.style.ts new file mode 100644 index 00000000..f6d9cd0c --- /dev/null +++ b/src/components/mobile/atoms/GameTagChip/GameTagChip.style.ts @@ -0,0 +1,15 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const tagStyle = css(typo.Mobile.Text.Medium_12, { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + padding: '6px 14px', + borderRadius: '6px', + border: `1px solid ${color.WT_VIOLET}`, + color: color.MAIN, + fontSize: '14px', + gap: '5px', +}); diff --git a/src/components/mobile/atoms/GameTagChip/GameTagChip.tsx b/src/components/mobile/atoms/GameTagChip/GameTagChip.tsx new file mode 100644 index 00000000..9a8f991b --- /dev/null +++ b/src/components/mobile/atoms/GameTagChip/GameTagChip.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import * as S from './GameTagChip.style'; + +export interface GameTagChipProps { + tag: string; +} + +const GameTagChip = ({ tag }: GameTagChipProps) => ( +
+ #{tag} +
+); + +export default GameTagChip; diff --git a/src/components/mobile/atoms/IconButton/IconButton.style.ts b/src/components/mobile/atoms/IconButton/IconButton.style.ts new file mode 100644 index 00000000..6bcfb6f1 --- /dev/null +++ b/src/components/mobile/atoms/IconButton/IconButton.style.ts @@ -0,0 +1,14 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; + +export const buttonStyle = css({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: ' center', + width: '54px', + height: '34px', + border: `1px solid ${color.GY[3]}`, + borderRadius: '4px', + cursor: 'pointer', +}); diff --git a/src/components/mobile/atoms/IconButton/IconButton.tsx b/src/components/mobile/atoms/IconButton/IconButton.tsx new file mode 100644 index 00000000..800a7b3d --- /dev/null +++ b/src/components/mobile/atoms/IconButton/IconButton.tsx @@ -0,0 +1,23 @@ +import React, { + ComponentPropsWithoutRef, + ForwardedRef, + forwardRef, +} from 'react'; +import * as S from './IconButton.style'; + +interface IconButtonProps extends ComponentPropsWithoutRef<'button'> { + icon: React.ReactNode; +} + +const IconButton = ( + { icon, onClick, ...props }: IconButtonProps, + ref: ForwardedRef, +) => { + return ( + + ); +}; + +export default forwardRef(IconButton); diff --git a/src/components/mobile/atoms/InteractionButton/InteractionButton.style.ts b/src/components/mobile/atoms/InteractionButton/InteractionButton.style.ts new file mode 100644 index 00000000..486cf187 --- /dev/null +++ b/src/components/mobile/atoms/InteractionButton/InteractionButton.style.ts @@ -0,0 +1,46 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const buttonStyle = css({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + width: '163px', + height: '58px', + borderRadius: '12px', + border: `1px solid ${color.GY[2]}`, + boxShadow: '1px 1px 4px rgba(0, 0, 0, 0.15)', + cursor: 'pointer', +}); + +export const itemWrapper = css({ + display: 'flex', + flexDirection: 'column', + paddingTop: '10px', + gap: '3px', +}); + +export const buttonLabelStyle = css(typo.Mobile.Text.Medium_12, { + color: color.MAIN, + fontSize: '11px', + fontWeight: '700', +}); + +export const iconWrapper = css({ + display: 'flex', + justifyContent: 'center', + gap: '3px', +}); + +export const iconStyle = css({ + width: '24px', + height: '24px', + flexShrink: '0', +}); + +export const iconLabelStyle = css(typo.Mobile.Text.Medium_12, { + color: color.GY[1], + fontWeight: '600', +}); diff --git a/src/components/mobile/atoms/InteractionButton/InteractionButton.tsx b/src/components/mobile/atoms/InteractionButton/InteractionButton.tsx new file mode 100644 index 00000000..c359cd7c --- /dev/null +++ b/src/components/mobile/atoms/InteractionButton/InteractionButton.tsx @@ -0,0 +1,31 @@ +import React, { + ComponentPropsWithoutRef, + ForwardedRef, + forwardRef, +} from 'react'; +import * as S from './InteractionButton.style'; + +interface InteractionButtonProps extends ComponentPropsWithoutRef<'button'> { + buttonLabel: string; + icon: React.ReactNode; + iconLabel: string; +} + +const InteractionButton = ( + { buttonLabel, icon, iconLabel, ...props }: InteractionButtonProps, + ref: ForwardedRef, +) => { + return ( + + ); +}; + +export default forwardRef(InteractionButton); diff --git a/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.style.ts b/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.style.ts new file mode 100644 index 00000000..ab768501 --- /dev/null +++ b/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.style.ts @@ -0,0 +1,36 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const buttonGroupStyle = css({ + position: 'fixed', + top: '55px', + right: 0, + width: '134px', + height: '100%', + backgroundColor: color.WT, + boxShadow: '0px 0 5px rgba(0, 0, 0, 0.1)', + zIndex: 1100, + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', +}); + +export const buttonContainerStyle = css({ + display: 'flex', + flexDirection: 'column', +}); + +export const fillerStyle = css({ + flex: 1, +}); + +export const buttonStyle = css(typo.Mobile.Text.Medium_12, { + outline: 'none', + cursor: 'pointer', + backgroundColor: 'transparent', + padding: '10.5px 60px 10.5px 24px', + textAlign: 'left', + color: color.BK, + border: 'none', +}); diff --git a/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.tsx b/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.tsx new file mode 100644 index 00000000..3336354a --- /dev/null +++ b/src/components/mobile/atoms/MobileSideMenu/MobileSideMenu.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { useNavigate } from 'react-router-dom'; +import * as S from './MobileSideMenu.style'; + +interface MobileSideMenuProps { + isOpen: boolean; + accessToken: string | null; + handleLoginButton: () => void; + setIsOpen: (isOpen: boolean) => void; +} + +const MobileSideMenu = ({ + isOpen, + accessToken, + handleLoginButton, + setIsOpen, +}: MobileSideMenuProps) => { + const navigate = useNavigate(); + + const handleNavigation = (path: string) => { + setIsOpen(false); + navigate(path); + }; + + if (!isOpen) return null; + + return ( +
+
+ + + + + {accessToken && ( + + )} +
+
+
+ ); +}; + +export default MobileSideMenu; diff --git a/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.style.ts b/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.style.ts new file mode 100644 index 00000000..e7a7f424 --- /dev/null +++ b/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.style.ts @@ -0,0 +1,33 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const toggleGroupStyle = css({ + display: 'flex', + flexDirection: 'column', +}); + +export const clickedToggleStyle = (isOpen: boolean) => + css(typo.Mobile.Text.SemiBold_12, { + color: color.MAIN, + backgroundColor: color.WT_VIOLET, + display: 'flex', + alignItems: 'center', + gap: '8px', + padding: '4px 8px 4px 9px', + borderBottom: isOpen ? `0.6px solid ${color.SKYBLUE}` : undefined, + borderRadius: isOpen ? undefined : '6px', + cursor: 'pointer', + }); + +export const unClickedToggleStyle = css(typo.Mobile.Text.SemiBold_12, { + color: color.GY[1], + backgroundColor: color.WT, + padding: '4px 26px 4px 9px', + transition: 'all .1s ease-in', + borderRadius: '0 0 6px 6px', + cursor: 'pointer', + '&:hover': { + backgroundColor: color.WT_VIOLET, + }, +}); diff --git a/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.tsx b/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.tsx new file mode 100644 index 00000000..194e5f69 --- /dev/null +++ b/src/components/mobile/atoms/MobileToggleGroup/MobileToggleGroup.tsx @@ -0,0 +1,76 @@ +import React, { useState, useEffect } from 'react'; +import { TriangleDown, TriangleUp } from '@/assets'; +import { + ToggleGroupItem, + ToggleGroupProps, + ToggleGroupValue, +} from '@/types/toggle'; +import * as S from './MobileToggleGroup.style'; + +const defaultItems: ToggleGroupItem[] = [ + { + label: '인기순', + value: { field: 'views', order: 'desc' }, + }, + { + label: 'μ΅œμ‹ μˆœ', + value: { field: 'createdAt', order: 'desc' }, + }, +]; + +const MobileToggleGroup = ({ + items = defaultItems, + selectedValue, + onClick, +}: ToggleGroupProps) => { + const [isOpen, setIsOpen] = useState(false); + + const handleMenuClick = (e: React.MouseEvent) => { + e.stopPropagation(); + setIsOpen(!isOpen); + }; + + const handleOutsideClick = () => { + setIsOpen(false); + }; + + const handleToggleClick = (value: ToggleGroupValue) => { + onClick?.(value); + setIsOpen(false); + }; + + useEffect(() => { + window.addEventListener('click', handleOutsideClick); + return () => { + window.removeEventListener('click', handleOutsideClick); + }; + }, []); + + const isSelectedViews = selectedValue?.field === 'views'; + + return ( +
+ + {isOpen && ( + + )} +
+ ); +}; + +export default MobileToggleGroup; diff --git a/src/components/mobile/atoms/Modal/Modal.style.ts b/src/components/mobile/atoms/Modal/Modal.style.ts new file mode 100644 index 00000000..477f5393 --- /dev/null +++ b/src/components/mobile/atoms/Modal/Modal.style.ts @@ -0,0 +1,46 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import type { ModalProps } from './Modal'; + +export const modalStyling = css({ + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + position: 'relative', + width: '335px', + backgroundColor: color.WT, + borderRadius: '12px', + boxShadow: '1px 2px 30px rgba(0, 0, 0, 0.15)', +}); + +export const getModalSize = (action: Required['action']) => { + const style = { + share: css({ + paddingTop: '24px', + paddingLeft: '20px', + paddingRight: '20px', + paddingBottom: '26px', + }), + tag: css({ + paddingTop: '24px', + paddingLeft: '20px', + paddingRight: '20px', + paddingBottom: '30px', + }), + tempGame: css({ + paddingTop: '24px', + paddingLeft: '20px', + paddingRight: '20px', + paddingBottom: '24px', + }), + }; + + return style[action]; +}; + +export const modalCloseStyling = css({ + position: 'absolute', + top: '24px', + right: '20px', + cursor: 'pointer', +}); diff --git a/src/components/mobile/atoms/Modal/Modal.tsx b/src/components/mobile/atoms/Modal/Modal.tsx new file mode 100644 index 00000000..f02b0b87 --- /dev/null +++ b/src/components/mobile/atoms/Modal/Modal.tsx @@ -0,0 +1,40 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import React, { useRef, ReactNode } from 'react'; +import { MobileModalClose } from '@/assets'; +import useOutsideClick from '@/hooks/common/useOutsideClick'; +import * as S from './Modal.style'; + +export interface ModalProps { + action?: 'share' | 'tag' | 'tempGame'; + isOpen?: boolean; + onClose?: () => void; + hasCloseButton?: boolean; + children?: ReactNode; +} + +const Modal = ({ + isOpen, + onClose, + action = 'share', + hasCloseButton = true, + children, +}: ModalProps) => { + const modalRef = useRef(null); + + useOutsideClick(modalRef, () => onClose?.()); + + return ( +
+ {isOpen && ( +
+ {hasCloseButton && ( + + )} + {children} +
+ )} +
+ ); +}; + +export default Modal; diff --git a/src/components/mobile/atoms/TempGameButton/TempGameButton.style.ts b/src/components/mobile/atoms/TempGameButton/TempGameButton.style.ts new file mode 100644 index 00000000..c7df6486 --- /dev/null +++ b/src/components/mobile/atoms/TempGameButton/TempGameButton.style.ts @@ -0,0 +1,35 @@ +import color from '@/styles/color'; +import typo from '@/styles/typo'; +import { css } from '@emotion/react'; + +export const tempGameButtonStyling = css({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'flex-end', + padding: '10px', + width: '142px', + height: '136px', + backgroundColor: color.WT, + borderRadius: '10px', + border: `1px solid ${color.GY[3]}`, + boxShadow: '1px 2px 15px rgba(0, 0, 0, 0.05)', + cursor: 'pointer', +}); + +export const itemWrapper = css({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + height: '95px', +}); + +export const buttonStyling = css(typo.Mobile.Text.SemiBold_14, { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: '122px', + height: '34px', + borderRadius: '8px', + backgroundColor: color.WT_VIOLET, + color: color.MAIN, +}); diff --git a/src/components/mobile/atoms/TempGameButton/TempGameButton.tsx b/src/components/mobile/atoms/TempGameButton/TempGameButton.tsx new file mode 100644 index 00000000..58484fca --- /dev/null +++ b/src/components/mobile/atoms/TempGameButton/TempGameButton.tsx @@ -0,0 +1,24 @@ +import React, { forwardRef } from 'react'; +import type { ComponentPropsWithRef, ForwardedRef } from 'react'; +import { MobileFolder, MobileFolderCheck } from '@/assets'; +import * as S from './TempGameButton.style'; + +export interface ButtonProps extends ComponentPropsWithRef<'button'> { + action?: 'save' | 'get'; +} + +const TempGameButton = ( + { action = 'save', ...attributes }: ButtonProps, + ref: ForwardedRef, +) => ( + +); + +export default forwardRef(TempGameButton); diff --git a/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.style.ts b/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.style.ts new file mode 100644 index 00000000..0da97878 --- /dev/null +++ b/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.style.ts @@ -0,0 +1,35 @@ +import { css } from '@emotion/react'; +import color from '@/styles/color'; +import typo from '@/styles/typo'; + +export const fieldStyling = css({ + display: 'flex', + flexDirection: 'column', + width: '375px', + padding: '12px 20px', +}); + +export const dividerWrapper = css({ + margin: '12px 0', +}); + +export const titleStyling = css(typo.Mobile.Main.Medium_16, { + width: '100%', + color: color.BK, + + '::placeholder': { + color: color.GY[1], + }, +}); + +export const descriptionStyling = css(typo.Mobile.Text.Medium_12, { + fontSize: '14px', + width: '100%', + height: '200px', + resize: 'none', + color: color.BK, + + '::placeholder': { + color: color.GY[1], + }, +}); diff --git a/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.tsx b/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.tsx new file mode 100644 index 00000000..864bc54c --- /dev/null +++ b/src/components/mobile/atoms/TitleDescriptionField/TitleDescriptionField.tsx @@ -0,0 +1,61 @@ +import React, { ForwardedRef, forwardRef, useRef } from 'react'; +import Divider from '@/components/atoms/Divider/Divider'; +import * as S from './TitleDescriptionField.style'; + +export interface TitleDescriptionFieldProps { + title: string; + description?: string; + onTitleChange: (e: React.ChangeEvent) => void; + onDescriptionChange?: (e: React.ChangeEvent) => void; +} + +const TitleDescriptionField = ( + { + title, + description, + onTitleChange, + onDescriptionChange, + }: TitleDescriptionFieldProps, + ref: ForwardedRef, +) => { + const descriptionRef = useRef(null); + + const handleTitleChange = (e: React.ChangeEvent) => { + if (e.target.value.length <= 100) { + onTitleChange(e); + } + }; + + const handleDescriptionChange = ( + e: React.ChangeEvent, + ) => { + if (onDescriptionChange && e.target.value.length <= 30) { + onDescriptionChange(e); + } + }; + + return ( +
+ +
+ +
+