From dd315c0d9a97478cfe27a295b4869d5922b0b0e2 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 2 Jan 2025 23:28:06 +0900 Subject: [PATCH 01/28] chore: initial setup for pre-commit, commitlinting (#67) * chore(lint): install githook, commit linting related packages * chore(husky): add commit related githook for linting * chore(lint): overide rules based on commit convention of side * chore(lint): add custom english rule * chore(husky): convert error message from korean into english --- .husky/commit-msg | 1 + .husky/pre-commit | 1 + .husky/prepare-commit-msg | 7 + commitlint.config.ts | 39 + package.json | 22 +- pnpm-lock.yaml | 1448 ++++++++++++++++++++++++++++++++++++- 6 files changed, 1497 insertions(+), 21 deletions(-) create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .husky/prepare-commit-msg create mode 100644 commitlint.config.ts diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..38bf73a --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +pnpm commitlint --edit ${1} diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..cb2c84d --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm lint-staged diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg new file mode 100644 index 0000000..7eef3f1 --- /dev/null +++ b/.husky/prepare-commit-msg @@ -0,0 +1,7 @@ +# git commit -m 명령어를 사용할 때는 스킵 +if [ -z "${2}" ]; then + exec < /dev/tty && pnpm cz --hook || { + echo "\nCommit has been cancelled." + exit 1 + } +fi \ No newline at end of file diff --git a/commitlint.config.ts b/commitlint.config.ts new file mode 100644 index 0000000..40f9c72 --- /dev/null +++ b/commitlint.config.ts @@ -0,0 +1,39 @@ +const englishOnly = /^[A-Za-z0-9\s!@#$%^&*(),.?":{}|<>_-]+$/; + +// https://commitlint.js.org/reference/configuration.html#typescript-configuration +import { RuleConfigSeverity, type UserConfig } from '@commitlint/types'; +const Configuration: UserConfig = { + extends: ['@commitlint/config-conventional'], + // parserPreset: '', + // formatter: '', + // https://commitlint.js.org/reference/plugins.html#working-with-plugins + plugins: [ + { + rules: { + 'subject-english-only': ({ subject }) => { + if (!subject) return [true, '']; + const valid = englishOnly.test(subject); + return [valid, 'Commit subject must contain only English characters']; + }, + }, + }, + ], + rules: { + // https://commitlint.js.org/reference/rules.html + 'type-empty': [RuleConfigSeverity.Error, 'never'], + 'subject-empty': [RuleConfigSeverity.Error, 'never'], + 'subject-max-length': [RuleConfigSeverity.Error, 'always', 50], + 'scope-max-length': [RuleConfigSeverity.Error, 'always', 20], + + // custom rules + 'subject-english-only': [RuleConfigSeverity.Error, 'always'], + }, + + prompt: { + settings: {}, + messages: {}, + questions: {}, + }, +}; + +export default Configuration; diff --git a/package.json b/package.json index 038913d..33e8964 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,8 @@ "private": true, "type": "module", "scripts": { + "prepare": "husky", + "cz": "cz", "build:storybook": "storybook build", "dev:storybook": "storybook dev -p 6006", "create:component": "tsx scripts/createComponent.ts create", @@ -11,6 +13,10 @@ "devDependencies": { "@biomejs/biome": "^1.9.4", "@changesets/cli": "^2.27.9", + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@commitlint/cz-commitlint": "^19.6.1", + "@commitlint/types": "^19.5.0", "@clack/prompts": "^0.9.0", "@storybook/addon-essentials": "catalog:", "@storybook/addon-interactions": "catalog:", @@ -24,9 +30,12 @@ "@typescript-eslint/parser": "^8.19.0", "@vitest/coverage-v8": "catalog:", "chromatic": "^11.19.0", + "commitizen": "^4.3.1", "clipanion": "4.0.0-rc.4", "eslint": "^9.17.0", + "husky": "^9.1.7", "knip": "catalog:", + "lint-staged": "^15.3.0", "sanitize.css": "^13.0.0", "storybook": "catalog:", "tsx": "^4.19.2", @@ -34,5 +43,16 @@ "typescript": "catalog:", "vitest": "catalog:" }, - "packageManager": "pnpm@9.7.1" + "packageManager": "pnpm@9.7.1", + "lint-staged": { + "packages/*/src/**/*.{ts,tsx}": [ + "biome lint --apply", + "eslint --fix --flag unstable_ts_config" + ] + }, + "config": { + "commitizen": { + "path": "@commitlint/cz-commitlint" + } + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65c5b37..3f10850 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,6 +68,18 @@ importers: '@clack/prompts': specifier: ^0.9.0 version: 0.9.0 + '@commitlint/cli': + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.1)(typescript@5.7.2) + '@commitlint/config-conventional': + specifier: ^19.6.0 + version: 19.6.0 + '@commitlint/cz-commitlint': + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.1)(commitizen@4.3.1(@types/node@22.10.1)(typescript@5.7.2))(inquirer@8.2.5)(typescript@5.7.2) + '@commitlint/types': + specifier: ^19.5.0 + version: 19.5.0 '@storybook/addon-essentials': specifier: 'catalog:' version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) @@ -107,12 +119,21 @@ importers: clipanion: specifier: 4.0.0-rc.4 version: 4.0.0-rc.4(typanion@3.14.0) + commitizen: + specifier: ^4.3.1 + version: 4.3.1(@types/node@22.10.1)(typescript@5.7.2) eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.1) + husky: + specifier: ^9.1.7 + version: 9.1.7 knip: specifier: 'catalog:' version: 5.39.2(@types/node@22.10.1)(typescript@5.7.2) + lint-staged: + specifier: ^15.3.0 + version: 15.3.0 sanitize.css: specifier: ^13.0.0 version: 13.0.0 @@ -121,7 +142,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) tsx: specifier: ^4.19.2 version: 4.19.2 @@ -175,7 +196,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -236,7 +257,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -297,7 +318,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -361,7 +382,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -419,7 +440,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -476,7 +497,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -522,7 +543,7 @@ importers: devDependencies: tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -577,7 +598,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -641,7 +662,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -677,7 +698,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -744,7 +765,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -808,7 +829,7 @@ importers: version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' version: 5.7.2 @@ -1009,6 +1030,82 @@ packages: '@clack/prompts@0.9.0': resolution: {integrity: sha512-nGsytiExgUr4FL0pR/LeqxA28nz3E0cW7eLTSh3Iod9TGrbBt8Y7BHbV3mmkNC4G0evdYyQ3ZsbiBkk7ektArA==} + '@commitlint/cli@19.6.1': + resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.6.0': + resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} + engines: {node: '>=v18'} + + '@commitlint/cz-commitlint@19.6.1': + resolution: {integrity: sha512-lJtOE1a+xyjjf42oUXwqvmhLhF85OLqLE4LpcUifIdIxSbzx8lEbhwGDkhrOaYfGtjmtTDhP1cQ8dg5DyQOWqQ==} + engines: {node: '>=v18'} + peerDependencies: + commitizen: ^4.0.3 + inquirer: ^9.0.0 + + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} + engines: {node: '>=v18'} + + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.6.0': + resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.6.0': + resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==} + engines: {node: '>=v18'} + + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} + + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + engines: {node: '>=v18'} + + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + engines: {node: '>=v18'} + + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} + engines: {node: '>=v18'} + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -1898,6 +1995,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} @@ -2006,6 +2106,10 @@ packages: '@vitest/utils@2.1.8': resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2023,10 +2127,21 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2035,6 +2150,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2063,6 +2182,9 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2075,6 +2197,10 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -2082,6 +2208,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -2090,6 +2219,9 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2108,6 +2240,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-require@5.0.0: resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2118,6 +2253,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cachedir@2.3.0: + resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} + engines: {node: '>=6'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -2133,6 +2272,10 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} @@ -2141,6 +2284,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -2175,11 +2322,35 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + clipanion@4.0.0-rc.4: resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} peerDependencies: typanion: '*' + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2188,17 +2359,38 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commitizen@4.3.1: + resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} + engines: {node: '>= 12'} + hasBin: true + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2206,9 +2398,42 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commit-types@3.0.0: + resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2219,6 +2444,14 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + cz-conventional-changelog@3.3.0: + resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} + engines: {node: '>= 10'} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -2228,6 +2461,18 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -2250,6 +2495,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-file@1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2268,6 +2517,10 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2277,6 +2530,9 @@ packages: electron-to-chromium@1.5.69: resolution: {integrity: sha512-zz4e7EbJqqtdQtwt61ZYKrfEYlV0HpGbIGRVFGOO9YBZIhg0BDXtBcWxpqyAm6oyPl2Zp8tc5FrPpCZQH/Yazg==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2295,6 +2551,17 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2330,6 +2597,10 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2387,6 +2658,17 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} @@ -2411,6 +2693,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -2422,6 +2707,10 @@ packages: picomatch: optional: true + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2430,6 +2719,12 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-node-modules@2.1.3: + resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2438,6 +2733,14 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + findup-sync@4.0.0: + resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} + engines: {node: '>= 8'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -2460,6 +2763,13 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2472,13 +2782,30 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2491,6 +2818,22 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -2514,6 +2857,10 @@ packages: resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} engines: {node: '>=18.0.0'} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2537,16 +2884,32 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2555,6 +2918,9 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2563,13 +2929,31 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -2591,6 +2975,14 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -2599,18 +2991,41 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2672,9 +3087,15 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2686,6 +3107,13 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2708,6 +3136,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lint-staged@15.3.0: + resolution: {integrity: sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2720,18 +3157,58 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.map@4.6.0: + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + longest@2.0.1: + resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} + engines: {node: '>=0.10.0'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2769,14 +3246,36 @@ packages: memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + merge@2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -2788,6 +3287,9 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -2802,6 +3304,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -2816,10 +3321,29 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -2828,6 +3352,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -2847,6 +3375,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -2855,6 +3387,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -2877,18 +3413,38 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -2918,6 +3474,11 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -3009,6 +3570,10 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@4.0.2: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} @@ -3024,6 +3589,18 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3039,18 +3616,39 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup@4.28.0: resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3084,6 +3682,9 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -3095,6 +3696,14 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + smol-toml@1.3.1: resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} engines: {node: '>= 18'} @@ -3114,6 +3723,10 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3132,6 +3745,10 @@ packages: prettier: optional: true + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3140,6 +3757,13 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3152,6 +3776,14 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -3176,6 +3808,10 @@ packages: summary@2.1.0: resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3196,6 +3832,10 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -3203,6 +3843,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -3294,6 +3937,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -3306,10 +3953,18 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unplugin@1.16.0: resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} engines: {node: '>=14.0.0'} @@ -3323,6 +3978,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -3415,6 +4073,10 @@ packages: resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3437,6 +4099,13 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -3449,13 +4118,34 @@ packages: utf-8-validate: optional: true + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -3766,6 +4456,130 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@commitlint/cli@19.6.1(@types/node@22.10.1)(typescript@5.7.2)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.7.2) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.6.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.17.1 + + '@commitlint/cz-commitlint@19.6.1(@types/node@22.10.1)(commitizen@4.3.1(@types/node@22.10.1)(typescript@5.7.2))(inquirer@8.2.5)(typescript@5.7.2)': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.7.2) + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + commitizen: 4.3.1(@types/node@22.10.1)(typescript@5.7.2) + inquirer: 8.2.5 + lodash.isplainobject: 4.0.6 + word-wrap: 1.2.5 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.6.0': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.6.3 + + '@commitlint/lint@19.6.0': + dependencies: + '@commitlint/is-ignored': 19.6.0 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@22.10.1)(typescript@5.7.2)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.1 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -4485,6 +5299,10 @@ snapshots: dependencies: '@babel/types': 7.26.3 + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 22.10.1 + '@types/doctrine@0.0.9': {} '@types/estree@1.0.6': {} @@ -4632,6 +5450,11 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -4650,12 +5473,31 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -4678,6 +5520,8 @@ snapshots: aria-query@5.3.2: {} + array-ify@1.0.0: {} + array-union@2.1.0: {} assertion-error@2.0.1: {} @@ -4686,12 +5530,16 @@ snapshots: dependencies: tslib: 2.8.1 + at-least-node@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 balanced-match@1.0.2: {} + base64-js@1.5.1: {} + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -4700,6 +5548,12 @@ snapshots: dependencies: is-windows: 1.0.2 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -4722,6 +5576,11 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-require@5.0.0(esbuild@0.24.0): dependencies: esbuild: 0.24.0 @@ -4729,6 +5588,8 @@ snapshots: cac@6.7.14: {} + cachedir@2.3.0: {} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -4749,6 +5610,12 @@ snapshots: loupe: 3.1.2 pathval: 2.0.0 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -4759,6 +5626,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.4.1: {} + chardet@0.7.0: {} check-error@2.1.1: {} @@ -4775,29 +5644,119 @@ snapshots: clean-stack@2.2.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@3.0.0: {} + clipanion@4.0.0-rc.4(typanion@3.14.0): dependencies: typanion: 3.14.0 - clone@1.0.4: - optional: true + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} clsx@2.1.1: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} + colorette@2.0.20: {} + + commander@12.1.0: {} + commander@4.1.1: {} + commitizen@4.3.1(@types/node@22.10.1)(typescript@5.7.2): + dependencies: + cachedir: 2.3.0 + cz-conventional-changelog: 3.3.0(@types/node@22.10.1)(typescript@5.7.2) + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.5 + is-utf8: 0.2.1 + lodash: 4.17.21 + minimist: 1.2.7 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + concat-map@0.0.1: {} consola@3.2.3: {} + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commit-types@3.0.0: {} + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + convert-source-map@2.0.0: {} + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + dependencies: + '@types/node': 22.10.1 + cosmiconfig: 9.0.0(typescript@5.7.2) + jiti: 2.4.1 + typescript: 5.7.2 + + cosmiconfig@9.0.0(typescript@5.7.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.7.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -4808,10 +5767,32 @@ snapshots: csstype@3.1.3: {} + cz-conventional-changelog@3.3.0(@types/node@22.10.1)(typescript@5.7.2): + dependencies: + chalk: 2.4.2 + commitizen: 4.3.1(@types/node@22.10.1)(typescript@5.7.2) + conventional-commit-types: 3.0.0 + lodash.map: 4.6.0 + longest: 2.0.1 + word-wrap: 1.2.5 + optionalDependencies: + '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.7.2) + transitivePeerDependencies: + - '@types/node' + - typescript + + dargs@8.1.0: {} + debug@4.3.7: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + + dedent@0.7.0: {} + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -4819,7 +5800,6 @@ snapshots: defaults@1.0.4: dependencies: clone: 1.0.4 - optional: true define-data-property@1.1.4: dependencies: @@ -4831,6 +5811,8 @@ snapshots: dequal@2.0.3: {} + detect-file@1.0.0: {} + detect-indent@6.1.0: {} dir-glob@3.0.1: @@ -4845,6 +5827,10 @@ snapshots: dom-accessibility-api@0.6.3: {} + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + eastasianwidth@0.2.0: {} easy-table@1.2.0: @@ -4855,6 +5841,8 @@ snapshots: electron-to-chromium@1.5.69: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -4871,6 +5859,14 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -4968,6 +5964,8 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} eslint-scope@8.2.0: @@ -5046,6 +6044,24 @@ snapshots: esutils@2.0.3: {} + eventemitter3@5.0.1: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + expect-type@1.1.0: {} extendable-error@0.1.7: {} @@ -5070,6 +6086,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.3: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -5078,6 +6096,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -5086,6 +6108,13 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-node-modules@2.1.3: + dependencies: + findup-sync: 4.0.0 + merge: 2.1.1 + + find-root@1.1.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -5096,6 +6125,19 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + findup-sync@4.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + resolve-dir: 1.0.1 + flat-cache@4.0.1: dependencies: flatted: 3.3.2 @@ -5124,6 +6166,15 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -5131,6 +6182,10 @@ snapshots: gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -5139,10 +6194,18 @@ snapshots: has-symbols: 1.1.0 hasown: 2.0.2 + get-stream@8.0.1: {} + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5160,6 +6223,33 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + globals@11.12.0: {} globals@14.0.0: {} @@ -5183,6 +6273,8 @@ snapshots: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -5203,14 +6295,24 @@ snapshots: dependencies: function-bind: 1.1.2 + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + html-escaper@2.0.2: {} human-id@1.0.2: {} + human-signals@5.0.0: {} + + husky@9.1.7: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -5218,17 +6320,48 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} + ini@1.3.8: {} + + ini@4.1.1: {} + + inquirer@8.2.5: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-arrayish@0.2.1: {} + is-callable@1.2.7: {} is-core-module@2.15.1: @@ -5241,6 +6374,12 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 @@ -5249,16 +6388,30 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@1.0.0: {} + is-number@7.0.0: {} + is-obj@2.0.0: {} + + is-stream@3.0.0: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.16 + is-unicode-supported@0.1.0: {} + + is-utf8@0.2.1: {} + is-windows@1.0.2: {} is-wsl@2.2.0: @@ -5315,8 +6468,12 @@ snapshots: json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} @@ -5325,6 +6482,14 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -5359,6 +6524,30 @@ snapshots: lines-and-columns@1.2.4: {} + lint-staged@15.3.0: + dependencies: + chalk: 5.4.1 + commander: 12.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.6.1 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + load-tsconfig@0.2.5: {} locate-path@5.0.0: @@ -5369,14 +6558,49 @@ snapshots: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.map@4.6.0: {} + lodash.merge@4.6.2: {} + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} lodash.startcase@4.4.0: {} + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + longest@2.0.1: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -5415,13 +6639,25 @@ snapshots: dependencies: map-or-similar: 1.5.0 + meow@12.1.1: {} + + merge-stream@2.0.0: {} + merge2@1.4.1: {} + merge@2.1.1: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + min-indent@1.0.1: {} minimatch@3.1.2: @@ -5432,6 +6668,8 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@1.2.7: {} + minimist@1.2.8: {} minipass@7.1.2: {} @@ -5440,6 +6678,8 @@ snapshots: ms@2.1.3: {} + mute-stream@0.0.8: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -5452,8 +6692,28 @@ snapshots: node-releases@2.0.18: {} + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + object-assign@4.1.1: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -5469,6 +6729,18 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -5485,6 +6757,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -5493,6 +6769,10 @@ snapshots: dependencies: p-limit: 3.1.0 + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + p-map@2.1.0: {} p-map@4.0.0: @@ -5509,12 +6789,27 @@ snapshots: dependencies: callsites: 3.1.0 + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + parse-ms@4.0.0: {} + parse-passwd@1.0.0: {} + path-exists@4.0.0: {} + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: @@ -5534,6 +6829,8 @@ snapshots: picomatch@4.0.2: {} + pidtree@0.6.0: {} + pify@4.0.1: {} pirates@4.0.6: {} @@ -5544,13 +6841,14 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-load-config@6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2): + postcss-load-config@6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.4.1 postcss: 8.4.49 tsx: 4.19.2 + yaml: 2.6.1 postcss@8.4.49: dependencies: @@ -5616,6 +6914,12 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@4.0.2: {} recast@0.23.9: @@ -5633,6 +6937,15 @@ snapshots: regenerator-runtime@0.14.1: {} + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -5645,8 +6958,20 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + reusify@1.0.4: {} + rfdc@1.4.1: {} + rollup@4.28.0: dependencies: '@types/estree': 1.0.6 @@ -5671,10 +6996,18 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.28.0 fsevents: 2.3.3 + run-async@2.4.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} sanitize.css@13.0.0: {} @@ -5704,12 +7037,24 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} sisteransi@1.0.5: {} slash@3.0.0: {} + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + smol-toml@1.3.1: {} source-map-js@1.2.1: {} @@ -5725,6 +7070,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + split2@4.2.0: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} @@ -5741,6 +7088,8 @@ snapshots: - supports-color - utf-8-validate + string-argv@0.3.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -5753,6 +7102,16 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -5763,6 +7122,10 @@ snapshots: strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + + strip-final-newline@3.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -5787,6 +7150,10 @@ snapshots: summary@2.1.0: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -5803,6 +7170,8 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-extensions@2.4.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -5811,6 +7180,8 @@ snapshots: dependencies: any-promise: 1.3.0 + through@2.3.8: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} @@ -5858,7 +7229,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2): + tsup@8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -5868,7 +7239,7 @@ snapshots: esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2) + postcss-load-config: 6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) resolve-from: 5.0.0 rollup: 4.28.0 source-map: 0.8.0-beta.0 @@ -5898,14 +7269,20 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.21.3: {} + type-fest@2.19.0: {} typescript@5.7.2: {} undici-types@6.20.0: {} + unicorn-magic@0.1.0: {} + universalify@0.1.2: {} + universalify@2.0.1: {} + unplugin@1.16.0: dependencies: acorn: 8.14.0 @@ -5921,6 +7298,8 @@ snapshots: dependencies: punycode: 2.3.1 + util-deprecate@1.0.2: {} + util@0.12.5: dependencies: inherits: 2.0.4 @@ -5997,7 +7376,6 @@ snapshots: wcwidth@1.0.1: dependencies: defaults: 1.0.4 - optional: true webidl-conversions@4.0.2: {} @@ -6021,6 +7399,10 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -6044,12 +7426,38 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + ws@8.18.0: {} + y18n@5.0.8: {} + yallist@3.1.1: {} + yaml@2.6.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@0.1.0: {} + yocto-queue@1.1.1: {} + zod-validation-error@3.4.0(zod@3.23.8): dependencies: zod: 3.23.8 From f425309875ccbcbcd90ffdec25addc95dd3deb22 Mon Sep 17 00:00:00 2001 From: y09n Date: Fri, 3 Jan 2025 23:18:16 +0900 Subject: [PATCH 02/28] =?UTF-8?q?fix:=20css=20=ED=8C=8C=EC=9D=BC=EC=9D=84?= =?UTF-8?q?=20=EC=A0=9C=EA=B3=B5=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: styles.css * build: version packages (next) * fix: exports * chore: exit prerelease mode * fix: changeset ignore --- .changeset/config.json | 2 +- .changeset/fifty-jeans-own.md | 12 +++++++++++ .changeset/nice-pillows-repeat.md | 14 +++++++++++++ .changeset/pre.json | 22 +++++++++++++++++++++ .templates/component/package.json | 3 ++- packages/Input/CHANGELOG.md | 12 +++++++++++ packages/Input/package.json | 5 +++-- packages/badge/CHANGELOG.md | 16 ++++++++++++++- packages/badge/package.json | 5 +++-- packages/card/CHANGELOG.md | 15 +++++++++++++- packages/card/package.json | 5 +++-- packages/divider/CHANGELOG.md | 12 +++++++++++ packages/divider/package.json | 5 +++-- packages/radio-group/CHANGELOG.md | 12 +++++++++++ packages/radio-group/package.json | 5 +++-- packages/side/CHANGELOG.md | 33 +++++++++++++++++++++++++++++++ packages/side/package.json | 8 +++++--- packages/side/styles.css | 9 +++++++++ packages/skeleton/CHANGELOG.md | 12 +++++++++++ packages/skeleton/package.json | 5 +++-- packages/switch/CHANGELOG.md | 14 +++++++++++++ packages/switch/package.json | 5 +++-- packages/tooltip/CHANGELOG.md | 12 +++++++++++ packages/tooltip/package.json | 5 +++-- packages/typography/CHANGELOG.md | 14 +++++++++++++ packages/typography/package.json | 5 +++-- 26 files changed, 242 insertions(+), 25 deletions(-) create mode 100644 .changeset/fifty-jeans-own.md create mode 100644 .changeset/nice-pillows-repeat.md create mode 100644 .changeset/pre.json create mode 100644 packages/side/styles.css diff --git a/.changeset/config.json b/.changeset/config.json index 72688a6..247db1a 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -7,5 +7,5 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["@sipe-team/component"] + "ignore": ["@sipe-team/package-name"] } diff --git a/.changeset/fifty-jeans-own.md b/.changeset/fifty-jeans-own.md new file mode 100644 index 0000000..86e0713 --- /dev/null +++ b/.changeset/fifty-jeans-own.md @@ -0,0 +1,12 @@ +--- +"@sipe-team/radio-group": patch +"@sipe-team/typography": patch +"@sipe-team/skeleton": patch +"@sipe-team/divider": patch +"@sipe-team/tooltip": patch +"@sipe-team/switch": patch +"@sipe-team/input": patch +"@sipe-team/card": patch +--- + +fix: exports diff --git a/.changeset/nice-pillows-repeat.md b/.changeset/nice-pillows-repeat.md new file mode 100644 index 0000000..7043a93 --- /dev/null +++ b/.changeset/nice-pillows-repeat.md @@ -0,0 +1,14 @@ +--- +"@sipe-team/radio-group": patch +"@sipe-team/typography": patch +"@sipe-team/skeleton": patch +"@sipe-team/divider": patch +"@sipe-team/tooltip": patch +"@sipe-team/switch": patch +"@sipe-team/input": patch +"@sipe-team/badge": patch +"@sipe-team/card": patch +"@sipe-team/side": patch +--- + +fix: styles.css diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000..9dbbb6f --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,22 @@ +{ + "mode": "exit", + "tag": "next", + "initialVersions": { + "@sipe-team/package-name": "0.0.0", + "@sipe-team/input": "0.0.2", + "@sipe-team/badge": "0.0.2", + "@sipe-team/card": "0.0.1", + "@sipe-team/divider": "0.0.1", + "@sipe-team/radio-group": "0.0.1", + "@sipe-team/side": "0.0.2", + "@sipe-team/skeleton": "0.0.1", + "@sipe-team/switch": "0.0.1", + "@sipe-team/tokens": "0.1.0", + "@sipe-team/tooltip": "0.0.2", + "@sipe-team/typography": "0.0.3" + }, + "changesets": [ + "fifty-jeans-own", + "nice-pillows-repeat" + ] +} diff --git a/.templates/component/package.json b/.templates/component/package.json index 7837231..2f2298a 100644 --- a/.templates/component/package.json +++ b/.templates/component/package.json @@ -54,7 +54,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/Input/CHANGELOG.md b/packages/Input/CHANGELOG.md index fbf3048..99467ba 100644 --- a/packages/Input/CHANGELOG.md +++ b/packages/Input/CHANGELOG.md @@ -1,5 +1,17 @@ # @sipe-team/input +## 0.0.3-next.1 + +### Patch Changes + +- fix: exports + +## 0.0.3-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + ## 0.0.2 ### Patch Changes diff --git a/packages/Input/package.json b/packages/Input/package.json index 9195cbf..3777b58 100644 --- a/packages/Input/package.json +++ b/packages/Input/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/input", "description": "Input component for Sipe Design System", - "version": "0.0.2", + "version": "0.0.3-next.1", "license": "MIT", "repository": { "type": "git", @@ -61,7 +61,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/badge/CHANGELOG.md b/packages/badge/CHANGELOG.md index 8e17484..4a3894c 100644 --- a/packages/badge/CHANGELOG.md +++ b/packages/badge/CHANGELOG.md @@ -1,5 +1,20 @@ # @sipe-team/badge +## 0.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @sipe-team/typography@0.0.4-next.1 + +## 0.0.3-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css +- Updated dependencies [27c312a] + - @sipe-team/typography@0.0.4-next.0 + ## 0.0.2 ### Patch Changes @@ -8,7 +23,6 @@ - Updated dependencies [e6f76c0] - @sipe-team/typography@0.0.3 - ## 0.0.2-next.0 ### Patch Changes diff --git a/packages/badge/package.json b/packages/badge/package.json index 49b7dec..763e1f6 100644 --- a/packages/badge/package.json +++ b/packages/badge/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/badge", "description": "Badge component for Sipe Design System", - "version": "0.0.2", + "version": "0.0.3-next.1", "license": "MIT", "repository": { "type": "git", @@ -61,7 +61,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/card/CHANGELOG.md b/packages/card/CHANGELOG.md index 183ae4d..4605a4a 100644 --- a/packages/card/CHANGELOG.md +++ b/packages/card/CHANGELOG.md @@ -1,9 +1,22 @@ # @sipe-team/card +## 0.0.2-next.1 + +### Patch Changes + +- fix: exports + - @sipe-team/tokens@0.1.0 + +## 0.0.2-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.1 ### Patch Changes - e6f76c0: fix: css module bundle - @sipe-team/tokens@0.1.0 - diff --git a/packages/card/package.json b/packages/card/package.json index 62cc563..3d0435d 100644 --- a/packages/card/package.json +++ b/packages/card/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/card", "description": "Card component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2-next.1", "license": "MIT", "repository": { "type": "git", @@ -62,7 +62,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/divider/CHANGELOG.md b/packages/divider/CHANGELOG.md index e947596..d17ba24 100644 --- a/packages/divider/CHANGELOG.md +++ b/packages/divider/CHANGELOG.md @@ -1,5 +1,17 @@ # @sipe-team/divider +## 0.0.2-next.1 + +### Patch Changes + +- fix: exports + +## 0.0.2-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + ## 0.0.1 ### Patch Changes diff --git a/packages/divider/package.json b/packages/divider/package.json index 13ad486..9922a23 100644 --- a/packages/divider/package.json +++ b/packages/divider/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/divider", "description": "divider component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2-next.1", "license": "MIT", "repository": { "type": "git", @@ -56,7 +56,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false, diff --git a/packages/radio-group/CHANGELOG.md b/packages/radio-group/CHANGELOG.md index a9e4508..2cd4d3d 100644 --- a/packages/radio-group/CHANGELOG.md +++ b/packages/radio-group/CHANGELOG.md @@ -1,5 +1,17 @@ # @sipe-team/radio-group +## 0.0.2-next.1 + +### Patch Changes + +- fix: exports + +## 0.0.2-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + ## 0.0.1 ### Patch Changes diff --git a/packages/radio-group/package.json b/packages/radio-group/package.json index 3b4d89e..adab9b2 100644 --- a/packages/radio-group/package.json +++ b/packages/radio-group/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/radio-group", "description": "Radio Group component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2-next.1", "license": "MIT", "repository": { "type": "git", @@ -57,7 +57,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/side/CHANGELOG.md b/packages/side/CHANGELOG.md index c8d3cd7..c9a3fbe 100644 --- a/packages/side/CHANGELOG.md +++ b/packages/side/CHANGELOG.md @@ -1,5 +1,38 @@ # @sipe-team/side +## 0.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @sipe-team/radio-group@0.0.2-next.1 + - @sipe-team/typography@0.0.4-next.1 + - @sipe-team/skeleton@0.0.2-next.1 + - @sipe-team/divider@0.0.2-next.1 + - @sipe-team/tooltip@0.0.3-next.1 + - @sipe-team/switch@0.0.2-next.1 + - @sipe-team/input@0.0.3-next.1 + - @sipe-team/card@0.0.2-next.1 + - @sipe-team/badge@0.0.3-next.1 + - @sipe-team/tokens@0.1.0 + +## 0.0.3-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css +- Updated dependencies [27c312a] + - @sipe-team/radio-group@0.0.2-next.0 + - @sipe-team/typography@0.0.4-next.0 + - @sipe-team/skeleton@0.0.2-next.0 + - @sipe-team/divider@0.0.2-next.0 + - @sipe-team/tooltip@0.0.3-next.0 + - @sipe-team/switch@0.0.2-next.0 + - @sipe-team/input@0.0.3-next.0 + - @sipe-team/badge@0.0.3-next.0 + - @sipe-team/card@0.0.2-next.0 + - @sipe-team/tokens@0.1.0 + ## 0.0.2 ### Patch Changes diff --git a/packages/side/package.json b/packages/side/package.json index 4339379..3c918e4 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/side", "description": "Sipe Design System", - "version": "0.0.2", + "version": "0.0.3-next.1", "license": "MIT", "repository": { "type": "git", @@ -10,7 +10,8 @@ "type": "module", "exports": "./src/index.ts", "files": [ - "dist" + "dist", + "styles.css" ], "scripts": { "build": "tsup", @@ -47,7 +48,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./styles.css" } }, "sideEffects": false diff --git a/packages/side/styles.css b/packages/side/styles.css new file mode 100644 index 0000000..5c95000 --- /dev/null +++ b/packages/side/styles.css @@ -0,0 +1,9 @@ +@import "~@sipe-team/badge/styles.css"; +@import "~@sipe-team/card/styles.css"; +@import "~@sipe-team/divider/styles.css"; +@import "~@sipe-team/input/styles.css"; +@import "~@sipe-team/radio-group/styles.css"; +@import "~@sipe-team/skeleton/styles.css"; +@import "~@sipe-team/switch/styles.css"; +@import "~@sipe-team/tooltip/styles.css"; +@import "~@sipe-team/typography/styles.css"; diff --git a/packages/skeleton/CHANGELOG.md b/packages/skeleton/CHANGELOG.md index 322be9a..8b0a562 100644 --- a/packages/skeleton/CHANGELOG.md +++ b/packages/skeleton/CHANGELOG.md @@ -1,5 +1,17 @@ # @sipe-team/skeleton +## 0.0.2-next.1 + +### Patch Changes + +- fix: exports + +## 0.0.2-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + ## 0.0.1 ### Patch Changes diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json index a618667..3c39177 100644 --- a/packages/skeleton/package.json +++ b/packages/skeleton/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/skeleton", "description": "Skeleton component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2-next.1", "license": "MIT", "repository": { "type": "git", @@ -57,7 +57,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false, diff --git a/packages/switch/CHANGELOG.md b/packages/switch/CHANGELOG.md index 36d4010..a83e22e 100644 --- a/packages/switch/CHANGELOG.md +++ b/packages/switch/CHANGELOG.md @@ -1,5 +1,19 @@ # @sipe-team/switch +## 0.0.2-next.1 + +### Patch Changes + +- fix: exports + - @sipe-team/tokens@0.1.0 + +## 0.0.2-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.1 ### Patch Changes diff --git a/packages/switch/package.json b/packages/switch/package.json index 8730272..c11ab90 100644 --- a/packages/switch/package.json +++ b/packages/switch/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/switch", "description": "Switch component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2-next.1", "license": "MIT", "repository": { "type": "git", @@ -57,7 +57,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false, diff --git a/packages/tooltip/CHANGELOG.md b/packages/tooltip/CHANGELOG.md index 3e4937d..a0e09ef 100644 --- a/packages/tooltip/CHANGELOG.md +++ b/packages/tooltip/CHANGELOG.md @@ -1,5 +1,17 @@ # @sipe-team/tooltip +## 0.0.3-next.1 + +### Patch Changes + +- fix: exports + +## 0.0.3-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + ## 0.0.2 ### Patch Changes diff --git a/packages/tooltip/package.json b/packages/tooltip/package.json index f176506..2703e98 100644 --- a/packages/tooltip/package.json +++ b/packages/tooltip/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/tooltip", "description": "Tooltip component for Sipe Design System", - "version": "0.0.2", + "version": "0.0.3-next.1", "license": "MIT", "repository": { "type": "git", @@ -64,7 +64,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/typography/CHANGELOG.md b/packages/typography/CHANGELOG.md index b30767f..58a936f 100644 --- a/packages/typography/CHANGELOG.md +++ b/packages/typography/CHANGELOG.md @@ -1,5 +1,19 @@ # @sipe-team/typography +## 0.0.4-next.1 + +### Patch Changes + +- fix: exports + - @sipe-team/tokens@0.1.0 + +## 0.0.4-next.0 + +### Patch Changes + +- 27c312a: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.3 ### Patch Changes diff --git a/packages/typography/package.json b/packages/typography/package.json index 68a2f76..57ec41f 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/typography", "description": "Typography component for Sipe Design System", - "version": "0.0.3", + "version": "0.0.4-next.1", "license": "MIT", "repository": { "type": "git", @@ -62,7 +62,8 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, "sideEffects": false From cef690585147b2b82945290223b3403d312ce601 Mon Sep 17 00:00:00 2001 From: HyojinKim Date: Sat, 4 Jan 2025 02:37:22 +0900 Subject: [PATCH 03/28] =?UTF-8?q?feat(button):=20Button=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#44)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: initial setting * feat: Button color, variant css 수정 * fix: storybook default color 변경, fix lint * chore(button): update package.json and yarn.lock to refine dependencies and scripts - Adjusted "files" field in package.json for consistency. - Removed outdated dependencies from package.json. - Added new dependencies for @radix-ui/react-compose-refs and @radix-ui/react-slot in yarn.lock. - Updated @testing-library/react version in yarn.lock. - Included clsx dependency in yarn.lock for improved class management. * chore: clean up pnpm-lock.yaml by removing unused dependencies and updating versions - Removed outdated dependencies including jest, babel plugins, and testing libraries. - Updated versions for several packages to ensure compatibility and reduce bloat. - Streamlined the lock file for better maintainability and performance. * chore(button): remove yarn.lock file to streamline dependency management - Deleted the yarn.lock file to eliminate potential conflicts and ensure a fresh installation of dependencies. - This change aims to improve maintainability and reduce bloat in the project. * feat(button): enhance testing setup and add typography dependency - Introduced vitest configuration and setup files for improved testing capabilities. - Added tests for the Button component to ensure proper rendering and styling. - Included new dependencies: @sipe-team/typography and @testing-library/jest-dom for enhanced functionality. - Updated pnpm-lock.yaml to reflect new package versions and dependencies. * chore: remove vitest configuration and setup files - Deleted vite.config.ts and vitest.setup.ts to streamline the testing setup. - This change simplifies the project structure by removing unused configuration files. --------- Co-authored-by: cindy --- packages/button/.storybook/main.ts | 16 ++++++ packages/button/.storybook/preview.ts | 5 ++ packages/button/package.json | 67 +++++++++++++++++++++++ packages/button/src/Button.module.css | 76 ++++++++++++++++++++++++++ packages/button/src/Button.stories.tsx | 76 ++++++++++++++++++++++++++ packages/button/src/Button.test.tsx | 31 +++++++++++ packages/button/src/Button.tsx | 65 ++++++++++++++++++++++ packages/button/src/env.d.ts | 1 + packages/button/src/index.ts | 1 + packages/button/tsconfig.json | 3 + packages/button/tsup.config.ts | 8 +++ packages/button/vitest.config.ts | 16 ++++++ packages/button/vitest.setup.ts | 1 + pnpm-lock.yaml | 67 +++++++++++++++++++++++ 14 files changed, 433 insertions(+) create mode 100644 packages/button/.storybook/main.ts create mode 100644 packages/button/.storybook/preview.ts create mode 100644 packages/button/package.json create mode 100644 packages/button/src/Button.module.css create mode 100644 packages/button/src/Button.stories.tsx create mode 100644 packages/button/src/Button.test.tsx create mode 100644 packages/button/src/Button.tsx create mode 100644 packages/button/src/env.d.ts create mode 100644 packages/button/src/index.ts create mode 100644 packages/button/tsconfig.json create mode 100644 packages/button/tsup.config.ts create mode 100644 packages/button/vitest.config.ts create mode 100644 packages/button/vitest.setup.ts diff --git a/packages/button/.storybook/main.ts b/packages/button/.storybook/main.ts new file mode 100644 index 0000000..83a7f10 --- /dev/null +++ b/packages/button/.storybook/main.ts @@ -0,0 +1,16 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/button/.storybook/preview.ts b/packages/button/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/button/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/button/package.json b/packages/button/package.json new file mode 100644 index 0000000..ef4083e --- /dev/null +++ b/packages/button/package.json @@ -0,0 +1,67 @@ +{ + "name": "@sipe-team/button", + "description": "button for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": ["dist"], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "sanitize.css": "^13.0.0", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false, + "dependencies": { + "@sipe-team/typography": "workspace:*", + "@radix-ui/react-slot": "^1.1.0", + "clsx": "^2.1.1" + } +} diff --git a/packages/button/src/Button.module.css b/packages/button/src/Button.module.css new file mode 100644 index 0000000..9535d0c --- /dev/null +++ b/packages/button/src/Button.module.css @@ -0,0 +1,76 @@ +.button { + display: flex; + align-items: center; + justify-content: center; + padding: 0 16px; + border-radius: 8px; + height: 40px; + font-size: 22px; + line-height: 30.8px; + font-weight: bold; + cursor: pointer; + transition: all 0.2s ease-in-out; +} + +/* Colors - CSS 변수 정의 */ +.primary { + --button-bg: var(--primary-color); + --button-color: var(--black); + --button-hover-bg: #00d2d2; + --button-hover-color: var(--black); +} + +.black { + --button-bg: var(--black); + --button-color: var(--white); + --button-hover-bg: #2d3748; + --button-hover-color: var(--white); +} + +.white { + --button-bg: var(--white); + --button-color: var(--black); + --button-hover-bg: #cbd5e0; + --button-hover-color: var(--black); +} + +.filled { + background-color: var(--button-bg); + color: var(--button-color); + border: none; + + &:hover:not(:disabled) { + background-color: var(--button-hover-bg); + color: var(--button-hover-color); + } +} + +.outline { + background-color: transparent; + border: 1px solid var(--button-bg); + color: var(--button-bg); + + &:hover:not(:disabled) { + background-color: var(--button-bg); + color: var(--button-color); + } +} + +.weak { + background-color: transparent; + border: none; + color: var(--button-bg); + + &:hover:not(:disabled) { + background-color: var(--button-bg); + opacity: 0.1; + color: var(--button-bg); + } +} + +/* States */ +.disabled { + opacity: 0.4; + cursor: not-allowed; + pointer-events: none; +} diff --git a/packages/button/src/Button.stories.tsx b/packages/button/src/Button.stories.tsx new file mode 100644 index 0000000..0994fca --- /dev/null +++ b/packages/button/src/Button.stories.tsx @@ -0,0 +1,76 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Button } from './Button'; + +const meta = { + title: 'Button', + component: Button, + parameters: { + layout: 'centered', + }, + argTypes: { + color: { + description: '버튼의 색상을 지정합니다', + options: ['primary', 'black', 'white'], + control: { type: 'radio' }, + }, + variant: { + description: '버튼의 스타일을 지정합니다', + options: ['filled', 'outline', 'weak'], + control: { type: 'radio' }, + }, + disabled: { + description: '버튼의 비활성화 상태를 지정합니다', + control: { type: 'boolean' }, + }, + }, +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +export const Basic: Story = { + args: { + children: 'Button', + color: "primary" + }, +}; + +export const Colors: Story = { + args: { + children: 'Button', + }, + render: (args) => ( +
+ + + +
+ ), +}; + +export const Variants: Story = { + args: { + children: 'Button', + color: 'primary', + }, + render: (args) => ( +
+ + + +
+ ), +}; + +export const States: Story = { + args: { + children: 'Button', + color: 'primary', + }, + render: (args) => ( +
+ + +
+ ), +}; diff --git a/packages/button/src/Button.test.tsx b/packages/button/src/Button.test.tsx new file mode 100644 index 0000000..b0732a4 --- /dev/null +++ b/packages/button/src/Button.test.tsx @@ -0,0 +1,31 @@ +import { render, screen } from '@testing-library/react'; +import { expect, test } from 'vitest'; +import { Button } from './Button'; + +test('children으로 입력한 텍스트를 표시한다.', () => { + render(); + + expect(screen.getByText('테스트')).toBeInTheDocument(); +}); + +test('모서리가 8px radius 형태이다.', () => { + render(); + + expect(screen.getByRole('button')).toHaveStyle({ borderRadius: '8px' }); +}); + +test('variant를 주입하지 않으면 filled(배경색 #2D3748)를 기본 형태로 설정한다.', () => { + render(); + + expect(screen.getByRole('button')).toHaveStyle({ + backgroundColor: '#2D3748', + }); +}); + +test('color가 primary인 경우 배경색 #00FFFF 형태를 적용한다.', () => { + render(); + + expect(screen.getByRole('button')).toHaveStyle({ + backgroundColor: '#00FFFF', + }); +}); \ No newline at end of file diff --git a/packages/button/src/Button.tsx b/packages/button/src/Button.tsx new file mode 100644 index 0000000..eb6dd60 --- /dev/null +++ b/packages/button/src/Button.tsx @@ -0,0 +1,65 @@ +import { Slot } from "@radix-ui/react-slot"; +import { clsx as cx } from "clsx"; +import type { ComponentProps, CSSProperties, ReactNode } from "react"; +import { forwardRef } from "react"; +import styles from "./Button.module.css"; + +type ButtonColor = "primary" | "black" | "white"; + +type ButtonVariant = "filled" | "outline" | "weak"; + +export interface ButtonProps extends ComponentProps<"button"> { + color?: ButtonColor; + variant?: ButtonVariant; + disabled?: boolean; + className?: string; + children: ReactNode; + asChild?: boolean; +} + +export const Button = forwardRef( + function Button( + { + color = "primary", + variant = "filled", + asChild, + disabled, + className, + style: _style, + children, + ...rest + }, + ref + ) { + const Comp = asChild ? Slot : "button"; + + const commonClassName = cx( + styles.button, + styles[color], + styles[variant], + { + [styles.disabled]: disabled, + }, + className + ); + + const style = { + ..._style, + "--primary-color": "#00FFFF", + "--black": "black", + "--white": "white", + } as CSSProperties; + + return ( + + {children} + + ); + } +); diff --git a/packages/button/src/env.d.ts b/packages/button/src/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/button/src/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/button/src/index.ts b/packages/button/src/index.ts new file mode 100644 index 0000000..8b166a8 --- /dev/null +++ b/packages/button/src/index.ts @@ -0,0 +1 @@ +export * from './Button'; diff --git a/packages/button/tsconfig.json b/packages/button/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/button/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/button/tsup.config.ts b/packages/button/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/button/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/button/vitest.config.ts b/packages/button/vitest.config.ts new file mode 100644 index 0000000..2e5a4f7 --- /dev/null +++ b/packages/button/vitest.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + coverage: { + include: ['./src/**/*.{ts,tsx}'], + exclude: ['./src/**/*.stories.tsx', './src/env.d.ts', './src/index.ts'], + }, + css: true, + environment: 'happy-dom', + globals: true, + passWithNoTests: true, + setupFiles: './vitest.setup.ts', + watch: false, + }, +}); diff --git a/packages/button/vitest.setup.ts b/packages/button/vitest.setup.ts new file mode 100644 index 0000000..a6253fa --- /dev/null +++ b/packages/button/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest'; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f10850..a35e38c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -390,6 +390,73 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/button: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@sipe-team/typography': + specifier: workspace:* + version: link:../typography + clsx: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + happy-dom: + specifier: 'catalog:' + version: 15.7.4 + react: + specifier: ^18.3.1 + version: 18.3.1 + sanitize.css: + specifier: ^13.0.0 + version: 13.0.0 + storybook: + specifier: 'catalog:' + version: 8.4.5(prettier@2.8.8) + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + vitest: + specifier: 'catalog:' + version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/divider: dependencies: clsx: From fc41cbad744a52912fccacedcf9a167f0eb9c234 Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 5 Jan 2025 15:53:21 +0900 Subject: [PATCH 04/28] chore: update git repository urls (#74) --- .github/CONTRIBUTING.md | 2 +- .templates/component/package.json | 2 +- README.md | 8 ++++---- packages/Input/package.json | 6 ++---- packages/badge/package.json | 6 ++---- packages/button/package.json | 2 +- packages/card/package.json | 6 ++---- packages/divider/package.json | 6 ++---- packages/radio-group/package.json | 6 ++---- packages/side/package.json | 7 ++----- packages/skeleton/package.json | 6 ++---- packages/switch/package.json | 6 ++---- packages/tokens/package.json | 6 ++---- packages/tooltip/package.json | 6 ++---- packages/typography/package.json | 6 ++---- 15 files changed, 29 insertions(+), 52 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c907ff5..474610e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ We love your input! We want to make contributing to this project as easy and tra ## Getting Started 1. Fork the repository -2. Clone your fork: `git clone https://github.com/your-username/3-1_sds.git` +2. Clone your fork: `git clone https://github.com/your-username/3-2_side.git` 3. Install dependencies: `pnpm install` ## Creating a New Component diff --git a/.templates/component/package.json b/.templates/component/package.json index 2f2298a..9608639 100644 --- a/.templates/component/package.json +++ b/.templates/component/package.json @@ -5,7 +5,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", diff --git a/README.md b/README.md index 9fa8f04..8c58476 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![](./public/assets/og-image.png) # Sipe Design System -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/slash/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.5-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-xvhdismwhu.chromatic.com/?path=/story/input--default) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/github/sipe-team/3-1_sds/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/github/sipe-team/3-1_sds) Github Stars +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/3-2_side/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.5-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-xvhdismwhu.chromatic.com/?path=/story/input--default) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/github/sipe-team/3-2_side/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/github/sipe-team/3-2_side) Github Stars Sipe Design System is a monorepo-based component library built to modernize and standardize the official Sipe website. Drawing inspiration from our existing design patterns, we're creating a robust, type-safe, and accessible component system that can be used across all Sipe projects. @@ -17,12 +17,12 @@ This design system is built with: We maintain our component development roadmap in our [GitHub Project Board](https://github.com/orgs/sipe-team/projects/4). Before contributing, please check: -We warmly welcome contributions from the community, whether you're a Sipe team member or not! Your input helps make this design system better for everyone please read [contributing guidelines](https://github.com/sipe-team/3-1_sds/tree/main/.github/CONTRIBUTING.md) for more details. +We warmly welcome contributions from the community, whether you're a Sipe team member or not! Your input helps make this design system better for everyone please read [contributing guidelines](https://github.com/sipe-team/3-2_side/tree/main/.github/CONTRIBUTING.md) for more details. ## Contributors - - + + Sipe Design System 기여자 목록 ## License diff --git a/packages/Input/package.json b/packages/Input/package.json index 3777b58..e904b59 100644 --- a/packages/Input/package.json +++ b/packages/Input/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/badge/package.json b/packages/badge/package.json index 763e1f6..5d727c6 100644 --- a/packages/badge/package.json +++ b/packages/badge/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/button/package.json b/packages/button/package.json index ef4083e..db8e262 100644 --- a/packages/button/package.json +++ b/packages/button/package.json @@ -5,7 +5,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", diff --git a/packages/card/package.json b/packages/card/package.json index 3d0435d..0f172c2 100644 --- a/packages/card/package.json +++ b/packages/card/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/divider/package.json b/packages/divider/package.json index 9922a23..232d6a2 100644 --- a/packages/divider/package.json +++ b/packages/divider/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/radio-group/package.json b/packages/radio-group/package.json index adab9b2..b825648 100644 --- a/packages/radio-group/package.json +++ b/packages/radio-group/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/side/package.json b/packages/side/package.json index 3c918e4..aeb5997 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -5,14 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist", - "styles.css" - ], + "files": ["dist", "styles.css"], "scripts": { "build": "tsup", "prepack": "pnpm run build" diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json index 3c39177..5c255bd 100644 --- a/packages/skeleton/package.json +++ b/packages/skeleton/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/switch/package.json b/packages/switch/package.json index c11ab90..eed07d7 100644 --- a/packages/switch/package.json +++ b/packages/switch/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/tokens/package.json b/packages/tokens/package.json index f931472..b922a2f 100644 --- a/packages/tokens/package.json +++ b/packages/tokens/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/tooltip/package.json b/packages/tooltip/package.json index 2703e98..0490c8e 100644 --- a/packages/tooltip/package.json +++ b/packages/tooltip/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/typography/package.json b/packages/typography/package.json index 57ec41f..e459381 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -5,13 +5,11 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/sipe-team/3-1_sds" + "url": "https://github.com/sipe-team/3-2_side" }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", From 4c482433bf4116a0e68a421d95c8925f0013ca68 Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 5 Jan 2025 17:59:26 +0900 Subject: [PATCH 05/28] fix(button): handle dynamic styles within typescript (#76) --- .changeset/happy-seas-cross.md | 5 + packages/button/{src/env.d.ts => global.d.ts} | 0 packages/button/package.json | 20 ++-- packages/button/src/Button.module.css | 61 ++-------- packages/button/src/Button.stories.tsx | 31 +++-- packages/button/src/Button.test.tsx | 10 +- packages/button/src/Button.tsx | 106 +++++++++++++----- packages/button/tsup.config.ts | 9 +- packages/button/vitest.config.ts | 23 ++-- packages/button/vitest.setup.ts | 2 +- pnpm-lock.yaml | 53 +++++---- 11 files changed, 171 insertions(+), 149 deletions(-) create mode 100644 .changeset/happy-seas-cross.md rename packages/button/{src/env.d.ts => global.d.ts} (100%) diff --git a/.changeset/happy-seas-cross.md b/.changeset/happy-seas-cross.md new file mode 100644 index 0000000..b4bffaa --- /dev/null +++ b/.changeset/happy-seas-cross.md @@ -0,0 +1,5 @@ +--- +"@sipe-team/button": patch +--- + +fix(button): handle dynamic styles within typescript diff --git a/packages/button/src/env.d.ts b/packages/button/global.d.ts similarity index 100% rename from packages/button/src/env.d.ts rename to packages/button/global.d.ts diff --git a/packages/button/package.json b/packages/button/package.json index db8e262..201223b 100644 --- a/packages/button/package.json +++ b/packages/button/package.json @@ -14,13 +14,19 @@ "build": "tsup", "build:storybook": "storybook build", "dev:storybook": "storybook dev -p 6006", - "lint": "biome lint .", + "lint:biome": "pnpm exec biome lint", + "lint:eslint": "pnpm exec eslint --flag unstable_ts_config", "test": "vitest", "typecheck": "tsc", "prepack": "pnpm run build" }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "@sipe-team/typography": "workspace:*", + "clsx": "^2.1.1", + "ts-pattern": "^5.6.0" + }, "devDependencies": { - "@biomejs/biome": "catalog:", "@storybook/addon-essentials": "catalog:", "@storybook/addon-interactions": "catalog:", "@storybook/addon-links": "catalog:", @@ -55,13 +61,9 @@ "types": "./dist/index.d.cts", "default": "./dist/index.cjs" } - } + }, + "./styles.css": "./dist/index.css" } }, - "sideEffects": false, - "dependencies": { - "@sipe-team/typography": "workspace:*", - "@radix-ui/react-slot": "^1.1.0", - "clsx": "^2.1.1" - } + "sideEffects": false } diff --git a/packages/button/src/Button.module.css b/packages/button/src/Button.module.css index 9535d0c..8478924 100644 --- a/packages/button/src/Button.module.css +++ b/packages/button/src/Button.module.css @@ -10,62 +10,15 @@ font-weight: bold; cursor: pointer; transition: all 0.2s ease-in-out; + background-color: var(--background-color); + border: var(--border); + color: var(--color); } -/* Colors - CSS 변수 정의 */ -.primary { - --button-bg: var(--primary-color); - --button-color: var(--black); - --button-hover-bg: #00d2d2; - --button-hover-color: var(--black); -} - -.black { - --button-bg: var(--black); - --button-color: var(--white); - --button-hover-bg: #2d3748; - --button-hover-color: var(--white); -} - -.white { - --button-bg: var(--white); - --button-color: var(--black); - --button-hover-bg: #cbd5e0; - --button-hover-color: var(--black); -} - -.filled { - background-color: var(--button-bg); - color: var(--button-color); - border: none; - - &:hover:not(:disabled) { - background-color: var(--button-hover-bg); - color: var(--button-hover-color); - } -} - -.outline { - background-color: transparent; - border: 1px solid var(--button-bg); - color: var(--button-bg); - - &:hover:not(:disabled) { - background-color: var(--button-bg); - color: var(--button-color); - } -} - -.weak { - background-color: transparent; - border: none; - color: var(--button-bg); - - &:hover:not(:disabled) { - background-color: var(--button-bg); - opacity: 0.1; - color: var(--button-bg); - } +.button:hover { + background-color: var(--hover-background-color); + color: var(--hover-color); + opacity: var(--hover-opacity); } /* States */ diff --git a/packages/button/src/Button.stories.tsx b/packages/button/src/Button.stories.tsx index 0994fca..ce70952 100644 --- a/packages/button/src/Button.stories.tsx +++ b/packages/button/src/Button.stories.tsx @@ -31,7 +31,8 @@ type Story = StoryObj; export const Basic: Story = { args: { children: 'Button', - color: "primary" + color: 'primary', + variant: 'filled', }, }; @@ -41,9 +42,15 @@ export const Colors: Story = { }, render: (args) => (
- - - + + +
), }; @@ -55,9 +62,15 @@ export const Variants: Story = { }, render: (args) => (
- - - + + +
), }; @@ -70,7 +83,9 @@ export const States: Story = { render: (args) => (
- +
), }; diff --git a/packages/button/src/Button.test.tsx b/packages/button/src/Button.test.tsx index b0732a4..fd3c7f5 100644 --- a/packages/button/src/Button.test.tsx +++ b/packages/button/src/Button.test.tsx @@ -14,18 +14,18 @@ test('모서리가 8px radius 형태이다.', () => { expect(screen.getByRole('button')).toHaveStyle({ borderRadius: '8px' }); }); -test('variant를 주입하지 않으면 filled(배경색 #2D3748)를 기본 형태로 설정한다.', () => { +test('variant를 주입하지 않으면 filled(배경색 #00ffff)를 기본 형태로 설정한다.', () => { render(); expect(screen.getByRole('button')).toHaveStyle({ - backgroundColor: '#2D3748', + backgroundColor: '#00ffff', }); }); -test('color가 primary인 경우 배경색 #00FFFF 형태를 적용한다.', () => { +test('color가 primary인 경우 배경색 #00ffff 형태를 적용한다.', () => { render(); expect(screen.getByRole('button')).toHaveStyle({ - backgroundColor: '#00FFFF', + backgroundColor: '#00ffff', }); -}); \ No newline at end of file +}); diff --git a/packages/button/src/Button.tsx b/packages/button/src/Button.tsx index eb6dd60..dd3edbe 100644 --- a/packages/button/src/Button.tsx +++ b/packages/button/src/Button.tsx @@ -1,14 +1,19 @@ -import { Slot } from "@radix-ui/react-slot"; -import { clsx as cx } from "clsx"; -import type { ComponentProps, CSSProperties, ReactNode } from "react"; -import { forwardRef } from "react"; -import styles from "./Button.module.css"; +import { Slot } from '@radix-ui/react-slot'; +import { clsx as cx } from 'clsx'; +import { + type CSSProperties, + type ComponentProps, + type ReactNode, + forwardRef, +} from 'react'; +import { match } from 'ts-pattern'; +import styles from './Button.module.css'; -type ButtonColor = "primary" | "black" | "white"; +type ButtonColor = 'primary' | 'black' | 'white'; -type ButtonVariant = "filled" | "outline" | "weak"; +type ButtonVariant = 'filled' | 'outline' | 'weak'; -export interface ButtonProps extends ComponentProps<"button"> { +export interface ButtonProps extends ComponentProps<'button'> { color?: ButtonColor; variant?: ButtonVariant; disabled?: boolean; @@ -20,40 +25,32 @@ export interface ButtonProps extends ComponentProps<"button"> { export const Button = forwardRef( function Button( { - color = "primary", - variant = "filled", + color = 'primary', + variant = 'filled', asChild, disabled, - className, + className: _className, style: _style, children, ...rest }, - ref + ref, ) { - const Comp = asChild ? Slot : "button"; - - const commonClassName = cx( + const Comp = asChild ? Slot : 'button'; + const className = cx( styles.button, - styles[color], - styles[variant], - { - [styles.disabled]: disabled, - }, - className + { [styles.disabled]: disabled }, + _className, ); - const style = { ..._style, - "--primary-color": "#00FFFF", - "--black": "black", - "--white": "white", + ...getButtonStyle({ color, variant }), } as CSSProperties; return ( ( {children} ); - } + }, ); + +function getButtonStyle({ + color, + variant, +}: { color: ButtonColor; variant: ButtonVariant }) { + const primaryColor = '#00ffff'; + const blackColor = 'black'; + const whiteColor = 'white'; + const transparentColor = 'transparent'; + + const backgroundColor = match([color, variant]) + .with(['primary', 'filled'], () => primaryColor) + .with(['black', 'filled'], () => blackColor) + .with(['white', 'filled'], () => whiteColor) + .otherwise(() => transparentColor); + const border = match([color, variant]) + .with(['primary', 'outline'], () => `1px solid ${primaryColor}`) + .with(['black', 'outline'], () => `1px solid ${blackColor}`) + .with(['white', 'outline'], () => `1px solid ${whiteColor}`) + .otherwise(() => 'none'); + const fontColor = match([color, variant]) + .with(['primary', 'filled'], () => blackColor) + .with(['primary', 'outline'], ['primary', 'weak'], () => primaryColor) + .with(['black', 'filled'], () => whiteColor) + .with(['black', 'outline'], ['black', 'weak'], () => blackColor) + .with(['white', 'filled'], () => blackColor) + .with(['white', 'outline'], ['white', 'weak'], () => whiteColor) + .exhaustive(); + const hoverBackgroundColor = match([color, variant]) + .with(['primary', 'filled'], () => '#00d2d2') + .with(['primary', 'outline'], ['primary', 'weak'], () => primaryColor) + .with(['black', 'filled'], () => '#2d3748') + .with(['black', 'outline'], ['black', 'weak'], () => blackColor) + .with(['white', 'filled'], () => '#cbd5e0') + .with(['white', 'outline'], ['white', 'weak'], () => whiteColor) + .exhaustive(); + const hoverFontColor = match([color, variant]) + .with(['primary', 'filled'], ['primary', 'outline'], () => blackColor) + .with(['primary', 'weak'], () => primaryColor) + .with(['black', 'filled'], ['black', 'outline'], () => whiteColor) + .with(['black', 'weak'], () => blackColor) + .with(['white', 'filled'], ['white', 'outline'], () => blackColor) + .with(['white', 'weak'], () => whiteColor) + .exhaustive(); + const hoverOpacity = variant === 'weak' ? 0.1 : 1; + + return { + '--background-color': backgroundColor, + '--border': border, + '--color': fontColor, + '--hover-background-color': hoverBackgroundColor, + '--hover-color': hoverFontColor, + '--hover-opacity': hoverOpacity, + }; +} diff --git a/packages/button/tsup.config.ts b/packages/button/tsup.config.ts index c533199..ee4b117 100644 --- a/packages/button/tsup.config.ts +++ b/packages/button/tsup.config.ts @@ -1,8 +1,3 @@ -import { defineConfig } from 'tsup'; +import defaultConfig from '../../tsup.config'; -export default defineConfig({ - entry: ['src/index.ts'], - clean: true, - dts: true, - format: ['esm', 'cjs'], -}); +export default defaultConfig; diff --git a/packages/button/vitest.config.ts b/packages/button/vitest.config.ts index 2e5a4f7..a917827 100644 --- a/packages/button/vitest.config.ts +++ b/packages/button/vitest.config.ts @@ -1,16 +1,11 @@ -import { defineConfig } from 'vitest/config'; +import { defineProject, mergeConfig } from 'vitest/config'; +import defaultConfig from '../../vitest.config'; -export default defineConfig({ - test: { - coverage: { - include: ['./src/**/*.{ts,tsx}'], - exclude: ['./src/**/*.stories.tsx', './src/env.d.ts', './src/index.ts'], +export default mergeConfig( + defaultConfig, + defineProject({ + test: { + setupFiles: './vitest.setup.ts', }, - css: true, - environment: 'happy-dom', - globals: true, - passWithNoTests: true, - setupFiles: './vitest.setup.ts', - watch: false, - }, -}); + }), +); diff --git a/packages/button/vitest.setup.ts b/packages/button/vitest.setup.ts index a6253fa..7b0828b 100644 --- a/packages/button/vitest.setup.ts +++ b/packages/button/vitest.setup.ts @@ -1 +1 @@ -import '@testing-library/jest-dom/vitest'; \ No newline at end of file +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a35e38c..5ec99a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -326,17 +326,20 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) - packages/card: + packages/button: dependencies: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.13)(react@18.3.1) - '@sipe-team/tokens': + '@sipe-team/typography': specifier: workspace:* - version: link:../tokens + version: link:../typography clsx: specifier: ^2.1.1 version: 2.1.1 + ts-pattern: + specifier: ^5.6.0 + version: 5.6.0 devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' @@ -390,54 +393,51 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) - packages/button: + packages/card: dependencies: '@radix-ui/react-slot': specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@sipe-team/typography': + version: 1.1.0(@types/react@18.3.13)(react@18.3.1) + '@sipe-team/tokens': specifier: workspace:* - version: link:../typography + version: link:../tokens clsx: specifier: ^2.1.1 version: 2.1.1 devDependencies: - '@biomejs/biome': - specifier: 'catalog:' - version: 1.9.4 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 - version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ^18.3.12 - version: 18.3.12 + version: 18.3.13 happy-dom: specifier: 'catalog:' - version: 15.7.4 + version: 15.11.7 react: specifier: ^18.3.1 version: 18.3.1 @@ -446,16 +446,16 @@ importers: version: 13.0.0 storybook: specifier: 'catalog:' - version: 8.4.5(prettier@2.8.8) + version: 8.4.6(prettier@2.8.8) tsup: specifier: 'catalog:' - version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' - version: 5.6.3 + version: 5.7.2 vitest: specifier: 'catalog:' - version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) packages/divider: dependencies: @@ -3966,6 +3966,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-pattern@5.6.0: + resolution: {integrity: sha512-SL8u60X5+LoEy9tmQHWCdPc2hhb2pKI6I1tU5Jue3v8+iRqZdcT3mWPwKKJy1fMfky6uha82c8ByHAE8PMhKHw==} + tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -7288,6 +7291,8 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-pattern@5.6.0: {} + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 From 2473951463de7bfbcb04036b0f8fecab28911727 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 5 Jan 2025 18:02:19 +0900 Subject: [PATCH 06/28] Update release commit message (#75) * ci(release): update release commit message and husky config * chore(release): remove husky variable from release workflow * chore(button): remove biome dependency from button package --- .github/workflows/release.yaml | 2 ++ pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5208152..f9986b0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,6 +30,8 @@ jobs: with: version: pnpm changeset version publish: pnpm changeset publish + commit: "chore(release): Version Packages" env: GITHUB_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ec99a2..e9e8a05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4255,7 +4255,7 @@ snapshots: '@babel/traverse': 7.26.3 '@babel/types': 7.26.3 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4326,7 +4326,7 @@ snapshots: '@babel/parser': 7.26.3 '@babel/template': 7.25.9 '@babel/types': 7.26.3 - debug: 4.3.7 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5444,7 +5444,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -5947,7 +5947,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.24.0): dependencies: - debug: 4.3.7 + debug: 4.4.0 esbuild: 0.24.0 transitivePeerDependencies: - supports-color @@ -6501,7 +6501,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -7307,7 +7307,7 @@ snapshots: cac: 6.7.14 chokidar: 4.0.1 consola: 3.2.3 - debug: 4.3.7 + debug: 4.4.0 esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 @@ -7385,7 +7385,7 @@ snapshots: vite-node@2.1.8(@types/node@22.10.1): dependencies: cac: 6.7.14 - debug: 4.3.7 + debug: 4.4.0 es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.11(@types/node@22.10.1) @@ -7419,7 +7419,7 @@ snapshots: '@vitest/spy': 2.1.8 '@vitest/utils': 2.1.8 chai: 5.1.2 - debug: 4.3.7 + debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.14 pathe: 1.1.2 From 3a440501da1b964aa7c6c028793a9ea73db245d1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 5 Jan 2025 18:23:34 +0900 Subject: [PATCH 07/28] chore(cicd): correct commit msg (#77) * chore(release): correct commit msg * chore(cicd): remove hyphen --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f9986b0..c23c8b0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,7 +30,7 @@ jobs: with: version: pnpm changeset version publish: pnpm changeset publish - commit: "chore(release): Version Packages" + commit: "chore(release): version packages" env: GITHUB_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} From 3f337752e43a82a6c956f9d87d5d2bdbd78ca482 Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 5 Jan 2025 18:27:18 +0900 Subject: [PATCH 08/28] chore: update codeowners (#78) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4b453f8..07182be 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @kimdaeyeobbb @hy57in @developerjhp @bae-sh @noahluftyang @froggy1014 @heeji289 @synuns +* @kimdaeyeobbb @hy57in @developerjhp @bae-sh @noahluftyang @froggy1014 @heeji289 @synuns @yeojini @SEMIN-97 From 43faf4cc1fe8715940808c9bca05e1c25ed14b6a Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 5 Jan 2025 22:01:28 +0900 Subject: [PATCH 09/28] feat(side): add button & export tokens (#80) --- .changeset/cold-terms-check.md | 5 +++++ packages/side/package.json | 1 + packages/side/src/index.ts | 2 ++ packages/side/styles.css | 1 + pnpm-lock.yaml | 3 +++ 5 files changed, 12 insertions(+) create mode 100644 .changeset/cold-terms-check.md diff --git a/.changeset/cold-terms-check.md b/.changeset/cold-terms-check.md new file mode 100644 index 0000000..1657fde --- /dev/null +++ b/.changeset/cold-terms-check.md @@ -0,0 +1,5 @@ +--- +"@sipe-team/side": minor +--- + +feat(side): add button & export tokens diff --git a/packages/side/package.json b/packages/side/package.json index aeb5997..9c7cf84 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "@sipe-team/badge": "workspace:*", + "@sipe-team/button": "workspace:*", "@sipe-team/card": "workspace:*", "@sipe-team/divider": "workspace:*", "@sipe-team/input": "workspace:*", diff --git a/packages/side/src/index.ts b/packages/side/src/index.ts index fee0dee..91292b7 100644 --- a/packages/side/src/index.ts +++ b/packages/side/src/index.ts @@ -1,9 +1,11 @@ export * from '@sipe-team/badge'; +export * from '@sipe-team/button'; export * from '@sipe-team/card'; export * from '@sipe-team/divider'; export * from '@sipe-team/input'; export * from '@sipe-team/radio-group'; export * from '@sipe-team/skeleton'; export * from '@sipe-team/switch'; +export * from '@sipe-team/tokens'; export * from '@sipe-team/tooltip'; export * from '@sipe-team/typography'; diff --git a/packages/side/styles.css b/packages/side/styles.css index 5c95000..11e5477 100644 --- a/packages/side/styles.css +++ b/packages/side/styles.css @@ -1,4 +1,5 @@ @import "~@sipe-team/badge/styles.css"; +@import "~@sipe-team/button/styles.css"; @import "~@sipe-team/card/styles.css"; @import "~@sipe-team/divider/styles.css"; @import "~@sipe-team/input/styles.css"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9e8a05..1dff024 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -577,6 +577,9 @@ importers: '@sipe-team/badge': specifier: workspace:* version: link:../badge + '@sipe-team/button': + specifier: workspace:* + version: link:../button '@sipe-team/card': specifier: workspace:* version: link:../card From 803d50f46c0f1e35ecfdac8bc24f61cdd6611571 Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 5 Jan 2025 22:02:39 +0900 Subject: [PATCH 10/28] chore(release): version packages (#79) Co-authored-by: github-actions[bot] --- .changeset/cold-terms-check.md | 5 ----- .changeset/fifty-jeans-own.md | 12 ------------ .changeset/happy-seas-cross.md | 5 ----- .changeset/nice-pillows-repeat.md | 14 -------------- .changeset/pre.json | 22 ---------------------- packages/Input/CHANGELOG.md | 7 +++++++ packages/Input/package.json | 6 ++++-- packages/badge/CHANGELOG.md | 9 +++++++++ packages/badge/package.json | 6 ++++-- packages/button/CHANGELOG.md | 10 ++++++++++ packages/button/package.json | 6 ++++-- packages/card/CHANGELOG.md | 8 ++++++++ packages/card/package.json | 6 ++++-- packages/divider/CHANGELOG.md | 7 +++++++ packages/divider/package.json | 6 ++++-- packages/radio-group/CHANGELOG.md | 7 +++++++ packages/radio-group/package.json | 6 ++++-- packages/side/CHANGELOG.md | 24 ++++++++++++++++++++++++ packages/side/package.json | 7 +++++-- packages/skeleton/CHANGELOG.md | 7 +++++++ packages/skeleton/package.json | 6 ++++-- packages/switch/CHANGELOG.md | 8 ++++++++ packages/switch/package.json | 6 ++++-- packages/tokens/package.json | 4 +++- packages/tooltip/CHANGELOG.md | 7 +++++++ packages/tooltip/package.json | 6 ++++-- packages/typography/CHANGELOG.md | 8 ++++++++ packages/typography/package.json | 6 ++++-- 28 files changed, 150 insertions(+), 81 deletions(-) delete mode 100644 .changeset/cold-terms-check.md delete mode 100644 .changeset/fifty-jeans-own.md delete mode 100644 .changeset/happy-seas-cross.md delete mode 100644 .changeset/nice-pillows-repeat.md delete mode 100644 .changeset/pre.json create mode 100644 packages/button/CHANGELOG.md diff --git a/.changeset/cold-terms-check.md b/.changeset/cold-terms-check.md deleted file mode 100644 index 1657fde..0000000 --- a/.changeset/cold-terms-check.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sipe-team/side": minor ---- - -feat(side): add button & export tokens diff --git a/.changeset/fifty-jeans-own.md b/.changeset/fifty-jeans-own.md deleted file mode 100644 index 86e0713..0000000 --- a/.changeset/fifty-jeans-own.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@sipe-team/radio-group": patch -"@sipe-team/typography": patch -"@sipe-team/skeleton": patch -"@sipe-team/divider": patch -"@sipe-team/tooltip": patch -"@sipe-team/switch": patch -"@sipe-team/input": patch -"@sipe-team/card": patch ---- - -fix: exports diff --git a/.changeset/happy-seas-cross.md b/.changeset/happy-seas-cross.md deleted file mode 100644 index b4bffaa..0000000 --- a/.changeset/happy-seas-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sipe-team/button": patch ---- - -fix(button): handle dynamic styles within typescript diff --git a/.changeset/nice-pillows-repeat.md b/.changeset/nice-pillows-repeat.md deleted file mode 100644 index 7043a93..0000000 --- a/.changeset/nice-pillows-repeat.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@sipe-team/radio-group": patch -"@sipe-team/typography": patch -"@sipe-team/skeleton": patch -"@sipe-team/divider": patch -"@sipe-team/tooltip": patch -"@sipe-team/switch": patch -"@sipe-team/input": patch -"@sipe-team/badge": patch -"@sipe-team/card": patch -"@sipe-team/side": patch ---- - -fix: styles.css diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 9dbbb6f..0000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "@sipe-team/package-name": "0.0.0", - "@sipe-team/input": "0.0.2", - "@sipe-team/badge": "0.0.2", - "@sipe-team/card": "0.0.1", - "@sipe-team/divider": "0.0.1", - "@sipe-team/radio-group": "0.0.1", - "@sipe-team/side": "0.0.2", - "@sipe-team/skeleton": "0.0.1", - "@sipe-team/switch": "0.0.1", - "@sipe-team/tokens": "0.1.0", - "@sipe-team/tooltip": "0.0.2", - "@sipe-team/typography": "0.0.3" - }, - "changesets": [ - "fifty-jeans-own", - "nice-pillows-repeat" - ] -} diff --git a/packages/Input/CHANGELOG.md b/packages/Input/CHANGELOG.md index 99467ba..6f161a3 100644 --- a/packages/Input/CHANGELOG.md +++ b/packages/Input/CHANGELOG.md @@ -1,5 +1,12 @@ # @sipe-team/input +## 0.0.3 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + ## 0.0.3-next.1 ### Patch Changes diff --git a/packages/Input/package.json b/packages/Input/package.json index e904b59..1d4f9f4 100644 --- a/packages/Input/package.json +++ b/packages/Input/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/input", "description": "Input component for Sipe Design System", - "version": "0.0.3-next.1", + "version": "0.0.3", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/badge/CHANGELOG.md b/packages/badge/CHANGELOG.md index 4a3894c..194f3a3 100644 --- a/packages/badge/CHANGELOG.md +++ b/packages/badge/CHANGELOG.md @@ -1,5 +1,14 @@ # @sipe-team/badge +## 0.0.3 + +### Patch Changes + +- f425309: fix: styles.css +- Updated dependencies [f425309] +- Updated dependencies [f425309] + - @sipe-team/typography@0.0.4 + ## 0.0.3-next.1 ### Patch Changes diff --git a/packages/badge/package.json b/packages/badge/package.json index 5d727c6..d609a25 100644 --- a/packages/badge/package.json +++ b/packages/badge/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/badge", "description": "Badge component for Sipe Design System", - "version": "0.0.3-next.1", + "version": "0.0.3", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/button/CHANGELOG.md b/packages/button/CHANGELOG.md new file mode 100644 index 0000000..f91e21b --- /dev/null +++ b/packages/button/CHANGELOG.md @@ -0,0 +1,10 @@ +# @sipe-team/button + +## 0.0.1 + +### Patch Changes + +- 4c48243: fix(button): handle dynamic styles within typescript +- Updated dependencies [f425309] +- Updated dependencies [f425309] + - @sipe-team/typography@0.0.4 diff --git a/packages/button/package.json b/packages/button/package.json index 201223b..29b806f 100644 --- a/packages/button/package.json +++ b/packages/button/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/button", "description": "button for Sipe Design System", - "version": "0.0.0", + "version": "0.0.1", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/card/CHANGELOG.md b/packages/card/CHANGELOG.md index 4605a4a..e20874c 100644 --- a/packages/card/CHANGELOG.md +++ b/packages/card/CHANGELOG.md @@ -1,5 +1,13 @@ # @sipe-team/card +## 0.0.2 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/card/package.json b/packages/card/package.json index 0f172c2..6ab62c6 100644 --- a/packages/card/package.json +++ b/packages/card/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/card", "description": "Card component for Sipe Design System", - "version": "0.0.2-next.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/divider/CHANGELOG.md b/packages/divider/CHANGELOG.md index d17ba24..f40d6bd 100644 --- a/packages/divider/CHANGELOG.md +++ b/packages/divider/CHANGELOG.md @@ -1,5 +1,12 @@ # @sipe-team/divider +## 0.0.2 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/divider/package.json b/packages/divider/package.json index 232d6a2..2a6a7c4 100644 --- a/packages/divider/package.json +++ b/packages/divider/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/divider", "description": "divider component for Sipe Design System", - "version": "0.0.2-next.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/radio-group/CHANGELOG.md b/packages/radio-group/CHANGELOG.md index 2cd4d3d..dda5ab2 100644 --- a/packages/radio-group/CHANGELOG.md +++ b/packages/radio-group/CHANGELOG.md @@ -1,5 +1,12 @@ # @sipe-team/radio-group +## 0.0.2 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/radio-group/package.json b/packages/radio-group/package.json index b825648..6a08a35 100644 --- a/packages/radio-group/package.json +++ b/packages/radio-group/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/radio-group", "description": "Radio Group component for Sipe Design System", - "version": "0.0.2-next.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/side/CHANGELOG.md b/packages/side/CHANGELOG.md index c9a3fbe..ce94862 100644 --- a/packages/side/CHANGELOG.md +++ b/packages/side/CHANGELOG.md @@ -1,5 +1,29 @@ # @sipe-team/side +## 0.1.0 + +### Minor Changes + +- 43faf4c: feat(side): add button & export tokens + +### Patch Changes + +- f425309: fix: styles.css +- Updated dependencies [f425309] +- Updated dependencies [4c48243] +- Updated dependencies [f425309] + - @sipe-team/radio-group@0.0.2 + - @sipe-team/typography@0.0.4 + - @sipe-team/skeleton@0.0.2 + - @sipe-team/divider@0.0.2 + - @sipe-team/tooltip@0.0.3 + - @sipe-team/switch@0.0.2 + - @sipe-team/input@0.0.3 + - @sipe-team/card@0.0.2 + - @sipe-team/button@0.0.1 + - @sipe-team/badge@0.0.3 + - @sipe-team/tokens@0.1.0 + ## 0.0.3-next.1 ### Patch Changes diff --git a/packages/side/package.json b/packages/side/package.json index 9c7cf84..74366e1 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/side", "description": "Sipe Design System", - "version": "0.0.3-next.1", + "version": "0.1.0", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,10 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist", "styles.css"], + "files": [ + "dist", + "styles.css" + ], "scripts": { "build": "tsup", "prepack": "pnpm run build" diff --git a/packages/skeleton/CHANGELOG.md b/packages/skeleton/CHANGELOG.md index 8b0a562..e5c17b4 100644 --- a/packages/skeleton/CHANGELOG.md +++ b/packages/skeleton/CHANGELOG.md @@ -1,5 +1,12 @@ # @sipe-team/skeleton +## 0.0.2 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json index 5c255bd..3d77ae6 100644 --- a/packages/skeleton/package.json +++ b/packages/skeleton/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/skeleton", "description": "Skeleton component for Sipe Design System", - "version": "0.0.2-next.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/switch/CHANGELOG.md b/packages/switch/CHANGELOG.md index a83e22e..38860d4 100644 --- a/packages/switch/CHANGELOG.md +++ b/packages/switch/CHANGELOG.md @@ -1,5 +1,13 @@ # @sipe-team/switch +## 0.0.2 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/switch/package.json b/packages/switch/package.json index eed07d7..b488f0b 100644 --- a/packages/switch/package.json +++ b/packages/switch/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/switch", "description": "Switch component for Sipe Design System", - "version": "0.0.2-next.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/tokens/package.json b/packages/tokens/package.json index b922a2f..13e9616 100644 --- a/packages/tokens/package.json +++ b/packages/tokens/package.json @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/tooltip/CHANGELOG.md b/packages/tooltip/CHANGELOG.md index a0e09ef..e25aa16 100644 --- a/packages/tooltip/CHANGELOG.md +++ b/packages/tooltip/CHANGELOG.md @@ -1,5 +1,12 @@ # @sipe-team/tooltip +## 0.0.3 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + ## 0.0.3-next.1 ### Patch Changes diff --git a/packages/tooltip/package.json b/packages/tooltip/package.json index 0490c8e..b6c7a9b 100644 --- a/packages/tooltip/package.json +++ b/packages/tooltip/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/tooltip", "description": "Tooltip component for Sipe Design System", - "version": "0.0.3-next.1", + "version": "0.0.3", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/typography/CHANGELOG.md b/packages/typography/CHANGELOG.md index 58a936f..af34348 100644 --- a/packages/typography/CHANGELOG.md +++ b/packages/typography/CHANGELOG.md @@ -1,5 +1,13 @@ # @sipe-team/typography +## 0.0.4 + +### Patch Changes + +- f425309: fix: exports +- f425309: fix: styles.css + - @sipe-team/tokens@0.1.0 + ## 0.0.4-next.1 ### Patch Changes diff --git a/packages/typography/package.json b/packages/typography/package.json index e459381..a0329f2 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/typography", "description": "Typography component for Sipe Design System", - "version": "0.0.4-next.1", + "version": "0.0.4", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", From 70107b2177dbbadbdc7263ec4d15622d47f31ad4 Mon Sep 17 00:00:00 2001 From: YeojinChoi Date: Wed, 8 Jan 2025 10:37:18 +0900 Subject: [PATCH 11/28] =?UTF-8?q?feat(icon):=20icons=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80=20(#72)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: init project setup * chore: add type definitions and entry point * feat(icons): add svg optimization and component generation * feat(icons): add svg icon assets * chore(icons): add generated icon components * feat(icons): add storybook for icon components * docs(icons): update README * test(icons): add test for icons * feat(icons): add svg validation * chore: disable noSvgWithoutTitle rule for icon components * chore: update pnpm-lock.yaml * chore(icons): modify package name * chore(icon): modify repository url * refactor(icon): update icon index generation - Remove unnecessary IconProps import * test(icon): improve icon test suite - Replace nested describe blocks with it.each and Change toBeDefined to toBeInTheDocument * test(icon): remove useless ts-ignore * chore(icon): change icon alignment from vertical to horizontal * chore(icon): extract repeated color into constants * chore(icon): prevent duplicate display of AllIcons in Docs * chore(icon): move scripts and SVG files from src directory * chore(icon): modify folder name from icons to icon * refactor(icon): use one regex for fill and stroke * feat(icon): add SVGO plugin to remove data-* attribute * refactor(icon): unify fileName with componentName in PascalCase * chore(icon): delete duplicated components * chore(icon): update package-lock.yaml * Update packages/icon/README.md --------- Co-authored-by: y09n --- biome.json | 3 +- packages/icon/.storybook/main.ts | 15 ++ packages/icon/.storybook/preview.ts | 5 + packages/icon/README.md | 57 ++++++ packages/icon/global.d.ts | 1 + packages/icon/icons/accordion-arrow.svg | 3 + packages/icon/icons/check-circle.svg | 10 + packages/icon/icons/email.svg | 10 + packages/icon/icons/github.svg | 3 + packages/icon/icons/instagram.svg | 3 + packages/icon/icons/kakao.svg | 4 + packages/icon/icons/link.svg | 10 + packages/icon/icons/linkedin.svg | 3 + packages/icon/icons/organizer.svg | 3 + packages/icon/icons/user.svg | 10 + packages/icon/icons/youtube.svg | 3 + packages/icon/package.json | 63 +++++++ packages/icon/scripts/generate-icons.ts | 30 +++ .../icon/scripts/utils/generate-components.ts | 112 +++++++++++ packages/icon/scripts/utils/optimize-svg.ts | 40 ++++ packages/icon/scripts/utils/paths.ts | 20 ++ packages/icon/scripts/utils/svgo.config.ts | 36 ++++ packages/icon/src/Icons.stories.tsx | 108 +++++++++++ .../src/components/AccordionArrowIcon.tsx | 10 + .../icon/src/components/CheckCircleIcon.tsx | 10 + packages/icon/src/components/EmailIcon.tsx | 10 + packages/icon/src/components/GithubIcon.tsx | 10 + .../icon/src/components/InstagramIcon.tsx | 10 + packages/icon/src/components/KakaoIcon.tsx | 10 + packages/icon/src/components/LinkIcon.tsx | 10 + packages/icon/src/components/LinkedinIcon.tsx | 10 + .../icon/src/components/OrganizerIcon.tsx | 10 + packages/icon/src/components/UserIcon.tsx | 10 + packages/icon/src/components/YoutubeIcon.tsx | 10 + packages/icon/src/components/link.tsx | 10 + packages/icon/src/icons.test.tsx | 55 ++++++ packages/icon/src/index.ts | 13 ++ packages/icon/src/types.ts | 15 ++ packages/icon/tsconfig.json | 3 + packages/icon/tsup.config.ts | 8 + packages/icon/vitest.config.ts | 11 ++ packages/icon/vitest.setup.ts | 1 + pnpm-lock.yaml | 177 ++++++++++++++++++ 43 files changed, 954 insertions(+), 1 deletion(-) create mode 100644 packages/icon/.storybook/main.ts create mode 100644 packages/icon/.storybook/preview.ts create mode 100644 packages/icon/README.md create mode 100644 packages/icon/global.d.ts create mode 100644 packages/icon/icons/accordion-arrow.svg create mode 100644 packages/icon/icons/check-circle.svg create mode 100644 packages/icon/icons/email.svg create mode 100644 packages/icon/icons/github.svg create mode 100644 packages/icon/icons/instagram.svg create mode 100644 packages/icon/icons/kakao.svg create mode 100644 packages/icon/icons/link.svg create mode 100644 packages/icon/icons/linkedin.svg create mode 100644 packages/icon/icons/organizer.svg create mode 100644 packages/icon/icons/user.svg create mode 100644 packages/icon/icons/youtube.svg create mode 100644 packages/icon/package.json create mode 100644 packages/icon/scripts/generate-icons.ts create mode 100644 packages/icon/scripts/utils/generate-components.ts create mode 100644 packages/icon/scripts/utils/optimize-svg.ts create mode 100644 packages/icon/scripts/utils/paths.ts create mode 100644 packages/icon/scripts/utils/svgo.config.ts create mode 100644 packages/icon/src/Icons.stories.tsx create mode 100644 packages/icon/src/components/AccordionArrowIcon.tsx create mode 100644 packages/icon/src/components/CheckCircleIcon.tsx create mode 100644 packages/icon/src/components/EmailIcon.tsx create mode 100644 packages/icon/src/components/GithubIcon.tsx create mode 100644 packages/icon/src/components/InstagramIcon.tsx create mode 100644 packages/icon/src/components/KakaoIcon.tsx create mode 100644 packages/icon/src/components/LinkIcon.tsx create mode 100644 packages/icon/src/components/LinkedinIcon.tsx create mode 100644 packages/icon/src/components/OrganizerIcon.tsx create mode 100644 packages/icon/src/components/UserIcon.tsx create mode 100644 packages/icon/src/components/YoutubeIcon.tsx create mode 100644 packages/icon/src/components/link.tsx create mode 100644 packages/icon/src/icons.test.tsx create mode 100644 packages/icon/src/index.ts create mode 100644 packages/icon/src/types.ts create mode 100644 packages/icon/tsconfig.json create mode 100644 packages/icon/tsup.config.ts create mode 100644 packages/icon/vitest.config.ts create mode 100644 packages/icon/vitest.setup.ts diff --git a/biome.json b/biome.json index e5c27a0..81ac454 100644 --- a/biome.json +++ b/biome.json @@ -12,7 +12,8 @@ "rules": { "recommended": true, "a11y": { - "useSemanticElements": "warn" + "useSemanticElements": "warn", + "noSvgWithoutTitle": "off" }, "suspicious": { "noExplicitAny": "warn" diff --git a/packages/icon/.storybook/main.ts b/packages/icon/.storybook/main.ts new file mode 100644 index 0000000..2f0a252 --- /dev/null +++ b/packages/icon/.storybook/main.ts @@ -0,0 +1,15 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/icon/.storybook/preview.ts b/packages/icon/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/icon/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/icon/README.md b/packages/icon/README.md new file mode 100644 index 0000000..83aad42 --- /dev/null +++ b/packages/icon/README.md @@ -0,0 +1,57 @@ +# @sipe-team/icon + +React icon components for Sipe Design System. + +## Installation + +```bash +pnpm add @sipe-team/icon +``` + +## Usage + +```tsx +import { ArrowRightIcon } from '@sipe-team/icon'; + +function Example() { + return ( + + ); +} +``` + +## Features + +- Optimized SVG icons as React components +- TypeScript support +- Customizable size and color +- Preserved original icon colors when no color prop is provided +- Tree-shakeable exports + +## Development + +### Icon Naming Convention + +- Use kebab-case for SVG files: `arrow-right.svg`, `chevron-down.svg` +- Files will be automatically converted to PascalCase components with 'Icon' suffix: + + - `arrow-right.svg` → `ArrowRightIcon` + - `chevron-down.svg` → `ChevronDownIcon` + +### Adding new icons + +1. Add SVG file to `icons` directory +2. Run generation script: +```bash +pnpm generate-icons +``` + +### Preview + +Run Storybook to preview all icons: +```bash +pnpm dev:storybook +``` \ No newline at end of file diff --git a/packages/icon/global.d.ts b/packages/icon/global.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/icon/global.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/icon/icons/accordion-arrow.svg b/packages/icon/icons/accordion-arrow.svg new file mode 100644 index 0000000..ef8834e --- /dev/null +++ b/packages/icon/icons/accordion-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/icons/check-circle.svg b/packages/icon/icons/check-circle.svg new file mode 100644 index 0000000..2db0fd6 --- /dev/null +++ b/packages/icon/icons/check-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/icon/icons/email.svg b/packages/icon/icons/email.svg new file mode 100644 index 0000000..7742ead --- /dev/null +++ b/packages/icon/icons/email.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/icon/icons/github.svg b/packages/icon/icons/github.svg new file mode 100644 index 0000000..206296d --- /dev/null +++ b/packages/icon/icons/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/icons/instagram.svg b/packages/icon/icons/instagram.svg new file mode 100644 index 0000000..b577aa1 --- /dev/null +++ b/packages/icon/icons/instagram.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/icons/kakao.svg b/packages/icon/icons/kakao.svg new file mode 100644 index 0000000..1fe9963 --- /dev/null +++ b/packages/icon/icons/kakao.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/icon/icons/link.svg b/packages/icon/icons/link.svg new file mode 100644 index 0000000..dcfdf00 --- /dev/null +++ b/packages/icon/icons/link.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/icon/icons/linkedin.svg b/packages/icon/icons/linkedin.svg new file mode 100644 index 0000000..4987cff --- /dev/null +++ b/packages/icon/icons/linkedin.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/icons/organizer.svg b/packages/icon/icons/organizer.svg new file mode 100644 index 0000000..31cc1fd --- /dev/null +++ b/packages/icon/icons/organizer.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/icons/user.svg b/packages/icon/icons/user.svg new file mode 100644 index 0000000..ca7e3e8 --- /dev/null +++ b/packages/icon/icons/user.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/icon/icons/youtube.svg b/packages/icon/icons/youtube.svg new file mode 100644 index 0000000..3483a11 --- /dev/null +++ b/packages/icon/icons/youtube.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icon/package.json b/packages/icon/package.json new file mode 100644 index 0000000..7b09221 --- /dev/null +++ b/packages/icon/package.json @@ -0,0 +1,63 @@ +{ + "name": "@sipe-team/icon", + "description": "React Icon Components for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-2_side" + }, + "type": "module", + "exports": "./src/index.ts", + "files": ["dist"], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint:biome": "pnpm exec biome lint", + "lint:eslint": "pnpm exec eslint --flag unstable_ts_config", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build", + "generate-icons": "tsx scripts/generate-icons.ts" + }, + "devDependencies": { + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "catalog:", + "@testing-library/react": "catalog:", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "svgo": "^3.3.2", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false +} diff --git a/packages/icon/scripts/generate-icons.ts b/packages/icon/scripts/generate-icons.ts new file mode 100644 index 0000000..a58d2a4 --- /dev/null +++ b/packages/icon/scripts/generate-icons.ts @@ -0,0 +1,30 @@ +import { performance } from 'node:perf_hooks'; +import { generateComponents } from './utils/generate-components'; + +async function main() { + const startTime = performance.now(); + try { + console.log('🎨 Generating icons...'); + const results = await generateComponents(); + + const successCount = results.filter(r => r.success).length; + const failureCount = results.length - successCount; + + console.log(`✨ Done in ${Math.round(performance.now() - startTime)}ms`); + console.log(`📦 Generated ${successCount} components`); + + if (failureCount > 0) { + console.warn(`⚠️ Failed to generate ${failureCount} components`); + const failures = results.filter(r => !r.success); + for (const failure of failures) { + console.error(` ❌ ${failure.fileName}: ${failure.error}`); + } + } + + } catch (error) { + console.error('Error:', error instanceof Error ? error.message : 'Unknown error'); + process.exit(1); + } +} + +main(); \ No newline at end of file diff --git a/packages/icon/scripts/utils/generate-components.ts b/packages/icon/scripts/utils/generate-components.ts new file mode 100644 index 0000000..d337651 --- /dev/null +++ b/packages/icon/scripts/utils/generate-components.ts @@ -0,0 +1,112 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; +import type { GenerateResult } from '../../src/types'; +import { optimizeSvg } from './optimize-svg'; +import { PATHS } from './paths'; + +function validateFileName(fileName: string): void { + const isKebabCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(fileName); + + if (!isKebabCase) { + throw new Error( + `Invalid file name: ${fileName}. File names must be in kebab-case (e.g., my-icon)` + ); + } +} + +function validateSvgContent(content: string, fileName: string): void { + if (!content.includes('viewBox')) { + throw new Error(`Missing viewBox in ${fileName}`); + } +} + +function toComponentName(fileName: string): string { + const pascalCase = fileName + .split('-') + .map(part => part.charAt(0).toUpperCase() + part.slice(1)) + .join(''); + + return `${pascalCase}Icon`; +} + +function createComponentTemplate(componentName: string, svgContent: string): string { + return `\ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const ${componentName} = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ${svgContent}; + } +); + +${componentName}.displayName = '${componentName}'; +`; +} + +export async function generateComponents(): Promise { + // 1. Create components directory if it doesn't exist + await fs.mkdir(PATHS.COMPONENTS_DIR, { recursive: true }); + + // 2. Get all SVG files + const files = await fs.readdir(PATHS.ICONS_DIR); + const svgFiles = files.filter(file => file.endsWith('.svg')); + + // 3. Generate components in parallel + const results = await Promise.all( + svgFiles.map(async (file): Promise => { + const fileName = path.basename(file, '.svg'); + const componentName = toComponentName(fileName); + + try { + validateFileName(fileName); + + // Read and optimize SVG + const svgContent = await fs.readFile( + path.join(PATHS.ICONS_DIR, file), + 'utf-8' + ); + + validateSvgContent(svgContent, fileName); + + const optimizedSvg = await optimizeSvg(svgContent); + + // Generate component + const componentContent = createComponentTemplate(componentName, optimizedSvg); + + // Write component file + await fs.writeFile( + path.join(PATHS.COMPONENTS_DIR, `${componentName}.tsx`), + componentContent + ); + + return { fileName, componentName, success: true }; + } catch (error) { + return { + fileName, + componentName, + success: false, + error: error instanceof Error ? error.message : 'Unknown error' + }; + } + }) + ); + + // 4. Generate index file with successful components + const successfulResults = results.filter(r => r.success); + const componentExports = successfulResults + .map(r => `export { ${r.componentName} } from './components/${r.componentName}';`) + .join('\n'); + + const indexContent = `\ +export type { IconProps } from './types'; + +${componentExports} +`; + await fs.writeFile( + path.join(PATHS.COMPONENTS_DIR, '../index.ts'), + indexContent + ); + + return results; + } \ No newline at end of file diff --git a/packages/icon/scripts/utils/optimize-svg.ts b/packages/icon/scripts/utils/optimize-svg.ts new file mode 100644 index 0000000..2c7bab2 --- /dev/null +++ b/packages/icon/scripts/utils/optimize-svg.ts @@ -0,0 +1,40 @@ +import { optimize } from 'svgo'; +import { SVGO_CONFIG } from './svgo.config'; + +export const optimizeSvg = async (svg: string): Promise => { + try { + const result = optimize(svg, SVGO_CONFIG); + if (!('data' in result)) { + throw new Error('SVG optimization failed'); + } + + let optimizedSvg = result.data; + + // Convert kebab-case to camelCase + optimizedSvg = optimizedSvg.replace( + /-([a-z])/g, + (_, letter) => letter.toUpperCase() + ); + + // Preserve fill="none" and handle other fill/stroke attributes + optimizedSvg = optimizedSvg.replace( + /(fill|stroke)="(none|[^"]+)"/g, + (_, attr, value) => + value === 'none' + ? `${attr}="none"` + : value === 'currentColor' + ? `${attr}={color}` + : `${attr}={color || "${value}"}` + ); + + // Inject SVG props + optimizedSvg = optimizedSvg.replace( + ' ( +
+ {children} +
+); + +export const Default: StoryObj = { + render: () => ( + + + + ), +}; + +export const AllIcons: StoryObj = { + render: () => ( +
+ {Object.entries(Icons).map(([name, Icon]) => { + if (name === 'IconProps') return null; + return ( + + + {name} + + ); + })} +
+ ), +}; + +export const Sizes: StoryObj = { + render: () => { + const sizes = [16, 24, 32, 48]; + const IconComponent = Icons.AccordionArrowIcon; + + return ( +
+ {sizes.map(size => ( + + +
{size}px
+
+ ))} +
+ ); + }, +}; + +export const Colors: StoryObj = { + render: () => { + const colors = ['#666666', '#FF0000', '#00FF00', '#0000FF']; + const IconComponent = Icons.AccordionArrowIcon; + + return ( +
+ {colors.map(color => ( + + +
{color}
+
+ ))} +
+ ); + }, +}; \ No newline at end of file diff --git a/packages/icon/src/components/AccordionArrowIcon.tsx b/packages/icon/src/components/AccordionArrowIcon.tsx new file mode 100644 index 0000000..9fc2367 --- /dev/null +++ b/packages/icon/src/components/AccordionArrowIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const AccordionArrowIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +AccordionArrowIcon.displayName = 'AccordionArrowIcon'; diff --git a/packages/icon/src/components/CheckCircleIcon.tsx b/packages/icon/src/components/CheckCircleIcon.tsx new file mode 100644 index 0000000..08b502d --- /dev/null +++ b/packages/icon/src/components/CheckCircleIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const CheckCircleIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +CheckCircleIcon.displayName = 'CheckCircleIcon'; diff --git a/packages/icon/src/components/EmailIcon.tsx b/packages/icon/src/components/EmailIcon.tsx new file mode 100644 index 0000000..48d1d45 --- /dev/null +++ b/packages/icon/src/components/EmailIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const EmailIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +EmailIcon.displayName = 'EmailIcon'; diff --git a/packages/icon/src/components/GithubIcon.tsx b/packages/icon/src/components/GithubIcon.tsx new file mode 100644 index 0000000..108cf19 --- /dev/null +++ b/packages/icon/src/components/GithubIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const GithubIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +GithubIcon.displayName = 'GithubIcon'; diff --git a/packages/icon/src/components/InstagramIcon.tsx b/packages/icon/src/components/InstagramIcon.tsx new file mode 100644 index 0000000..63e6f48 --- /dev/null +++ b/packages/icon/src/components/InstagramIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const InstagramIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +InstagramIcon.displayName = 'InstagramIcon'; diff --git a/packages/icon/src/components/KakaoIcon.tsx b/packages/icon/src/components/KakaoIcon.tsx new file mode 100644 index 0000000..a07ef3f --- /dev/null +++ b/packages/icon/src/components/KakaoIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const KakaoIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +KakaoIcon.displayName = 'KakaoIcon'; diff --git a/packages/icon/src/components/LinkIcon.tsx b/packages/icon/src/components/LinkIcon.tsx new file mode 100644 index 0000000..e11743d --- /dev/null +++ b/packages/icon/src/components/LinkIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const LinkIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +LinkIcon.displayName = 'LinkIcon'; diff --git a/packages/icon/src/components/LinkedinIcon.tsx b/packages/icon/src/components/LinkedinIcon.tsx new file mode 100644 index 0000000..16f2189 --- /dev/null +++ b/packages/icon/src/components/LinkedinIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const LinkedinIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +LinkedinIcon.displayName = 'LinkedinIcon'; diff --git a/packages/icon/src/components/OrganizerIcon.tsx b/packages/icon/src/components/OrganizerIcon.tsx new file mode 100644 index 0000000..dba2909 --- /dev/null +++ b/packages/icon/src/components/OrganizerIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const OrganizerIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +OrganizerIcon.displayName = 'OrganizerIcon'; diff --git a/packages/icon/src/components/UserIcon.tsx b/packages/icon/src/components/UserIcon.tsx new file mode 100644 index 0000000..c2278ff --- /dev/null +++ b/packages/icon/src/components/UserIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const UserIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +UserIcon.displayName = 'UserIcon'; diff --git a/packages/icon/src/components/YoutubeIcon.tsx b/packages/icon/src/components/YoutubeIcon.tsx new file mode 100644 index 0000000..3ae821e --- /dev/null +++ b/packages/icon/src/components/YoutubeIcon.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const YoutubeIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +YoutubeIcon.displayName = 'YoutubeIcon'; diff --git a/packages/icon/src/components/link.tsx b/packages/icon/src/components/link.tsx new file mode 100644 index 0000000..e11743d --- /dev/null +++ b/packages/icon/src/components/link.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { IconProps } from '../types'; + +export const LinkIcon = React.forwardRef( + ({ color, size = 24, ...props }, ref) => { + return ; + } +); + +LinkIcon.displayName = 'LinkIcon'; diff --git a/packages/icon/src/icons.test.tsx b/packages/icon/src/icons.test.tsx new file mode 100644 index 0000000..24b9b7b --- /dev/null +++ b/packages/icon/src/icons.test.tsx @@ -0,0 +1,55 @@ +import { render, screen } from '@testing-library/react'; +import { createRef } from 'react'; +import { describe, expect, it } from 'vitest'; +import * as Icons from '.'; + +describe('Icon Components', () => { + const iconEntries = Object.entries(Icons); + + it.each(iconEntries)('%s should render without crashing', (_, Icon) => { + render(); + const svg = document.querySelector('svg'); + expect(svg).toBeInTheDocument(); + + expect(svg).toHaveAttribute('width'); + expect(svg).toHaveAttribute('height'); + expect(svg).toHaveAttribute('viewBox'); + const viewBox = svg?.getAttribute('viewBox'); + expect(viewBox).toMatch(/^\d+\s+\d+\s+\d+\s+\d+$/); + const hasGraphics = Boolean( + svg?.querySelector('path, rect, circle, ellipse, line, polyline, polygon') + ); + expect(hasGraphics).toBe(true); + const paths = svg?.querySelectorAll('path'); + if (paths) { + for (const path of Array.from(paths)) { + expect(path).toHaveAttribute('fill'); + } + } + }); + + it.each(iconEntries)('%s should apply custom size', (_, Icon) => { + render(); + const svg = document.querySelector('svg'); + expect(svg).toHaveAttribute('width', '32'); + expect(svg).toHaveAttribute('height', '32'); + }); + + it.each(iconEntries)('%s should apply custom color', (_, Icon) => { + render(); + const svg = document.querySelector('svg'); + expect(svg?.querySelector('path')).toHaveAttribute('fill', '#FF0000'); + }); + + it.each(iconEntries)('%s should forward ref correctly', (_, Icon) => { + const ref = createRef(); + render(); + expect(ref.current).instanceOf(SVGSVGElement); + }); + + it.each(iconEntries)('%s should spread additional props', (_, Icon) => { + render(); + const svg = screen.getByTestId('test-icon'); + expect(svg).toHaveClass('custom-class'); + }); +}); \ No newline at end of file diff --git a/packages/icon/src/index.ts b/packages/icon/src/index.ts new file mode 100644 index 0000000..97da0d9 --- /dev/null +++ b/packages/icon/src/index.ts @@ -0,0 +1,13 @@ +export type { IconProps } from './types'; + +export { AccordionArrowIcon } from './components/AccordionArrowIcon'; +export { CheckCircleIcon } from './components/CheckCircleIcon'; +export { EmailIcon } from './components/EmailIcon'; +export { GithubIcon } from './components/GithubIcon'; +export { InstagramIcon } from './components/InstagramIcon'; +export { KakaoIcon } from './components/KakaoIcon'; +export { LinkIcon } from './components/LinkIcon'; +export { LinkedinIcon } from './components/LinkedinIcon'; +export { OrganizerIcon } from './components/OrganizerIcon'; +export { UserIcon } from './components/UserIcon'; +export { YoutubeIcon } from './components/YoutubeIcon'; diff --git a/packages/icon/src/types.ts b/packages/icon/src/types.ts new file mode 100644 index 0000000..d819112 --- /dev/null +++ b/packages/icon/src/types.ts @@ -0,0 +1,15 @@ +import type { SVGProps } from 'react'; + +export interface IconProps extends SVGProps { + /** Icon color. Defaults to currentColor */ + color?: string + /** Icon size in pixels. Defaults to 24 */ + size?: number +} + +export type GenerateResult ={ + fileName: string; + componentName: string; + success: boolean; + error?: string; + } \ No newline at end of file diff --git a/packages/icon/tsconfig.json b/packages/icon/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/icon/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/icon/tsup.config.ts b/packages/icon/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/icon/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/icon/vitest.config.ts b/packages/icon/vitest.config.ts new file mode 100644 index 0000000..a917827 --- /dev/null +++ b/packages/icon/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineProject, mergeConfig } from 'vitest/config'; +import defaultConfig from '../../vitest.config'; + +export default mergeConfig( + defaultConfig, + defineProject({ + test: { + setupFiles: './vitest.setup.ts', + }, + }), +); diff --git a/packages/icon/vitest.setup.ts b/packages/icon/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/icon/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1dff024..cac6389 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -515,6 +515,60 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/icon: + devDependencies: + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@testing-library/jest-dom': + specifier: 'catalog:' + version: 6.6.3 + '@testing-library/react': + specifier: 'catalog:' + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.13 + happy-dom: + specifier: 'catalog:' + version: 15.11.7 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.4.6(prettier@2.8.8) + svgo: + specifier: ^3.3.2 + version: 3.3.2 + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + typescript: + specifier: 'catalog:' + version: 5.7.2 + vitest: + specifier: 'catalog:' + version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/radio-group: devDependencies: '@storybook/addon-essentials': @@ -2047,6 +2101,10 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + '@tsconfig/strictest@2.0.5': resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} @@ -2292,6 +2350,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2453,6 +2514,10 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + commitizen@4.3.1: resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==} engines: {node: '>= 12'} @@ -2508,9 +2573,28 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2587,6 +2671,19 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.1: + resolution: {integrity: sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -3313,6 +3410,12 @@ packages: map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} @@ -3395,6 +3498,9 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3890,6 +3996,11 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -5347,6 +5458,8 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 + '@trysound/sax@0.2.0': {} + '@tsconfig/strictest@2.0.5': {} '@types/aria-query@5.0.4': {} @@ -5627,6 +5740,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + boolbase@1.0.0: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -5766,6 +5881,8 @@ snapshots: commander@4.1.1: {} + commander@7.2.0: {} + commitizen@4.3.1(@types/node@22.10.1)(typescript@5.7.2): dependencies: cachedir: 2.3.0 @@ -5836,8 +5953,32 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.1 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + css.escape@1.5.1: {} + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + csstype@3.1.3: {} cz-conventional-changelog@3.3.0(@types/node@22.10.1)(typescript@5.7.2): @@ -5900,6 +6041,24 @@ snapshots: dom-accessibility-api@0.6.3: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.1: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -6708,6 +6867,10 @@ snapshots: map-or-similar@1.5.0: {} + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 @@ -6769,6 +6932,10 @@ snapshots: dependencies: path-key: 4.0.0 + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + object-assign@4.1.1: {} once@1.4.0: @@ -7233,6 +7400,16 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + tapable@2.2.1: {} term-size@2.2.1: {} From 81249b6830183b9680aa189936ca124a52b3b888 Mon Sep 17 00:00:00 2001 From: Shinwon Jang <57736547+synuns@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:54:42 +0900 Subject: [PATCH 12/28] feat(flex): add flex component (#82) * feat(flex): add Flex component - Introduced a new Flex component for the Sipe Design System - Created accompanying Storybook stories for visual testing and documentation - Added unit tests using Vitest to ensure component functionality * feat(flex): integrate Flex component into side package - Exported Flex component in src/index.ts for accessibility within the side package * feat(flex): update Flex component with styling enhancements - Added '@radix-ui/react-slot' and 'clsx' as dependencies in package.json. - Updated Flex component to use 'style' prop instead of 'css' for styling. - Enhanced Flex component stories to include new 'space-evenly' justification option. - Improved unit tests to reflect changes in props and styling. - Refactored Flex component to support polymorphic rendering with 'asChild' prop. * feat(flex): extend interface to support div attributes - Updated FlexProps to extend ComponentProps<'div'>, allowing for additional div attributes. - Refactored imports in Flex.tsx for improved readability. * refactor(flex): update package configuration and clean up code - Changed repository URL in package.json to reflect new project structure. - Simplified tsup configuration by importing default settings. - Modified Flex.module.css to remove unnecessary variable for display property. - Cleaned up FlexProps interface in Flex.tsx by removing unused props. - Moved unused global.d.ts file to package root path * Create ninety-icons-invite.md * chore: update lockfile --------- Co-authored-by: y09n --- .changeset/ninety-icons-invite.md | 6 + packages/flex/.storybook/main.ts | 15 ++ packages/flex/.storybook/preview.ts | 5 + packages/flex/global.d.ts | 1 + packages/flex/package.json | 68 ++++++++ packages/flex/src/Flex.module.css | 11 ++ packages/flex/src/Flex.stories.tsx | 172 +++++++++++++++++++ packages/flex/src/Flex.test.tsx | 254 ++++++++++++++++++++++++++++ packages/flex/src/Flex.tsx | 68 ++++++++ packages/flex/src/index.ts | 1 + packages/flex/tsconfig.json | 3 + packages/flex/tsup.config.ts | 3 + packages/flex/vitest.config.ts | 11 ++ packages/flex/vitest.setup.ts | 1 + packages/side/package.json | 3 +- packages/side/src/index.ts | 1 + pnpm-lock.yaml | 71 +++++++- 17 files changed, 691 insertions(+), 3 deletions(-) create mode 100644 .changeset/ninety-icons-invite.md create mode 100644 packages/flex/.storybook/main.ts create mode 100644 packages/flex/.storybook/preview.ts create mode 100644 packages/flex/global.d.ts create mode 100644 packages/flex/package.json create mode 100644 packages/flex/src/Flex.module.css create mode 100644 packages/flex/src/Flex.stories.tsx create mode 100644 packages/flex/src/Flex.test.tsx create mode 100644 packages/flex/src/Flex.tsx create mode 100644 packages/flex/src/index.ts create mode 100644 packages/flex/tsconfig.json create mode 100644 packages/flex/tsup.config.ts create mode 100644 packages/flex/vitest.config.ts create mode 100644 packages/flex/vitest.setup.ts diff --git a/.changeset/ninety-icons-invite.md b/.changeset/ninety-icons-invite.md new file mode 100644 index 0000000..65b3c64 --- /dev/null +++ b/.changeset/ninety-icons-invite.md @@ -0,0 +1,6 @@ +--- +"@sipe-team/flex": minor +"@sipe-team/side": minor +--- + +feat(flex): add flex component diff --git a/packages/flex/.storybook/main.ts b/packages/flex/.storybook/main.ts new file mode 100644 index 0000000..2f0a252 --- /dev/null +++ b/packages/flex/.storybook/main.ts @@ -0,0 +1,15 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/flex/.storybook/preview.ts b/packages/flex/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/flex/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/flex/global.d.ts b/packages/flex/global.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/flex/global.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/flex/package.json b/packages/flex/package.json new file mode 100644 index 0000000..64f2e31 --- /dev/null +++ b/packages/flex/package.json @@ -0,0 +1,68 @@ +{ + "name": "@sipe-team/flex", + "description": "Flex for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-2_side" + }, + "type": "module", + "exports": "./src/index.ts", + "files": ["dist"], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint:biome": "pnpm exec biome lint", + "lint:eslint": "pnpm exec eslint --flag unstable_ts_config", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "clsx": "^2.1.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.2.0", + "@sipe-team/card": "workspace:^", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "catalog:", + "@testing-library/react": "catalog:", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + }, + "./styles.css": "./dist/styles.css" + } + }, + "sideEffects": false +} diff --git a/packages/flex/src/Flex.module.css b/packages/flex/src/Flex.module.css new file mode 100644 index 0000000..22d5bed --- /dev/null +++ b/packages/flex/src/Flex.module.css @@ -0,0 +1,11 @@ +.flex { + display: var(--flex-display); + flex-direction: var(--flex-direction); + align-items: var(--flex-align); + justify-content: var(--flex-justify); + flex-wrap: var(--flex-wrap); + gap: var(--flex-gap); + flex-basis: var(--flex-basis); + flex-grow: var(--flex-grow); + flex-shrink: var(--flex-shrink); +} diff --git a/packages/flex/src/Flex.stories.tsx b/packages/flex/src/Flex.stories.tsx new file mode 100644 index 0000000..8195b96 --- /dev/null +++ b/packages/flex/src/Flex.stories.tsx @@ -0,0 +1,172 @@ +import { Card } from '@sipe-team/card'; +import type { Meta, StoryObj } from '@storybook/react'; +import { Flex } from './Flex'; + +const meta = { + title: 'Flex', + component: Flex, + tags: ['autodocs'], + argTypes: { + direction: { + control: 'select', + options: ['row', 'column', 'row-reverse', 'column-reverse'], + description: 'Flex direction', + }, + align: { + control: 'select', + options: ['flex-start', 'flex-end', 'center', 'stretch', 'baseline'], + description: 'Align items', + }, + justify: { + control: 'select', + options: [ + 'flex-start', + 'flex-end', + 'center', + 'space-between', + 'space-around', + 'space-evenly', + ], + description: 'Justify content', + }, + wrap: { + control: 'select', + options: ['nowrap', 'wrap', 'wrap-reverse'], + description: 'Flex wrap', + }, + gap: { + control: 'text', + description: 'Gap between items', + }, + inline: { + control: 'boolean', + description: 'Display as inline-flex', + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Basic: Story = { + args: { + gap: '1rem', + children: [ + , + , + , + ], + }, +}; + +export const Direction: Story = { + args: { + direction: 'column', + gap: '1rem', + style: { width: '100%' }, + children: [ + + 1 + , + + 2 + , + + 3 + , + ], + }, +}; + +export const Align: Story = { + args: { + align: 'center', + gap: '1rem', + style: { width: '100%' }, + children: [ + , + , + , + ], + }, +}; + +export const Justify: Story = { + render: () => ( + + + + flex-start + + + + + center + + + + + flex-end + + + + + space-between + + + + + space-around + + + + + space-evenly + + + + ), +}; + +export const Wrap: Story = { + args: { + wrap: 'wrap', + gap: '1rem', + style: { maxWidth: '400px' }, + children: [ + , + , + , + ], + }, +}; diff --git a/packages/flex/src/Flex.test.tsx b/packages/flex/src/Flex.test.tsx new file mode 100644 index 0000000..2554e53 --- /dev/null +++ b/packages/flex/src/Flex.test.tsx @@ -0,0 +1,254 @@ +import { faker } from '@faker-js/faker'; +import { render, screen } from '@testing-library/react'; +import { type CSSProperties, createElement } from 'react'; +import { describe, expect, it } from 'vitest'; +import { Flex } from './Flex'; + +describe('Flex', () => { + it('flex 컴포넌트는 기본적으로 flex 속성을 가지고 있다.', () => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toBeInTheDocument(); + expect(flexContainer).toHaveStyle({ display: 'flex' }); + }); + + it('flex 컴포넌트에 className을 주입하면 추가로 전달한다.', () => { + const customClassName = faker.word.noun(); + render(); + expect(screen.getByTestId('flex-container')).toHaveClass(customClassName); + }); + + describe('flex 속성', () => { + describe('justify', () => { + it.each([ + { justifyContent: 'flex-start' }, + { justifyContent: 'flex-end' }, + { justifyContent: 'center' }, + { justifyContent: 'space-between' }, + { justifyContent: 'space-around' }, + { justifyContent: 'space-evenly' }, + ] satisfies Array<{ justifyContent: CSSProperties['justifyContent'] }>)( + 'flex의 justify prop에 $justifyContent 속성을 주입하면 해당 속성을 적용한다.', + ({ justifyContent }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ justifyContent }); + }, + ); + }); + + describe('align', () => { + it.each([ + { alignItems: 'flex-start' }, + { alignItems: 'flex-end' }, + { alignItems: 'center' }, + { alignItems: 'baseline' }, + { alignItems: 'stretch' }, + ] satisfies Array<{ alignItems: CSSProperties['alignItems'] }>)( + 'flex의 align prop에 $alignItems 속성을 주입하면 해당 속성을 적용한다.', + ({ alignItems }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ alignItems }); + }, + ); + }); + + describe('wrap', () => { + it.each([ + { wrap: 'wrap' }, + { wrap: 'nowrap' }, + { wrap: 'wrap-reverse' }, + ] satisfies Array<{ wrap: CSSProperties['flexWrap'] }>)( + 'flex의 wrap prop에 $wrap 속성을 주입하면 해당 속성을 적용한다.', + ({ wrap }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexWrap: wrap }); + }, + ); + }); + + describe('direction', () => { + it.each([ + { direction: 'row' }, + { direction: 'column' }, + { direction: 'row-reverse' }, + { direction: 'column-reverse' }, + { direction: 'column-reverse' }, + ] satisfies Array<{ direction: CSSProperties['flexDirection'] }>)( + 'flex의 direction prop에 $direction 속성을 주입하면 해당 속성을 적용한다.', + ({ direction }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexDirection: direction }); + }, + ); + + describe('basis', () => { + it.each([ + { basis: '100px' }, + { basis: '100%' }, + { basis: 'auto' }, + { basis: '10rem' }, + { basis: 'content' }, + ] satisfies Array<{ + basis: CSSProperties['flexBasis']; + }>)( + 'flex의 basis prop에 $basis 속성을 주입하면 해당 속성을 적용한다.', + ({ basis }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexBasis: basis }); + }, + ); + }); + + describe('grow', () => { + it.each([{ grow: 0 }, { grow: 1 }, { grow: 2 }] satisfies Array<{ + grow: CSSProperties['flexGrow']; + }>)( + 'flex의 grow prop에 $grow 속성을 주입하면 해당 속성을 적용한다.', + ({ grow }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexGrow: grow }); + }, + ); + }); + + describe('shrink', () => { + it.each([{ shrink: 0 }, { shrink: 1 }, { shrink: 2 }] satisfies Array<{ + shrink: CSSProperties['flexShrink']; + }>)( + 'flex의 shrink prop에 $shrink 속성을 주입하면 해당 속성을 적용한다.', + ({ shrink }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexShrink: shrink }); + }, + ); + }); + + describe('inline', () => { + it('flex의 inline prop에 true 속성을 주입하면 해당 속성을 적용한다.', () => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ display: 'inline-flex' }); + }); + }); + + describe('gap', () => { + it.each([{ gap: '10px' }, { gap: '1rem' }] satisfies Array<{ + gap: CSSProperties['gap']; + }>)( + 'flex의 gap prop에 $gap 속성을 주입하면 해당 속성을 적용한다.', + ({ gap }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ gap }); + }, + ); + }); + }); + }); + + describe('style', () => { + it.each([ + { style: { justifyContent: 'flex-start' } }, + { style: { alignItems: 'center' } }, + { style: { flexWrap: 'wrap' } }, + { style: { flexDirection: 'column' } }, + ] satisfies Array<{ style: CSSProperties }>)( + 'flex의 style prop에 $style 속성을 주입하면 해당 속성을 적용한다.', + ({ style }) => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle(style); + }, + ); + }); + + describe('polymorphic', () => { + it.each(['span', 'nav', 'button', 'input', 'label', 'div'])( + 'flex의 asChild prop에 true 속성을 주입하면 자식으로 %s 엘리먼트가 전달되면 해당 엘리먼트의 태그로 렌더링된다', + (element) => { + render( + + {createElement(element)} + , + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toBeInTheDocument(); + expect(flexContainer.tagName.toLowerCase()).toBe(element); + }, + ); + }); +}); diff --git a/packages/flex/src/Flex.tsx b/packages/flex/src/Flex.tsx new file mode 100644 index 0000000..3a6604f --- /dev/null +++ b/packages/flex/src/Flex.tsx @@ -0,0 +1,68 @@ +import { Slot } from '@radix-ui/react-slot'; +import { clsx as cx } from 'clsx'; +import { + type CSSProperties, + type ComponentProps, + type ForwardedRef, + forwardRef, +} from 'react'; +import styles from './Flex.module.css'; + +export interface FlexProps extends ComponentProps<'div'> { + align?: CSSProperties['alignItems']; + justify?: CSSProperties['justifyContent']; + wrap?: CSSProperties['flexWrap']; + direction?: CSSProperties['flexDirection']; + basis?: CSSProperties['flexBasis']; + grow?: CSSProperties['flexGrow']; + shrink?: CSSProperties['flexShrink']; + inline?: boolean; + gap?: CSSProperties['gap']; + asChild?: boolean; +} + +export const Flex = forwardRef(function Flex( + { + align, + justify, + wrap, + direction, + basis, + grow, + shrink, + inline, + gap, + className, + style, + children, + asChild, + ...rest + }: FlexProps, + ref: ForwardedRef, +) { + const Component = asChild ? Slot : 'div'; + + const flexStyle = { + '--flex-display': inline ? 'inline-flex' : 'flex', + '--flex-direction': direction, + '--flex-align': align, + '--flex-justify': justify, + '--flex-wrap': wrap, + '--flex-gap': gap, + '--flex-basis': basis, + '--flex-grow': grow, + '--flex-shrink': shrink, + ...style, + } as React.CSSProperties; + + return ( + + {children} + + ); +}); diff --git a/packages/flex/src/index.ts b/packages/flex/src/index.ts new file mode 100644 index 0000000..7cf460b --- /dev/null +++ b/packages/flex/src/index.ts @@ -0,0 +1 @@ +export * from './Flex'; diff --git a/packages/flex/tsconfig.json b/packages/flex/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/flex/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/flex/tsup.config.ts b/packages/flex/tsup.config.ts new file mode 100644 index 0000000..ee4b117 --- /dev/null +++ b/packages/flex/tsup.config.ts @@ -0,0 +1,3 @@ +import defaultConfig from '../../tsup.config'; + +export default defaultConfig; diff --git a/packages/flex/vitest.config.ts b/packages/flex/vitest.config.ts new file mode 100644 index 0000000..a917827 --- /dev/null +++ b/packages/flex/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineProject, mergeConfig } from 'vitest/config'; +import defaultConfig from '../../vitest.config'; + +export default mergeConfig( + defaultConfig, + defineProject({ + test: { + setupFiles: './vitest.setup.ts', + }, + }), +); diff --git a/packages/flex/vitest.setup.ts b/packages/flex/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/flex/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/packages/side/package.json b/packages/side/package.json index 74366e1..61db942 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -28,7 +28,8 @@ "@sipe-team/switch": "workspace:*", "@sipe-team/tokens": "workspace:*", "@sipe-team/tooltip": "workspace:*", - "@sipe-team/typography": "workspace:*" + "@sipe-team/typography": "workspace:*", + "@sipe-team/flex": "workspace:*" }, "devDependencies": { "tsup": "catalog:", diff --git a/packages/side/src/index.ts b/packages/side/src/index.ts index 91292b7..b69122a 100644 --- a/packages/side/src/index.ts +++ b/packages/side/src/index.ts @@ -9,3 +9,4 @@ export * from '@sipe-team/switch'; export * from '@sipe-team/tokens'; export * from '@sipe-team/tooltip'; export * from '@sipe-team/typography'; +export * from '@sipe-team/flex'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cac6389..2b26c55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -515,6 +515,70 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/flex: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.13)(react@18.3.1) + clsx: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@faker-js/faker': + specifier: ^9.2.0 + version: 9.2.0 + '@sipe-team/card': + specifier: workspace:^ + version: link:../card + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@testing-library/jest-dom': + specifier: 'catalog:' + version: 6.6.3 + '@testing-library/react': + specifier: 'catalog:' + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.13 + happy-dom: + specifier: 'catalog:' + version: 15.11.7 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.4.6(prettier@2.8.8) + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + typescript: + specifier: 'catalog:' + version: 5.7.2 + vitest: + specifier: 'catalog:' + version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/icon: devDependencies: '@storybook/addon-essentials': @@ -640,6 +704,9 @@ importers: '@sipe-team/divider': specifier: workspace:* version: link:../divider + '@sipe-team/flex': + specifier: workspace:* + version: link:../flex '@sipe-team/input': specifier: workspace:* version: link:../Input @@ -4987,7 +5054,7 @@ snapshots: '@eslint/config-array@0.19.1': dependencies: '@eslint/object-schema': 2.1.5 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4999,7 +5066,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 From 4570330e9e09829addbda96ed3a8291065370e57 Mon Sep 17 00:00:00 2001 From: y09n Date: Wed, 8 Jan 2025 10:58:24 +0900 Subject: [PATCH 13/28] chore(release): version packages (#84) Co-authored-by: github-actions[bot] --- .changeset/ninety-icons-invite.md | 6 ------ packages/flex/CHANGELOG.md | 7 +++++++ packages/flex/package.json | 6 ++++-- packages/side/CHANGELOG.md | 11 +++++++++++ packages/side/package.json | 2 +- 5 files changed, 23 insertions(+), 9 deletions(-) delete mode 100644 .changeset/ninety-icons-invite.md create mode 100644 packages/flex/CHANGELOG.md diff --git a/.changeset/ninety-icons-invite.md b/.changeset/ninety-icons-invite.md deleted file mode 100644 index 65b3c64..0000000 --- a/.changeset/ninety-icons-invite.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@sipe-team/flex": minor -"@sipe-team/side": minor ---- - -feat(flex): add flex component diff --git a/packages/flex/CHANGELOG.md b/packages/flex/CHANGELOG.md new file mode 100644 index 0000000..3277e16 --- /dev/null +++ b/packages/flex/CHANGELOG.md @@ -0,0 +1,7 @@ +# @sipe-team/flex + +## 0.1.0 + +### Minor Changes + +- 81249b6: feat(flex): add flex component diff --git a/packages/flex/package.json b/packages/flex/package.json index 64f2e31..a506105 100644 --- a/packages/flex/package.json +++ b/packages/flex/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/flex", "description": "Flex for Sipe Design System", - "version": "0.0.0", + "version": "0.1.0", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/side/CHANGELOG.md b/packages/side/CHANGELOG.md index ce94862..8e4fdbc 100644 --- a/packages/side/CHANGELOG.md +++ b/packages/side/CHANGELOG.md @@ -1,5 +1,16 @@ # @sipe-team/side +## 0.2.0 + +### Minor Changes + +- 81249b6: feat(flex): add flex component + +### Patch Changes + +- Updated dependencies [81249b6] + - @sipe-team/flex@0.1.0 + ## 0.1.0 ### Minor Changes diff --git a/packages/side/package.json b/packages/side/package.json index 61db942..63cdd81 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/side", "description": "Sipe Design System", - "version": "0.1.0", + "version": "0.2.0", "license": "MIT", "repository": { "type": "git", From 768bb2e343c758011894f34b5c5763795b304596 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 8 Jan 2025 23:49:20 +0900 Subject: [PATCH 14/28] docs(lang): update PR, Issue templates, ci steps to English (#85) --- .github/ISSUE_TEMPLATE.md | 24 ++++++++++++------------ .github/PULL_REQUEST_TEMPLATE.md | 18 +++++++++--------- .github/workflows/chromatic.yaml | 6 +++--- .github/workflows/ci.yaml | 14 +++++++------- .github/workflows/coverage.yaml | 10 +++++----- .github/workflows/release.yaml | 7 +++---- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 3d15918..ea659fa 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,17 +1,17 @@ -## 컴포넌트 기능 정의 - +## Component Function Definition + -## 디자인 요구사항 - +## Design Requirements + -## 컴포넌트 스펙 - +## Component Specifications + -## 기술적 고려사항 - +## Technical Considerations + -## 참고 자료 - +## Reference Materials + -## 추가 논의사항 - +## Additional Discussion Points + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 43dc57c..864a906 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,12 @@ -## 변경사항 - +## Changes + -## 시각자료 - +## Visuals + -## 체크리스트 -- [ ] 기능 명세를 작성하였나요? -- [ ] 테스트 코드를 작성하였나요? +## Checklist +- [ ] Have you written the functional specifications? +- [ ] Have you written the test code? -## 추가 논의사항 - +## Additional Discussion Points + diff --git a/.github/workflows/chromatic.yaml b/.github/workflows/chromatic.yaml index aecb5ef..739ff8b 100644 --- a/.github/workflows/chromatic.yaml +++ b/.github/workflows/chromatic.yaml @@ -11,16 +11,16 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: pnpm 설치 + - name: Install pnpm uses: pnpm/action-setup@v4 with: run_install: false - - name: Node.js 환경 설정 + - name: Setup Node.js environment uses: actions/setup-node@v4 with: cache: pnpm node-version-file: .nvmrc - - name: 의존성 설치 + - name: Install dependencies run: pnpm install - name: Run Chromatic uses: chromaui/action@latest diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5e65826..a78d5e9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,22 +12,22 @@ jobs: with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - - name: pnpm 설치 + - name: Install pnpm uses: pnpm/action-setup@v4 with: run_install: false - - name: Node.js 환경 설정 + - name: Setup Node.js environment uses: actions/setup-node@v4 with: cache: pnpm node-version-file: .nvmrc - - name: 의존성 설치 + - name: Install dependencies run: pnpm install - - name: 린트 + - name: Lint run: pnpm --filter="...[origin/${{ github.base_ref }}]" "/lint:*/" - - name: 테스트 + - name: Test run: pnpm --filter="...[origin/${{ github.base_ref }}]" test - - name: 타입 체크 + - name: Type check run: pnpm --filter="...[origin/${{ github.base_ref }}]" typecheck - - name: 빌드 + - name: Build run: pnpm --filter="...[origin/${{ github.base_ref }}]" build diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index d68308e..d18e759 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -11,20 +11,20 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: pnpm 설치 + - name: Install pnpm uses: pnpm/action-setup@v4 with: run_install: false - - name: Node.js 환경 설정 + - name: Setup Node.js environment uses: actions/setup-node@v4 with: cache: pnpm node-version-file: .nvmrc - - name: 의존성 설치 + - name: Install dependencies run: pnpm install - - name: 테스트 + - name: Run tests run: pnpm run test --coverage - - name: 코드커버리지 업로드 + - name: Upload code coverage uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c23c8b0..a7ddc77 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -11,18 +11,18 @@ jobs: steps: - uses: actions/checkout@v4 - - name: pnpm 설치 + - name: Install pnpm uses: pnpm/action-setup@v4 with: run_install: false - - name: Node.js 환경 설정 + - name: Setup Node.js environment uses: actions/setup-node@v4 with: cache: pnpm node-version-file: .nvmrc registry-url: https://npm.pkg.github.com scope: "@sipe-team" - - name: 의존성 설치 + - name: Install dependencies run: pnpm install - name: Create Release Pull Request or Publish to Github Package Registry id: changesets @@ -34,4 +34,3 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} - From 71fcc50af6d9412a68d7821ba17d8c9bc0845aab Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 9 Jan 2025 22:38:26 +0900 Subject: [PATCH 15/28] chore(husky): add pre-push githook for branch naming convention (#87) * chore(husky): add pre-push githook for branch naming convention * chore(husky): correct typo in pre-push --- .husky/pre-push | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .husky/pre-push diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 0000000..522a597 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,17 @@ +# Get the current branch name +BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) +BRANCH_REGEX='^(feat|fix|hotfix|chore|refactor|release|test|docs|ci|build)\/[a-z0-9-]+$' + +# Check if the branch name matches the defined regex +if ! [[ $BRANCH_NAME =~ $BRANCH_REGEX ]]; then + echo "Error: Invalid branch name format." + echo + echo "Please rename your branch using:" + echo "git branch -m / or git branch -m /-" + echo + echo "CATEGORY: feat, fix, hotfix, chore, refactor, release, test, docs, ci, build" + echo + exit 1 +fi + +exit 0 \ No newline at end of file From dcafff3c04246012c3e9e1c8871457c48af5b2b4 Mon Sep 17 00:00:00 2001 From: y09n Date: Thu, 9 Jan 2025 22:48:45 +0900 Subject: [PATCH 16/28] fix(flex,side): flex style export issue (#90) --- .changeset/polite-moles-camp.md | 6 ++++++ packages/flex/package.json | 6 ++---- packages/side/styles.css | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 .changeset/polite-moles-camp.md diff --git a/.changeset/polite-moles-camp.md b/.changeset/polite-moles-camp.md new file mode 100644 index 0000000..f036ee8 --- /dev/null +++ b/.changeset/polite-moles-camp.md @@ -0,0 +1,6 @@ +--- +"@sipe-team/flex": patch +"@sipe-team/side": patch +--- + +fix(flex,side): flex style export issue diff --git a/packages/flex/package.json b/packages/flex/package.json index a506105..cb4ea54 100644 --- a/packages/flex/package.json +++ b/packages/flex/package.json @@ -9,9 +9,7 @@ }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", @@ -63,7 +61,7 @@ "default": "./dist/index.cjs" } }, - "./styles.css": "./dist/styles.css" + "./styles.css": "./dist/index.css" } }, "sideEffects": false diff --git a/packages/side/styles.css b/packages/side/styles.css index 11e5477..a5ab7f5 100644 --- a/packages/side/styles.css +++ b/packages/side/styles.css @@ -2,6 +2,7 @@ @import "~@sipe-team/button/styles.css"; @import "~@sipe-team/card/styles.css"; @import "~@sipe-team/divider/styles.css"; +@import "~@sipe-team/flex/styles.css"; @import "~@sipe-team/input/styles.css"; @import "~@sipe-team/radio-group/styles.css"; @import "~@sipe-team/skeleton/styles.css"; From d476230c2e657cf082cef548920f4abbeaa4166f Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 9 Jan 2025 23:16:04 +0900 Subject: [PATCH 17/28] ci(husky): disabled git hook on CI (#91) --- .github/workflows/release.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a7ddc77..6ceef82 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,5 +32,6 @@ jobs: publish: pnpm changeset publish commit: "chore(release): version packages" env: + HUSKY: 0 GITHUB_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} From f527341de4f785ad3752bc3f226911355da0d6b9 Mon Sep 17 00:00:00 2001 From: Danny <68424403+kimdaeyeobbb@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:53:36 +0900 Subject: [PATCH 18/28] =?UTF-8?q?feat(avatar):=20avatar=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(avatar): implement test * feat(avatar): scaffold package * feat(avatar): implement component * feat(avatar): add avatar story --- packages/avatar/.storybook/main.ts | 16 ++++ packages/avatar/.storybook/preview.ts | 5 ++ packages/avatar/global.d.ts | 1 + packages/avatar/package.json | 69 +++++++++++++++ packages/avatar/src/Avatar.module.css | 22 +++++ packages/avatar/src/Avatar.stories.tsx | 45 ++++++++++ packages/avatar/src/Avatar.test.tsx | 74 +++++++++++++++++ packages/avatar/src/Avatar.tsx | 111 +++++++++++++++++++++++++ packages/avatar/src/index.ts | 1 + packages/avatar/tsconfig.json | 3 + packages/avatar/tsup.config.ts | 8 ++ packages/avatar/vitest.config.ts | 26 ++++++ packages/avatar/vitest.setup.ts | 4 + pnpm-lock.yaml | 67 +++++++++++++++ 14 files changed, 452 insertions(+) create mode 100644 packages/avatar/.storybook/main.ts create mode 100644 packages/avatar/.storybook/preview.ts create mode 100644 packages/avatar/global.d.ts create mode 100644 packages/avatar/package.json create mode 100644 packages/avatar/src/Avatar.module.css create mode 100644 packages/avatar/src/Avatar.stories.tsx create mode 100644 packages/avatar/src/Avatar.test.tsx create mode 100644 packages/avatar/src/Avatar.tsx create mode 100644 packages/avatar/src/index.ts create mode 100644 packages/avatar/tsconfig.json create mode 100644 packages/avatar/tsup.config.ts create mode 100644 packages/avatar/vitest.config.ts create mode 100644 packages/avatar/vitest.setup.ts diff --git a/packages/avatar/.storybook/main.ts b/packages/avatar/.storybook/main.ts new file mode 100644 index 0000000..83a7f10 --- /dev/null +++ b/packages/avatar/.storybook/main.ts @@ -0,0 +1,16 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/avatar/.storybook/preview.ts b/packages/avatar/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/avatar/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/avatar/global.d.ts b/packages/avatar/global.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/avatar/global.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/avatar/package.json b/packages/avatar/package.json new file mode 100644 index 0000000..b453769 --- /dev/null +++ b/packages/avatar/package.json @@ -0,0 +1,69 @@ +{ + "name": "@sipe-team/avatar", + "description": "Avatar component for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-2_side" + }, + "type": "module", + "exports": "./src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "@sipe-team/typography": "workspace:^", + "@sipe-team/tokens": "workspace:*", + "clsx": "^2.1.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.2.0", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@types/react": "^18.3.12", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false +} diff --git a/packages/avatar/src/Avatar.module.css b/packages/avatar/src/Avatar.module.css new file mode 100644 index 0000000..fd80e58 --- /dev/null +++ b/packages/avatar/src/Avatar.module.css @@ -0,0 +1,22 @@ +.avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: var(--avatar-shape); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + background-color: #e2e8f0; +} + +.image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.fallback { + font-size: 0.8rem; + color: #2d3748; + text-align: center; +} diff --git a/packages/avatar/src/Avatar.stories.tsx b/packages/avatar/src/Avatar.stories.tsx new file mode 100644 index 0000000..a95e850 --- /dev/null +++ b/packages/avatar/src/Avatar.stories.tsx @@ -0,0 +1,45 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Avatar } from "./Avatar"; +import { faker } from "@faker-js/faker"; + +const meta = { + title: "Avatar", + component: Avatar, + parameters: { + layout: "centered", + }, +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +const testImage = faker.image.avatar(); + +export const Basic: Story = { + args: { + src: "https://randomuser.me/api/portraits/men/1.jpg", + alt: "대체 텍스트", + }, +}; + +export const Sizes: Story = { + render: () => ( +
+ + + + + +
+ ), +}; + +export const Shapes: Story = { + render: () => ( +
+ + + +
+ ), +}; diff --git a/packages/avatar/src/Avatar.test.tsx b/packages/avatar/src/Avatar.test.tsx new file mode 100644 index 0000000..bf4b957 --- /dev/null +++ b/packages/avatar/src/Avatar.test.tsx @@ -0,0 +1,74 @@ +import { faker } from "@faker-js/faker"; +import { render, screen } from "@testing-library/react"; +import { expect, test, describe, it } from "vitest"; +import { Avatar } from "./Avatar"; +import type { AvatarShape, AvatarSize } from "./Avatar"; + +const testImage = faker.image.avatar(); + +test("Avatar 컴포넌트가 주입받은 이미지 주소를 src 속성으로 설정한다.", () => { + render(); + + const img = screen.getByRole("img"); + expect(img).toHaveAttribute("src", testImage); +}); + +test("이미지가 없을 경우 대체 텍스트를 표시한다.", () => { + render(); + + expect(screen.getByText("대체 텍스트")).toBeInTheDocument(); +}); + +test("이미지 로드 실패 시 fallback을 표시한다.", () => { + render( + + ); + + const img = screen.getByRole("img"); + img.dispatchEvent(new Event("error")); + + expect(img).toHaveAttribute( + "src", + "https://randomuser.me/api/portraits/women/1.jpg" + ); +}); + +describe("Avatar 컴포넌트", () => { + const sizes: { size: AvatarSize; expectedSize: string }[] = [ + { size: "xs", expectedSize: "24px" }, + { size: "sm", expectedSize: "32px" }, + { size: "md", expectedSize: "40px" }, + { size: "lg", expectedSize: "70px" }, + { size: "xl", expectedSize: "96px" }, + ]; + + const shapes: { shape: AvatarShape; expectedRadius: string }[] = [ + { shape: "circle", expectedRadius: "50%" }, + { shape: "rounded", expectedRadius: "4px" }, + { shape: "square", expectedRadius: "0px" }, + ]; + + it.each(sizes)( + "size가 $size일때 $expectedSize x $expectedSize 크기로 렌더링 된다.", + ({ size, expectedSize }) => { + render(); + const container = screen.getByRole("img").parentElement; + expect(container).toHaveStyle({ + width: expectedSize, + height: expectedSize, + }); + } + ); + + it.each(shapes)( + "shape가 $shape일때 borderRadius는 $expectedRadius로 나타난다.", + ({ shape, expectedRadius }) => { + render(); + const container = screen.getByRole("img").parentElement; + expect(container).toHaveStyle({ borderRadius: expectedRadius }); + } + ); +}); diff --git a/packages/avatar/src/Avatar.tsx b/packages/avatar/src/Avatar.tsx new file mode 100644 index 0000000..f836c96 --- /dev/null +++ b/packages/avatar/src/Avatar.tsx @@ -0,0 +1,111 @@ +import { Slot } from "@radix-ui/react-slot"; +import { clsx as cx } from "clsx"; +import { + type CSSProperties, + type ComponentProps, + type ForwardedRef, + forwardRef, +} from "react"; +import styles from "./Avatar.module.css"; + +/** ++ * Avatar 컴포넌트의 크기 옵션 ++ * @type {AvatarSize} ++ * - xs: 24px ++ * - sm: 32px ++ * - md: 40px (기본값) ++ * - lg: 70px ++ * - xl: 96px ++ */ +export type AvatarSize = "xs" | "sm" | "md" | "lg" | "xl"; + +/** ++ * Avatar 컴포넌트의 모양 옵션 ++ * @type {AvatarShape} ++ * - circle: 원형 (50% border-radius) ++ * - rounded: 둥근 모서리 (4px border-radius) ++ * - square: 정사각형 (0px border-radius) ++ */ +export type AvatarShape = "circle" | "rounded" | "square"; + +export interface AvatarProps extends ComponentProps<"div"> { + asChild?: boolean; + src?: string; + alt?: string; + size?: AvatarSize; + shape?: AvatarShape; + fallback?: string; +} + +export const Avatar = forwardRef(function Avatar( + { + asChild, + className, + src, + alt, + size = "md", + shape = "circle", + fallback, + ...props + }: AvatarProps, + ref: ForwardedRef +) { + const Component = asChild ? Slot : "div"; + + const style = { + ...props.style, + width: getAvatarSize(size), + height: getAvatarSize(size), + borderRadius: getAvatarShape(shape), + } as CSSProperties; + + return ( + + {src ? ( + {alt} { + if (fallback) e.currentTarget.src = fallback; + }} + className={styles.image} + /> + ) : ( + {alt || fallback} + )} + + ); +}); + +function getAvatarSize(size: AvatarSize) { + switch (size) { + case "xs": + return "24px"; + case "sm": + return "32px"; + case "md": + return "40px"; + case "lg": + return "70px"; + case "xl": + return "96px"; + default: + return "40px"; + } +} + +function getAvatarShape(shape: AvatarShape) { + switch (shape) { + case "rounded": + return "4px"; + case "square": + return "0px"; + default: + return "50%"; + } +} diff --git a/packages/avatar/src/index.ts b/packages/avatar/src/index.ts new file mode 100644 index 0000000..9cc3279 --- /dev/null +++ b/packages/avatar/src/index.ts @@ -0,0 +1 @@ +export * from './Avatar.tsx'; diff --git a/packages/avatar/tsconfig.json b/packages/avatar/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/avatar/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/avatar/tsup.config.ts b/packages/avatar/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/avatar/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/avatar/vitest.config.ts b/packages/avatar/vitest.config.ts new file mode 100644 index 0000000..adc7d2f --- /dev/null +++ b/packages/avatar/vitest.config.ts @@ -0,0 +1,26 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + // 테스트와 관련한 설정 + test: { + // 테스트를 실행할 환경 + // default: 'node' + // 브라우저 환경에서 테스트를 희망시 - 'jsdom' 또는 'happy-dom'으로 설정 + environment: 'happy-dom', + + // 글로벌 API를 사용할지 여부를 선택 + // ex) describe, it, expect 등 + globals: true, + + // 테스트 실행 환경에 필요한 스크립트를 불러올 수 있음 + // ex) 모듈 mokcing, matcher extend 등 + setupFiles: './vitest.setup.ts', + passWithNoTests: true, + watch: false, + css: true, + }, + + // 환경별로 설정해주어야하는 추가 기능을 플러그인으로 주입 가능 + // ex) vite-tsconfig-paths + plugins: [], +}); diff --git a/packages/avatar/vitest.setup.ts b/packages/avatar/vitest.setup.ts new file mode 100644 index 0000000..4c373ed --- /dev/null +++ b/packages/avatar/vitest.setup.ts @@ -0,0 +1,4 @@ +// vitest에서 기본적으로 제공하는 matcher 외에도 DOM 환경에서 유용하게 사용가능한 다양한 matcher를 제공 +// ex) expect(foo).toBeInTheDocument(); +// 얘가 없으면 Avatar.test.tsx에서 error가 발생함 +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b26c55..086c071 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -265,6 +265,73 @@ importers: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/avatar: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.13)(react@18.3.1) + '@sipe-team/tokens': + specifier: workspace:* + version: link:../tokens + '@sipe-team/typography': + specifier: workspace:^ + version: link:../typography + clsx: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@faker-js/faker': + specifier: ^9.2.0 + version: 9.2.0 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.13 + happy-dom: + specifier: 'catalog:' + version: 15.11.7 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.4.6(prettier@2.8.8) + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) + typescript: + specifier: 'catalog:' + version: 5.7.2 + vitest: + specifier: 'catalog:' + version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) + packages/badge: dependencies: '@sipe-team/typography': From 86761b2aa86bd202fd11ff66a0dd5a7c676fa71a Mon Sep 17 00:00:00 2001 From: Semin <110274049+SEMIN-97@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:25:36 +0900 Subject: [PATCH 19/28] docs: add bug report (#89) * chore: rename and move component design template * chore: add name and about fields to component design template * docs: add bug report issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 47 +++++++++++++++++++ .../component_design.md} | 5 ++ 2 files changed, 52 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md rename .github/{ISSUE_TEMPLATE.md => ISSUE_TEMPLATE/component_design.md} (91%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..a69e5ef --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,47 @@ +name: "Bug Report" +about: "Report a bug" + +--- + +## Bug Description + + +## Steps to Reproduce + + +## Actual Result + + +## Expected Result + + +## Screenshots and Logs + + +## Environment Information + + +- **Browser:** +- **Operating System:** +- **Package Versions:** +- **Others:** + +## Additional Notes + diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/component_design.md similarity index 91% rename from .github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/component_design.md index ea659fa..ef9aadc 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/component_design.md @@ -1,3 +1,8 @@ +name: "Component Design" +about: "Define and design a new component" + +--- + ## Component Function Definition From 3ded0e0e81b7e425090ff7e48484e15598904dc3 Mon Sep 17 00:00:00 2001 From: y09n Date: Fri, 10 Jan 2025 19:58:59 +0900 Subject: [PATCH 20/28] chore(release): version packages (#92) Co-authored-by: github-actions[bot] --- .changeset/polite-moles-camp.md | 6 ------ packages/flex/CHANGELOG.md | 6 ++++++ packages/flex/package.json | 6 ++++-- packages/side/CHANGELOG.md | 8 ++++++++ packages/side/package.json | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) delete mode 100644 .changeset/polite-moles-camp.md diff --git a/.changeset/polite-moles-camp.md b/.changeset/polite-moles-camp.md deleted file mode 100644 index f036ee8..0000000 --- a/.changeset/polite-moles-camp.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@sipe-team/flex": patch -"@sipe-team/side": patch ---- - -fix(flex,side): flex style export issue diff --git a/packages/flex/CHANGELOG.md b/packages/flex/CHANGELOG.md index 3277e16..34ea83f 100644 --- a/packages/flex/CHANGELOG.md +++ b/packages/flex/CHANGELOG.md @@ -1,5 +1,11 @@ # @sipe-team/flex +## 0.1.1 + +### Patch Changes + +- dcafff3: fix(flex,side): flex style export issue + ## 0.1.0 ### Minor Changes diff --git a/packages/flex/package.json b/packages/flex/package.json index cb4ea54..75fac3b 100644 --- a/packages/flex/package.json +++ b/packages/flex/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/flex", "description": "Flex for Sipe Design System", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/side/CHANGELOG.md b/packages/side/CHANGELOG.md index 8e4fdbc..5d35289 100644 --- a/packages/side/CHANGELOG.md +++ b/packages/side/CHANGELOG.md @@ -1,5 +1,13 @@ # @sipe-team/side +## 0.2.1 + +### Patch Changes + +- dcafff3: fix(flex,side): flex style export issue +- Updated dependencies [dcafff3] + - @sipe-team/flex@0.1.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/side/package.json b/packages/side/package.json index 63cdd81..a607139 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/side", "description": "Sipe Design System", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "repository": { "type": "git", From 380d46c27e016321a3b4332d80caf574717acb1c Mon Sep 17 00:00:00 2001 From: Jinhyun Park Date: Sun, 12 Jan 2025 18:06:09 +0900 Subject: [PATCH 21/28] feat(fonts): Add extraBold and black font weights to fontWeight (#93) * refactor(fonts): add extraBold and black font weights to fontWeight export - ref : https://developer.mozilla.org/ko/docs/Web/CSS/font-weight * docs(fonts): add MDN reference for font weights in fonts.ts --- packages/tokens/src/fonts.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/tokens/src/fonts.ts b/packages/tokens/src/fonts.ts index 3509cc6..545fa22 100644 --- a/packages/tokens/src/fonts.ts +++ b/packages/tokens/src/fonts.ts @@ -11,11 +11,17 @@ export const fontSize = { 48: 48, } as const; +/** + * Font weights following MDN guidelines + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight + */ export const fontWeight = { regular: 400, medium: 500, semiBold: 600, bold: 700, + extraBold: 800, + black: 900, } as const; export const lineHeight = { From e19885f0a429cfcb05a3ab09367d7b2f5c12b7db Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 12 Jan 2025 18:15:32 +0900 Subject: [PATCH 22/28] Chore/storybook theme (#97) * chore(asset): add favicon, logo assets * chore(storybook): add theme, manager storybook core API, Components * style(storybook): add sipe branding in storybook * style(storybook): add favicon * chore(storybook): add addon-docs, react, react-dom for storybook mdx * docs(storybook): add introduction mdx * docs(storybook): rename concept -> intro * docs(storybook): add category for all components * chore(storybook): remove react and react-dom dependencies * style(storybook): update secondary color and selected bar color * chore(asset): rename sipe logo file * chore(storybook): update brandImage file path * chore(storybook): remove unused style --- .storybook/main.ts | 4 + .storybook/manager.ts | 16 + .../component/src/Component.stories.tsx | 2 +- docs/introduction.mdx | 32 ++ package.json | 11 +- packages/Input/src/Input.stories.tsx | 2 +- packages/avatar/src/Avatar.stories.tsx | 18 +- packages/badge/src/Badge.stories.tsx | 2 +- packages/button/src/Button.stories.tsx | 2 +- packages/card/src/Card.stories.tsx | 2 +- packages/divider/src/Divider.stories.tsx | 2 +- packages/flex/src/Flex.stories.tsx | 2 +- packages/icon/src/Icons.stories.tsx | 8 +- .../radio-group/src/RadioGroup.stories.tsx | 2 +- packages/skeleton/src/Skeleton.stories.tsx | 2 +- packages/switch/src/Switch.stories.tsx | 2 +- packages/tokens/src/Tokens.stories.tsx | 2 +- packages/tooltip/src/Tooltip.stories.tsx | 2 +- .../typography/src/Typography.stories.tsx | 2 +- pnpm-lock.yaml | 508 +++++++++++------- pnpm-workspace.yaml | 2 +- public/assets/favicon.ico | Bin 0 -> 1150 bytes public/assets/sipe_brand_logo.png | Bin 0 -> 94889 bytes 23 files changed, 389 insertions(+), 236 deletions(-) create mode 100644 .storybook/manager.ts create mode 100644 docs/introduction.mdx create mode 100644 public/assets/favicon.ico create mode 100644 public/assets/sipe_brand_logo.png diff --git a/.storybook/main.ts b/.storybook/main.ts index e459f19..e33aff6 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -2,6 +2,7 @@ import type { StorybookConfig } from '@storybook/react-vite'; export default { stories: [ + '../docs/*.mdx', '../packages/**/*.mdx', '../packages/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], @@ -14,4 +15,7 @@ export default { name: '@storybook/react-vite', options: {}, }, + managerHead: (head) => + `${head} +`, } satisfies StorybookConfig; diff --git a/.storybook/manager.ts b/.storybook/manager.ts new file mode 100644 index 0000000..7ea677c --- /dev/null +++ b/.storybook/manager.ts @@ -0,0 +1,16 @@ +import { addons } from '@storybook/manager-api'; +import { create } from '@storybook/theming'; + +addons.setConfig({ + theme: create({ + base: 'dark', + brandTitle: 'Sipe Design System', + brandImage: '../public/assets/sipe_brand_logo.png', + brandUrl: 'https://sipe.team/', + brandTarget: '_self', + textColor: '#999999', + colorSecondary: '#007043', + barSelectedColor: '#007043', + barHoverColor: '#00CC7A', + }), +}); diff --git a/.templates/component/src/Component.stories.tsx b/.templates/component/src/Component.stories.tsx index 6e01ecb..c2e1210 100644 --- a/.templates/component/src/Component.stories.tsx +++ b/.templates/component/src/Component.stories.tsx @@ -3,7 +3,7 @@ import { Component } from './Component'; const meta = { component: Component, - title: 'Component', + title: 'Components/Component', parameters: { layout: 'centered', }, diff --git a/docs/introduction.mdx b/docs/introduction.mdx new file mode 100644 index 0000000..1180f96 --- /dev/null +++ b/docs/introduction.mdx @@ -0,0 +1,32 @@ +import { Meta } from '@storybook/addon-docs'; + + + +
+
+

+ Sipe Design System +

+
+ +
+ Sipe Design System Logo +
+ +
diff --git a/package.json b/package.json index 33e8964..16a5d84 100644 --- a/package.json +++ b/package.json @@ -13,33 +13,38 @@ "devDependencies": { "@biomejs/biome": "^1.9.4", "@changesets/cli": "^2.27.9", + "@clack/prompts": "^0.9.0", "@commitlint/cli": "^19.6.1", "@commitlint/config-conventional": "^19.6.0", "@commitlint/cz-commitlint": "^19.6.1", "@commitlint/types": "^19.5.0", - "@clack/prompts": "^0.9.0", + "@storybook/addon-docs": "^8.4.7", "@storybook/addon-essentials": "catalog:", "@storybook/addon-interactions": "catalog:", "@storybook/addon-links": "catalog:", "@storybook/blocks": "catalog:", + "@storybook/manager-api": "^8.4.7", "@storybook/react": "catalog:", "@storybook/react-vite": "catalog:", "@storybook/test": "catalog:", + "@storybook/theming": "^8.4.7", "@tsconfig/strictest": "^2.0.5", "@types/node": "^22.8.1", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", "@typescript-eslint/parser": "^8.19.0", "@vitest/coverage-v8": "catalog:", "chromatic": "^11.19.0", - "commitizen": "^4.3.1", "clipanion": "4.0.0-rc.4", + "commitizen": "^4.3.1", "eslint": "^9.17.0", "husky": "^9.1.7", "knip": "catalog:", "lint-staged": "^15.3.0", "sanitize.css": "^13.0.0", "storybook": "catalog:", - "tsx": "^4.19.2", "tsup": "catalog:", + "tsx": "^4.19.2", "typescript": "catalog:", "vitest": "catalog:" }, diff --git a/packages/Input/src/Input.stories.tsx b/packages/Input/src/Input.stories.tsx index ef0b3b6..05b43c8 100644 --- a/packages/Input/src/Input.stories.tsx +++ b/packages/Input/src/Input.stories.tsx @@ -3,7 +3,7 @@ import { useRef, useState } from 'react'; import { Action, Input } from './Input'; const meta = { - title: 'Input', + title: 'Components/Input', component: Input, parameters: { layout: 'centered', diff --git a/packages/avatar/src/Avatar.stories.tsx b/packages/avatar/src/Avatar.stories.tsx index a95e850..c6da593 100644 --- a/packages/avatar/src/Avatar.stories.tsx +++ b/packages/avatar/src/Avatar.stories.tsx @@ -1,12 +1,12 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { Avatar } from "./Avatar"; -import { faker } from "@faker-js/faker"; +import { faker } from '@faker-js/faker'; +import type { Meta, StoryObj } from '@storybook/react'; +import { Avatar } from './Avatar'; const meta = { - title: "Avatar", + title: 'Components/Avatar', component: Avatar, parameters: { - layout: "centered", + layout: 'centered', }, } satisfies Meta; export default meta; @@ -17,14 +17,14 @@ const testImage = faker.image.avatar(); export const Basic: Story = { args: { - src: "https://randomuser.me/api/portraits/men/1.jpg", - alt: "대체 텍스트", + src: 'https://randomuser.me/api/portraits/men/1.jpg', + alt: '대체 텍스트', }, }; export const Sizes: Story = { render: () => ( -
+
@@ -36,7 +36,7 @@ export const Sizes: Story = { export const Shapes: Story = { render: () => ( -
+
diff --git a/packages/badge/src/Badge.stories.tsx b/packages/badge/src/Badge.stories.tsx index 3b54862..306caaf 100644 --- a/packages/badge/src/Badge.stories.tsx +++ b/packages/badge/src/Badge.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Badge } from './Badge'; const meta = { - title: 'Badge', + title: 'Components/Badge', component: Badge, parameters: { layout: 'centered', diff --git a/packages/button/src/Button.stories.tsx b/packages/button/src/Button.stories.tsx index ce70952..53a0bc4 100644 --- a/packages/button/src/Button.stories.tsx +++ b/packages/button/src/Button.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Button } from './Button'; const meta = { - title: 'Button', + title: 'Components/Button', component: Button, parameters: { layout: 'centered', diff --git a/packages/card/src/Card.stories.tsx b/packages/card/src/Card.stories.tsx index 1312fcf..b6372b7 100644 --- a/packages/card/src/Card.stories.tsx +++ b/packages/card/src/Card.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Card } from './Card'; const meta = { - title: 'Card', + title: 'Components/Card', component: Card, parameters: { layout: 'centered', diff --git a/packages/divider/src/Divider.stories.tsx b/packages/divider/src/Divider.stories.tsx index 82178ef..2bc3fc7 100644 --- a/packages/divider/src/Divider.stories.tsx +++ b/packages/divider/src/Divider.stories.tsx @@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Divider } from './Divider'; const meta = { - title: 'Divider', + title: 'Components/Divider', component: Divider, parameters: { layout: 'centered', diff --git a/packages/flex/src/Flex.stories.tsx b/packages/flex/src/Flex.stories.tsx index 8195b96..8ab7f25 100644 --- a/packages/flex/src/Flex.stories.tsx +++ b/packages/flex/src/Flex.stories.tsx @@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Flex } from './Flex'; const meta = { - title: 'Flex', + title: 'Components/Flex', component: Flex, tags: ['autodocs'], argTypes: { diff --git a/packages/icon/src/Icons.stories.tsx b/packages/icon/src/Icons.stories.tsx index 1e9d489..69f5415 100644 --- a/packages/icon/src/Icons.stories.tsx +++ b/packages/icon/src/Icons.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import * as Icons from '.'; export default { - title: 'Icons', + title: 'Components/Icons', parameters: { layout: 'centered', }, @@ -78,7 +78,7 @@ export const Sizes: StoryObj = { return (
- {sizes.map(size => ( + {sizes.map((size) => (
{size}px
@@ -96,7 +96,7 @@ export const Colors: StoryObj = { return (
- {colors.map(color => ( + {colors.map((color) => (
{color}
@@ -105,4 +105,4 @@ export const Colors: StoryObj = {
); }, -}; \ No newline at end of file +}; diff --git a/packages/radio-group/src/RadioGroup.stories.tsx b/packages/radio-group/src/RadioGroup.stories.tsx index e3051b1..eb2bcf9 100644 --- a/packages/radio-group/src/RadioGroup.stories.tsx +++ b/packages/radio-group/src/RadioGroup.stories.tsx @@ -4,7 +4,7 @@ import { Radio } from './Radio'; import { RadioGroup } from './RadioGroup'; const meta = { - title: 'RadioGroup', + title: 'Components/RadioGroup', component: RadioGroup, parameters: { layout: 'centered', diff --git a/packages/skeleton/src/Skeleton.stories.tsx b/packages/skeleton/src/Skeleton.stories.tsx index ec8d50c..123cc8a 100644 --- a/packages/skeleton/src/Skeleton.stories.tsx +++ b/packages/skeleton/src/Skeleton.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Skeleton } from './Skeleton'; const meta = { - title: 'Skeleton', + title: 'Components/Skeleton', component: Skeleton, parameters: { layout: 'centered', diff --git a/packages/switch/src/Switch.stories.tsx b/packages/switch/src/Switch.stories.tsx index 120e2c2..926cd36 100644 --- a/packages/switch/src/Switch.stories.tsx +++ b/packages/switch/src/Switch.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Switch } from './Switch'; const meta = { - title: 'Switch', + title: 'Components/Switch', component: Switch, parameters: { layout: 'centered', diff --git a/packages/tokens/src/Tokens.stories.tsx b/packages/tokens/src/Tokens.stories.tsx index 39fc90d..e704287 100644 --- a/packages/tokens/src/Tokens.stories.tsx +++ b/packages/tokens/src/Tokens.stories.tsx @@ -5,7 +5,7 @@ import { color } from './colors'; import { fontSize, fontWeight, lineHeight } from './fonts'; const meta = { - title: 'Tokens', + title: 'Components/Tokens', } satisfies Meta; export default meta; diff --git a/packages/tooltip/src/Tooltip.stories.tsx b/packages/tooltip/src/Tooltip.stories.tsx index f4a997f..1423acb 100644 --- a/packages/tooltip/src/Tooltip.stories.tsx +++ b/packages/tooltip/src/Tooltip.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryFn } from '@storybook/react'; import { Tooltip, type TooltipProps } from './Tooltip'; export default { - title: 'Tooltip', + title: 'Components/Tooltip', component: Tooltip, argTypes: { tooltipContent: { control: 'text', description: '툴팁에 표시될 내용' }, diff --git a/packages/typography/src/Typography.stories.tsx b/packages/typography/src/Typography.stories.tsx index a331c40..ac5d69f 100644 --- a/packages/typography/src/Typography.stories.tsx +++ b/packages/typography/src/Typography.stories.tsx @@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Typography } from './Typography'; const meta = { - title: 'Typography', + title: 'Components/Typography', component: Typography, parameters: { layout: 'centered', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 086c071..bd65054 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,8 +43,8 @@ catalogs: specifier: ^5.34.1 version: 5.39.2 storybook: - specifier: ^8.4.5 - version: 8.4.6 + specifier: ^8.4.7 + version: 8.4.7 tsup: specifier: ^8.3.5 version: 8.3.5 @@ -80,33 +80,48 @@ importers: '@commitlint/types': specifier: ^19.5.0 version: 19.5.0 + '@storybook/addon-docs': + specifier: ^8.4.7 + version: 8.4.7(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) + '@storybook/manager-api': + specifier: ^8.4.7 + version: 8.4.7(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/theming': + specifier: ^8.4.7 + version: 8.4.7(storybook@8.4.7(prettier@2.8.8)) '@tsconfig/strictest': specifier: ^2.0.5 version: 2.0.5 '@types/node': specifier: ^22.8.1 version: 22.10.1 + '@types/react': + specifier: ^18.3.12 + version: 18.3.13 + '@types/react-dom': + specifier: ^18.3.1 + version: 18.3.1 '@typescript-eslint/parser': specifier: ^8.19.0 version: 8.19.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) @@ -139,7 +154,7 @@ importers: version: 13.0.0 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -157,25 +172,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: 'catalog:' version: 6.6.3 @@ -193,7 +208,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -215,25 +230,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -254,7 +269,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -285,25 +300,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -321,7 +336,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -343,25 +358,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -382,7 +397,7 @@ importers: version: 13.0.0 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -410,25 +425,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -449,7 +464,7 @@ importers: version: 13.0.0 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -474,25 +489,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -513,7 +528,7 @@ importers: version: 13.0.0 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -535,25 +550,25 @@ importers: version: link:../typography '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -571,7 +586,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -599,25 +614,25 @@ importers: version: link:../card '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: 'catalog:' version: 6.6.3 @@ -635,7 +650,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -650,25 +665,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: 'catalog:' version: 6.6.3 @@ -686,7 +701,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) svgo: specifier: ^3.3.2 version: 3.3.2 @@ -704,25 +719,25 @@ importers: devDependencies: '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -746,7 +761,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -817,25 +832,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -853,7 +868,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -878,25 +893,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -917,7 +932,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -938,13 +953,13 @@ importers: version: link:../typography '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@types/react': specifier: ^18.3.12 version: 18.3.13 @@ -953,7 +968,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -984,25 +999,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -1020,7 +1035,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -1048,25 +1063,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) '@storybook/react-vite': specifier: 'catalog:' - version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) + version: 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@storybook/test': specifier: 'catalog:' - version: 8.4.6(storybook@8.4.6(prettier@2.8.8)) + version: 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -1084,7 +1099,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.4.6(prettier@2.8.8) + version: 8.4.7(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) @@ -2053,6 +2068,11 @@ packages: peerDependencies: storybook: ^8.4.6 + '@storybook/addon-docs@8.4.7': + resolution: {integrity: sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==} + peerDependencies: + storybook: ^8.4.7 + '@storybook/addon-essentials@8.4.6': resolution: {integrity: sha512-TbFqyvWFUKw8LBpVcZuGQydzVB/3kSuHxDHi+Wj3Qas3cxBl7+w4/HjwomT2D2Tni1dZ1uPDOsAtNLmwp1POsg==} peerDependencies: @@ -2109,6 +2129,18 @@ packages: react-dom: optional: true + '@storybook/blocks@8.4.7': + resolution: {integrity: sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==} + 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 + storybook: ^8.4.7 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@storybook/builder-vite@8.4.6': resolution: {integrity: sha512-PyJsaEPyuRFFEplpNUi+nbuJd7d1DC2dAZjpsaHTXyqg5iPIbkIgsbCJLUDeIXnUDqM/utjmMpN0sQKJuhIc6w==} peerDependencies: @@ -2120,8 +2152,8 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.6': - resolution: {integrity: sha512-WeojVtHy0/t50tzw/15S+DLzKsj8BN9yWdo3vJMvm+nflLFvfq1XvD9WGOWeaFp8E/o3AP+4HprXG0r42KEJtA==} + '@storybook/core@8.4.7': + resolution: {integrity: sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -2133,6 +2165,11 @@ packages: peerDependencies: storybook: ^8.4.6 + '@storybook/csf-plugin@8.4.7': + resolution: {integrity: sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==} + peerDependencies: + storybook: ^8.4.7 + '@storybook/csf@0.1.12': resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} @@ -2156,6 +2193,11 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/manager-api@8.4.7': + resolution: {integrity: sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/preview-api@8.4.6': resolution: {integrity: sha512-LbD+lR1FGvWaJBXteVx5xdgs1x1D7tyidBg2CsW2ex+cP0iJ176JgjPfutZxlWOfQnhfRYNnJ3WKoCIfxFOTKA==} peerDependencies: @@ -2168,6 +2210,13 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^8.4.6 + '@storybook/react-dom-shim@8.4.7': + resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} + 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 + storybook: ^8.4.7 + '@storybook/react-vite@8.4.6': resolution: {integrity: sha512-bVoYj3uJRz0SknK2qN3vBVSoEXsvyARQLuHjP9eX0lWBd9XSxZinmVbexPdD0OeJYcJIdmbli2/Gw7/hu5CjFA==} engines: {node: '>=18.0.0'} @@ -2202,6 +2251,11 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/theming@8.4.7': + resolution: {integrity: sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -4046,8 +4100,8 @@ packages: std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} - storybook@8.4.6: - resolution: {integrity: sha512-J6juZSZT2u3PUW0QZYZZYxBq6zU5O0OrkSgkMXGMg/QrS9to9IHmt4FjEMEyACRbXo8POcB/fSXa3VpGe7bv3g==} + storybook@8.4.7: + resolution: {integrity: sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -5321,125 +5375,148 @@ snapshots: ignore: 5.3.2 p-map: 4.0.0 - '@storybook/addon-actions@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-actions@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-backgrounds@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-controls@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-docs@8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.13)(react@18.3.1) - '@storybook/blocks': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) - '@storybook/csf-plugin': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/react-dom-shim': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) + '@storybook/blocks': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) + '@storybook/csf-plugin': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8))': - dependencies: - '@storybook/addon-actions': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-backgrounds': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-controls': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-docs': 8.4.6(@types/react@18.3.13)(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-highlight': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-measure': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-outline': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-toolbars': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/addon-viewport': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - storybook: 8.4.6(prettier@2.8.8) + '@storybook/addon-docs@8.4.7(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@18.3.13)(react@18.3.1) + '@storybook/blocks': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) + '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-essentials@8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8))': + dependencies: + '@storybook/addon-actions': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-backgrounds': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-controls': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-docs': 8.4.6(@types/react@18.3.13)(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-highlight': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-measure': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-outline': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-toolbars': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/addon-viewport': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + storybook: 8.4.7(prettier@2.8.8) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-highlight@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/addon-interactions@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-interactions@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/test': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/instrumenter': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/test': 8.4.6(storybook@8.4.7(prettier@2.8.8)) polished: 4.3.1 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-links@8.4.6(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-links@8.4.6(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-measure@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-outline@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-toolbars@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/addon-viewport@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/addon-viewport@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/blocks@8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))': + '@storybook/blocks@8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.12 '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.6(storybook@8.4.6(prettier@2.8.8))(vite@5.4.11(@types/node@22.10.1))': + '@storybook/blocks@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))': dependencies: - '@storybook/csf-plugin': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.4.7(prettier@2.8.8) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/builder-vite@8.4.6(storybook@8.4.7(prettier@2.8.8))(vite@5.4.11(@types/node@22.10.1))': + dependencies: + '@storybook/csf-plugin': 8.4.6(storybook@8.4.7(prettier@2.8.8)) browser-assert: 1.2.1 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) ts-dedent: 2.2.0 vite: 5.4.11(@types/node@22.10.1) - '@storybook/components@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/components@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/core@8.4.6(prettier@2.8.8)': + '@storybook/core@8.4.7(prettier@2.8.8)': dependencies: '@storybook/csf': 0.1.12 better-opn: 3.0.2 @@ -5459,9 +5536,14 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/csf-plugin@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) + unplugin: 1.16.0 + + '@storybook/csf-plugin@8.4.7(storybook@8.4.7(prettier@2.8.8))': + dependencies: + storybook: 8.4.7(prettier@2.8.8) unplugin: 1.16.0 '@storybook/csf@0.1.12': @@ -5475,39 +5557,49 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/instrumenter@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.8 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) + + '@storybook/manager-api@8.4.6(storybook@8.4.7(prettier@2.8.8))': + dependencies: + storybook: 8.4.7(prettier@2.8.8) - '@storybook/manager-api@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/manager-api@8.4.7(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/preview-api@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/preview-api@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/react-dom-shim@8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))': + '@storybook/react-dom-shim@8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) - '@storybook/react-vite@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1))': + '@storybook/react-dom-shim@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.4.7(prettier@2.8.8) + + '@storybook/react-vite@8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)) '@rollup/pluginutils': 5.1.3(rollup@4.28.0) - '@storybook/builder-vite': 8.4.6(storybook@8.4.6(prettier@2.8.8))(vite@5.4.11(@types/node@22.10.1)) - '@storybook/react': 8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2) + '@storybook/builder-vite': 8.4.6(storybook@8.4.7(prettier@2.8.8))(vite@5.4.11(@types/node@22.10.1)) + '@storybook/react': 8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2) find-up: 5.0.0 magic-string: 0.30.14 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) tsconfig-paths: 4.2.0 vite: 5.4.11(@types/node@22.10.1) transitivePeerDependencies: @@ -5516,36 +5608,40 @@ snapshots: - supports-color - typescript - '@storybook/react@8.4.6(@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8))(typescript@5.7.2)': + '@storybook/react@8.4.6(@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8))(typescript@5.7.2)': dependencies: - '@storybook/components': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/components': 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/preview-api': 8.4.6(storybook@8.4.6(prettier@2.8.8)) - '@storybook/react-dom-shim': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.6(prettier@2.8.8)) - '@storybook/theming': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/manager-api': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/preview-api': 8.4.6(storybook@8.4.7(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@2.8.8)) + '@storybook/theming': 8.4.6(storybook@8.4.7(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) optionalDependencies: - '@storybook/test': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/test': 8.4.6(storybook@8.4.7(prettier@2.8.8)) typescript: 5.7.2 - '@storybook/test@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/test@8.4.6(storybook@8.4.7(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.6(storybook@8.4.6(prettier@2.8.8)) + '@storybook/instrumenter': 8.4.6(storybook@8.4.7(prettier@2.8.8)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) + + '@storybook/theming@8.4.6(storybook@8.4.7(prettier@2.8.8))': + dependencies: + storybook: 8.4.7(prettier@2.8.8) - '@storybook/theming@8.4.6(storybook@8.4.6(prettier@2.8.8))': + '@storybook/theming@8.4.7(storybook@8.4.7(prettier@2.8.8))': dependencies: - storybook: 8.4.6(prettier@2.8.8) + storybook: 8.4.7(prettier@2.8.8) '@testing-library/dom@10.4.0': dependencies: @@ -7452,9 +7548,9 @@ snapshots: std-env@3.8.0: {} - storybook@8.4.6(prettier@2.8.8): + storybook@8.4.7(prettier@2.8.8): dependencies: - '@storybook/core': 8.4.6(prettier@2.8.8) + '@storybook/core': 8.4.7(prettier@2.8.8) optionalDependencies: prettier: 2.8.8 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 94fbdf4..09c573a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,7 +15,7 @@ catalog: '@vitest/coverage-v8': ^2.1.8 happy-dom: ^15.7.4 knip: ^5.34.1 - storybook: ^8.4.5 + storybook: ^8.4.7 tsup: ^8.3.5 typescript: ^5.6.3 vitest: ^2.1.8 diff --git a/public/assets/favicon.ico b/public/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2b2b584417fa35e09ae5566ad109469d25a9db60 GIT binary patch literal 1150 zcmbW1-%HbB6vm$y`U7^=t$`#aL?R?qmqyf0brTuk$569A}ewtFIGiKJQrp0N^FW&+O+avZBe;r zBB-tEIb64$HeA=V+ah@8ZnQhn?h4;;H(IM(6K{lh<+a|Yb>*zr7h*$rueKChO|N~Y z*nD0R55G8$CBWNBaJmHE&4E)HF#FN5qJ69RxC-9OgSCdEY4?Ts{8Y@>9j`^fo>Sn+ z4e;ERCg-(A?||_|uy+8wcpWUfc6=|*2VwVH5DN#6LnGkuC2)KeJgfNfO>po6*mnlJ zHL3M9cvZR5TgSRIpTtqme;wmRy%z&#*1%XAOss$tam6XH`onRt0zOy<_y0J4miDW# zxw6@?`+X^FrhLEVm3eHv?g=}y)%4nLiftxa%~kM@yjRw5Q2Sla?dB?YN9J=Y?N8;) x!ryOIai?`n`zxfine4RgZ@qgc%r9Rz=$AjU`DH$vSJtnuYubkJ{{#QK{sV{1s}2AF literal 0 HcmV?d00001 diff --git a/public/assets/sipe_brand_logo.png b/public/assets/sipe_brand_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f96db87dbac2ba26f6c0e4cafcb8c8b20aa0b1 GIT binary patch literal 94889 zcmY(KWl&sQu&!|uG`K^8JHeeH3GM`Uw*bLi26qW=!QI{69fCthaEIVBz%cvpovK^+ z-m10z$EsRg-RteAdq=7$Nn@gsqQSwzVam!#e1(HUeE)jC`3B|njHTZy_CbRAGvvpw4@g#@6hFbi)yJblO_1T>oyBA&KB;@cpS^6( zT56?IhKZiiSS{jV{IYw`_uiP+AK#gQk@aaH0Jo17O$N?D@svG|AR#&7k9#}-pZJ6* zQVo9p`e7v1-0^okr2-{syrUMtS*{!tg2l$ zYNP(ro>o_QB;9o%j>78iH%@hW@5K&@*^k$h{QMCR(vGv$H&UB@RjI7$I~MbR>07J zowc{ES>gQZ!JGF*l|173ea!qWc6Q{kaaD1Q#bG=CL{~!iip~n7MIyt5mh{N}Dy6Xy z%VelBq4aShA|=dGfSZF|X(AUK@c&LE@6Eh04DY3z2<{NT19keFII$82!!(R2(8<9@ z{U5JN|6NRvXf;xaDt8iMO`OOLIn}s^;Bn6mM$U1~pJzI>RR3#VOq$mFV=jieJO-NTj)gFibu+=my2d#l1aS5$mTD6{?=ae%XUy%sF2t z-8mHHzOPx{Y(s6YDPIXp^jI7)o4U!hI}uFjsn@%Jb+@@k9dtwamu`{@5$$TTSD1f- zeP7yi9-ce-vG>A-mfa4NnsJ)%&0e}AdmPTbK0xl^_;1D)y+(_U`K5}Xh>9C!DU_ql?B@EAJ?qEda!Sh*pZ!f*>z4Vu z^S+V|quyJ1u`K*q`F!I~q=#C~kKR={gX||NiQ19`x6 zmZwO7p@nE9ENI0qy_~KEf2-aeK+2rgEZ>L z1Iv%73h8*b6><~Cf?s)ICZwS{=RK00+^IFP=bQFhZt#mFP+%FZwnJpUjJL^s&AjD z?|;V~eBp-X&3xhZm(OD4Sw+!X>*;parzR`L=|uk?hYmjq^qofx9aC45 zoOn|{{=GL(2^&5jNYN>)W8ssU;8>ztZRO6JuR%U?4>HUOo7;C>(!#KVE8Q@Snm#1x zxXroWPCN1C(d9TMQi@)vXHDpBR#yx$6QI2#!T0Pp8o`~9R@OdCY<`HJKkfRy5nyYII0Y?#VRS-jINEj6aZ6Q!{5{u=HcI?cTvcGt4^%U6@1=s z0VqYuhvzr0ux?qqghC4;P7~Vo5zsLp(AU8TFq%%8%enMUe=fZjMI-LAZ+(NP zX7lc5r>qRr$9*2twbcupMhAdM>rDF`XgHguokNRAL@d^`F5b#)8}MvImJF>*lDf4t zYDk6lUR0g@Ba8A{T(7r_TW&4Kjo_;>-V|P~>L@9Hv5$Uz~Yx658 z6I)#8U^9tKoOiVq0x~`&KS#EZGluUOet4^^!7jD$CelH(MBKUC>#F2fuX>&``_Ph{ zVsB>tc`?mf-K<|}>-%7xW%Zea_U=`l#|v!UX?+>j`mxxjO#~k-Yn5381^HRcDPEWw zaS$-oEdlo~Te(j*(Lj)vI6|wYoRps!=bK7x$$p;{)Ze*1Zc#dwidI2jB5(fn*{7?ASzg9)p9afIbBt_hV%d-#QS>GpSfS^HDV zI-c$N&*t5_Bpq(pP*oEuDxsc-DnS}8m~wCHo5u^+(k4zLoW#H4>uBkmejC(Mdv_nt zS1JvD6VSujj@*vB3{{Sx4VX!$cC29zhSr!E#bpaP-2 zEoaZf&ZKN`NLvX_?vI3bl55|#Li*v(v_D+NB4+E<4Xf$1bg-NQj*l)E!xsAwF3+2P z2Vb=tNs*(NotD4H@uEdM3j619q@0yM%NDvx?(Emp*?4{5`+%J4#3$S3y3*c(jT1;M zJXX2ZC3fDLgQ}(sYHe(A-7KRO6}!+sz!}v@l}mq~NPhC$D3|pGt90vb6e(-}8!XpQ z1l5QF=(2e;`;H6l3Hs2-cDA)@B}`Vt@psGOKjTQ0?AVp&Q0y?brG2F$zihl1glYB0TD^Y_=Agc- z{1e`CmETp`$J$esr4LyZCIU6mLnRJ}H_o(5{W(r8E<-#s@#|5}vJ{xglKDT-5oqez zlre;zHiVaNE?BX~9_`F@sKi^TAaNh6J!>Gf>#3Qh1~>7blRx{4{osDD8BeS$yN+=} zx*o#N8dEzhT^`zb6?Vu&7~qt0owD{oDfSol$cI&IwA8oAZN5vV`^a@9|E?!>LN(`c zkSV-Zh>6UQ-OYB*Pk%SCb|%8l(MgK^Shl$Erhb+C;(WK)a8mCQ?+L6=H{wy4|C zFF9DgN>p0LR9I4=w&?4wmR4=77^rA=i>xMfDjYL3_tNXtj19Ax80n!@f2#XDYpw`SUjPfs{oG~F+OW*UE5ZuHRrshp3vmeck*Ct5qGf~X`4f7zXU z$zr>sclo7rb~F-(;bl?!djcG8x?ssp4rWpK4rK${p{%E;2|0U@V~0M_LXnQaAI`E` z56QFKK{574f;0T-u=@3ChwY!Q>cxYId9&P%c<^u9<*o|0>76)18sV=;HsUv`@OD8Y zq}jsDZq{ZLkc*VFUJPYRdlxcKV?aUN_Xn?bxZ|i4z zKk+qs5=4_MsQ}L}Gi<->K6j=G*#vO09j;7HKcsa&qyd{oFoRtidDwI7_^jDofQyI1 zvUxh07w<^j*tD}{dz49|+`h9Z^L3Ctp?~XF4}mzIJbU>-4VQ|G;aN6Np<0r3!)4J% z3LXl_&%cOW=+(9NvY&TA9K2p3ef85T>q-i9I;X!~O!2A>#d+??t2qJy>NLAQ-2Fh_ za4{P`Gz~3AU3U;X(TE3W4FiO}>p}IPD&*@mS`(+szb84X{Qgkt#U)^T zmGKg9Ql9YHww>rCPV@TbEeKw?bU4of3gfqdBevJH(l7M*o0AyIEE6o=Q||3WGHQ9a zIPt%2qX6WhU~y>tq#o4c(5w(J8J;1fE5G@?8TnrPkKuTUp>YRUuhrg!KlkN?;efY>G5_MMGTw+B8Mka!oSN%DpsgB z+{lF`0Tb@4DDd_$X6Rd<<|7S|V$@GMeKCS+1 zf8I!r5JQZ5D%*$eWixMS4vJ3~l1L!6Vd3vYFz1g7CmkDNR<=LbJFJ~VK>Pm^y};~6 zc*l*JOZj_&RhxnyR`OQ#k-hF13E{Z@Q9o0f+gwtTGw#Zc8eUL)} zGY5sFG2#_Al=;RLT}&)7-rw<-9;WzWrfU!O@kNucaiu%vVkyw5XyPsywKcp`V5w8`W5 zC!9`GxGJru^d&z^bxa|?Gmp6wBCf~W4WDaOnNg$A_Un!Qf%^Bk3guZswk(W?>odti zGMW@ANs$L#Wl3+!&5Y};g zuH?imK?SoSCHcIg203c)CQ4ZG;rUDXH17Y+ZhK5$Y=ZkQdLtW^-StLTw2)L{DDe(B z9qH@SEew(t|I>tcxq7pZiH`3u#T(V^(3SD2NNdn!4L0L7y?@M*=KkDP6f=N zP{|N^@mCo7Fzo|W|PmP^Q(#455eK@XDPp#Oh;9u`P5x7ENYY~W3@RkW)9||Ce0g(qB z*-A8MWC%06H(4?Zedmv`ZlZ&;HDY^-dJ5xYme)G`m{PV+UT%W-qIgm>?fL_k#crY(MRKSLf-+62#ubhKwS*sgoHjkbl@cp!1n|LpTixVE9>8Jv^QhP ztFXY#*6kN{?-0e0cdJ8}GYbXPhQzOp+H;ZYj@a}pMaeiGmg_rme zpnFjs8V<8!NeL5$+B&wP4*8-2A5UiAprpDZ0m#p}0yP_uj%@7Wopwczr_xrcoluX| z$Tm#7Oy7G{1!_ z7{6KWfPMDUd;dGN^f^J<_FdVO2e04V7OjSYd{kv8pmuFindXhSUN?{9N=odMIC064%0?rbq0&;bY`?9Am>^Xt+AWa@BW!f=919c( zOkhMUFF-Ct)U|oM>u46N6rClb-eMYFEZ*0rT*!$dMXS%+)u|7uQjndXwREOJ2OviN z7vz_hqN_&#i)f{bmmd56h6Wp!h=>&fRyY&i8hjcJaqBuCuaUrYRtQO7mtWqQ`B`C~_K9ChAvCH8n6 z8!0mW7r*4}$HbM=l`0f@QpJ4ZZesp0^_wvQ!tgz!3Uym114)ipv_w9QKz2B;#WxH{ z_=YzJjl>3TQQmw=uvF6>4YWw&>NxIp;boGldoP;2TU9EeV0acmOca}mmQVN>m!T96 zbYLd+v1^X51s;rO4eC#!b6_Q0jxh8a;xCn1BI36KwPbq`9xeUw{nYG)`TK z6JJfmg#l$+`vpr8NN^pLoacfx8|Kn6wqvcBwWz;;J{HCPp?`DI68OnX^h2SEy??NO z4k{Re1&jVtVCGf@Oz%(ZlO)J{yS|32%1(5C!$P!wco3??MZg~cD7^&)8f;oU8($=P z`_RPvT9)`VM9=`=?zgsF@=Qog1&N$}{8N^?{qkMRx0c$ezR7i$sw z?6+JdslsL7EcFUlb5Z z=??m~!W^T}AtJRShn$V+9oAPb*G9b7Ge~7pr6N-n@aA{w?~6V|FVoM)4Bc_~V=w=V zY+R;bYHvN=v!&!>f;lgK60vkK4!FNedb{bR^xTc9{_P+(O2x-HPl55Qst1rgJ~BfF z*Vtdy=Qw&IkI?RMW;p($6|P59V;_oN&GMwIW5L>6GqKrNV9)E&KW0^#^P79L9&S)8 zA)$9ng-ifGkUXZeEAHu0HKxQK=@kk^gDHMIr^iQ!DPB@t4~E=-i;&o4fw__CQqaU{ z@Ej11D5mJi=+HaYiIye|9wk!n1h&}^vyk8cLPQp!cBsIy0~!pq1xui-+4%H)C!{O% zwIGrM1zM04&)An+tMa#vT8ZajB#&5%Va1TtLmR4MU^hNrNQkcQ_oY!w7Coj0kUP*T ziU1h8<{h#CyUj;vJ7p|(v40PFK1{Rn*PQpk?#Yzr9|cMdC*iM@Yo~#|n(A7aP^q7a zx7eO}th;3wblNNT&u7pfuf`z>@30eJ}2g~}8}squ3cTCv^RmPbh3l3cBM6!UmJ zfI9NMDZ2CuyC3wu4l4P%@5Py2bcx#ULx1yrV#=?$A&>%&5D{aD&X^EG?jHl13BE^ z8t$LNpqG46Z8;5QgSmYw>}t_9aX|nIoX}tz;T5#%(v1INLpIKOHP))(*IYGsl(&Ej z_PEh?f#6%Hz%J z+{?75&AIcMKc6R>#%rz$x7rWr3Lu&f{7D>kP5z$^Xq=l_U7!C9_5RxewQ>+!s9=zD z8f;D!QGdE}z}#&_R)u-b?vYyjqWn)i1_7KHL%k*(@6DQJ^Ro=rc5?qoib=ZUX zR05778=^jCww*O>tf1qK4c1)z*#?uCsd{+kElV;vL8ENa!S6CYG%>|C7^;csj23tn z=;eY;h=*DjdS4j@J00s{13pPmI{T!fmE>_>*Gp+Up8B+2Z2g>vSntSBr0q*5i{lM( zx$E_ul}lJb}crDz|;$rH#AS=uxNezk&Z1{ z0-kDKtK5hV3vSk53cqj3aZt+VvcD8XM1`$*-t~=V87;q=4Ug+cbxla&<3D$9(zi0j zZ`zLux4^kUK2cN#o{1f5KPa3pMWC){;;Upj>u7dx3*Z zSAP@<(v>zk8cQkTGEC4@GZD$r?Y6=U}wA-GmHU z+JK7@hU4!RW+eWg$HT)-E1Gn%m1}mA)$txui?$vRYg)p}nIbC;p)#N53IZCUPIZ@0 zyZ9*!`i7F#G+}m5>Pd|2w-FuWeion z@MbQLl4eb=Wh(-=xE3|!_wY*%jgd7-E|-v@e8*rOV6uAMI)*k{8;jE*M& zm`7@^u-=Q&ot5=r;BYdEFyx^m-i?4TzOR@6<-(>*Z;rExlMyf4Z>fg+#}^?y20S1+ zt62Cf&2<79ki#}RFtIITI}w0Vtb$*?ja9T0D*~A0$IJybRNJacUA{V}z8lacNS-rI zeru0Mj@e{}2S@xqCf0621@qqIy{jcgm1l##YEPgBe8zNie!xJJ+(^9pK{pG71=`*Y zYcYnk?wsp>@Z>pZLY;b52S__4n3+R%Co184S@m{kauKgwDRlMQH8g-C8u^39@j+Bl zv}4`x5^eIhWrwLbWwPn75CSaUfL+6>MtQATX;yW91aDG-2^_EK_hB@#>8`&PS0fk5 z*L6H{2UC;_ZdUwpnOt*? zy4}_~+Xel0&qJ=Jm(5B^%?#Jq$7HJ1s^%+h`cJNC{B>WNyzPx*8Kr7+W88z z+NEx#wl-!=_DjS8uNp<{CWIzONYldn09{z)$(p=&&M4UlPC}jv9XcW? zL^XPAC-fdxdcnHz40FC@d*h%`|Hs^6t@uaG&VFt*rXaoH1*%%qwNn2H_0N5NOtm@s z0(H&cQOx@4Xrx~@I8^d1RkKYv0?Q5?+U2CP-$3K%dn~Kzz2s%_qgfMlXYcUC2Bo!V)+TUn|)RU+~ zMm{P8+kVYFqbc_Vc939dsabJTRY#OF%zplrJ4O$9AT%H)o}mQ^2qjY50u9@cbofD6 ztp4gdziUmFO;svDhjj)v`0ev6I}>NgL^*is+H7gl73d#J%y=1Rq(v_xApx4}A<@uFLHKM~;Q$zHF_D?{gIFil}5i(we+>tmGTVJ6YI|M}~uL?-5J=ZBM z;nTq|DKtV14`^t4ORV)}p1y&pS3a#fza1I&(T)I&et-YqSaQ7PEWYgE108>!?CcX$lOvb>B z5G5t(GKr9%{*^d0@hMMMxUu?t(F7sF@d6dXszNdtL8dw z06UGK<=Wy}&XOmHkdX_G?kA-tn>B=)ttgfNCnM=pBA~X5*vFgLT~BSCIQnrZbsCEj~P}e*Q~t-waZ-W z59>%zFg^@bm3}0ai&dF|0NCcKrx7wXEE>G;gpczb>ST;Qsy+l;%pBUpSybKc%R#2z ztt;ez74-@H=r0hJ>hk5VYNwZ@&e5o2v611c@3If{>F#ed-Ze(a@MC}gRq!Z2zz*(2 zPMVeCc`>q2+Tx{!jcQDAny&u3>m3FMfq9@0DQ;&+fG;1<^I%r}lPwxUmoo-PQ)tRiaxZZ`C>weG#gp_Nk+xz9D?XW?CLd zZu7=IOozheJYSZ*1vrk;Bnk39_;#b~#x5Tuk58y6CAP%qKVg-AZ<)z(5pR7%nQ8X5 zPBtejwbx=sUe33MU=t^SB`MQ)`iRqU zpe~{d{Br8L)~>|ktjQsJWe|`2(9eD?i9Bc<^3jA8WAvXt3kVZYRN{^a(3|IHU&)(} zF}!Tw7YV=4g(MWNZ=*VDEvJy?FX$$r$@Eb;qN*yed@W3;xHqPJxt2p(RuWAF0nn$@ z496MPmj9w~>9C@m{R8ZZo_1?T3p`(N{JgF)ta$2`tEh%y3lC($;&BatN_(Q-3g90S zOq#6pu6L(b4lV&c2>i1T6znrZ3_?3m{4OI;sg!bZScfW_9p8GfJ+;ud9Z-dx1ssoR z_rh!&M42#h3)HL1s?4j*_mYbXF6SeVe#NYpxS{283Ne0O@mXh-BFa$B-{&|C_+*1$!JhHpu8`cG*3#ZghasQ(Nzh&W2jBb1PdHM_YT*k=I6vTr`^mkCQ=04; zMuLK-_5_Ks0!FRBkF@=$_A910T<>wd4w@MqlQ**~hQXihV>^Z&BSY;p?or&RTm(H4 z7`z6C;qM&@%uCFC6-Es+Cke0ucImqI47|i+Ha|}NST(07QY1vt9PTw&8k~3N>osj7 z{%7?7*HO#z{vP=XG#fx4zD#NXZ5Uzq_-d#DB?`wA%+%3>5kR%PSHF#dhSD`M1WODp zJcdD}Ft^YW)L?4`m1PrD;EBMUsOJR+!^uveJp%;|RwoudLX?8g( z{4W7L+X|y?#0noyC7sT3i^1}D*DvFB4pVjj@8gUA^}C|sM{QWwk|#OB@4Kd* zUKt98aJT>PBmvM83`m#{f=!iR39Q3Sm;3|eB&@!xbAUh~Kut3F4HK889kX}tm>T{z zRu5LVzqP6JGrn;_(dYQsL;N)!Z~wJWGPF$YR-{v*cjRi2P`hgmUo`Kx$eEyT`0{P3 z(3rPgS~Ui)Qi0NK<&Dc-6o1rPJt2g=e-n26>Fa_RGcpThwxbZf3rlHRy-k^VWGAVH zcPOUZj14*3B2^<8KWe0p)nXj{V%fiS{t)UgAq!%(B}aaY+95Ug6;{m%j*IRorcQBA z{J5UJ>+eoQF}1ggenkAz8i8m+bMzCK}am86| zlnkgYQYiEFB?UGv9WVi*R&3CKARPdKT=k!N*YAP~rz;$@12f3!n)Q)8@ij_fjbn0? zmQ;gDev%~2=;#m^MlGpCp#ISPTAx!Mk|{&ZZ4)5mn)ie^tam+^WJKpIIO)rmo(r49f~$l#p5S8Ee+S^Qk2N41!Tqx+lMW8Py#HDQ)F?Yb-7V?{EHB#)eat_3ohf;VK5*-?bq=yRjS> zJTLVg_Z^9x>C#|2TTGSvD`_6ijE>0j&7$btFTc~LPi55wn27z2MjH9=W1p*Pp>&1P zAUq_@1;j2iv2T2C`(Hn#`R(Fn+}3!Htail3tCc^WMO$nt9!Ne@>{g4b@0^y$A@cdv zh$IdSlqWw%iEu=@F-i$B2)>cEWn8e9Ml~l51O;_FqgrM9`osI7jbMTlVA*q}_$_5O zHFxDA${rfvk^|zd4`DJlVP+OpRbtlb1HskS?X^^{J~McvXSSCTR& z#)kM8BR0z2)oXMpn;$N^AVqeYW6^_Rli-G&LMEaLO~)#$l-CY~?#G;NOc&3tIL$vs zAZG|@Cv@vUUjf|OWPukNOy1|mJ+(LMdjBnAi|rFVyVBS~THFk(zq?1q`1)>8WGm?t zRS>W>JQ2JX+klMAeeo75jWP^AX~ug3X>q(;(JtJf`dr)d;)H-_0Qek%EBA+^CT`Rq zR=*S4UrTsnxm<_4={bg|=0a3r)czA>lE(9LoH!F#B}f8MW9D3>B(WJL*&HPe=#CK& zII6X6j_Rgc0{fu6@uRjv3Da>k zXmtz?64@1-HzwUKCM3RUIn@8xjynBkf%T^|D5W^4i}Jb;cV*wi@1}YHsmw@ui%J+W z>&(9e3Su8Zx)5cDb#H@$#6ETNQ(}Z`w$HsHEz17*6!O197W`YeXS7mk-&cN0TnX;SO{VqC&WSq=pU2%|q0O>(X7X&KX zn4OK=Zxja)JvgvSKy>4vF2kSk@o5=8cRa8cBv?{(vX;tKE~buX{M53!>ax{4%2BgZ zupd1;?+6_A$;mfzeAE|~PpUhGEL!r60FaB#6W#SVc!TgLv*`$T-Y-tsy1_fNp*j2w2O?;o^63Vq7N}^1V z?4gj%22U_l%e$pERtrom#cLxsi0MQEPPVncTzVlR=*$AS57Aif2L2lnV`;O|LbW zjBiBZz7|c2fNQRYCuN>7q_{i$MyYj7`NNh3H0skk3@WKga_Ojwl76m+l)zLz>px)& zwY3y`dMV-zZ+K$t@UEPXvi$BZm4%QWC>Qe<^{(k)wKLb4+G5!ufnvei#?x4d_KLxl}o*{P^VnIU#{*u;Fw?NQ`~sAr@0JjVTFfvu2YMs6y3 zZEYe0rl3~%2&jw5+@s6AR}SOp@yDy-cLl9^p6d9Xap<-YPZo{I!5vJu<5(~=)<-9) zgkzGXDEKXb)wj?j4i=cK)l^#J!S3v&JPbR2-N#Y(FfHn4J3bKn3J~fDr_f>bX5fzk z%}YR}*$-u=({kX;iq8V@?xj~S)7-xIj*!Zf?oJh8f=cJ!SrGotkvsV1U<+KZSvj!I zjIQ}9pE)h4wIN({Y#O1wEXUQ|dvkd?<&W-0 zirgsa+GN$bbg>Ud$jWHJQ+2vH>aClhPAQ{eykNHI9etDK(D%B?6O{0Oq|5_TTwDd2Hs7_)8ufMh~XY}LrgAdr&hv2fsdrG)ZFa#Ti!TYCd zlxIjV1Fv6R*?PJfJ%I`soO-U6Y${T^77Cjvgsygb1ulDw;}^9*SC&uKYu{fJ&bP#1 z59tU80w3ELKSzMyz|^eX;;ulW3twV4hv>4kGG|7)Dp#H%rF^vwuUq0TGSc)D2!otm z+Ux=);x8@UHA`*rIBkO0j_zof7Bu`%@YXBw96uC@1nN^nKfP@ZeoaVf8on*R1g`5j zh)nW!1DVEK*pQ&baorH}E zXq$-Nav;^Zc851AhnwAY*{^LubcC^c%ofXItom^{RlTJ3@&}k%Y?c0e-`ofu=-9ZN zwGtqQqQJlVlR8q_=?r?0c8Cv)w|_a&vG4bW*IHS6YzPC$U4j|4HD1#9T{rY00weUb zc@9Qo1Z8TwHX*;UU>XRF4*Q#tU@771)b+Z*(~wrOOOE(|!L#}?&sc9T`zxOz;TnQD zc$|}MTanPCHBdRpAL;MZ%bnyX!Kz1OV){^54wqb>@CEjcUwU4zW?WP(xv^oIP4F(- z$!&6^6@rb%?<_~N_h(&hzF@H*izI^Ej^bxQhH*8O0S9RLT{S&h*fJO)+1xHwp6~vn z+3Zi7F`aT;U#>w{7nnfBVJ9s72z;Fv-TkE-_ptlFg75E#Cbec)B(KSn8|NqZv+C9> zjH1#}_$zSt8!{g)q(mkc8V0#u?TjEh{da+=>Xuu3ddwj@6^y-$2sRN_|7t~KmH3g^ z>^h;TtswE5=?O`Kd)o^2r(hp6;#8N&#bG~QoX=~_;zK%FEU3$Yf~V2li;q78m|M%Y zu5Ei8kPE&}RFikjDvUB;=MUv6j`Yx?7ml8Mln8c-kyGDPs6p+X6Xfmc&?hQ;jJ>oxSTtoOrAsmO_TY{F!?h_WAAudyZ_s6I!+h9=B}7~G8^Bz zv86$~z4%Syg?uEwuC3#FIwY+xWMz*6TmwpX;K5 z7>M1IJjJIcg{F|SE^n2OJDN_U{k2}{x2^P@riq(CdRvnho%^(`W}qm@Q4&3}6H!PucE)QVP= z0&C3k2x@>o7^GH|(8U-yPEMmNRr6ueG=Z0{>PCuG&h@LDIa>(dNNuUYoi6tL2>d+G zQ5CV9?Rt{Gsw~gMa6qjhCS4h3>D7C*@$Qyrwuth7Ql;JdD}KEde8!Bok`z6iO&nj! zeq&c${uq(>olA2eD4+Hr6&3gT=S0|waE7}U5X{09qkq|sI+R{81OIntFGrcHmH9-LBjxKMp>`dD(F$Y~i(f zo6@8y#^x}`i5HOTbF*ge>4>cpnF&9mzqKY&(WDY@-x7wz&$lC2_O@?L zA*K3Fy3R1BO*wRbo?WSH6*QipNSKZ;zA)nZ9s@{~z6o1KygQmsF-m)#ttD8^n@p4Ajh2kb zxtc_OV?ts79Z(WmqFvyP^T~F}Dg8!+GW~Bqs6ikFrO>!&f$Vi}Th#ZYIB znPqL;Uxu1n9;2@f$0tK^1;rY3Iulw8V_$Ouj+Vn-At(*x*z=AQlH%bgYXrUqL$WOl zc4zjum8RKYlTfKGrLG^|63}O}EfASJ0YznA=^aP{;5WAvX3AFD+SE{b3q!AeWR)B2 z2)z}J1;d`4$R4;4e90Ho>JYALH*_qw_IFj^Cm31C#Cc^6S+?-!7xaesK-C z-rCTPmkGxfo#~}6=OvEqJ6nBSa7@Kc>D208eN`ZC^2l2Po^xgdY3yAla?eA6M&+{d zR_|2tQK6j;lOu#3>hXOyv8UzrU#GP>_UD{2&n4tY_#LVN^Z?lT?rX~+74C@pW&CSi zf(dks4TI#+8S9S=Hj~5i`=t{y#I7aRQ#Rhz)K5^y;{ozHn*rUA>^c3e8~+syTT^>C z34%SOb};lCq9d_Tmg#(iQ1I`|d2Y1vF)f8}JSMkPiD=_-WxgA(OOdI?-7QUbKF`e2}J{Z-cGlEXg)HyYra&g|(|z28Yf^Q`#5WX@{XNA5r;!_fent+5x0yJ)NtxmP zJOm@AtSDHDAL$3xG$|+ZJ{eVf4OSJ11mlXixeoTmf$tW(e(6a$P}aP3brGDN%E7QV zbPi4^jFkbF)aq@j)f2$AUHJ(3!GTQXw0H{^v|BH(I<$G(%=}N*Y<@DnB@~8)Z-Ef! z&O2w^wv24ID{h^kd}j`R*t6C`MyNx;nKud4o2Z!wUg#*gnX0eioWhzPjhT|0~{RW+>_sLoTI!WOr-O$e`kZ$jx(Ex z?L(YZ`?N-ls|D{}bbnFlE=lBD^2;@pd~Gy6S|yvvax*7yOf@x+>~VfP5qghSnTl=p zekf)fdaDj{EkeT!wYm;$yxS|+dAWSPxvM5a{WJVScHd#xiFyD!xmDrve@HqDhPIlv3FGb##VHQOi@Q4% zcXuyPoKW1QxVuAfE$*%b3beSp6CfmCp7;9+IeW5uc4n@*)pKlv?4DtV;BQz4j)~fV zcFC6SMh67re`Mtp`bdtf(WidF_EiZZHKH>ROm5ynGkk@}0YFB6K2vs_YpgG$fGJJA z!G^$AzAnW-RqCf4i!0EpJ(EjCgtTn}Kc*ZY6^n0=`kV)E$opg}%^WE&ZWbL8txqA~ zEbViJ1?N>S;?F6?O`+2{|8o)rDn!V{*>8(#;Ipb|ktFfM-)`tqIw_n_MfJv|CG~{? zeu9hb%}OAx;G}a~oIen76|^ONf+UgKkOe%1PUqXbWwr zPLDu>#jWqMs1NQ-=5{zh2logw%)iyjzz~Bz`qSF`hV0;nSUAKNa19d-KI3q0=vVoK zBTw?Blpi8nA?HjChjl#U^wGCOSW3uZnDMG-^R`(m-GWp!I~A$)(k6%n9wJVA#>XhJ zi^UI4p9q^l?i8P`(%@cz+X24NEj1)+&5Nn!n7fd!OQ1lkPdkyMZ)a)-l`pQS7UzVk zY^U7StL9z`l;qGJe_^XZo%d}4Wkd}@gfk-+T^EkL%hX(|zr6!xhInocw&@l|=;$OC z)|bgG6q;RX_R2tIWQD{9PH?~G-ZzHMSL#M(fp8pka zV}C$fh{L#(!k_Eht9!fs*nfQjXzaoSw;9X>j6k(u4lIo$*r^YXiJf>si?`RS#;n-c zfsQ))?X|0s^MT%CTYXV>BKei@&3%t(Zr%)9Rv{pRnf%G{_?(*W(z^vO<$p~NI3mib z7ahu&gS|K9b=hPj=(^(*@7FhY; z7g##mkvhw|#@ICU7aS4gQpH<;ll?#l5v%|A8lR|XD|?&Qd`3-tT)KeIBbu=0PHudv`ErmuimWH-4F?H^2Y0>y z=H{RfKY;SGjALsDg=9N*;^b2#l}ml4o6jP8`ljKI@y`q*LQdjXH?h1N%ukp1^j663HpoTlScJLNm!}e3Qda6 zYZdHHL)cQ{f5AMr2*rBwS%2iwmnGELHgo*JoNup^(R9<<7NjF=e5zoh-*^z=D&2Z+ z_)j}}>XQ1aT_GH2X}n@7g5$qZluvz{LZjnLP|nkBLi{nk-2d6`jY>?fG?X>zYish#bj2))GYlYL1_+U z5I(@g+TMj1;j5)`Vsy2^XeRR=QVtUpHK;~6T>MCTg9tAuPRR4V(xZ*FBd|;`{Ui(~ zbj>j0$@hjG$=9s+0%@s^bm^=&mleL_9H*~hE5HQ+)hT_PUd=eyZu+Wd%K?m{R) z>WdM1jI~H30=y^Be3AM!KxBm1;u&wtN!XUTWgvg!d;pZI1RSc9iWCTF_9M-8|;vd+aW{hkP(kRy*EYz zf@0!QwFw&4=rrv7S`qJZcK}$$f9=4|m%^Dk$sAl1<4X{zQ@F4V_4(odAo(SUX+yNs zWoW@#E@hzGP-moIXfi+SO+=Ns5UAd8O68tKbcnTsL zWs!F%mdKo<`WaKA&6bf9PGo5egn3)oo@|JooqpEy`?A?Ndx3y%rc7M3&LBunb1Ige zKWbyZMZJ!L_Q!>1NE>CQp6`+Ij9<#_7cN}UYC0PShephx*-!VEygqxsP%NBB@-q!GPx+(uju7{jb(V^c=$CxvB(i#hCd0H2&plAd~v_nvC zUaq-No(1u7|1K3f3uRS+T%DHREmrvjr83?j%3}0yqwAmX|cmGLiX%=-4XIe8H6Xtz>um zZeHNzl}Z(2c6kCw@A)H|W2XvH=N>m16pv$q_z5*opX>GTgY4YpZmvrp^8cW|OPKTG zT0T|;MxsX$r=A$)j-Zm=aR^)L-JHOl(<@1JyaM*~afzHUQ&dZz1~1v^N9ktD&+_zk zDEo{Ut2oJ%O{EU_`$Ud6GjE6@hTq6!$Yym0uhTuz1*-699N9OMzKsW)PD2w+?0oA5 zB<^zPVY)>u7X+LJaD2MV%(SKzqWOnCi4K?jID~K*7OktBi_mN3gxG=VJuP{Z3yX^^ zKsqaAD3UI9IUnQ=6!wi>ii6UhgC0NpiY-j-+!I$XdUkzk$Herr>cxZQup@yy>N%D1cDFQ?yU<2g+hI=vAsaxYhX4%Xn6E0nXtVF zbz3)@rIfB*mOv;78M1zd1@_6=H~~y?mSM&?rvfY0ps5K8CD0}+=y?tEdbjXlGR`g0 z>du_>oWFn{>RZlD!y4#{XOMP{2{A|2urv2mNGk9}Iikl5Y7nYU{_q|hb~Blvga}8w ztCgE4IHpGUdTL610v0var-gIxRI}*llBY0mZ8V!I_evi+wFSca==j%w_Poga%3I`K zmvP~HE?e3+IM1ejq*oNR{Ap)FD8Bf~B-Ubrd)!?wH5MC-eD*$4PEhK2fbnXJ z?ejSWA|Rbxws1JvQqgfu$sc3)olFwrOT)4!Vxa*7vi7@SG|?6aH5D{;Cz!z=qLrfq zOUk{u?9O$mxFN>7<{g(2r=}2A_h`w}QGrAo<8)h(3Dy!H{6;~aH_-nyj9>pd__3=Y z_CJnYuxjerz9N1wCDIM9A7o;@G@l6#X}J5Kn)VrfrYhct+B4^e*4QRo7@v@WDc`BY zgJUx#FSg1c6qS#Fa>qEp6JpQWWB+eu6S9>WjB21bQX5u-XcAOm&rgSM<^%~_Yma@e z82DNwB7m@IQQE1#%h#5X7j+ar%`2mCYRN}5q_v??978aYF{FF{MIa+u_o|W-P0>46 ztd(F*%EsRyrYMXPqmM#zr~Hj~>ukX0$ScP>AUt%boH0H`_4|(L7!N^MTywP7A?Y(r zy3%=LMjnyNRX@T&6fvW!Qj3S0<17m=Cnm2}(|49c5{KU}2*^Ckw=3c5dWNr$LO3~!gh>01Y8IN% zf}I=(b7;?>p^yULOws(#KaHUQ%9d2#W1ew9Ms8pJ3xkjrEPIJT71^hK8$LKoAx5iQ z?#}PZPsIXuU8q2)Zk5aeiGtHfsi+hB#FR4mHB}IvAX4nicku6{I8XbsV0Te)f18IegCK zs+!841`D|s74Z<1O4(}JYxo~F3DhbD5sqM+a{xjrIeJBcmwcnaQW#1UjJP#hX-d`$ z$7NGQSgCHU2SGyNVWLA_Iv!&4%R4;3k;#TVh@46OF+soof{|^Z(fM2!so};o!OcA?#{V|FjIBX{$}rQR%Z0pf?0O=E#ZHx+WWhjYr*SPJ6vBxGLI9)F z!R0PSmkx;Y7~VPEP@QLuFPR4I7nbWk*z&Gq)Uxibn-O0W%_xXe%9Ck~vA>n}>@5Yx z&7^f$%#!si7~EdBG`)T+j)h#Aryn0v2WAfa^`#u-8tlioOEVi0H|-9jct@`|4K!~X zCi$w3Y|Lxi8RZqa$`{Y|<>^S%R+Pq}f?EFb;{N%%CJyvR8 z6@9>m!S<87+y(Btb!1n!z9$i3C~^N8Yr^Bv3Y18I!6YS{ZFBfpN2o?*!dX^9v3*Zu z+9PQu#lwakNt-FA7#%F&h6;Z2nsw~AT0ceLGHq4h=iB= z{Ob=XgB7J(q)VPG00C^3BMjc0`*B;#Jy@G!(g=ik+W0TjlaPKCeP+kqYL^Q?eao7a zu!E9}d&j~fQAb=#!=U=%C-6G4yW>SYn+eF_X`nmW$=)Gn)#ATIo#(7%G7KeiwvDo< z_UpzE!f_UxzMp(J^%NRlNHm>TI`Wci(o0=qNXC9#dYgYsE4*OduyCQb=KBn^TX_S{ zv-?4Hd4;Yg$s6_fd9IWYqeFD(n`;RkxJ)PLSM9hec(>lBCm5R!CC^{rBCiG_44$O< zWI4QXDh7Uj094?=_V1gSV-kbh8bS1X;?pQ#7i7qy4|{+&@)Q5|7=3;WeDlv>@(w%< zKStf}4hJ@ce7r25uej0hjlyD^FO>(Gtu;x?L)qBN@JM5u9l-=JG3;RoYw^~PpJu!N zl6hcC?&@IExg98$7qUvm+ZwIls%8ZwIHKk|#8-K_AC>;7lGgLL_mt5-RrsfAkDsm; zWRfVw{GB1ag^ETy@fnMTyq-B=`AN`f^jSr!uC+mKuCw_!q_ooW5n3%sp*lW7_~{Bz zNGJN@`nRC#OGwh7o-9mjS8il;Uw!pWi4G`95EXIa8%DZoZM5`_0*Q3QbI+an4qd4} zCIna0^i*IN8|Nq1$Dd7a?is`G zgxf_iT4ZDLW-@CT&nZXa4W4kJJ5i!wupxxz`600>1Lbk}zpB?{>=q}lf%6{rmz{|6 ztlpY4tpcIjt1PZ&lyZRh1F9`k+k-1^+ifY!_I;?$>>&l2XF&(YVODs@fjKOzb_<27 zr|?Fh$~q%r38VopsU6>5upY8_a@4y%g$0f>T_5gmpknS5ph}q=g5~PD=}2DGTIN{;Z+Eh zWNC}ZbG%`Tu2hWh1FR!o&fluQHGbU~T#9|kD@_KB?-8G6mXrOk)$O2heL6bwT7QkO zR5iW5CE0;*UXvoXf@Tfbg3|2qt+;HctmbJbfZ1tJahR1A3S zbx*AS=VP?^?-gDF_`Qox5yFQJ#`?Yy~h z<@WD318n+ZvJkr|YSn&55oU3yL;;nUosm|8$pTLqAN!Al!Ga$tNz)c8>MdBx)(gOE z=OH(52|zP@U+kx&U!7$t>RbO&RHopb?=&-C{?rt~er;Z6svO$uQ$KLib^R%Xtdsx9 zq)Rx4I_}Q!cO;};De*cX z4bE4(aBN8<7VHqULu>9&yI!MjyN|^$i$Pt5K?({j+2q^xOG}~udLKJ#~QAE-1d$PKSLh~zr51~7c-R7M6 zGmV}{B3V1)j;)c9Tk5Wx40LfL7meHNge3kkQj!^kmQRhI|8JA9%K%dUbbiSlh;Us< z)&^;9&84zA5q!XhY#rEU9r^iT-3?m*q~?~tuQkR41(b$GMM&EDjD;U%H11^LnK1rG zpYc1`HHI@H+I-Mi$TwQHbf&N|o(dFrE8YCSeqg&A@0&{gMgZxGeR$lNS`6=^PlV;G zqHYd6NNuC8m44?Dhpo$hu^Wrf#}%CG%ixG#F# zge-fZYP=L|n1{Wyn}6_>7UZM^Zcg|+f(oj=9C{nX&G;6B3Z?-PU-o)PY0dM$Hvq4p zA|TQ2l`v3#8DfS2>CR~Yc3^@t(XUPNl3e_8)kP?_Nc$ZF8<-CQ82kr5&ETcZD*E8& z-R`jJG0oWfSHY*AjU$B31)Y;-6D$3RZMEsf+b6h-d|VH&VM-nnfk{E?DWWaR&kFex zCd|}eF5xlZ)peT{hIB-5ByKvFge^VVzt1X9MQ*FA*Rr<%HW+yIv7ELQEoOGHsEAe}+kPCr6>SYHwJZU!5GOo0{@ zWWTd5`x#2~^7g>IC+{{CY!cNO=|~VAqH9ABDDo5iUm^|ozAW4VXY26H$w@po+X^7h znH1PmR;DqL^9FWW1jAG(E7cEtIDO0xa)9p|E;n3#pZH40GPPH`z!0>)gJU_%E!_Z z_ZO?8HT6}Tv2KRzd?iVRL9a|hdN`jJ{j2y5SJOvsvu7hLu;vB}SojC^Ao9RQ*F=i> z0R-g<@Jji~A+?|rzF7t6GI3yp#>L02jdLWu-W0Xq>{KL?e&LKo%e!@#rx#n|;$P%} zV{CH(81~!J?ubXJPrwzxw-?k~kol9ibpJ4-`4HsZ+uEPk;PxlWv>;pVxMW+a%ZLw; zM$Xz%);8h>jv*-qM+p4)d+%3lb*sC#X=9O|c7ILv8Ga@C z1nsOGM261nQArcc_~66n_Gm>EWtUe#xt!_R8$KR6exT{^Au94Y2^e z;Bq`o8IW>LFFl@{-XzKIiVJj-km`KTHRkBI*exH*c>Ash5C2)hbf3+iY&B-zwsV2A z?Le}8bow*eM38C^8Ss$;REppRqy1plLIXiRR?=W*#a%|W$1+G$+^T6EBOyN4w@;dW zhwm(58z_oJb=|1qCEfg$J1)fWzQJ(k)Do1rg|D>;ix1+V;tE<=!A$MK7mMquf&7wo zvR*1C?r+Ny9Iuakc2}fhpBsk-e;RLVtb%I5ta`Dqyihe*UC_m#FwVjingI69-NHY2 z&Dh+&Ba8{W#4KzYT~*rwz}qc<-;MYi>9&FOSnQf0($gzI1$E4SoyG`JbG#P*3q}F> zaYNhMYR%Ec@Q_L~!sYI%cND(4Eq2_@Oe>+vbQ{G`xnfc>OKB?mBTdGiRpK$BZO1l^ zD(OsG>U~ch93H4zjHUTVf_s;g(NAST*uxRL_f)?UB6O${=-?p0i@n#{!Ow7>lzDP_ zyrwT+^6l{qZt2ihM8oM1K8sbXW#Fs8mz0PTaz<&z>=i$feQ6p^IvVc1(H+}=Tpaxm zlm#0PHyJ{%vKMM9DILFf@)H&Lvx-Qvm87raTRU8<&y|$@0C51hc+HJX7I}$MH&jEY ztH%Pam6Y2uoQa< zSY`Ef#YX7L0WD`r?$oDJd`vcn>7Nr;xO4Omu(q^Q%eyt!=vdQq)1N&mn|PU3TQ9QT zCV5QIrjFA17F2f|M)Eu2U;L!@xs!j7I3cbSgPZFZwy zQo-(68-KacbXT%QlW%Y*WIPzQ4NITLi|WYcdrHaa zQf$P2cM{twU_d!bWKEm(Dl;ltVyJ?=MvBil{$9qHHOE_`_F`at8JT2KrDN5bEmzC| z!}VK{U(bo!Z{rMqVrT4Xjy)NxRk!23w}d#S6lYlD<=67Ytmu^P62*hmQQMxlCohP& z?s34P8j8v5wpK!F`^vycx01^c*7>cUrB8VbkQ@HYCZOvmVE1Z3v(R%;+$AX%;)spf zK=f-=NyJ{eLB#l0AI2iGxqIOTz=`@56@1=8ZGZrUjP@N@poK{dtxHc?I)HW!;F>w$ z{sK<#I0HkS`=!6HAJkhhxX^(|;6fi|fkIC=3o<~^EJWe2?%?T$i`pro9ZD?u8EQ;U zRm>IZTGApl@6Q&rqLb^fELplSczFEsOMnu%WvL4`nbAqKW2oP*0eW^2!{2y+FnV-7 zC9(Nzftj7_;Z*gK@TJa*Lu-Y=&f7KAC-{^@bQUZ6<$8Nms9^NZ*ROsQ4X!)dMFey; zBpT~^?m-E@39IdzH(A@?JP_( z&F3*aK3cMe;sn>@+2pn=xeOBdTsw!apMk_*#cfhuerfBVG~7*mlZ*765p%xQ1IzWA z`NE$7lN9&Q4u~Ma_!+?Y0=J`l?p=m=Giz|26*go8+q)U?T7Uc^n9K^fdAA|oiocJA zbZ<&wxOZWjBQI-WbCm#}*{qFpQw6Q3+cSfRApxIP3c%OE?PUmk+kgkAtCaqdX1gd- z9~D~%1nEM&Q-CTdrQi?R#NS|V(f#Vve=N&Cktay?N_#$}>0%O0hVNADqxV~?`y{pg zwvqJPVLr78z?g3Ck$WPb5u-$hKMWA9XEr_(r%w+%%*-Z`#!3{f?C)Ouxgu}iT01o; zFQ!g=tVUZ6|B(xY;U00tgSV)aZ-$F57*3CWzfjJA~&4Rq~}h4JKE6>3fu6HAVnDfRi1C0X0h4rjZc zHH(ywcFKDqoG9g!XPRru_E`5=U?(#caQYnWb88H0b{LXrNj~zx{8mWsJ51(-{%MRL zb>Y6dFvcY_10Lxr+p~rcbBP_;Q3J`U&hHC+3RkVUtAl?-@z-W+H04l*nWB<~AR1Z1Z5=_q_d%m*2remX^z4lb|dNOt-U>~e;c8&1^2xN15)XZ$`ipjWv z&q;<|yED6yh|cd*=n=4wBNOGMiuuT;tnztQ&*|>10|VRau4V$Ag)Qhp+RQOY38UKm zWJJNQdfdh#uvh3FdG+gqNj(0b_`vWjzzaNM_46Ae0a zl$)pg4b@+CnObH8E1dItx)K+i5^HH$-$$-Xe_ocm^bOy#f9Jq7Oq}mFG2vJ;31prx*@JjhL^91K^+dsdj!)3X5_fkGMYyHGYuHd0y)`nef%)gey8oIU|qXza`rY z<5oi%FN-e9Yfm9zz&TRQs2wtt(2>}n^+#41q2Qw((93t^RS*L1mxG#np536;#_V+W z#8>QqYxe!S4>yo2pw0EQ`NeZ@BKf@!w|b0kbW_dxl&J^I;RV)3IbQ zt6gW>)!IG(7;9<5zGI@#R7J{{s}tjCl}yPvL2N5c+N>N4H|0(Jl|-VTar^obLg5}? z4L{Z=G_%oJ1!h030AZIzj>7`-S&(a~{K8|B4{;I!5mR6}_Ydi0sIW z6@YMF>khjiQw`7=zfwyG`7TThisJgTOFicYbAi71AHufs17~qid@!+(r@4#I5zzrr9om^YC)8kB1u(>aL zSllchkOIqQ`U|wfAgvw;e`JnJ`Vbnv$&>unBslP|hHdRrYSl1&6{HahrecE-F+f(~ zjhAK}3`h-DxwnkvF4vlZTSn>=>SwCa8fSZLS3!5I>TgfAtPn_V|HG;3yn+rHr#)^l z!NROZ?z0Hy4^jAVlA7(^>V7Z#oV`UCTIfszRk{m7@h@IS)t4^MpWt;K+17}nAb=n- zH}2b{B+Xg%6`V9Nr|0Rz&!0+mR`M2@w-VV8B1t|4aI5gO@x3t4sb>#0GH5))75c#k z%3Jsqqv~K$EkFMQ^8?_I^FUXZ^!~3$cm%#qqWPJ>TIzx*pl|BXFH?+KhWV+#-`)-B zhS17qJgxkH9^|(@ zl$&9TIp7ig4v;@Y{`cyD2{~_z0jzZJ@0zXkXdXO#GwsDs?9DZLFC09{Za86IMnj?MO}+tLajH7)d?pOs$zR4S9!BqRU^cPm~Y*9 zFx+?!1_B*A&NrVCdJjc#AifA-RajYI@uy2Vv^!|HTv{;6pMeNAYX=g6EKvHe7o7*6 z=JbQ<+466Yl?pF4h9E*>?dF=0e1=yS(z794MAr?sBe4E$yGA~#@@ETP*ks)>3a|4;8I=6emF-fnZ zf&vI!p|FBD0#t~FLhT-5;HVvd_VNRS)t7Q=mh5?$_ zBB>5VA~~PaRN+W&oLrPIw{8kWUQs}H4y7h`TZd~0_c0NzvTL?S$Xa${_(rfn1E1!` zIkF1k;kh%V9lX+*;{0^nKNIR7G*)yX5Hi4^4vQfgbK}xUr!zHP!nm^Br_hM*izIz! z<+d{Wq}UeAA1C9@g177Od&DpUI&gF!~#}`S+n<#_i;=Uz`2we>CkYw`=(B9Q!aDJ_5 zc4hVKHg$=l0s6|%#m!cKaM5x_zAQBpgV^9G{A`xx!?VZBrkeYT{x8PbO(dij{6U{0 zWq8|&qd3PmF_!m^M}t?PHphEpnvnpKa~ZcIzVC*qJZQAvvHT?rtFIK|^ev`f-t!J^ zqEdpV6*(ye{Jh;Y){?iHj{VDN_@&4K7k)gxn+*5f&hcF1GwaXZOK}K<$b=Kh|AF>dRa_C0c@G z5bo#sfwS@dq8W&Kq!j3M4B>YZ`FU6DW@Ho@YszUVHeD$Gs*7L^IxQ>$MRjx|sw$|g z5jCR_#)N6)vaqZnHw+Dg5(piy@PJ@wT&JH9mz$bw(~`ovmv$W7(_Y&1v{~${W|j$F zO6E>)vbd9q0gGg>B1wkH7o@!I`+FBz2dZ7730X})hy+~6roI9bDzCk>YU%FAjFbzv z#uib>wp7AB3V$I>{EL`jhuXr%;bv{_k(%eNF@+JE<0Zh;%Wylu@A5Ahw*R z#E~lf?d)_utRjC*RIqYDMQP@G({y}q;k4vufX%nZ@wAKuF4w4cMTUY1^Csk|rbRux z9|6CdQwHkWzVX2=LWAWXb+bxAViva{TvXB3(+l-SH4Mtb+3m1*s_kw8s(xR8DQI@} z+_L;;T!lec5YAC3z6v>W%*%UkD!t2Y-M~%z(7=xHoOzSlG}uqVEn^~?>-5gARt|R9 zoHnQw4NYS-J2eeq-s3~&J2YvKnVE>4vf0p!DH3QU7%;zT=k!B;mHc4PJ2C?V*cBCl zKlSV(!M2P|HQgrSCQwXBK0`zD@Dk~n0)1VNK`tUoHHgzncaRwHxoLP?a$zAxLQbBe z6_*+P!~)hKUK7|7==)-Trzbv?Otrm-S#;ULpZ?3i=*yvLjFm+` z5}$0vV&(7TTy422P?>$<9RZ7#4c3~tcYB%-?H4nj&Qx2oQ2qwdUb)a-54+PhkH@FM z9?oO#qe4zBcrn|&Zl)%al9^D0K|s$s*1K5E*hg#~(6K1BpELGMe&94`-a#ps3AJI&L{7AT!wV z&9rcoq#keZ1I4xS_i=Hkx@Hz^NRiTi^Aoy6d*jE#k#u_#3dU;t0lv0N!<(t=c!Bsn zp``?4kzP`A1-Gn{3gi+lW*BhSM2a{4GGj`KKR?>$Hzi2jrR$L0@5Lho6|~|fF$|UW z6?lLIQNTP9(LAlYq$J$GnL{+COO+{t^OE}trOiou5k- z9ua4*wMlt@_{ulTW9k{(n4Os5=9M%+e}AlWAJ7Qd`R`rN=nIC%_-DH@$QA`J!Vo1) zhJ0{~vxXKW2YE!Oe8I0MzcrNA~*K?BF`%rhQCekKWCk7`ERaZlPOnv;sNny zT}vkLggpwCB4QIK=09LcGbsZdC1?`Jt8f{bLyvzmJ+327C0Y*Xr!)5ZyCPjo?;4V) zX8D##iY7=`c%ktW3Sn3Okn)O`M({&Pt2dD6qD^EQrM1Esk8CQw%k=uOwO29|6h?VO0| zA^itC_z@8vTF5xsGIyGeA^Kw1Zl%zL`)DxSj}Cr>{i;RL3_h!IfO5#TO|>fC@P~lz zrb+1^p?#(Ix0Ihwl~v7t!Qa6_>r6OE8IJg$4ls{t?~3Y_tYH~Rz6vgu8MGeKtr(yGx0WfF&oBY{;<76-(-C6KqA!R#r8Q86?5&3UW&Aa$or3#cvz z1?7HFK2`T4{Y8N6k}s0i_7q3Q9PgE=U_CV51Z1WsH82ESVogYk1k$ULu%u49GovKL z=LJNS69q|drE=F?>{}tIlH{ONRKTms{98L3D}$ zyRHf;wyfBN4Z+y78N0iT zpa7viTh=)$h?iZaADMut`W2Gws7?MmB=UWreanY-&zllEHCp44v>Ebyzbp>iiGUUg z^cbra#r%YUpgbIi2c6!L)EojPv@=FAQw*u$fYqywBHPKQ;ZBi)urCYQwrMu~Pta*f;Z!WOBBgeWa6>v7Bob$DUMQTBI&k(XDpC(LOk zGk>yptLTEh;kkc%UXlv9Ko6hUVEvFELxckh@gr*jxCSEdIJfb6)9h@uZUB16D5YGo z5C&qi!GDO9UGJfLHM=bYefc=nlVdqpQ~$1A2_608b(GKCAqk4&!6{M8=Si>X%7+?f z&>NGWD)&<4kuOpsoxVAr`NBRK zB{PH94GJ8iQXJuVzY?goC3ZF0bUj-6|Ej3!OU z{K$|{pc&{i3dWSX>ZE@jCa9!NX%)XJAxN!={uBrTcS&}_~@S~D1Ju_kcyd~_Aol2m<`c5NW3#Nx0hhBb?a-B%gkOr;+peB zRg=6lJV0zFZ?uvTg~u+srVoIQ0q76l>etyG$*6kmQP+$_Q85?>G|^JwL-e|8s*p@a z0Rln+K>lL$gMViLra7MnfB@a#rwZBTM2~ys?a;$*$ZY97EJ0_EdoR}>71IotYB7yx zq~n_x2nq(YmS;7%MejYgrcs^ONY6zqX8*p_g7$At{1OG(-G2ZHzn(v)GsLDdBiGx2 zytdxmx?pd)YIr6!N2sjB`u{67AMuAY)adob!= zL<7ThQO^`z#fkwZK$ydpsQj;;74eQRVX3{O6oK-O=m0QKM>Q!9@W%{V&7lMe?Uf5S zkJZ^A{<@VX$u-u=y?6x8OUZqZj(0KpE2&t=t*@Im6my$)vaGw~T{bAQ-%OUfe3KqL z8`-H-NisvXyh|ri>Tvq}Yy*^fMo3)5Xw%I=X#gGr@gSRo99!aBhT<}49OHV|U@k+KuT801RGAx~5DrDO*V!MkK~DP$8wf zqs4rK-fx^04$9y0KF6UZorp(6lyaH#v$DvU3m5YL!xMqrH-(;l@L>LK>DLhoHdQDs zGa40`YMfiklvAosz+|WtXI!vl{)y8$q)!`Xuoy-Y#qr(=P9J4jjz5+B{se!cF!H{!JbR! zN{t^}4bjN(kL?Qqk1kViyiV)L8!XdsaR~kKFEg^XJesavyq{^x+`#p7z zB4iM&Iw-1GS)y&D30TgM)*CN#>{0{Bp6d+91)f6@s7rz=eP#DP<)9a#Jt6^NAu8Yf zy}-brQzst@qR&~=MbhR7aZLF9h!vqsu$7~GEU*OLtjd**TMEU4CEc>D5kF((uaxjB zLU_==*VUq4;`A(8CgACMhRT;HBu4K3x&hpRZG@rowr(G8gyL~jfD?Y)wlev?s`&_7 z@bs}4vcEn?$%ZXcGc8dTNuvHk!?Q-J>1AK8r78Wb?fvI=p32FdaG&i4@C|KZ6&q(2 zOqm)s)nyySA3+`&SKV4&YhhqxhgmsOv)L%)C#`G$Rf%^=$oErx!e5r(4&R<4G*|u{ z$!@83Pq%n#8E!|tuOR#CruN>hFKq{mjA`g(z{_F4yc#bX3iv7%oae0ADvEyxTpP8d zF+wr*BG~U|@mTMMkAQk<%sD?QydL+jKhGdl!jm#VqPJR5wq)4d+o$-QeTp&o#d`LK z{GpvCGwT$zdXInH5xx!W>Bfwk6cENp2w5Nw?cDRdt3j|Xov5n3`{^p&g9oZ?V+iUf z%lAszA88Nd%=>?3)k#_19`PeWLL=%~@UGuV#B9=dfphAXC#SZ>gC-rp$1rTdkl)QZ zzLVKb>rvm`iS98T`Hud)jI4w=;K)|83>r1XI%pLvm?j|%Jo;GAbx#@gwwQWu3>v!t{6>Z%N_9>Ig}rJ zR{lWTIp&vf`Ro@*z7a3&bK!T*B&%~q4Z1&AzxCRtM5X0MSDF^DE2|!!wpu4vzs}l+ zAJtCxelDyXHvF#hd7tQy5MYu5;wG{W?R6mctqRN=>o+EccD0XsS^ky9cDcQdSYrXR z$M0vY6?w!B)Ybm1$U2d;>8ye1$Z0-ZoC64E>*au2DWKu=();gScQKX{tl$-iZRn=& zcQ8KXTO#!h8G^JYeo&_(nR@)MD}RHo-7unnb9$MY=4L+Fk`4=~k`nx;x-lmd*baY? z+ZbM8jO!l)6@g@y@ZBXY=q+LomZE?1R%Kg}$WF*q>sO0(yUs zP!2}Hj?VeadF>@YLm6jJC|V_J{sr0&}sock^lN<=Hzg(Yg5mb|C^d- zwMsnaf@mESZ1+Sb6AItQB_M-Dlh!)fjvjL7NLEVYV<{Zzn(rASAYb2-eMe|*Z*s^& zw(SNOShPp0|j*3Cl|&XNL> zu{O$!@mC?3Rp#LQfd1uGvNI8)^=g)%>!E*ZcKPDb|VTj|O!U0HDjZhYJ#%kfPgL~~GI+a(8oQpgzt;4YXGMf$@7vA=g_OeuR>Y_E4jFIjv6-2z0_f<{16Y&JN1f| zP!qx*qsCC#C_*-&Oz<8*68%dbA6)<~u$r_C^`WsIdY3_{rdFG_^YII2l-xoU21Q9ALWk)Medlc7pTxcT$4W^AA&yu; z&~nD*4g~lf-5+R+HK8LXDH}z$B69efE5dn*_oRvIf=`WypheY=P9D+XRO4)tq{11G zhl4%lwpLAE?${I2`rAici6g(1=B?RkzdAIUBcHR>PKb&)q^W{9v#P!_@x$;Zf6K(| zl1ed|ixe);-`L%-uL;z|ARq7-5dJV%p%~rob)`LVv*j9_aQM{7A0PEKel`auc%)X_ zO6x z_QoWgTyYZ)+Ryfp5Hlmkk^9Da{h@OMVUgakYu3*n0bH!nBit zm+1~ckpaBS{yFIHAH)8%#GjCQtzcIN*I$MwfnA#0590at1`B&^)~@^U-@f64t>g_RLK6Y)GUGM^ZkJq-*dbU#oU5;f!ZfN;j%`bGRy$sD4$KGL-7WAtk1? zSvKmz`VBttKbm>o&N3jXZjHipNq0&~OG?+!A>ANIr-F3HAl)6(sdOVqcSuT?(%sDf!<;+c{Wrho zoW0K*Ypn+^vtMV1eY|w`{2=rM`m$=Z3DyAc%5=XC=2m$Luk8YRHIEY`KZUGTQ>VMO zz@(gzf^cSMx-;?w|It0Tk?b(c^@WZod0Nv)J0n4A$_Q)Eq0U1DPJj8`!sUf8Hb7!9 zqs&u;nYOFOU|q=I3rsa0Uo8$j`dlAHR|jh%xE+0z%A~F!7-J>+862aOKS1Y2oJ(wC zlC7&{Yx$Q0k!~4VAlwB#vv=!Lu&cu#H?|JF?c!Z&ss0*7C1PiSeyo4(mOD%1t5e3Y zQqO&j?AH~KAUIPukO+1pz;z^|5^21XIqZF@&if*z5)6`M3){5YjX{f#dgd`%U?sH4 zz{CA8xI?p-#nA__whV!lBOdELkjqi|N|s`>qIq?QDQ(f2UkUaGk4}W0^S986(eop(j)A~ z*^D~H4z%KvL|~a~s5h0~6O{~|9=zn>h+aXeO0R?u&$}#teGmxHydn~>sWVaC`EWVS zNh6c9*|W@8*jTwnEVF_HlITGHQ(|Te-Qm5|P~^5wCl_{Cx1VyESlC|{(&}$4-%)Ba z#QA_FBKuLgFTxoTj}V<7YxS;jb%rEXMy!JjBVa+f<>JY9#hfzgj~;{*=FnaAF?Int zYO8$-ja{sLeaP?*4qzjCGAsDNI|CS{9u8gg0Hh2rkH=JwEP5r{^*|t^42q zpT|RA(ZRv@C1Iwc9TAY{GRFDzW8&v~jRIfvg0_09OEV;#A`(hiEG^cynE`zHl9K>l zc%#Rz@ZB9{11>Y)=w-@N^CK|xzn+fJI#r`5*%Gm_BI9Y3qh7<{36Bj=N)M1yFc=Tj zDqPCv^FftIPo=Y4G;2{n^=YE6OJrzQob&lOVu=-dn(Fl$Q8Ii$4V(Ka_T2sN6l-w|dBW{bO7wxnlv^tN!I&ciFY+RNAEd_ko+4 z_c*>bL{YgrrVp|1T%*VtWdX{;2MD_Bgk7$kFoOKldF(O%^>$v$k)6bDU)H-113h0R z$5!kic0U`BQE}LGq3)7w8uN4lM2v!-tTCpyG|gO;5$zIVg1GGaNr!X%^wMv zAsYhvgu&}5MUt(?0t(^RUKc8_`c@CSYmR~}Iri}WkhvCWVw%=MlyHmpA1@q%WyZT|&tCRA zRf-H-SBKC5Yl7bdruh@r!1)cKR5ISIevXO2H?%$5^<8w)DCXn_%3sGm-+8~e+ZU@) z!W07)sNQ*$EP|1M#arNN5CyPC)DSc8bp0F)c$8l3n4|!pb&=kUEEY9jBxhi_Q~UG5 zgR|Eq-VDG?t7zoSdZP?ArZ6BA;go)ZJTI>{PXC+4f578sJmg^DyfmaQJ_bx2h=kTv zymt%2ZjXw;!|NZ3VQGw-Q+ST(o2O?<5 z;_-2B<-8CmGpy!-5+=DfW++oU5lML-ttJ+P7~g|MkD@XWC%oKEgG8UN=du76zO|B3DKW#~I3%~W!7P?{ zS80=mfzQ>#fT61kFLai$I+!F^^ik#tt2|WXiW)JF$FK^)HNVp~>-5bslT)ZrJC^@FxqK1n?-rn}S(+{m#c{Kta zNzauXtFWqsEETDp4Bd{M!UKL0*Xq5uv*NR98>_6}&$#%hZ<>iTpvesX6X0oBlvry+ z1WIvjPzBfixf>pw{q<^r=^H!gs>9xXHGz0+Dt{Kt8O>4@9O)F()3McmRHBB1s7-1&P8Wqd5&h z`4c^}vtjl~eS5;9Ds(oOnQYCPsuA6B)lL+2p^~-M@lO7j28_1G`$*Q@6T}l)!#Ws? zZ!b2lcO4CA;LLzS8UB5va8GtS%_ufb;)7_3ij-lRk;IZc9Ya+;0aIi@|F-Lon|335 zDYRT77u*l9o1r>j*Dlk^*e;7y+D|Nj4L`S4z9R0`)22%;|9uL5ZxLFcQ&|Ro^r`N| zLZe^adsa_XzkfnIaIYo*FZK-W{3t@t3*SW)>_&3ME z&SR_wj3Vj(Ad0oCu?>3eifZ>TIbetPid){Mdn6tEd_pA#T-xM93AF7LlNU;vN#AV$ zRhQAG4VD=|Kno3ERB`i&DdM`r1Z-*LzuMC}2%$bYN*e?lqFDxP@WA!qN!7# zXByIe+Vct16w$~BcgEF;$S38V$<`oUjneEP`n3`=EnJPmVZ}<_UDTbx zqa{-oa8)+m1D|Bve}vGk!;Qf5AAX(bk08eP8S)jVB0wCNQm~haX(uta=fmwrh5G84 z4QJc$GMg(M%ca(~do=GbpgMh6-^b(4BsdhGP&-{dCpgEvE;C`h?rq!%v_FB2Tmm7G zrO>qGG+xmkx~Hb{U&yKb{&9dC#MkiTNv(K9dB40q-+EL&SvxBylP!2->KKbm_8;Qf zYF!l8#tsjKb=B|-VPxa}L4U9q0$#2_E{ra2+`78N(`Dqtcb|_1juG?C+dmjcUUJ=m zvSEp@?lE5Q`g*dX{r_v1=M#T(!^54X{mTCF)wzC8fza-Wha!Cs>;osyk$UL;M@+z3 zH0*2AfCpsmN&son!n(PL35@_|Gr89fR4n)}|%J_OwfR;Xh$Ouu(qW|mES0cnL-@lrfaf<8P zM@AN?P6Q2=n@o`;qGOsD3U@NXQsfrzL5ynj;vd6giew4RTq$GBTc}=SZ{3?Oicb~! z=djMcrRG@vM&P!RI6n&gY_jdeHo%@f$=qObsLveaP;t;wL+~K~=Na&sxSyFFR;<#3 zJHX)U=o7Udz>nhj#8)tVp^u!21IvY2nb)%Z$94EC%JG^=b(=TUY0uqX?a9j12VLLs zn;d`OMh{wWt;1^N(&O-LDCopei7Xl{3c~Q;t6opJ!N+sPnHXO8QYeo^+U4sRQyb$w z-GnD*>q^?p+U`dHX^8aP#6Z==rw^~RO=S|>e+Kgj9Di#JVjMCq6}EP9)QeJ?o_t@u zw|2JphGXLrK7;Li^J@bR7lAEUi~K-tLxpp(T}(w`3&qg~1pWLLf}xZ=e~r2L`Qhm@ z8;G|H#3?*?TZsj`-n6yw3K>559zWg_`O@qJ2fko47`V5?6k9n_fX`Sf<7i(QUPXgH zdSbt9=t?|}r{VS6T8Mr3QxzL2R=?MIBx~BpF;GVT7Xm(U8`N!~r!w#zMW_=kAC$u> zjjCpg<0?7(3Fc+CdN#TIH{txVIp2BMRTOn(+`t`I6ukRhapDYa_^dN`8cCRPo+Zhe zX|V3xxTJld4KTT)^|QR(&xe7LIOu-04wx_W%P00?OOcE1PYMg|uf;M;5qr=`Yt^{# zYM-`6S%25a*a~ZxR+)%;VAZLTedwmFjHIgKZ;B82XpvOme`yjXh#?btT0Y5&Ir39S zef9X4Emea4;<%4>nt;7R(~< zmtfE_h9>Upn4wYs_!Pz_`E0niQZ1{_-?(^H=UzA(#mK0oluogF4)Wh_q!{p5&`9M=XWDb3)?8XAXT@;qy-#a@t2{;3-YXX;k2A`u)vxd#4$BJ_ z;DGG}HJ`39hg^lDw?ep`Q;lX9KIR%V-civ7IzQx>l%MFa-y;KDGe5~s0>Zz`J*u9P z{oIL2Nqj8WYf2v(08eDZ_RkCLq9m41AU_+K$?@RUnxwrXFCH9-@b~yr-EbQ6>gOAl z<~6Cogc|egKT_bOo3vVW#%Uwe3sRUv~KAb zZe0gDVt?4C*s1(Me)Bz>hP7r*1xLp`4v4{mpw(1 zF~3Gx4_zhd8qZF<%>j}h940SMSDEc9twj0}drY>6{s)Utb{p!!l#m9j1(P2~ zJDYuq9ha1^PK<=|T3kU-CL$&tL?Qm-N0|9FxAjXNU+R?yHVa-nQ%P`_u+s)+6&Be@ z=Ja*h)ps^D&ziIp4`+GJ{w_MoE2bp9&;0)SOFQ!+!Ao8G=@G!P8*Co*wi2nr3&VkU zByilAnTQC1kjE&mI15o5(VS$H{!+UkyM$aZCD8KC7Jk26->|>vBiAlk@Sz@`*>-xM zJPl`~Cx(+1)nlT~$A1sh+-Ff(@_Oo8IZ+@)LWeDkO6{Fc3zA)B*@?T8SL8u+E)a$>j1=EGAQxNzgfd<^gZExfu?8ko86@_!R4t4Cmy|F~kqs%^Zl1?kysWF4 z98=$hSLV4Y21OZngHYd&VK4el%Dc*@abD4Yu!A>`K8Q+`#9LuL$qS^S4PwMNfXJ05 zvR3^Jl4p|}1a0ZbguXFu40Eq9#xM2er4vdIY63@Zt%1lv?8uw3MBRux*m2ol6A5;AL6&%Qt9>@2c-y(Dm^&O?n`F`QXgq%di zubWd`S^UvUG!bf5ZIChvr71@GLp1UJ9mvJG3M_n^d$_XPHA8KQ?{C19>{2>t6WZ9OFnI2z&b98zAiUlhum=8 z>a5I5w8@K*SLxQ)a`0rFYN0$^{b%4wWIzQTTx@?2SJffT+r72KejN|!j#j|SGb=%Y z7z`=)eqK9@8U@|x=hguaaz2%$(2LCG`)CKqTtcL zdK5Pn{xXsID=ui{+Z+8*JmNB?btQh=KjDHE+q6@ZA{)z_1vinCtPAg|LeoFCSZ9hR z*${o3pBC99+yDpIb=6(b5(_{ZBP`kk<1E`~wu zcw0|=Ipb%xs_x$g{dwCj<;%#}b7TvMo68riyv z;x9k+i!|=tBRdHbiTO2)9>AofDSD55{ML5<^E8Mn*9yRO)U+8 zM?9S;MeDhwOD(X}FHIfe*qZ6Jf7rFi5iO*=>SN)P%yA--qBIk&BjEL{Xe!S%VWW4> zxNv|Q;&Fh>+V2nW$YSsac>a{-QloVF>dfA3gsOfqJ#paQ-XZ0RXz&j_`R*|vYjf5} zS?h1VJBOFgRFf#T28|BSvi{BOCRrQ*IL^yy6u$-N^4x;CM^=sjw|zb_w-YT0UUcc2 zeVL%l;TxiJI%lJjuRF=tBWdB)(*ACmr1$u-@+6CE}^6?k(-h8>K z4C|*uUA>o{taXoIMj-9PW{vs-Tujty&$s^@nHl=t?sFATFpo8w9ClGP4gsru^TE5c26DQA;Tyw z_bzJa$oNbk1aNsk1qOuRp#Zb5>Mq#6Qpmd!d`g{`jndoF7V;|ZdkwiF=9T+I60kdV z*NmafYZ9iuvH9LgEKW5G>nQ?kni!-QYYe3YPn|v@!U>Qe3C1Db$&6eOywl3!J=lSM zm7d6c2oP|NjQ`z&71w6MbvAjS_y&g(_KITWckZi-jxAdKl7=+Jw4@R7NZKu5rJ#pZ z1N723Z&kU&uY^Mha%ylM0g|laUD^$(4=6D#YF%~o1w#V5DjIU=k}1h*u@z03`fv{9&QG;@3lj+rT-)~ zeFybI(K}3tx`=9^fQ{+jRNo~#J7OuW>olvut6GjQE_EbLe}2yqIAdnP?=#wVL5UhP z$FgmUHV+%#XM0Mylp*76J7kRiF-Q#O!M=JYZp4VMp!U0Z?SKbmp3efY*_yRPNGOJ* ztLe;<_P8L9?>BjBgt_6_Ix)s;A~W*z9!ebY0cqK>QtlE7UZlM0vXDd>(I=`IWC}8i z_T-PBX1|mMr*sz5^GBpqNtR@bUWBTXtr;funKEVyIfKGBcmdjT?x|5{Q+@eQe7+}R z)NNzAO0`LQw+zk9c$)aq&ZWJ(I{}VmC?jh4SxB>TGd_zv*M-b|Jr|px$1^l&B8Ju9 zXg`#9BgJ?wrbmkoaMp>X1aU}wz$L5A#lhi<8&Ix95_z!cXOqLCRMHTp{ld#O)|RiZVrv(zZaRh=IUckc{anh} zZq)K>-@LTl!79Y^ZRH()r+u_B$*r~>Qu?McgOLYP(QJ;V@?bl;)6Z+mw&Q+CKXRqUtd-^7$l68?vNZ#nOa{H}^st%euJ@ql9 zk_`^w1X+(qZWln&e302T1VAJl*f!J7w|noF%_OT1&`Cp|1gCYQ7;$Sd{sfM&rSj}4 z>o*Po!sz^j<*MeQc%KHbV0v8N8JrGjtxSC{h+(q%3a_tY2Ui+j7{kp@kcTzcAHgrA zi-}z^!Gnu($n!gD;X|F~lRgqkL?HGJE&h`TM zK+ti`Xu4m#*PFKj0$!!k{%$Q2D!R0ud8`VkC9v;0dkcrMJ;6gqdDmz&%f%XWKvwn0 z2Nud_TksWr6C3wEmJdiY*#dxIY>_Kk@JvhtHg6W zjJ4MbZSOxe3Pm3B*jpalB=lWrp{JSL+@rQ}UO?cRCIMDUMUSaNXRah({)3S8(}k2% zXL_hp!3mr2dIv8GFAVgXB#Ei(QsU1^URSMYYEgG%bza%+jIA*c5TYnn1CBqD5- zd1i|FpGlZPqlfFu4!w8Ld^JT1d?V;J%O4;Fkq|pN!OvE_g^>)9YHY<9CtzIJ_EaA(OJe zCaduPI4dTuUnh|jHdokePaDz}12{Re!(>^U&2o{nyb7C|L&2Y)%xq@1b63s4!F3F9 zH^7zNwF=dS<#Um9pdw%l2N`~(^=_@ud>>%k#r^?_Bp`w221!LAm!+J1*BsbCr_zLcm;o;}bSmal= zZ~uh>y!RT*h#~>KrX0w|7Q>Qmx5az_ij{hbt4!O_m~)}rs%v!w7;@R4@-xg;Cd9Z> z^N(_|Yj3C1^}uqIcy+)&bvlZag}TZox8GWg!y2f8tnM7|*9-4*VoGO)u>3#yETm)q|HQ^B*`(Q}ufvfy3Lg%M+*W9Z^Lf)U6Aw&Yq z(6nb?*}s~v_szEU##mOnGdI-2xEXWfmr{4&2%x`<1h*P~ZomCvf$DQcIL~RR{^te? zP`m5|(HKJ0c^UeYO-Q4@k{iq?XNnz}0A3k2Nwc$!Ki0O>Zfmca%@e?ay{frk9v>Oh zSnr6m6L}ngqYhHqZttFa+7mh6dm%VLhd6B*lB;n5Y#9-cp_v%|3_f=Fn*E_@7GBJC`6W0T}? zr6rD4V%a;xzK@W1@C@QwWod8E@H-2W^^Zb`<8<3UEkFOT6DPRkL1r^>7N5G2u~BPz zMGfyST=m%Yq%2{}l1N-1X^tqb>Bz~?Ys*z&XVbmbY4Qd(+2lhAXR#RHm7sD*^u}w5&z9%_6O$sU;uzw4V3D7m- zVZRogxZY)U8fzz;vG>5k6;l}pkmrr-1L<R;m7n;82P*d?jD;9pwu~?cE;W;A;xyzoDcLl;%HEGfT~B&sP=q>~;nVS*!y}h3xh4Cw%}!egbvFR_gxipBIz z)d@C3JzvVzN~(ULLm=Ct3YfVC3N>OYb2ZD#btxS6uxHkn z=zZ+D9cbBl7B1zpy0TmTgDcqK#pZ40b@bNwTVQ<7Yl>TJHBAXVg`%?8Rg$`ogMtNe z> zw4T~Lnj3h2?QiSftb8}?+a1%jemmx+bULyEMVs~BO7lD`xm>~y;+M!OZIS9**~R(*S;m(Y)f9OD6w&qlH~MyEiY-1 zr36>o@--Av%GbT7B25>H(CO2ck8?~*>93IBV1>bI=@HAhq>JQf;Z z17zjJZ`DSh=!#w?9>hoi2&uQUQeQ#lO80o=!9?c{zF(A9^;N^TDZ`U#y5C8u(6kd_ z{gb$l=PW+UvJk?|74UVt_?d54GjXH;RgMHVxQXLf!k5qcyz74T#K_FwF8>Z4V=gJC zL4>3atmLceetAO;b43Hj%+~tAk{9&9h8{&}8r8 zb}uUu(n$h7F}eYcYiwLLu+c3f;!)(x^|J_|q;C@!@Z?b&gm@(H;Fyq&4}`u~oZl@I z5N1R)OS0SxuHTBX=4OA=Fo~nj(OJXl>zTY7|F?6G4nY}r*t05nfR&b2*D{cp`{LHD z0K%#{OxGVze+4usE`tvPEzju1XbdZ+O144m^A}#ouodP#wqfG~qiV&fd`s4?~mb9Nfdu~TMkb&T;VALEk>C!WSYxc9R z!VtSlGpJ!zz#o)`y>B>=ZZZ9MnqN{omY0DzcjiZS?(AkeDHZ55Q+054=<`&6c08kI z{F3l@8UF5*wLFgstT{Qn*T0w%6mk@b$T!%qrI(_F zB=&7@+w&+UaO@+S27^L_UDsdkuB-WyD~&F;`G`hAhsXJ0)Gr%XWKm#B?3vFvK(tv{ zD1Dil=BeK-v#A`IT|z^Y^YSoJ{3lf-M)X5NBXqG?L{w8sX(e+Yxv)$@499%uE_ zMv13HgsMC{q-sl5z8HK6#&&tC6!z8VIxzyrrt5es%I;J&A1o9^OEz&3qI}F6#D$$K zePOA;!uuNdJS~DFNu_%R=a35FM>0ugTn3DIMG6y?!|~iYm6z zp=drDEGx&Kc!IAfbL!q!(StF7IfG01+e!cZPFEP2y|wrhaeE|rCB6KhQueE50H=== zlF*QyYRpo1m*E@h`uD!EPkH-`LE6^!>A$;7#=M$ z5QGK{SdbnG>-o^$KfK;dWmUP{Ix!|qzL(^dW>J_EsDR-IAvx^6`)1#=^yg!j1T+U4 zNDP;;k5E7lyei>00vSA(^}?w(!S25m{PZTgunv1!gq>h~G(s6Smo~VYhb4Z>Xgr^6 zF`pYb>_kD!LrbFhN7{B76vud}e`Sp7Lks+LN)~H<+%8S(`*2DCN$j@T8$zIPrcntP zHu3$+dgeOj(**QIT7bA15sbzQ0CW1oqF2ar-=zNR$uT0KU~x1Bc%)_RQ5}qYH7zOj zIQz{+ev~SZgGC?3baGrR`xJ%gU1ZT*1(G9YFTp5OvATOxpJkmMq3d0b_6JJ3?vK?* z&S;b#EhsQCIuT+bgy@Q+sifm6)6dZ$^Yfatm?6gUu8`%2?r=to+et2STWjWy&@diF z_rqIBbQ_A5f1?Ov%i$IBF>XV6MHEGKdb`cqT%5oVakLx72h;#{7VD}pvvomA=RSMu zt{s@D%zuBF2GeM;VQV(=(CY`&^$SIan0L7eVG4ZG@}(EfC@}M-oJ!o@Kn0jrY$;b` zfL{hz|E|n@HvU^BI7Qga+7fek^==Fw6hV4^`G2@G^l{s8JH3NTO@%^$uZmmWMfsE3 zh&$w1;lANH`f@Br8#yA!p_hF3iKF5PsmsI&a5|=^f=Wxr(U&~$s8d$h_&N+7;u#AZ z8bLr{yQ8g~Z7NlNTX_YwA4&$9N-Tr0IkloGPBEJKZ8$#xtOlJ^RTq2ub`KiPaoaL} ziBJ0-2#v(19jE@_&==m?Vg=~5q;V%Y03w7M`Gy@Sf3b`SN!bEP7Hn={w>#7}3m-f( z2A*{pJiklV6Z#QoLh(MTLUooDGzhSr&U)NjojgZiBRJtZrXz&lrEH;PV5Vol`xIPR z@d``ov~7;G+Q7z59^$US{)Y9N!R(o5{Plu8t}V-}Ja_-xg9!6KMJxAg{rCz};Y?{U zdc8zPGv3Hy*0i&}nRM*u@eZwAN^KsWQ8zrs(4IJ4x{yKX93)D7 z2IgP6W6WWGm;X4N!>t4D^`1-m(Z0Eo94OfKjK^ZbXHUiv++8=1%PBV8VQ;?UFUE12rGgFMV6ZIeY!D05$~q2+4uEO^GhkhufVH825Vr(a){kvtRt42C0FT@_D$Y=Evf& z5%ep(D)q_Nut$GVKHetNH<`29_9TQzelpc$?o?T80nZknl45{n(7sH~D^810mPpf) zI-QKofy>N{wgxexcNjqkO4LJiq0_hk`Td5?9k1i(R$$%71s5U|T<=)~ ziz9opwM(2DvY$weX;&wQAVWO*efK9RcWovHqLvV60tBrSW+Yx|CM*NSI~Qxl4oP9h zm0@$?aKtsd`D&8YF#P5BNF>1MQS_Sg=Ek(JmKIX^X!@yaTnxPJg<3P@e{ilR=3* zms_Qx8OU)FTKMw6b9_jTutoWB#;zdxD#deUvQX`D)+h%}>59A3O~3eE>aUI83>MoP z>qFrZ!9l$>Wc{qWU09;q84H+FTf|T_=m~TwiyQ7 zq;g=c7(tCXLq;Yg+5WbQ1|8@L!h--kt#Mm8#;t1luOm&lP3bkM)okf&^mL$WgFVdF zQ4KC{H9fo0c$be4-60RARmsLzFIL8FLJ<<%4f6`zeXA}(xQx~;PVZYqiR_uQgm8&Skq4a z+x9+Knc~tVw>G0>n9V<%ykJcqnMM&<(4C{Bn}mYa7vnc^9rpwhk7tWw`A(f5os&MTV9t*Z3s3kj1qnBRVZk%&{2d8!^#%iykd zYuiBf1S?jvcMc_2lLF6{6h|dWDl*ma<18FFCJZL(0iIcrAP;!(A^N>BsMoG8Abq)f z{P+YjEIG7#_K4fOD)0E_J08kAMiK*>Cxiyu>f*je;+*@?VM~6iN(r4|qjrn8U3CR* zc~%K4Oe$G*q;Y~=Q@#>hEBZTchArYycMB52>cn?V5@Z}_Khm=oLIu)u0-=ebgsTOY zY=v4za8Gy=U4^-UhX-e*R?yBvobeJneV1wznXTN zirLxZW8n*uVZW=fb^F%>@rI+J-VcWMf3&Ud1HK_go|hQFWtBY%@=+2_?t-5`MLDg$ zndhTW%1-C08ZZMTZn}TVa($r>T4+R}Rbh1Itl7xOclQ){8)aTivep3XgbHSUP{|=b zz!kgiL5Z!z%YIpEYmNpRP`=+N{_HM1=v>s*{P8L=0Q;7k# zc5_L6;f}jGAJK!BtN@}c#?Tul|4qio&oASzq!fHT>CbDzhu4C?@Lr!6W?+4Rc(Sig^u3#v1YXa({n@r zyGFdZ<+S@5V%;qrjC9s-%ArDie0yD(_G-S^zXu-``Y^}Ga&^&3=6Wl&M_&>Bs5G=k z`I+UaOv8rw%skiL{1o^AJQ=~WWJD#6_e@7UU6hH3-@b4oMdhG{ z)y9!AQgl94yn<69i^gnA;DAjCIYg)rSe;w@RoV#KzPnN%GF|aEi-SN_4?dnmHAH`| z6^`@g_1xT4`Yql+So=2)c>6Pg|mb*}1Pg{VGf6?QLv5LzT!IwZ!SDS9X!KN^lQ&3_T^~l!Yy;Y;CrbP zgiogj>AA)WHtx0r|Gc58GsaM4G4*rtwLPUf56mDJx6|PlI8@oAgN)E@e(@J*W5Svr z-*;W=11(n-t@E}4+sW9-?~7goHOF)mYO#CTNtiL&d2tLuj{s<^FP_XRFyhwf@c=aUF0tkeM-Fbaq1K4mF@yB>Q0>Ab<2Qq6R zkIfA+iiE;BWViNB%G?-5%3r#1s+bY9E@^jM7tn2B(cpi4w3sdVj$G~V)yDg_)uCMO z?F~C)fj{f50P{C13up9sJ83&46Bbq^L$V53#e%UG|cB*66 zF|?8RNNQ!@dIDXJr&y=oj`k060JR7(C8*a|$)MFXA-TWI7wbsu0$EOV_`xXihU(of zVbVP^e%6YVyKF12)tR(=d?<6k;&9Pw-*QCkpGufb5{f+6EVkQN{vXR zHfMAElTF$piQ(Q7_4W}QL}a$pL>%^Z$H#(|a4PX)+$F~ z31`e+F0R2+Esd4y{#o#*4;6WweGEO*Sz^WRjul1xou68mK)>Rp9jdv zD_s=Q6kHfzvv#woI!BzH_8mNH#e5~?OMgA=a|D@4sc&}3BDBA0yj9HZ2peXl5rvb zgFT4(nx)=}sB0`5cJn$))U_kBcBgt$uqKffXkThj{T?fuL+|Tx*9|cW%H)^uK-;7z z>O=3VYL<@{DBoBy(%UO%;+9)tg{3ldRNF~4=Z4@fkGq?zGZ~)%4% zq_|OW$i(D)lHu;`><9s)!qlj?xM_)8Z&8auU5SAskGNeN~G&X1snu^Yrocy zqDDeCFfF+<4ozCRTw(JTnbL7h-=S_TQ~iX-s2)jeIEKboq2M_wIV{1iOq%T`I6=qq z;F81_$^kdM2ZG^vWp@f#8kgul*2DbC=Jg zeLVtjnRvn7TrW3k)kEnNn$CY>Anl^D56V$gfhS)V**G zh~Dq*M= zaO}iJ0+A_={FKS)3w7PtTit{5KP88ffjs}Fmw^O$6N|Uh9$?!9{0Mx--8RVzQGz#dJ$GG}_;aEazm6s?INnq7g7V36 z15btEN=Mc6gEaVsg#t{l8`U!C5mYvY(m+S>JK6r0QU#2q+?!^9fh_IP%&0;&J{7_* zb?`kGgx0F_FT$?wqM355fkq^+2?Ek_bQ#}^{a6dTyk_!3?L2i$m$J8kv)H5&UMn1lC3871RsUqb0)I&!xs3-$;9vK;rtKX zu3~Z@JU;Uy8?9A&DEi2}QXgZfG?vvc#j647HuS>Th?mx&+ukq_MX+2d+fQ?J=y}Lw zu5&rBR#vV6_xU5VA z%(n(@Ds{W(&`HrV##5YB8B^*2WPEiMQDDjAeMviz!&n@6o&BYj!zxrh^h9);~Au`&lQHVb+8Dt3(j(Tdt)b% zgbR&)!Mlo4@xSlcq-X~25Uo%D(|x(51``!uI1htG|G|l%Phb2#Toy>ecSn9+eITmS z8`}1&>+W*;20)y2WyzHv8Y!Gw@(l5=$hjLMP9pdL{nMaSfd5}hBOD4&@AKsUf>R*% z50}PgV-+lp1T4G@J6t%cbhr%q>%D?FTCr>v?)+yBF5t{C5*}|ZUtD&Y-kSIA)Akfc@G)NqQ6ILBhp+P_J7$Jz9>G=#>qEBI z+57l6$(G2J|8*Ho<+AwK)i2a8zkVTD7hO$3bn9F{^K}Z_e+8ef?FFvUdC&qoXjRRp zo8Viao({_6_ZAy|Lz0@8dbGiRw>MZ|ZIqi8C1No6mw(;~VQLdT$trkKemtynF2OBy zE9g@@?6^yGaVZH1B{5PtUi^tx~wMU6SocmNQ_|DgJsc=|le zj@Nd(XIA&h+3qqieo&q>c98(_A1N?mcCgTK|FGdnea?B-Iqm!RG!XAe`?U|Mn&3Pv zGcrMTe-P%rwn7T%;eENPlTKXshCjfyK0xgrOw}784vjP$?2g|FK!G7YB=&=gv@fSG zgw_Bb7{+_Ezo)q$EIY{6Pq#qBrtO~soeiUuP9{aXtvBmiMc4PeT|H*kzkxYs416965`nM^1_rg(FrXqDTHaOT+hYs@YkE8 zMb_z1rmb6c*g-vnVb>#c%!NeW%5^4ikoP<3@|y*Hl0_Y1gfR@Pf34pTA7!Q~hxqiL zH87o$!%-+}Q1GSb6+(KteUxF-^uOeO@B63?4@Y_ zdMzTFfvZZ1GeCzAOEV0MiCQUeKyO^x2gQ#I;qHP4<%{kd#n{5} zlWvh&&?SB6x~pv6=$m@!wP`me3dScHhy2P4d_yVI+g0=qgH=UOHoHv<68%BIPP_$G z1lU>2CyOW86<9hPfmtjew8 z2?<&Q$@;cyp+09j8{}kw>g{_N`+J`y2WRSQP}SuPohr)e?XD)*7&442>22Ah0$1h0 zr(a+2F!2D_-){s@woH)P*5x^_oCshQpR)Qv_gW6Ej%TMeaICIjcPVjp2nFmwZQKlU zJB*=y&W4JkZX!3b6t7DEnR&zcIM{)at*nMLd5k)EvIx0?B*mQYCM|92{ougv=!+iQ z6pc!H$zL=rtKSXwMy~TN2uF0%UY5;hAeekg;9e{^s?WcZeO19tqkqLi_!hy+z`~dw z!AnvvNj}at#$G-;r>_6^{Xy{D>z-|dV!i+1f&#U%2!tSbE&rNL@V!sf< zqZzJCN9BWq?5$QaXjC;h1NvFZb9~92*uD#B@Qt^h68O)r;6rTh;Iz} zs>?r4Z|AsG&6pTkZya}?v!(gr=g7X1nh?ujp*hjD_Y>4nq@S_N5NxAt8y4D_;vZ7V zxfZsiCo5Y6sjwjsWkjuT`cqAgCtK)}cx#IW>YvMv55w?5`2G}bVs@nQPN()_~@>LpL?UZMw^4Wa$faKlyt9XA;^tbTONgb_J8Z^B%}I>cGa@>0fnz z1<&dc;36c2x8lFI43TQ&`xuXU%iDGzG4We@J+(9= z(6&c;5zQSkwDQUfMT3NSlU}LzhxEwK0H1(DRhcCyfU*s=wNB`Bw#m<`qzV z$<`wdEci}`!K{6_#9)48o+Fg1^H=LlLLcr&X_RnCmV`$ZAO@?DD)77M!@!d6ZyEHc z+M@c>!K9h86hQjcAm;7x7ZtPID0hTXI7y`pMQC8kHLo7lQf@I8w4rjL71A-YyWQ%T+?l&HJ!7BXm(AI4FYE!Rx#w?yIQ*&qX!kBjGm<6$`v=+9Knk@f2D zcFqcEc*CK<=fT}q%xL|G{R`u@-P|=L{0)f${s6>+;1m7Eh+mBhCB;;ruIrkUJ_jY z+k6?uy>d|axhwSQQWcQ&FF{Xbce$kb`%&HAL}jnklyhYoRny0A9^?6An2Y+JC394K zK%M=0p5XC!bfs^iGgi^=xH8=A2A)~ln>7Dq)XBf-Iwc}fp~SZ=R?3b9Px(5F9X68l z6-qF7NKH>jcRCpu)?qX3^Fec!kn&tDPF%>7V#^|sF!;|^2RDM*<6i@hW115t7L_)f z>%YH^bZs6e(hqB6FA(H1-UV4%E`1>?5wukGz~lCC!pSv%#v&esG|2uw#Z68Yh;3Ck zVn6DMfm|CAa!%ue+Rd6+t z2Vk7-Xg`!rrT$(K9Bk-vI%{+3^D++k`N;Ki0kazw`;*P&>{KzLxfJDo@s7mppA!yG z-dm~3JN<`(jI!&#A+6AqT-&L5yG#F((yKUO(Z^CK!+mj#L>7RZtz!@r*WJ>5b3eb* zu*qP(kSsq|Cmty`_N9jU^z$&>Jsmt+Xk5&J0zW$wbh1h=rF7GhY8@C3*`)_mU({2n zQF{iwKa;`nZ5vMel;5~ewDZEbPP@Gbcf7xaLUHmtZdh6fU^r{zY>n>(S9&4FVeAa> zS8PY=5lFFT2{-~<5*fIi0hvJ&zy(zs%nf$T98<6gkQZ!jkiswDc%fL-ESo&Q6O#R$ z-V8texi~s0N7ywh9{WJb&iA=Y2Xi|Y;{vx{`eJwV;N3iLggCw>?q;zR26`SfV%lXm z7vjvGCcad@Q=QJvp$fs9w1Qu}6iQZBxMN`poMUhqB>q({&zU=>Q1jjeOyoia+xA;KjZywj$e`OlXic1~JnI!8d*{!+y*Occ|NSX(a{-5UMGOe|LY|A<5 z_G+h>hR7P@gchJam$MrY7?Ch4e++_F7sk7}7^Y`8&&l*c=xK4yGhMnf1x0(_5kmH- zq}N=26Q&2aY(2Nc{Rog91Rwd?E@FT>3W28$6ep(mPZ~5edoaBU%CVdDIDb)!8W(bD z1xh1SE7*G}Z6LKfvij}nGdSh8v)F_P>Ndu5_W81A{;XxU2$PC-yQ#Q(`Cwla zJ-^&-{Cw7LcMySwvN(XCPv^-&tIARRf=SNcuC-P0c-(iSduPI26Gppk0|;kICzGgM(K|o(q+)z-W7zA1g}YM#WV2 zzgjc|8*+NIqYUh2G@kLq7%SI4r?@Zde+YVc7O&XC%YHYRr=!y~J9B!Fb=2)L5XLg@ z(C21sqQ*(qlTrr|6H~(9`@cMwu2_qu z7J`V@_Z|A$<>(|jW^N{|+$8rQMGnENSSb9wu?7v9=GXl0d-EDj?@&l}*+BEHlk0w# zNmngloS{3~GZq~(uzoXoeYngI+wV|dVE@D`)lSH!iJ5)6DZzy+JXc9N?2{dX?e6=B z{nBJG-!Jk@4619VP%hUMZ{M@=>^YMh7C^Dz+dlb_-WplAl>AZn-;srF)=c#}hp~be z=AX0{={(MpSugg?fYS4PA)`3+Tl_#E_Z1fK+Mm!WN=>TM@G_?=e4_VD*`2GHRs;(? zh&}PUVvY`)kPn*Ajc~TS(6d_DbB(b~zNOMe?Mgjdp(H|4Z;b;z;PY7> z+-UFAaQ7A)IMc&7Smg*o9cc^W`M0pB4lk+L=gS?bB&`hdU|y`0OP_UbrlME z-nEUexk;`_bA@mM4ZhUxZaNL|k7V|_ z&HgJRk0jhgB2mTl?e2~g;sL74dkNBeCfG0u2znX+opt>cdR7;R8Pcg}d+Ub>M%l^EV zz~sBH&-C7#_aoXRa_E#q;zB2!`lzyJs^RyotaFrAMCmizkSQbM71KXAd$)qz9aXC& zsqs6}fwXsDu9%fwD3SSHYqd@FlRSh{yi*~ep)Iv$*9vbnFHGvFTtth$p#pIeAE(>j zSqI&wf7ATreJIEi3szgFAblDcfg=OiZ918xB`$>dJ7D5?A+(Jl`>{|or->`dnAfFV z@nV`r7xaE}w%|dvvWg1|RQAbBai>Iv#eMwO=qlfMPbCg7*E_sq!?YL@n+;#QE-bfe zO*3coySB1i(KHzaVJWcekEz!J`~4s;CkWV1Yrohi)7M=Oi6#hSfG<_)OAM4~o>2WY zfv*qyh{wNAPNHHY?%TlqGcYA8@io})F+1&5$|=fIjR$Jeoe3zcLbM0Xxlz*N;_7E( zW>agqwFV-sE7w0je<&hS;2tNUrb7^!C<^_g~aai4SMU6P6z{z)-tQef`I94`s*LO$wnQBGj((|PU>Ut z)^_l!{Rc|Er7i{&W7+kxsw4Ba+D(idu}1v;VomY;izwVR2if4DWjvacF~Y`JL7PO- z(nR(_&DYZY`v~e}wvAzu-fqd&JihuCZ+w8ZKU>qOr&ZI;zFr%-e%WRqe7%n=OZP1s z`xWOA<;Kt;VRxbenz;g!-laPEm`doi@7L*C#Z4C9<5axJ*Sj6~8f;j*L+m6-J)Qxd5 zPwK}b9)#1JSu#wQPu0ZGyYZ69rkpxq|1pbyQMkDwg(~BNQhIg(t#LW$4z#KJdtQ1+ zn^hbF@r_)igopMcDppP|Za{1eYo-XFP-{3`ef0TMlLXPpL}GYsaGy3z^YrR>HdbM& z+wUn!!8?O&&|UXb)yNDsd;xCF{5eLZSw8xRb{w4Vm5-5V|I$Gb@x}i{OV`CSCNn3a z@ZqJe9v%D{1*Rb4sdXXop?(n5Fu=zaxDPs|L)Ehovgp7`!C45zOpEL2U5^HgY-$bi zR$OGbz*1pWGj}>}ZK_^u^?3U0|I1_b*|O#S+gMs|h+m>53c8v(=SJaYueBsJ83Q;6 zaY?Hoj&4i2i&Vk;qQQyW07q<%9Z`7AiX{Rc*|t`R*+-+a+Zv(Yf<0`*8Sxb_Zq;g@ zTQ0Z;=C_5DDg2}RE|M;U&;~g|8g_>X{duj zI=wiI_1Ckb#H4OqfnZI~=bvLeNkwVq@f5o9KMhXPGhFL&ede3qpdX3;$eW>(E+21y zMe@7HVoI6W&B8x^Zr^L2Gwv62O!$5yFzyBK2lkBO=Qr29Y&J9cT`3Xqud!E*rI0K% zs&pw*Kvaw%Zz-E4hg1*-e1-V`i3e*SIN@TkYH%dh31N3Z(PWpw_(fU729Q9ftC4|2 z+;N|m@uLu#Lwq@uisy^Tqx!wZ^_0C6?ftbX5t6Yv&5d0XZpqyeVWJ>EH$0tGTa7RZ zn2X)Q>|82Fi|+89CRBZ`J`#8b^|&o_>|A9TR~nI?IHvESC&44 zwX1Oox%=@phFjor!$f^t&jtv0OJv7N7vmol(^Bl*;?_7f0Njxaar?- z$oygwzO?Cb$fcI8}9V&UX z^<%H4ZHx+2$D}r}bL~rM!+8z|&d_|+RMs-K2OYHYJ4-YdR;Vjt5z(kSsdeJjNuFxNw#ey{n3 zIbhy*`UT`L19~$?>QCYdcqdbG9ye+lqErYQVNw;(QLEjNugn&a;?3n*#VViC*yO&( zEnzkRL|!R}HZZDWmqoSOV+ zcyCi`+m3`s6|`AQC4U-GNVxX>Fu~mZ^3^u-$I)juw4#ERilc21 zE0i+c*O!Z|;T;CXEPrKzKWZ)S9`Srcdy10y(CRi$W4b3MUFmt=ikbuVpt*BHVFl3q z+D=*uJ?Eef4;?_2&5S5`SxA`3ouL>Mvq%*HG5S-aqbsG)#MdkFsC$j~!PUq{*v^PAdHMrFh|aS|9iRG<_A{p!WlaX;8xr90UO?4$*9=oRzJr)sSYzA zh7*7M_o4VA;-cL=G*PMtS`u*|z!F3Y-F`@A^)eRpo&u)b z9eBH)oznyVd))HN4A@kyoX*T1^Vdmy`~oCzxZO(bX$Fd0hL;Uy+@o9R;D0zaymSPY zOK|b()Ev^@%Rq=(^%@QhDisdUI;ngjL1_wrL4b1+=u+4Fr{Q798~dp>aX25-Tbt45 zo4gwZn$0tU_}~x-FHB}A_w7Fkhd#Yi@7g*4e&wP%Oh-a{O+nlGRnfDTO_8=LQQ7&wdEEoVu7R>}vFRbF;=Ug?iw!h&VL} zhx`wG-l?KgqkaAqd_Pv4k%{Vx&K(B%45_r&Q5NZwdlNV(j-4JM^(<))W1vp$bZ?Nc zvFL#({MDFuX*2`8>~wJbeMtc1E3ZdCq{(FnUV(YUf7z8$n5*&17CMd4SGLA@-Ic+q z+G#GFIshq>_ni4hgo!6od4D3|Sa}C2utzKp1Wr$B^0s(XJRcEJs6UpjOW@Gk z?{nePOy;K_Dtw;L8`euWptG?1N+2(ir^2@PRzOsV-r1?*v*S)eMECWH^g`sZspc52 zxJ(@QU49G0e@)sWhyQKpYZEv~zZ7F!?T5@*1_DWp+D1s}NY5OPb<|pKZBW7Rc&x%^ zPJle@9lTLuAt^WN|BN(d4a5C&=tTQO)B#EwZQt+SLDhu=mt6c@ z_*||+V6<@UdqFqJn363}-<;1GZ`J5h`}kAkTVaUpV zFtG?ixEbWM7cZ&4K?c#wqICTP5nEGwD3>ndrPdaLUItNr8g}~& zACl<-MJcm3LAbY)-@kgg@!X=|jW;ee)q#s=cpQ>CCB3B63 z9%>>cnov|bbxQ(6W{A;WWDvfyBtjZ0U?iLFO6@io)@H{*<_M=jdh3xXr#EconZz6F zMQQ)TX*RtvOT2wP$T_x$M(8&dQi2|{z|1+C+`BJ)5kD4+`xt|zOln3ael6trkp2CU zWPOI)BSvPA=#aBhfx`htKB9PG8SGC2|DzsVjE$O-Nu4|#*vIekcijaJZo6hPN%_L& zt4KoDy(vM&o5T=Hb;?(NqWjzf%IUh39SQCv-QzHtZ^9N0qlKSLqK}J=7Bn-}!}|AC zPv|andGc)na0edf;G;DZc4wR2Q?7yv9Whl2X-y-AIav{T%OHp6B$%BT2Fyp|i089P zp)IEVU6xseENHUVvamdWZ(U?M7@7??TD}5Pd{A6!z>XB zN4J?ZEoV=%g?XmX2LzWD{PK>)Q`|3TFD6UNwezWt*|^<=7ay&7{-!Vw->5LMk6EtR z3f2)Q33CoL|DukrMoNft9y_*^Xo|6eG@A+Czc^{;u)|oqJcFJJxIhP#YsKsU@HR>%Om@0CR2z814DJGfar63$tAvCV^(Q^U zJreZr$igvVqfTZqtalkFy5t%rf>-IuJkV)@Z)S^%4=w`}iMH8G)T93^6c9A{ey+wW z*HAtSFS|3TZ>#aV|3p&THFU$UlRE3YLCtF6N*Dnw%s-uhAr}bd`5Y%UaGA{%~`+)+LqeB6dG*E zDwO|B>l3G_4>H`+y-sJX7nOzGcIxF zCj{`Neo@WxorX?*_jRFW1f^;Zp5JNxU8b_GOTNp%6)KdK=#_L7thtE~nGj(5C<5w7 zIZ~EQFIu}Af#SQx-#C(H?bQS-4^9>KDh5I!cGRvfdz#f|TW?~TD4uGd_X_`mkEzEj zi535HR;*cxy!#km7`~ZPv?|;F0ucAiFvo?tz^Pk^z7MzVzOI`jCV44lHm~D|27fyG z5XHC0dP=KR;%+o-k)&ijg8X@HB@2dTq;)Cb!Sx_;DZy@n6gSLtOjHHg*Ujl2>Fd~N zcu+pplp&`^%iXC*AYi_sS${PL4dO-97+&(XZ%P`oz#uKWQt#ii$MQ>7z_f&X zVe`w~7$bDeUj-r403W|ASaS^fGjbTgML{}e*X5hTh}X2jifa2yN6~ZHQb;U_Hd6|S zteG(e_g|_5Czj4_^YV+X{t}6cmWHUB%#*Lsa+o)oWy+der8(!JV>2D?h(v!anZ5eT z$RM00lu?bskW`{9Gx*0`!f~fBqN-+dVZtm^4+e&3b2Oy?cqzy@fMi(17s$~gaGf&|=8#U2_{Lq!{_q({jNas2`_sS*5 zJwlj8+;$=S_Jr+8k#wJ-uQmQVMFmorXLj1kaJTVvB0hi_W834ENkQ>0pdl0zGGwcc zY4iV9vOkug&xXfKY0^C+VC`z;_G1aRGeC>^3~yp78o?vp>(rBL;}ETo!g zac25|7-TxBOz*n>P{?%Q1ExzJR2o<%gejc zER&1j^H+OG#g5+_?FD}Oa1&Khe~9hP%$XypuaeXxlQ#uOk{(@=%fDoj0-+EiPGy|K z_PR6~QOL-fB?{3j>p|U#gV(40_GBOD7?6Ik)u_j?io&vejpY35RM)DL{?cUD+I#4#yu`^#j{v%Vv5F)ih0 z%4G+9DA-R>(SQR2NpS{)J(AyLAJUq8=3JLw0y~Zqtt5PO#$m_wM_7QJ^ATbM6b1NW z;51{CdQwSGg1bi8Z~AJ&BZHOCLn;52lp!qRKqfVX02rwgX?o%1iy*eg9p#%aylEK; za2})@^I!ZmwP1)_k5V) zSRtxJIv=)>f$`QQQ((*2hjOe9?<&%JeAy4ZE{BT?Uku;da-)0f{fM1P-AMahW)y#M zU+xG-dqG45B|e{1{ABR+w5MKz#{Ulr)D+H3iAUV1&u12C_FBa&iU(}?K(U<|K5S`L zmIiL_0Uj8{PmVM>^2YDvTI&be&0H~unBf>F*WxkpZG%5*21s0uHwX0t|4%SmpY|~Z zeTe@3v+cPd!R)ksl~i5#W6}6HLHYBN5w6fL-EL!~IFpiP7aUV?s*M-7?&8xTNZ{d_ zo(b4J0Gz=abN>31?SHd#c5F!+O6k$b=Q)LP>c8=&tYk-Se$9DL!-!2So%@!b!GORn z?0}hHR)a?wVY~U|r}#s(xzEYs1z!XLn&n}u`c|H}ed1q0DiT4TWvVz|hQZxOqWX^L z@!W2x!2u+Kg*tRiw@j7^I}ypZakz~{O)if)6DLeDBVPiFOTOH6u_60NJth`qH$jG9 zPMgYYN`!)xIeoyn%e;r=r76iJ;kWaGz1+u@EO(s7KWN(}5_r@T+RowY6hb*M&Dtls z*zjEZU&t?tzF&A|=atR1JyG6%4HeqKu%%jFpUA?y$g z1+e-+q`=?lWKUx2SM1+Wz?|1cd+fB!B?LaiJ>&RKpPumhg*s+MRvGl(Y6(4?6hsUI z`gMSidu$JcVpx_nI_xI?t;I9@(y;5_dyCjd#SCXx1h9bn5xqyg`p3Cn(DVKZg+%qb z8zs=iqo1kGA*!uHNY)kv;kcd?&CD0^kx_p4O&t}<4RNiN0!EdHvqTujpu4yb580pG z1I8Up49Mqivw#g_`Ynd>{TxjjHXg93*ZW2TQ>c4|zJ5~ppX;6QhaxWHjO|vZxxu{X zp-E%{*-#k@@t^I`Rg>n>MeR9aw|^fBI&YH>(-qZtERCR56rp&AKt#~bPq;lUI!F6-nBOAmY9z^%~_WRrWoJwbhV?fN!gbVg=_HELFt&r&2;*$)2K82O1 z?xD56y%aE^B(=DQDYvqh7OkTZ?(B2CgaLaY-HvaL46P5=PQNx=cy9ojk8F`vu{U}l z&YzM;J5pSjpz5Qkxid8BT=uM5Mk74eU!OqoaQ|Fe%?tTZE4paVL zOa>P!01Wia{Th_O1IB@KpR=G??K%kbXj=n9ypVFX33*bo{EPz>W%hzTJAm=Ykx6E* zrR-$V6Qc4|qbB?m*R&Mt3p4z#e+i;2V<}(-oAui!88sbNY*;RK!*Du1kIYkte|3jZ zZHT!1IN<=f;n8c3@@AB80}xRW0%)jB;H=}meo?&-KFnodge-@`+D*D2;5yFf0`F=i zx+ksf#8kJaeAGgI*6DHcb0;$B-=m#NYE_Ih3rq+JHmo@1-WA$Fg#t2q(&c%hWPDwg z2t*^hGVcQdlc|+n=pZ961fMvd-%T5rTW`R##nr!}A&=zi?eU^YPY z1L(Wg3UddId0PcOo*%{cBq+wOCZzqBUOFAQV!*W(NHq9Mipt|R8~Hv9Cs4qS#YQpi z5KcC84D?^LM~V}{G!(q)m05>Z|B=))n{FdcGLw>Wrq@z@z2d8DjRmBY6Fy@a7y1cn zsH%Bs6hjq`J}*dZx~CTYtm|wXeD~Vj$L*DPS1gB89mEH?iR;wt`hG!Gc?I^|1z8YR z7B_0K304LM;C?l@#im?pPGy)rgyf` z>8lbc{bZ{*AmEdoLy6O=_E*T$_wp#s*YMflh4Q}ohJuys6 z*TL?T&(Y!iCHKLvN$$^gB;2AlCCKMo)FNL2ooTw@x5Gpj8x9ei`&@LHN)-Cu8-Jag zz&6E&oJvyYjttag_!I=eLHhd@LYOsfvKm6h->V>$Ri(9p=^)`(r9Ue$7ie6{V*-`C zEdm5!)>$Fo6u|mP&vK}7%d?^J;kOh0$E*&KPPwaZIG`doKwK3?z1vO*XwNWm7-xSV zg^-f%t=v8-s-4gM0OIEG_jo%E$HHV^Ixq?}pSLHT;iy zIkVH7-CcsFk&v(EH5^Pr6rYgdl$q$LJzZYO8yf{CXmegQr#=XY{f2vgFxhL?`a(lSHYyAjGPB6 zu}POl(T&O2Bbqb9>_COLj%nIF8;gdl4Yi4Jun(ayU#&b!HW?K?^=dB?T@qWcOO~$5 z2t749l#{5Kxg!PS;+#&`1RM;Ua1~GI4u!`kD7q5%V+E*Up?f+-Lf~i%14Ww>^jR$V zQU#2=ane;0nYMvF!w&AGNH{(d@SY?K)V z|L8Mb1Gnw#*a$%8*H`;o=kxY(w^cT47PWb}FaxV=!#TZJ9gSeTa7ruOa5CIFNtTKBV z_yS4NzPy&e+@;Br6aAZ$sAqk$;9qu%maisMxD!-LJMsq=#mgo&)JUhu}B z$+#t4>H$NXnfWy9Q&C7dGXY(QS`>f%*RzRmvEh@k` z8~Sn_$v-1c&&`lj2btOB1C>T)eSlTik@)k<5q5hkYvq(;a%h^mRiOp8)=Du&`c-M- zj!tojgt7(zLv6{e|9l@KoXn*brVxFN7WsBS)_MrdStk}% zvMl)fhOm4`Wd&2I!;JO)3k0W-hb|8k`<52~zdAjeyq|ny!9`G8)wW4ao)+*9?ay%c z*L)pR*~bK9F1Tm5c{G)``DDI7ZpG^GVerXT&f8QX3xbd1ce<=I=2W5X?D+Y|C zx4TU}eB5&yQmLip9bT&KYh&r9G6iN&0AsV{JLw^|JBbt3W*{4eaQoxx5)X!pb(aZ*nTE-Q zKeD3~29>iI57KMY>R5tEuj?eV@&J!7FCw-#WEoDka-f2-5aEJt=E&y~I-K7EE~ZC6 zuJ5Q+`N7#(u43~wbpO@b!3l}Yj0u!{>7{YG2+aj4zTHa6HkDSh12Y;hc;&r{s*}MH zwAnF$8{C7&=$7d-UtH3O226gxsBt!I*J}6u6L@RDR^mU9?fvanjgR$1M{`)ei3vSy z&(e0|Q_KcVfoSq;#|&pKtQLf`w?wG=)W>rxEvepbWm-yHYQHN4732$&|7g`nJzd5g z>7OH`V00Y&Jm;@7M9y%IYU3QA!#h`=YnJJRlO`q*+HAQcq+*vU&w$)~`Ep$0!W%YZ z&uyA)cJ8%>GDen1zDf42IG>k5{8B{dLnQN?g|Mn%(@fuFBBNc}l78(NEz^w|$U6VO z$dJT)w%%2cpRs+OsmG=6*sqNAf-&__HkhV<*L+h!KmO*0uA4)rUCHM9hwYH-02{U1 z!9?EQix*UaSHU_I(MqqPuB@yt90MV~Rli8hd0{Lm^INK|AXGZk>93rEz2{c=a|ERR zdIB9sh8P+x00wVBJt`kV!=+{2Q zQk0Dp!c!dvL*IlRiSH)>CA?|{@`wz}U{<=Ap1WBDllw#6l3#&8ggo2~3BUrAWG)*JT{cK2~NrCR?f`q`3mX+NY5=B9i)oMY* zs&3||uAn!gFAHD9cq82yf5Ff~(9x$ks5n!&@m%iRVlWuGrdl|_oiKGB=yaZmQxz@? zcDs|7DoeMg=qm%XEYcx9j z;Yio_l*GVeltvtdl-}y8UH4T~5{Y{7x+%Fram|g1kY2YM40Z2_6@lCR5LeMZ{F_$( zS&Juc*_82Vr|@ga2&Otg57PA_N;DXqzM?<;3h8ZZoDU=Gw?}yjz#n0VV7qj&B3+#bYKdnJspZ0HyGeEZ)S|$ zaL{8=Ac5cJfaD_S ziMDn@i;a)L*D-C#cycnBX@MIRnwZy32Ko2}s9!^HRhL)wB7CJXeGzO|eg^QL0BBmL z)4D=-)$XM2h_t!(q1b;UA^?gLN3mAc90`JgK2N%=0=_#fE5z?P zIAL5hCpa=At-PsKWV83YuF1Db=6k?*$a75p+na;%O?-Giw1Dgt^ zej*^*_{4bQsyzD?MQm-{bN;j9p}-BQg`!OICG!fo*k|$|mFQrhVPi2*UT{e7l@C~H zC(;`ULiZk~IJ~+iMxRJ(mVN!ddcwAWJ^OwIM>d6KUxltPpkNauF+-j*-&krkGp-Fy zT`C}ePc_NJ^8(M6VlSFM=bw-4(dY zObHgJ&v;d<-HhxOZp%ao_g`O2@fYMV`Z!7Q7<0{%a&j`t%xPgw6q+sNITXC|)THxC z;G6&Zn^QHst%r(Q^f^S?qLODG)on~cRlg2-KlfTSCtO-!qVzgfkyH2#bk)?$-T$9B z5CD@c5bW2!a<4%bPjmz4m#EWNpI1Xfz!fDaLfgvN6N2XWcNK4_^%b(uqLRn^PzPt` zTPrz)hdTVI)+r{ZHxQ!>2y3rISii!i$r^UGr34LeJs~}3RGdt2xBeuLo|tjy^Pl6O ze^kxO5*`Qe0`Cxx=dG*Lhj}Ir7Q_-~-s;WX7Q&A|N7X0Ila9|GC`nLia@D>~mAr!E zXJ`uiB!XFU1VS{eXZ%wQITo^6dIw@xA;c#J4Y%}dJw;R~YV&Z2dHnoZkK=k!r%&>N zdfunz&%U!`j~J(ron+*n_e5b`N5@ag3#B$z|M&<57XCOHs6ef z+(^F^YKsyWGl~dn>Nux_tZMC*;!|%7glkxX+u7cSg;yGU#vd4`%wPyRhvN!R&^h&T z{6%PLM_fRhU6b8 zeHPU|r1i9sTk5n?iGqhE#}b1-l7EbeXx}|jf;QV>Q52*SAziy9;cXp9Nm8khJL>}+ z7ow6m!Z*qLW8aBkC5gD{?g*~(+Yof9oEv_l zgR!KNSPxD=Ej6#Cv(TN}HpsomQuC*0(m`WmsK@bFj8v+Sr~)(dDXW)MgcuFHu;cag z%8x&6(wBiaQFV%-0g19GKRHPHw%!S^4RB1BB8j~5zfM%~Tq7I{4hK!nYxv)JHXiJn zbRYvkYb_}y#^PBB13569CZln>G14#?&R_EB$j$aROqbueG73mcLw^@~e$Zi#F3$Md z`l=RPH%mbEit{I|klu-~PlfaHy^pz0dwvRu_`WVfTxL!WPbX%e=8=A|zc_#nM4jRN zTc_zpt&yaYEKj%<(&i@KVWFt6>voA5JydF)h$ci$3(1G+sr<_N%Y@LGX^X*6Sq0U)){uAafR7nKULz!NWDr({Ewrv3~HAy{!O?ohP2yB2qMhvM!5Lh{}B`0p2k`4Rjl#drEf;&nV%2t5v!Ou!iZ`doVWd_qJ5 z#Y5t3I;-E!HL!70kxtvr{V#}Y3GUBHQcJgAoG^mV^cmYb8%!DX=8rhz$rXZ*TQeqf zDW4C~eX$xhuanJwgV6NAj9@;O3Vz#N{r7O){QmBwv1va z^xim$^x#L16dQ_s?K9h+?L22fk_Za-a+&+G9z@+6N3`u&{KoCCRBf!c^baAv6_SxA zfscJ9CKs>FjvX*;sz`V;Hd=NR{Z5jc%XB_(Ys zBhCpKS>Es1R!w}%ko{3$Lm_=%RQ^lC_cT;|t+3t%0OS4qSvSKsrZZjFVN#qh*!`aW zp+xE5^Xmwa3FxxH6#Un9o?4eCTvgt=fP&jF#aDePZZed3d!jauc=?7YD?`j!i8k@@ zx9kq?N8?8_?dZGH0F&e8dmMT_g-FFgHz5e|nFq!0@6lx`OW{dtHwumSKlsfXYXnMI zS0Zf;tIq?~Q!o06pSJn{8zu{kPGE-3nH?a9f|BdnegiXtHnlzA`LwD$k)G=a^O1i! z$=i-W5C(JD=Muj-vb@H$l6$La$GNOU+;API-J>THf5ta>_s^(*fBLE#mDnZc^1mPm ztNlYkv56;8z#N}Z`{T_GjJj%n(fwc(}F~;+$pjF_g(i|;IA=m zfxD03Q|J@NX1g1v412-ymOy9QW7sJ*oIP>g-?YP>0c1@Am1c(igqF9*y7H9fU+~0N z&Ii7T1S<8yCQyE-MhT) zib#~9x$F70fKa|C4?A0mtpA4i5q>=d*%1q{JEC)I8Aa0d9zo3 zFufTDG(7lUaSM+3TiELx-v)`)Hk(;fHk;$D?kA7XMs*e#K){gm{Z9rtVcX!QXcru#j8t9SkQDt zn4lKt_qORxpd7b%He00{eJp_XboToT5QqT*Ksgr!Gk4n z)kGyj&{HfZPRLuUTbY3^>sk=?TCjbLbBzvq(34FKax-TOLRUuCT1hNdPJ845bH;vf zxAiX(NFy@KA$e@|m(@VUILtZ9ogB;LX(XlwsU-mHJWHn_4>yg(x|n?J_B?-%9tQqpD|X5V7-}$@&CpsXKGjlzQksc7 z`E9+R=M#~O6D`*Ou~G%$&tTV-1t%m|an@#8Rax0Z&L0c=kq3x3>KmB~sj+kY;-4=> zBukcz)aW9wQ2T#ib1--=lW(;AXkr*$c2VjJ*X8}X$$g%Pb^2%@qwYnkH;KJCZWBEi zlq0y}E1ej>p7Fq}mglQu@q?oj3?$;M)Vogl42qL$?VWxc^LN13(Z%Fb>kzyIROJ2N z$S1>Z(mN^jH0Y>0O&{td8Br^VD z@&vjh@idUH1-U+NL@o`<3@!>2S_(HQn7D&Y%jQzoXs)eZC`AO0ZD7)1*bZq+3WHY8E?RhZiX3y*9(TQn z`f&Hjse>jNbmCojhZCkuj=$jUm9#3>Zr+FCIXPG67L|9p19w={+o9^S*|`T-#YSi) zUs6?K9w&rOPX4(t+Y-43&-0LycX)j=CLlr+d~ES{i=18Y48k^f&b|_Wr!~?>__gy+ zuk;lc8cz7Gl5n7kf62d$^xy}6#WK^J-lD7D9r7_YhJfu{PNUe-_Zau>s3Dt=_MDdNIe0&fLF=`5;pU(7M8#hn7@3G*M3ss^h?rRqb_F5##TjX60Zcn z@qNL$Q8XCCV^U^-)6KoCS!3?mn{!8;h=huWa@S?O@aw=QSV9gxoY<60Sj(x1s^LO_ zM_}W2ktSHsr|ODEgH%(qq4E~h?L8Hi7z@HQt5@5w2#1}Tz+3{{*y2iW9 zIj+>Ouonsl!`|JqPqXry))qyh`fYR4SOLF;pG~H$A@1R$?tKRyJReX@ntUH}U2t;f z&1sB7cKLWDCo4wp&|oUFbV z%;60Ver*;R?7I4Rp|zGkZ0QqtD)6meH6i^PIE5W#v32-5!eFy;w-w?@P_y+&kh3be zlLL_MndBeX0JJWATQSK0Vg8TkDfeo^g zM|t~Oi1ttE{jB%bZ@1cFA)V&X+eiEC9K2R&%CI`Ks}{{|Q_frCa;EfXH>~zPru+cK z<#JW6++H9M2(!SFJCoI%S*oCqR!M#&3x443Erx(~K{04Qa8{)9rMA=JG|pi!B1zvP zgDW>!9?=dyEE?|P6wT1wdbP$7soCDH{D7d4oQQh0v|3lzkW=U^ z(Wa)G9=;cfU-q-&Ll-?&W+_Sug4)&w2eTnu<#w)+p(Z&8jJZ^ayw`y>v&OxPcb@C* zAiwMj%fjWQOAeRUY!V{v6`d)S+#7}7NPftr-PXU+_M;$jh<-intv)6UxO#qd)_5^? z67t|-6e#xFowfqHqL>+EH?nK5;pH&2ccWamukaFtPi}gX z69(t|twIU8RwKv7w$gTff2TYo+I9bOutHvD3+FbG>2k!#7GgiQ@Uu@^B(M(dj&63T znR3Ln=AVt!y`4@ev8GNowj3(ak);Bh3I>siR>16`O;r{mwt3XoD`TLa3=?F!708-S z^Vw>sp3LixiDL2R2kUmtN=l`+bPZ(n9Q%BXEXzYu$R( z)>iv~2_u#fYh90;!IajXRaNiLz623v#Fsw6$N&{*++{xqiC^jITrvXK=$hR>eNh#5 zSYHOslt~q?7VodU+Th%byzfh7J*_8g-mJH_nX5rTDMoO5_6sl*D7@f(m-^yDY;TdQ zCVcl8=jMv@yS zM|hfXEW8!Gl4ht78DDyicy5#tl^EAD8hf$>AI9x`3)7khkn^H-hfg$9BDsOvqbH)|Olik1Xrk*smioa_^+tzVs{#+##<^2}(rEs? zifubxU0zwVS2Q+;IgnpJw6$2=s}Igxiyz^YyV zp81RfOHMmzkTcE8~vZulxL7p_gXW@Kb0w zv?a{TWf;=Qmm*lbPqlk}xjp{3zzI`r1cAK_{+-vRinaH6r##?JwsQXv!%dnVx%+iF zc4v#T)HQZGi+<6JMHBUhMEgQ(RcEpvt`biL**@H*K=6-#W##!1dFb0oxK7!17y>V;@ z3+kh+QQ~*D3p-gum)u%Qyv`$9_85ILsdyO0Yu|pA)cnpR#=&{Y{Qzzi$8_PRqD&Ch)Qdt zRp!xe@^<1!J$I<3%Oxgw2m=w;>C=*D3YGh!HM^%7OXDdMI5KcgvDr03^GPvLB&OK} zl%+(RTwIghS2_1ZunfGFuGz8;x{V$M+#Oj}w-!11lhf~Eu1&Q}kub~yRGSd8iv~Cz zNbbq;sHl657H9Z@)x=~GHm0c*U)$tp`7w@ZFw9L%3HujJCMfpwmdv;i$QkPd8~)da ze<3iX&Ibes3){YA5Flhs+sm-}c@erqXsTgQ`;+a{!=SB?_wUkNzdIHv-KA7T7wXGa zN2JYD@))CnC#ak%yG}`>@$K-+1>|56$%or-}&{$tqe{77ujpsK=8SzdWh2 z>gid?QC;}A*d=4T@bwm2esXdcWBuS!FLm+_dX@5N>dXj+}_q^js z7(e#9x91p0Y}C!xP%JXH&C)%GV#YB1i=(#NXFJ}RVp}9g4fkfVSsaNkv3lntqSm_{ zNi+1X6;0|^fGOf<^m!3H>YJ}}a7E+;;%-^CHhcc)xE?wkM;2XDFrE~JoO8%sbMXonK)m^hG z5Dv0#Sg4iZ{F~0EhyU=4{4cjdpZ{K2O+f_ahc zJv4%XhUkrougsY(!ME)jFXZ{sn~KDa8nR_*+V$+SejAYsgVqJ-#$sU%*C*Pry-PMw z*G7}F;H)6^6bp8XLG1Lixot#n*Y9n{`gi)I1-V_ArL|;heus>K^2=dEy`bzK#}?vs z+w1P6)Ni0eXD#8^Y)j1UYlq|T;+Nx{@l^{_6_bLV>XCmsOvQa;?`G{~_3jmh3aW+~ zH;HY5*IwvSvi-Ax7dP}XE{W#hHRa#qeItoSfAxBuJ@nw!iN!zk?LgsE*4U&^GD9Z3 z?{~khBnfU3=XF2hcI0gA=kj3qz%Rz@9Ns$srgZFuP-XS5CP4T^%doc z!rZ=Yv9MmLwVk8$oMu>su^ZNu$SPorVl!B)iS#XE(l*=dM56B2;}i)rg+@IZAR3eZ zvaiUX-BG6>_rUkWBa_dYflo4>Me{`I74dE%6Ya^6Y`fo%dd7KSgTZ|FXvsEpz*n|o z2KeS0G1rV*WW;U(WkJ7pdp>dgoN2OC3BE-Oe$*&2uOC1-Hp6#XUCSxj`(3Yp%s8bc z;^{mEf{X}%dGXLtBz>T`0HP(_PlzIaW3kRZEmHk1HQ2TlcjCj4?sM?^WZpy%eq4mQ z|HMCnGy}lGsG6;=tPm-&0HfxHpX`Va6j@@ghT0!TxwYvfzwjux7Ex#l68M^Ms8H+0 zbHU9&N%ehBWl8714Qg+Bv|{&gWN(!twY={3;`_e$QNpTPY3$RG#KlJRm*vnDD%`b3 z7%RasYty8x`F)Qeidt4uZLZci;m}~JL?2;#S0e;A(07_rX5)1RSX;)*u0F%owMes$ zSiwV8q613tbvczfnc%JAmfWR%y3fDM!__Tug6ChprOc+Gcak*VcfQ$2QJ`_Sn`^f8 zDq8Sy#wG=Ey$<`-z`#JKu{LTak$voBh>O_aOm51srAe7U!_wyQ9Ib#f$&Q3c0G@<% zlvMi?R9XCyxi7g!o1uS)D*i(?AqO zU^9(;tKggRx4gT+gPJ?rh&FXm+WJglPG-9otg~kS00xzD7?|;P<}vvT(^_r+$jv`e z^3i`;i;Wpk+2z? zvD}yB11AkmcjiUyIJ8V(&;W8N(Z)=os^#MaJ0bI$DcI~HzfueywqnxPJ!^#tGZdTL z5ofYBb7!3V8T+@7-D9CRZztEmDr;)tD+!BMq5n?#_@w}5npJMtSngbXHxXLX8Ivrmc39Zc>`O+)ETXXjdTN1t9z-?kh^nPu&-jUGl zcSMvQgj*g^#Jf)-9T26)g#is&%5oyHkvgcrHpiBr>^lDV#k3TGK*m?M0ym3tf*4nq z(XXUx1&hx$%uQ>R#y8K?*q`28`(+OQSb5o)f-pzGY|~5jSfW&4+p4QQE2-3peue#z z{NkSFk{`*Kt1jWjC&(g-g0nk~5aT$WM8?dfsdC@gbrN#SS<@`*pig+D4=Rjs^|u$r ze#ykXMoqPZC|~#^g3wD9>gF;T5`3AXojLLKrCnT9mQJO~I$r%h3C<~VTCH(vJPF3Z zA~lV~D`gB<5sv=L1ZDNGqxCa1eu|x;4GlQyz^mTS;gZM7qVd^8nptirAqE!~X_SMj z8%k+sixyTH+wt-&?eNGPjMln(dnk+_uB*KP^$DGh4a=#NMkABc&W^~l2}E4*LrLzc zP**n@%vSKxa_rjqB0X%WQhn)W9$=EMKPOanGZ9SBY5r?7Z`RSsS?z^gSfc`Tp7(~i zrK=qGL?c_v08h}tLrMeUqR~SE^{d{fTa(B@xb7z2>D#~LMe!QHK@|`2hrCaH(b{=; z$c9;}n@~WlZ(7Vc9-nFl7tR;06joI8b6We2+Dy+7^m@8sLUy@r6pd8`D(bZ?7fh@u| z<_GGV;01Ym>GxtggzWzfrqp46)N2&lV#526=#hUKYf6tqx`&vq5^a!;?f1YGXwIA0 zSCJT)t!XH?kzvfx6hVsup~!=Sr`+kX+DWhp!uFXAT?O~7B{RNUM|h6K8FR5^ov zKi6#-O?K=-R2NeXopGAsvY2S9Ob@O?-9{qCTZ`?s`N@QLb+r%V-DtmUM}@b)lg zC;t=&4px|h*~H)H`fm^I2vlecyh>Bna3_pU{!2y4|LV(W3yZf3Q;-m|9~sqC!|dWj z6tL-CR+CG7FXvWM9NKB$*CpH=|9q|FzebFFqJ&vJfsvApQ%#dD`N!#qh8s87F>N;M z+7^aI$|$$?xqFB|t#CDlf!Nc_Me?c?(5^FnbT=SR!>mxnAmqcIN&|dc8rKaAss=AO zoAy^Kr$?vEE1OzNC-r#rb#*V9AD4A8r{9>B8xOwS?T)P<83jU%=2D&5mYms?tH8=# z-Bg$QCDM(z`Y*;FycNxV2cYGmzp?4b14r7ebMLF3H!@$1*RsF=tRB!O+fRNi?fMz< zy0s>W`!++w+@X$k{D1HG<6Zmo zQa3&AJB?F!zG|_5s;s!o(41OibiE(%*qSGj^AR&w4k8=D7f1qxEgWC6Z5D4QTl{rE zK0aii7L^B>@WSN&lh-5iUY4JufjI4~5%=h2A~t0b{yC(6!xn zuS3o_Y7bE|ZiqQ4y)CkcSSXtC?mj#IS(5S4tui8hT62w?XxgQKU*+!kkt`_ARkF^$ zM3$YBQpsXS??+NG7RMAY-B620q# zOYnr)QlpgWEJ@FuKi2On0@zA2k4YD;51h9cO=j?TGjDqOK0n3w?@_ttp$F0h*$6@Y zs=seU4?Zo}RH#3iqE|`7`jeaf@d(dpuBb8HGXQN=5{fQ-K2<4hxecoMFbLg4 zZb{iN1%DWQE(o6LV8|&YqPk4>KrMYN4&JTMN*$bDy$mudrEfzwIepi)7d^IrpI3$U z{c_?D3kxIZ-lf3MT@K!Yxr`yM-YME^aKpKE0PhfIRxSy|?wHMIV$64*_-XChWX zrO0*svcujSYySA2^qES$bo{rlg)G%1xg5_RlQn`r76$2%w?B0Ge9MoESRa_*T0UB) zC2i`sLC<~X31Z?8;}>WuRgmr_%xJ5fS+w8EwU4fprSUg6K?5UKEavM-7}{xlb=?}e zZ$;SufV-bJxndobo_evMEMXcB%$pH?*PYtk#IX1m>#HzV_)-QI=&6e^KSA*2uI3x1wwR&BBGKaJ!Veua_YD6w z0UoL1{P`M)T-K0|Db@X4{8fJF;eG?lul(PR<}&CGsDq2iu27Q@y6*INbp(UO9%tfe zyhY7{fX(P%a^&gDRwf(RN5_no*Vp1?GtO#j3i)vq*?;FDiYze&h9wf!=jlOodJKU( zD9+=v>>rQ6(A%x^h;iV#>JfJjG`957M6uzMu6=kRwt6b2;A&fX3K!Z#ju1%o7Eveo zoL%)*!-Lb4fcJB-&=@VtyT{t@t51nthIISCJIG|omc-d^&oso$##LRQ{P-(h-Cm?c z@^3J5TJc`PQBeHe&t2w+CnF@o%y`uOH%KX>R6aWuqLe(I2r6epY+;JM>!M*HUFR?H zy#Z7CwW&^0QywJWeHqW8yg*d`#FSsyE^nu8TktTgDVF$laTy5xGW8MV_-`QEn3J4& z;)}>C3`N!373cL$5dV*gwtCLJREhTA)>Qsq54LUl9!PrJxg5749lu@fhlXWiVOp8O z&~elBzVVrv!V)9{pGlpTJez9QV0ZNgUaATMp%zy=jC*9>x)%g54iiv0i6$}lbpOyO z4!q4{=X*>r2xS?Q~ai^fGGjQFC; zS=IFzT=N2aVQG_3i;m8Z3IYy0X%i2285+bsZpG4BEHa4JWJ<(Q^N)82#nNg|Tp7p2 zuP4tkq}E_Baq|2<4W8Qjl5y2*GT&Le?b}(;973$T=$1*uVDhaU%?9F8ICBHv06r_s zFps{U*FXF&_JpUm@^)sCDbwzG_n`X9XI{bBP95c1-&Fo`bm?XsM3H+|A`Nq5b!rKv zNyadrTjk!m@$+sM)sQl{Q9>iYT7(yh@M_iVg}x;OX&M>!0yQKzkUcRDcERxIf|^^wWi^+rY? z(mVmq(t0%<-{gS6!Ryll9RsKd>nmkA>LdQmPBlv2jlsSQ1`AgeT+PZ&LROtCjbE&) zB#}Z-o7q1J!=xC5P}-3{$2eg@Xevt!oO!}R20IZ@H!-!MVqtuRs8}+ucfQP1b*zV2 zkJmC$o%oT!}OQfT5~A2m}oEgs$YaEEbg28 z^?GUVKiM(tq=H4N#OK{52Vho)y=du}-;pS3btrVit(^M`tF(i4TW1S5Z4c2n&t!+} zuZ^{I-2aoDWu7`EmIJd`zFv#42eJQeMaP6bPcL8U{w+kp`YWCRO4&2|ywl+oB}q2D zj&G}N)het;w6)IIok{~>l|6{NWpf9hb*ig#?w*>9OJzsB)++daexGU0!#q)E_U}&Q z3TT9@ja3r{REP_OSI_QX2hOmu3zBEDW;^|L`|>NZ0WZPn>w&A$caU%lPk-%?UKARX zJZ|mdkNwh(uet%IVBU6$z6ZUvzyrqLjU^4#+%F+6-wy}=IL13iQ57>KH&-*uM=`ZkGN;y`U4$L?crzp4g|+qf?n<}j_%@s5RQ!%n9~9)kN`GHK zQ!5x{p|~K^N#^A?7_wt@FuB|#y}SjX&M~Ql%#=bXL|hUq3B9(`&CnPlX$}xZg{fOd z*`~GXI<})G51Vp#kLVQ%U|Jac?_vEv1pd(=TnwoAKg~8>{(Il{-uBxGA$A2W?A(pK z{4CVFDFS3CD|=HD44YS6)h4nOv`y@yi-#ES-nP>5iK4Ga^P?~egGNdO|`5tT;JCD)xyjz0lH7(gZO=B zx(>IRl%F*ZCyq~96SwzlwJOWt-dD#*a(MQH4WWY<;L4}#UkUe}Grl@zim~_3O|Q5f z&)$z$Cxz1W?x=?Qv<%Bp;I~fm%vV(#*g!4uVz$x`A^VJEd}j>0zgU*q6I}JDO5Kdv z(&2OcP@TUM_UUKe`}yuZ2lDyHHL9Ej>QxPg1gm88*lFM9`v!;}QMD3d6CDQK(FF62 zyTfI_t(LxY^{g0l^mmSmfXj_6D|bAge4P!rh`m)w_`)-=jl}8|rlhpD=#8ncjqu~4V9dR_uJU*;#wgT*tUtr=i zO3-22@m=OEjG12+WrI}c@jBO1_Q25(x(7UrIo1bd|1-~n&7hIo3GN9f0Og&U)yCE! z71*{~%kT7lU0-ZfbdBj-Efz4b<$l3yr@eogh!XpE?e${Z^zEnVqOjow2C2wHKOoa?PYW$hd+{rpMBjD}X93XH+mw4zplldi!azK&iWBX>QQ>(TiZQ(81 z;U3xBs9Ku_jr#B%Q_glmzX`7F(t@ATw$qJ~TySxVA;$10*;x&)e{KCd+SrQ z{YkuD%lI=w8}Z7JKK#SsybrjHfbu{qB4i@~^oRc0f+*y4t@^)JaBm8`+8Bs?dL+~k zliBs0g5C{x}Z6&oQ zEH2RgK_4T)^Hbr--Kb?MKYGfLJz8U@kULO*F$=_9hEZNDtfTw;$JZugA zm*cSVvw|?GL?1F$76GznLJ)$gBM2ml1|Qy>cAVZvf^rzpI(Cf1Wlk(wwY0v>{vf(F z=fXmP-U2)wj?Y=ACqs<}V?}@la3^TmM=U750e5*jS2p{)@)f&t`&s!)c}(rx{c%e{ zeEapPW=lGbWM0k;yMak?o}8TCRrb~tc09HqhB2@s@0Ql!X-Gi)`EI|Tks|5Y6^?fov@Fh~x zCs9>Vhd5~Sp=WzX(I5s;KdI}f18W(m72U|)u zvYA&ZpJjTN_V@#GyYFQ&rNsQ<>Z<&=35Gjb1nShB46?B0O*3WLekBPHd6hI2^~zP_ z`5^cGTgaoO-_X+{GqFh9+aAL393wQ2W;ZLei3M*bby_x87y{nL~yIl-=g?_RGqId7%aO|l7 z)#NWiSxvG9Uw=76J3>98cyk{V?FeT)Ke3pFxa42$WMTUcMCoqa#HzovlPU2XOzdzw z1GT4a*PRI;^#v`26DhWiheldw>de3XV>|l7;1Nx7BH}|wSm=FYMe#Ca((R{;b@mOF zDw85pdsjbn4uJ9fSJfnid$9NzpV1`r|DqS|^`AJ? z*ZUBF5d+}uP3A=r%n6DQ`=Q4b@eg41PHyKy6HZ(f@9(^3pB>I%xJqAkW`BK#O>a|? zCs(xlyFdaUO(1CJZb{`Bn)KA#&GC75ok#ODB)qsUBkuSI0Aq(iQ-)_10NR^1^ zQE^h&sT};u{BYutkaS(;e}BlX)ueu#{+eWL^muVJaDRt*E4N-Jr+cg-o2M=zC-3=d zRB{OAXsy03Uy47z@6#1FTW~f$-DBl+U%o; z7;2lo%;l7OZ(OOer#X4{V-BDCzbZAEmW{2hGq7Zhv*~e$ZPrN|ApppqgTxi5k=3>M z-nvW8nqPY;7`=txuq-r|UYq&>>9V_%xI|0ZX!{G;LD`4^LYSNe#-TmI5e(fnyLrPC zN)KLQvk8Pb(mQ)2!XS#-PE~s_tATsQB`Pqb%a^BbdHCt7xDDtK+!34B6q|I(;i!~q z!L1Jh#pfz7We=34SS^6s(#E82tzZqdypllChxq`r+EouYq`p(to|WqyfyU9!jA;7M zv6-WTi)RjkiC#M}X6-rT9Q1RZ5dskgi+#6B+2vEy(NYO)uApZs8p9+YurZ)p(Cjudjq=Ecs+-g z2tBCfZgcynrDrSjyOT&#yIsq|v{1GRx-~ zJBv)`{R%#Wkc?uL*(N9@zQg6Vclmg%QlkC+sQIn&?b=jqkH@v^=tdfBr8&0VHuqiS zrrJkbfvc|T<3-0(Z1%BPISZfPUHS7-K-5Q69RVz1g68!d7#+%=*7XKP@1{A)aq|=? ztPh#%VCI02!r;S)6@{yVm;(tB>1V+3sGB#5Fz3lPCpQ=tR%uMa@`eR3c3Rqt#c`#r{1UzyFVuC}7a#WD!s(y8)%9@r9px5d8p8&-%q zv09QU@ly6zkBe-Edx8!UMNeX#+@zSqaHzi9AJy@b2zndc>dHZo~=bd5GzeX5-2EIBx zRb{b)yis0%dHopj_n%NAA0YY-8;`1PNvL|VFZ^G*S@GZMX2q6)deW-L6P*>L0*B|1 zTwgHyS>Z0}>IL;uZG`^5A5U6{Hlpu#mSs3v^g?(Ni|yONG*awpw-7#g{mdazlyC!g zCAwLLV=27#^K~N36Ky|W5B+)#hs&&W)pES7{l=J!!{w`!@z5XUCu&|pK1Mm;&F@CH zp~}+7C1Y64pVaCMuBz)?v0!>a(51a*r_Teh`}3aw7{ORkkAr6Y5DX zG8lzk1=3MsfR5=dh2Wptu12ZxLy925^09ig&wJre!d$Cz_nANX)8tt6H0XvBt03Dm zaTWXvNci^>Bq@3hyx*dkVy3g%vE}RKZ`Pe}9tfFGydZG>;=XVDT4)Z~$+CVJIFp77 z6;g-u6fmoZluRZf2&v*wXU&d^Jt&rerDy3s&_-pS@~oy z=mxgrwO{RZ|-$~O=lvOO*qOSs>& zsRuvoWpxPuHe*KB0Wvb4J>0e{PFU!yWI6X%zr)Cp8XOibfllg7|7k&PFSqTJFmW}l zxPaxuCx~&gvEf*wFW?>BTX?(GEeA=JiMS>nGu5w~bREX^*91r2-BUe)T9B1;v1xl$ zHclphUSRHC(lnz|;VR!Vd5KLPxwPg zN-;>tX~Lrh*0x{1Z(#m1MAmDPl-MUPOniWU9=0x>l_ajW&|TslQ8u#}C{J`}RCIz? zjLW&L4-!fKWT>-HpUF0owyNI!K>)g3`6=x|&$PIo8f$LqxXvdotu!5^mh3QKHcnSa z`NO(te97#K@rBU7xw+JJ?%0Mp`*Vnmz1Y9`@8ihniSau@Fl>|VTO6S9*K1}@+ikfd z3^^%D8xl(u(Sq14R?e$8rJUoauc1Kypf!V+h<8U>ufGuc+ehv3-{8cG?GV8n8zTmK{Etml^^?!$k zTs0f(v-R*`)-w|d^#?CDjFc!B5yA75>0-D-{wC4s32mCKrpo6ImMB+WR0tBimyRxXsNH-l~+Hj~`gJk^x?eoW@m*2em zABS1F%(#({7p!&vdXLwy?@Jo*t&=QG@1-p;pWg+saxvWas!iS{WhY@L?5PafN74y3 z&n?Nq&ePgXc=VzPDF8NF1bX<5_G>^8NH`c&_Ob7~?bbxBA(YGnm@AY0* z&Nnp;2pLoaauM2A7Q|JJS&axUfx=e)IaK`DIVk9XauJVyX2=#q(&(GEQPSlq^haH| zBy`Dy8H`gvK!-}i(W4*_XxVDIUfpmcS*(wbzR9WWTO2KlFQbic zH96`Jt?yW>c$606Oee4Y)M}6VCsEY=t>$z*yuf!?cr!HHCqqnWBtZj3+>duvZuf}1 z;f%2|RrAYAq3LWol)COh&=Pe4<)KCLR2Rl_F{EBXADqLfjJ|ibhsU6KHez~c+)4&M1wH-J$U|H^DOv?i?hrK8t@{22^uX(7QkJj_9!_(ft zp=u}=`|(K)#Z^AAMmO^PiKh*y;lVz0=wb8ckh#^9)aJ`ER7HUxL2iY9D15F->(*tz zcnTa~>=qC+yyB>M`~9-+{J)69WNh4MCOtU^HH#8auLJ_pu27-dRX97wuP6IZi9 zaXxXo;TrJ4@%ztpLHCpfxo?0X>WTHe&r?^N_8juneE|bafQ484dmss~<E>qPK#v=SFq8J>@n@+<4T+cGWKc0+0>6Hx5i`C^Tk zRRoY3>jQ%`axWotLFGA`eW*ytcErc(P&-horb4VQ{Cj+U$JuDG>4po9PD^+Uq$ZT z8+2%?>wl-0=v<-r&?*qSqag@hHNks}YbH8$FJhaP!)3nhn^DD1jIe#6GgNEwP=Gh( zT~_fS+}A_*$&*~Ud!4*N=Hn-Z6fTi0Jr%b3W zP#E<7{S|%LKC#5vkw9YW7eAznwf`%Aweufe1LUgL>;1kTem)}i7Jk7uWjrF;Ko&^D z1NGaog|!63OvU=((4b2X2)U{b$goJ8ay0W%iTSYgD7VbTUg`G?6PU0tn=4>edZWv3 zgR{Fu2mMhGV8ORz?UP5>NcagK&&3ma=}|xDziFVF7qzbbZHY(HVmjtu8qAB(*F<%( zJwN=%vU57G`pBFQS6#dP$fgL0E`$BQ_3b-3I`L*$=M`MsMuo$G$L-TJp?CNT^8B{6 z`gs01E1HDB$8a?)SzZA1H;MRB|B&b$u?s;B(}VDemjy&78gnB5wywd7Nqu)%>08C* z1y&^<)d|u2Fz)9}2-dSGO0Xnl$fGN~>2;ivwOdQz#i&Hn;C^KPhrfx~Sy8rQW*AK| zwN%7NJF36qf|ICtDIAwZ^4m{HsQy?sB}frV3k^sBxXq%0As0%HJ$1&tC+w%lo5)?1 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 literal 0 HcmV?d00001 From 4ad7591cf1c9e81112ae9d5b06cdbebb2c9ccde5 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 12 Jan 2025 18:18:25 +0900 Subject: [PATCH 23/28] chore(eslint): enhance eslint (#95) * chore(husky): add pre-push githook for branch naming convention * chore(eslint): add react specific rules * chore(lint-staged): add formatting for JSON, CSS, Markdown, and yml * chore(eslint): remove unused-imports plugin, add noUnusedImports --- biome.json | 3 + eslint.config.ts | 50 +- package.json | 12 +- pnpm-lock.yaml | 1204 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 1248 insertions(+), 21 deletions(-) diff --git a/biome.json b/biome.json index 81ac454..72d5b97 100644 --- a/biome.json +++ b/biome.json @@ -10,6 +10,9 @@ "linter": { "enabled": true, "rules": { + "correctness": { + "noUnusedImports": "error" + }, "recommended": true, "a11y": { "useSemanticElements": "warn", diff --git a/eslint.config.ts b/eslint.config.ts index 63103f8..007305a 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,17 +1,49 @@ -import parser from '@typescript-eslint/parser'; -import type { Linter } from 'eslint'; +import eslint from '@eslint/js'; +import reactPlugin from 'eslint-plugin-react'; +import storybook from 'eslint-plugin-storybook'; +import tseslint from 'typescript-eslint'; -export default [ +// @ts-ignore +import hooksPlugin from 'eslint-plugin-react-hooks'; + +// ? https://typescript-eslint.io/getting-started#step-2-configuration +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, { - files: ['**/*.{js,ts,tsx}'], - languageOptions: { - parser, + rules: { + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + + 'no-duplicate-imports': 'off', }, }, - { ignores: ['**/dist/'] }, + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + react: reactPlugin, + 'react-hooks': hooksPlugin, + }, rules: { - 'no-duplicate-imports': 'error', + ...reactPlugin.configs['jsx-runtime'].rules, + ...hooksPlugin.configs.recommended.rules, + }, + settings: { + react: { + version: 'detect', + }, }, }, -] satisfies Linter.Config[]; + + ...(storybook.configs['flat/recommended'] as any), + { + files: ['**/*.stories.@(ts|tsx|js|jsx|mjs|cjs)'], + }, + + // ignore files + { + ignores: ['**/*/dist/', '**/node_modules/', '*.config.*'], + }, +); diff --git a/package.json b/package.json index 16a5d84..616dc57 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "prepare": "husky", "cz": "cz", + "lint": "eslint . --flag unstable_ts_config", "build:storybook": "storybook build", "dev:storybook": "storybook dev -p 6006", "create:component": "tsx scripts/createComponent.ts create", @@ -38,6 +39,9 @@ "clipanion": "4.0.0-rc.4", "commitizen": "^4.3.1", "eslint": "^9.17.0", + "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-storybook": "^0.11.2", "husky": "^9.1.7", "knip": "catalog:", "lint-staged": "^15.3.0", @@ -46,14 +50,16 @@ "tsup": "catalog:", "tsx": "^4.19.2", "typescript": "catalog:", + "typescript-eslint": "^8.19.1", "vitest": "catalog:" }, "packageManager": "pnpm@9.7.1", "lint-staged": { - "packages/*/src/**/*.{ts,tsx}": [ - "biome lint --apply", + "*.{ts,tsx}": [ + "biome lint --write", "eslint --fix --flag unstable_ts_config" - ] + ], + "*.{json,css,md,yml,yaml}": ["biome format --write", "biome lint --write"] }, "config": { "commitizen": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd65054..8cc3691 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,6 +140,15 @@ importers: eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.1) + eslint-plugin-react: + specifier: ^7.37.3 + version: 7.37.3(eslint@9.17.0(jiti@2.4.1)) + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.1.0(eslint@9.17.0(jiti@2.4.1)) + eslint-plugin-storybook: + specifier: ^0.11.2 + version: 0.11.2(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) husky: specifier: ^9.1.7 version: 9.1.7 @@ -164,6 +173,9 @@ importers: typescript: specifier: 'catalog:' version: 5.7.2 + typescript-eslint: + specifier: ^8.19.1 + version: 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) vitest: specifier: 'catalog:' version: 2.1.8(@types/node@22.10.1)(happy-dom@15.11.7) @@ -2347,6 +2359,14 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@typescript-eslint/eslint-plugin@8.19.1': + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/parser@8.19.0': resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2354,24 +2374,63 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/parser@8.19.1': + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/scope-manager@8.19.0': resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.19.1': + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.19.1': + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/types@8.19.0': resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.19.1': + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.19.0': resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/typescript-estree@8.19.1': + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.19.1': + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/visitor-keys@8.19.0': resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.19.1': + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/coverage-v8@2.1.8': resolution: {integrity: sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==} peerDependencies: @@ -2498,13 +2557,41 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2576,10 +2663,22 @@ packages: resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} engines: {node: '>=6'} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2794,6 +2893,18 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -2833,6 +2944,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2849,6 +2964,10 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -2876,6 +2995,10 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2917,17 +3040,44 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -2960,6 +3110,24 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.3: + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-storybook@0.11.2: + resolution: {integrity: sha512-0Z4DUklJrC+GHjCRXa7PYfPzWC15DaVnwaOYenpgXiCEijXPZkLKCms+rHhtoRcWccP7Z8DpOOaP1gc3P9oOwg==} + engines: {node: '>= 18'} + peerDependencies: + eslint: '>=8' + eslint-scope@8.2.0: resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3133,6 +3301,13 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3149,10 +3324,22 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} @@ -3197,6 +3384,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3208,10 +3399,17 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + happy-dom@15.11.7: resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} engines: {node: '>=18.0.0'} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3227,6 +3425,10 @@ packages: resolution: {integrity: sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==} engines: {node: '>= 0.4'} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -3302,13 +3504,33 @@ packages: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-async-function@2.1.0: + resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} + engines: {node: '>= 0.4'} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -3317,6 +3539,14 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -3326,6 +3556,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -3350,6 +3584,14 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3358,14 +3600,34 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} @@ -3374,6 +3636,10 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -3381,6 +3647,18 @@ packages: is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3389,6 +3667,9 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3408,6 +3689,10 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -3469,6 +3754,10 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3598,6 +3887,10 @@ packages: map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -3693,6 +3986,30 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3727,6 +4044,10 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -3902,6 +4223,9 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3923,6 +4247,9 @@ packages: peerDependencies: react: ^18.3.1 + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -3950,9 +4277,17 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3980,6 +4315,10 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -4010,9 +4349,21 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4035,6 +4386,14 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4043,6 +4402,22 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -4125,6 +4500,25 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -4261,6 +4655,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -4317,11 +4717,38 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.19.1: + resolution: {integrity: sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -4441,10 +4868,26 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + which-typed-array@1.1.16: resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -5748,6 +6191,23 @@ snapshots: '@types/uuid@9.0.8': {} + '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 + eslint: 9.17.0(jiti@2.4.1) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 8.19.0 @@ -5760,13 +6220,43 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.1) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.19.0': dependencies: '@typescript-eslint/types': 8.19.0 '@typescript-eslint/visitor-keys': 8.19.0 + '@typescript-eslint/scope-manager@8.19.1': + dependencies: + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 + + '@typescript-eslint/type-utils@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.1) + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.19.0': {} + '@typescript-eslint/types@8.19.1': {} + '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 8.19.0 @@ -5781,12 +6271,42 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.19.0': + '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.19.0 - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 + debug: 4.4.0 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color - '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@22.10.1)(happy-dom@15.11.7))': + '@typescript-eslint/utils@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1)) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.1) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.19.0': + dependencies: + '@typescript-eslint/types': 8.19.0 + eslint-visitor-keys: 4.2.0 + + '@typescript-eslint/visitor-keys@8.19.1': + dependencies: + '@typescript-eslint/types': 8.19.1 + eslint-visitor-keys: 4.2.0 + + '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@22.10.1)(happy-dom@15.11.7))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -5936,10 +6456,65 @@ snapshots: aria-query@5.3.2: {} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + array-ify@1.0.0: {} + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + is-string: 1.1.1 + array-union@2.1.0: {} + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 + assertion-error@2.0.1: {} ast-types@0.16.1: @@ -6008,6 +6583,11 @@ snapshots: cachedir@2.3.0: {} + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -6016,6 +6596,18 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + callsites@3.1.0: {} caniuse-lite@1.0.30001686: {} @@ -6227,6 +6819,24 @@ snapshots: dargs@8.1.0: {} + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + debug@4.3.7: dependencies: ms: 2.1.3 @@ -6253,6 +6863,12 @@ snapshots: define-lazy-prop@2.0.0: {} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dequal@2.0.3: {} detect-file@1.0.0: {} @@ -6263,6 +6879,10 @@ snapshots: dependencies: path-type: 4.0.0 + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + doctrine@3.0.0: dependencies: esutils: 2.0.3 @@ -6293,6 +6913,12 @@ snapshots: dependencies: is-obj: 2.0.0 + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + eastasianwidth@0.2.0: {} easy-table@1.2.0: @@ -6329,14 +6955,110 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 + es-define-property@1.0.0: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 + + es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.7 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + es-module-lexer@1.5.4: {} + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + esbuild-register@3.6.0(esbuild@0.24.0): dependencies: debug: 4.4.0 @@ -6430,6 +7152,42 @@ snapshots: escape-string-regexp@4.0.0: {} + eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.1)): + dependencies: + eslint: 9.17.0(jiti@2.4.1) + + eslint-plugin-react@7.37.3(eslint@9.17.0(jiti@2.4.1)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.17.0(jiti@2.4.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-plugin-storybook@0.11.2(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2): + dependencies: + '@storybook/csf': 0.1.12 + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.1) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + - typescript + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 @@ -6642,6 +7400,17 @@ snapshots: function-bind@1.1.2: {} + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -6656,8 +7425,32 @@ snapshots: has-symbols: 1.1.0 hasown: 2.0.2 + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.0.0 + get-stream@8.0.1: {} + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -6716,6 +7509,11 @@ snapshots: globals@14.0.0: {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -6729,12 +7527,16 @@ snapshots: graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + happy-dom@15.11.7: dependencies: entities: 4.5.0 webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 + has-bigints@1.1.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -6745,7 +7547,11 @@ snapshots: has-proto@1.1.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 has-symbols@1.1.0: {} @@ -6817,23 +7623,66 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + is-arguments@1.1.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-tostringtag: 1.0.2 + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-arrayish@0.2.1: {} + is-async-function@2.1.0: + dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + is-callable@1.2.7: {} is-core-module@2.15.1: dependencies: hasown: 2.0.2 + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + is-docker@2.2.1: {} is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.3 + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -6852,16 +7701,47 @@ snapshots: is-interactive@1.0.0: {} + is-map@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-obj@2.0.0: {} + is-regex@1.2.1: + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.3 + is-stream@3.0.0: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 @@ -6870,16 +7750,33 @@ snapshots: dependencies: which-typed-array: 1.1.16 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.18 + is-unicode-supported@0.1.0: {} is-utf8@0.2.1: {} + is-weakmap@2.0.2: {} + + is-weakref@1.1.0: + dependencies: + call-bound: 1.0.3 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-windows@1.0.2: {} is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + isarray@2.0.5: {} + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -6903,6 +7800,15 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -6952,6 +7858,13 @@ snapshots: jsonparse@1.3.1: {} + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -7097,6 +8010,8 @@ snapshots: map-or-similar@1.5.0: {} + math-intrinsics@1.1.0: {} + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -7168,6 +8083,39 @@ snapshots: object-assign@4.1.1: {} + object-inspect@1.13.3: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.0.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -7215,6 +8163,12 @@ snapshots: outdent@0.5.0: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -7342,6 +8296,12 @@ snapshots: process@0.11.10: {} + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -7371,6 +8331,8 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-is@16.13.1: {} + react-is@17.0.2: {} react@18.3.1: @@ -7405,8 +8367,28 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + regenerator-runtime@0.14.1: {} + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7428,6 +8410,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -7476,8 +8464,27 @@ snapshots: dependencies: tslib: 2.8.1 + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} sanitize.css@13.0.0: {} @@ -7495,16 +8502,57 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 gopd: 1.2.0 has-property-descriptors: 1.0.2 + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -7578,6 +8626,50 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.0.0 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -7697,6 +8789,10 @@ snapshots: dependencies: typescript: 5.7.2 + ts-api-utils@2.0.0(typescript@5.7.2): + dependencies: + typescript: 5.7.2 + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -7755,8 +8851,58 @@ snapshots: type-fest@2.19.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.1) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + typescript@5.7.2: {} + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + undici-types@6.20.0: {} unicorn-magic@0.1.0: {} @@ -7873,10 +9019,50 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.3 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.0 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.0.10 + is-regex: 1.2.1 + is-weakref: 1.1.0 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.18 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + which-typed-array@1.1.16: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which-typed-array@1.1.18: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 for-each: 0.3.3 gopd: 1.2.0 has-tostringtag: 1.0.2 From 28830865472b847f5ae7fdab2ae14ce4545877c8 Mon Sep 17 00:00:00 2001 From: Semin <110274049+SEMIN-97@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:38:59 +0900 Subject: [PATCH 24/28] fix: Issue Template Parsing Issue (#99) * fix: add missing YAML front matter hyphens in issue template * docs: add label for issue template --- .github/ISSUE_TEMPLATE/bug_report.md | 3 ++- .github/ISSUE_TEMPLATE/component_design.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a69e5ef..a189031 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,7 @@ +--- name: "Bug Report" about: "Report a bug" - +labels: "bug" --- ## Bug Description diff --git a/.github/ISSUE_TEMPLATE/component_design.md b/.github/ISSUE_TEMPLATE/component_design.md index ef9aadc..4b8075e 100644 --- a/.github/ISSUE_TEMPLATE/component_design.md +++ b/.github/ISSUE_TEMPLATE/component_design.md @@ -1,6 +1,7 @@ +--- name: "Component Design" about: "Define and design a new component" - +labels: "enhancement" --- ## Component Function Definition From 9ac17a9a1fe3d4b972195e2e8aee4159c3681274 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 13 Jan 2025 11:39:52 +0900 Subject: [PATCH 25/28] Chore/readme update (#100) * chore(biome): remove .md extension from biome foramtting * chore(readme): update readme * chore(storybook): update asset paths to use direct links from GitHub --- .storybook/main.ts | 2 +- .storybook/manager.ts | 2 +- README.md | 2 +- docs/introduction.mdx | 2 +- package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.storybook/main.ts b/.storybook/main.ts index e33aff6..21fe918 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -17,5 +17,5 @@ export default { }, managerHead: (head) => `${head} -`, +`, } satisfies StorybookConfig; diff --git a/.storybook/manager.ts b/.storybook/manager.ts index 7ea677c..aa791a0 100644 --- a/.storybook/manager.ts +++ b/.storybook/manager.ts @@ -5,7 +5,7 @@ addons.setConfig({ theme: create({ base: 'dark', brandTitle: 'Sipe Design System', - brandImage: '../public/assets/sipe_brand_logo.png', + brandImage: 'https://github.com/sipe-team/3-2_side/raw/main/public/assets/sipe_brand_logo.png', brandUrl: 'https://sipe.team/', brandTarget: '_self', textColor: '#999999', diff --git a/README.md b/README.md index 8c58476..7eb6799 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![](./public/assets/og-image.png) # Sipe Design System -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/3-2_side/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.5-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-xvhdismwhu.chromatic.com/?path=/story/input--default) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/github/sipe-team/3-2_side/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/github/sipe-team/3-2_side) Github Stars +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/3-2_side/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.7-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-ggwavglffa.chromatic.com) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/gh/sipe-team/3-2_side/branch/changeset-release%2Fmain/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/gh/sipe-team/3-2_side) Github Stars Sipe Design System is a monorepo-based component library built to modernize and standardize the official Sipe website. Drawing inspiration from our existing design patterns, we're creating a robust, type-safe, and accessible component system that can be used across all Sipe projects. diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 1180f96..4e73eb1 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -19,7 +19,7 @@ import { Meta } from '@storybook/addon-docs';
Sipe Design System Logo Date: Tue, 14 Jan 2025 22:54:52 +0900 Subject: [PATCH 26/28] docs(documentation): add documentation, feature request issue template (#103) --- .github/ISSUE_TEMPLATE/bug_report.md | 1 + .github/ISSUE_TEMPLATE/document_request.md | 22 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 22 ++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/document_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a189031..17a7f0c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,7 @@ --- name: "Bug Report" about: "Report a bug" +title: "[BUG] " labels: "bug" --- diff --git a/.github/ISSUE_TEMPLATE/document_request.md b/.github/ISSUE_TEMPLATE/document_request.md new file mode 100644 index 0000000..aebd3eb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/document_request.md @@ -0,0 +1,22 @@ +--- +name: Documentation Request +about: Request new documentation or improvements to existing docs +title: "[DOCS] " +labels: documentation +--- + +## Documentation Need + + + +## Proposed Changes + + + +## Target Audience + + + +## Additional Context + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..693fa0b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature Request +about: Suggest an idea or enhancement for our package +title: "[FEATURE] " +labels: enhancement +--- + +## Feature Description + + + +## Proposed Implementation + + + +## Describe Alternatives + + + +## Additional Context + + From 9903559a31dc80e18ca97bbbf981d23d6ca41869 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 14 Jan 2025 22:55:05 +0900 Subject: [PATCH 27/28] refactor(card): add custom ratio for better flexibility (#101) * refactor(card): add custom ratio for better flexibility * chore(card): set custom ratio as default * chore(card): update feedback * test(card): add unit test for ratio, variant * chore(card): add argTypes for ratio and variant in Card stories * chore(readme): updaate storybook url --- .changeset/eighty-apricots-punch.md | 5 +++++ README.md | 2 +- packages/card/src/Card.stories.tsx | 11 ++++++++++- packages/card/src/Card.test.tsx | 29 +++++++++++++++++++++++++++++ packages/card/src/Card.tsx | 4 ++-- 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 .changeset/eighty-apricots-punch.md diff --git a/.changeset/eighty-apricots-punch.md b/.changeset/eighty-apricots-punch.md new file mode 100644 index 0000000..5626d39 --- /dev/null +++ b/.changeset/eighty-apricots-punch.md @@ -0,0 +1,5 @@ +--- +"@sipe-team/card": minor +--- + +add custom ratio in card component diff --git a/README.md b/README.md index 7eb6799..25f8937 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![](./public/assets/og-image.png) # Sipe Design System -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/3-2_side/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.7-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-ggwavglffa.chromatic.com) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/gh/sipe-team/3-2_side/branch/changeset-release%2Fmain/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/gh/sipe-team/3-2_side) Github Stars +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/3-2_side/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.7-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-lynsfaiqst.chromatic.com) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/gh/sipe-team/3-2_side/branch/changeset-release%2Fmain/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/gh/sipe-team/3-2_side) Github Stars Sipe Design System is a monorepo-based component library built to modernize and standardize the official Sipe website. Drawing inspiration from our existing design patterns, we're creating a robust, type-safe, and accessible component system that can be used across all Sipe projects. diff --git a/packages/card/src/Card.stories.tsx b/packages/card/src/Card.stories.tsx index b6372b7..cafcb08 100644 --- a/packages/card/src/Card.stories.tsx +++ b/packages/card/src/Card.stories.tsx @@ -7,6 +7,16 @@ const meta = { parameters: { layout: 'centered', }, + argTypes: { + ratio: { + control: 'select', + options: ['rectangle', 'square', 'wide', 'portrait', 'auto'], + }, + variant: { + control: 'select', + options: ['filled', 'outline'], + }, + }, } satisfies Meta; export default meta; @@ -15,7 +25,6 @@ type Story = StoryObj; export const Default: Story = { args: { children: Card, - ratio: 'rectangle', variant: 'filled', }, }; diff --git a/packages/card/src/Card.test.tsx b/packages/card/src/Card.test.tsx index d449892..c847d55 100644 --- a/packages/card/src/Card.test.tsx +++ b/packages/card/src/Card.test.tsx @@ -37,6 +37,21 @@ test('ratio에 wide로 넣으면 aspect-ratio는 21/9로 반환한다.', () => { expect(screen.getByText('Card')).toHaveStyle('aspect-ratio: 21 / 9'); }); +test('ratio에 square로 넣으면 aspect-ratio는 1/1로 반환한다.', () => { + render(Card); + expect(screen.getByText('Card')).toHaveStyle('aspect-ratio: 1 / 1'); +}); + +test('ratio에 portrait로 넣으면 aspect-ratio는 3/4로 반환한다.', () => { + render(Card); + expect(screen.getByText('Card')).toHaveStyle('aspect-ratio: 3 / 4'); +}); + +test('ratio에 auto로 넣으면 aspect-ratio는 auto로 반환한다.', () => { + render(Card); + expect(screen.getByText('Card')).toHaveStyle('aspect-ratio: auto'); +}); + test('variant는 default로 filled를 적용한다.', () => { render(Card); expect(screen.getByText('Card')).toHaveStyle({ @@ -50,3 +65,17 @@ test(`variant가 outline으로 넣으면 border(${color.cyan300}) 색상을 적 border: `1px solid ${color.cyan300}`, }); }); + +test(`variant가 filled일 때 배경색이 ${color.gray100}이다.`, () => { + render(Card); + expect(screen.getByText('Card')).toHaveStyle({ + backgroundColor: color.gray100, + }); +}); + +test(`variant가 outline일 때 배경색이 ${color.gray50}이다.`, () => { + render(Card); + expect(screen.getByText('Card')).toHaveStyle({ + backgroundColor: color.gray50, + }); +}); diff --git a/packages/card/src/Card.tsx b/packages/card/src/Card.tsx index e3166bd..2afebe6 100644 --- a/packages/card/src/Card.tsx +++ b/packages/card/src/Card.tsx @@ -9,7 +9,7 @@ import { } from 'react'; import styles from './Card.module.css'; -export type CardRatio = 'rectangle' | 'square' | 'wide' | 'portrait'; +export type CardRatio = 'rectangle' | 'square' | 'wide' | 'portrait' | 'auto'; export type CardVariant = 'filled' | 'outline'; export interface CardProps extends ComponentProps<'div'> { @@ -76,6 +76,6 @@ function getAspectRatio(ratio: CardRatio) { case 'portrait': return '3 / 4'; default: - return '16 / 9'; + return 'auto'; } } From e6f8d5d4ac79181c62cc9061f093eb106692a7ad Mon Sep 17 00:00:00 2001 From: y09n Date: Tue, 14 Jan 2025 23:44:48 +0900 Subject: [PATCH 28/28] chore(release): version packages (#104) Co-authored-by: github-actions[bot] --- .changeset/eighty-apricots-punch.md | 5 ----- packages/card/CHANGELOG.md | 6 ++++++ packages/card/package.json | 2 +- packages/side/CHANGELOG.md | 8 ++++++++ packages/side/package.json | 2 +- 5 files changed, 16 insertions(+), 7 deletions(-) delete mode 100644 .changeset/eighty-apricots-punch.md diff --git a/.changeset/eighty-apricots-punch.md b/.changeset/eighty-apricots-punch.md deleted file mode 100644 index 5626d39..0000000 --- a/.changeset/eighty-apricots-punch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sipe-team/card": minor ---- - -add custom ratio in card component diff --git a/packages/card/CHANGELOG.md b/packages/card/CHANGELOG.md index e20874c..bc5e07c 100644 --- a/packages/card/CHANGELOG.md +++ b/packages/card/CHANGELOG.md @@ -1,5 +1,11 @@ # @sipe-team/card +## 0.1.0 + +### Minor Changes + +- 9903559: add custom ratio in card component + ## 0.0.2 ### Patch Changes diff --git a/packages/card/package.json b/packages/card/package.json index 6ab62c6..54e541b 100644 --- a/packages/card/package.json +++ b/packages/card/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/card", "description": "Card component for Sipe Design System", - "version": "0.0.2", + "version": "0.1.0", "license": "MIT", "repository": { "type": "git", diff --git a/packages/side/CHANGELOG.md b/packages/side/CHANGELOG.md index 5d35289..a2ed5b2 100644 --- a/packages/side/CHANGELOG.md +++ b/packages/side/CHANGELOG.md @@ -1,5 +1,13 @@ # @sipe-team/side +## 0.2.2 + +### Patch Changes + +- Updated dependencies [9903559] + - @sipe-team/card@0.1.0 + - @sipe-team/flex@0.1.1 + ## 0.2.1 ### Patch Changes diff --git a/packages/side/package.json b/packages/side/package.json index a607139..856ac1e 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/side", "description": "Sipe Design System", - "version": "0.2.1", + "version": "0.2.2", "license": "MIT", "repository": { "type": "git",