From 0e0797d950c8e565539b0ec1c6d1e36bb2140f8f Mon Sep 17 00:00:00 2001 From: Jinho Yeom <81306489+Yeom-JinHo@users.noreply.github.com> Date: Wed, 15 Apr 2026 21:22:17 +0900 Subject: [PATCH 01/33] chore: upgrade pnpm to 10.33.0 (#211) --- .mise.toml | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.mise.toml b/.mise.toml index 97f4f45..625d747 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,3 +1,3 @@ [tools] node = "22.22.2" -pnpm = "9.7.1" +pnpm = "10.33.0" diff --git a/package.json b/package.json index 4a17ca6..f397386 100644 --- a/package.json +++ b/package.json @@ -55,10 +55,10 @@ "vite": "catalog:", "vitest": "catalog:" }, - "packageManager": "pnpm@9.7.1", + "packageManager": "pnpm@10.33.0", "engines": { "node": ">=22.22.2 <23", - "pnpm": "9.7.1" + "pnpm": "10.33.0" }, "lint-staged": { "*.{ts,tsx,css,js}": [ From f6e2234f274efad7ccfd5cedc86d00bc4c81e761 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 16 Apr 2026 23:53:40 +0900 Subject: [PATCH 02/33] fix(ci): add --if-present flag to pnpm filter commands (#238) --- .github/workflows/ci.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d8d7ff6..355b038 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,10 +16,10 @@ jobs: - name: Install dependencies run: pnpm install - name: Lint - run: pnpm --filter="...[origin/${{ github.base_ref }}]" lint + run: pnpm --filter="...[origin/${{ github.base_ref }}]" --if-present lint - name: Test - run: pnpm --filter="...[origin/${{ github.base_ref }}]" test + run: pnpm --filter="...[origin/${{ github.base_ref }}]" --if-present test - name: Type check - run: pnpm --filter="...[origin/${{ github.base_ref }}]" typecheck + run: pnpm --filter="...[origin/${{ github.base_ref }}]" --if-present typecheck - name: Build - run: pnpm --filter="...[origin/${{ github.base_ref }}]" build + run: pnpm --filter="...[origin/${{ github.base_ref }}]" --if-present build From 1bc600f2437d00b6a47bdb8151b2e3d975037c57 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 16 Apr 2026 23:55:11 +0900 Subject: [PATCH 03/33] chore(commitlint): simplify config to conventional preset only (#237) --- .vscode/extensions.json | 2 +- commitlint.config.ts | 44 +-- package.json | 8 +- pnpm-lock.yaml | 789 +++++++++++++++++++++++++--------------- 4 files changed, 507 insertions(+), 336 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 72f4220..322d7ab 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["biomejs.biome", "github.vscode-github-actions", "hverlin.mise-vscode",] + "recommendations": ["biomejs.biome", "github.vscode-github-actions", "hverlin.mise-vscode"] } diff --git a/commitlint.config.ts b/commitlint.config.ts index 4f0cec6..7906571 100644 --- a/commitlint.config.ts +++ b/commitlint.config.ts @@ -1,40 +1,8 @@ -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 = { +// https://www.conventionalcommits.org +// https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional +// +// @commitlint/config-conventional 허용 타입: +// build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test +export default { 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 f397386..248aaab 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,9 @@ "@biomejs/biome": "^2.4.10", "@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", + "@commitlint/cli": "^20.5.0", + "@commitlint/config-conventional": "^20.5.0", + "@commitlint/cz-commitlint": "^20.5.1", "@storybook/addon-docs": "^8.4.7", "@storybook/addon-essentials": "catalog:", "@storybook/addon-interactions": "catalog:", @@ -43,6 +42,7 @@ "chromatic": "^11.19.0", "clipanion": "4.0.0-rc.4", "commitizen": "^4.3.1", + "inquirer": "^9.3.8", "globals": "^15.14.0", "husky": "^9.1.7", "knip": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d601400..6276a6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,17 +115,14 @@ importers: 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.6.3) + specifier: ^20.5.0 + version: 20.5.0(@types/node@22.10.1)(conventional-commits-parser@6.4.0)(typescript@5.6.3) '@commitlint/config-conventional': - specifier: ^19.6.0 - version: 19.6.0 + specifier: ^20.5.0 + version: 20.5.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.6.3))(inquirer@8.2.5)(typescript@5.6.3) - '@commitlint/types': - specifier: ^19.5.0 - version: 19.5.0 + specifier: ^20.5.1 + version: 20.5.1(@types/node@22.10.1)(commitizen@4.3.1(@types/node@22.10.1)(typescript@5.6.3))(inquirer@9.3.8(@types/node@22.10.1))(typescript@5.6.3) '@storybook/addon-docs': specifier: ^8.4.7 version: 8.5.2(@types/react@18.3.13)(storybook@8.5.0(prettier@2.8.8)) @@ -192,6 +189,9 @@ importers: husky: specifier: ^9.1.7 version: 9.1.7 + inquirer: + specifier: ^9.3.8 + version: 9.3.8(@types/node@22.10.1) knip: specifier: 'catalog:' version: 5.39.2(@types/node@22.10.1)(typescript@5.6.3) @@ -1594,10 +1594,10 @@ importers: dependencies: '@docusaurus/core': specifier: 3.6.3 - version: 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + version: 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/preset-classic': specifier: 3.6.3 - version: 3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3) + version: 3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@18.3.13)(react@18.3.1) @@ -1616,13 +1616,13 @@ importers: devDependencies: '@docusaurus/module-type-aliases': specifier: 3.6.3 - version: 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/tsconfig': specifier: 3.6.3 version: 3.6.3 '@docusaurus/types': specifier: 3.6.3 - version: 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) typescript: specifier: ~5.6.2 version: 5.6.3 @@ -2352,24 +2352,28 @@ packages: engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [musl] '@biomejs/cli-linux-arm64@2.4.10': resolution: {integrity: sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [glibc] '@biomejs/cli-linux-x64-musl@2.4.10': resolution: {integrity: sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [musl] '@biomejs/cli-linux-x64@2.4.10': resolution: {integrity: sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [glibc] '@biomejs/cli-win32-arm64@2.4.10': resolution: {integrity: sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==} @@ -2448,82 +2452,114 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@commitlint/cli@19.6.1': - resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} + '@commitlint/cli@20.5.0': + resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.6.0': - resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==} + '@commitlint/config-conventional@20.5.0': + resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==} 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==} + '@commitlint/config-validator@20.5.0': + resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} + engines: {node: '>=v18'} + + '@commitlint/cz-commitlint@20.5.1': + resolution: {integrity: sha512-tvcHpk/DQRF749PuaYKPeLhml4grD4h8qEIW5uoboKy0tfnJxmAy99xOo2U1xpQj5uo3LH7pjnVv1xvuhzLWRw==} engines: {node: '>=v18'} peerDependencies: commitizen: ^4.0.3 inquirer: ^9.0.0 - '@commitlint/ensure@19.5.0': - resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + '@commitlint/ensure@20.5.0': + resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} 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==} + '@commitlint/execute-rule@20.0.0': + resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} + engines: {node: '>=v18'} + + '@commitlint/format@20.5.0': + resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.6.0': - resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==} + '@commitlint/is-ignored@20.5.0': + resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} engines: {node: '>=v18'} - '@commitlint/lint@19.6.0': - resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==} + '@commitlint/lint@20.5.0': + resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} 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==} + '@commitlint/load@20.5.0': + resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} engines: {node: '>=v18'} - '@commitlint/parse@19.5.0': - resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + '@commitlint/message@20.4.3': + resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} engines: {node: '>=v18'} - '@commitlint/read@19.5.0': - resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + '@commitlint/parse@20.5.0': + resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} + engines: {node: '>=v18'} + + '@commitlint/read@20.5.0': + resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} 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==} + '@commitlint/resolve-extends@20.5.0': + resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.5.0': - resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + '@commitlint/rules@20.5.0': + resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} engines: {node: '>=v18'} - '@commitlint/top-level@19.5.0': - resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + '@commitlint/to-lines@20.0.0': + resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@20.4.3': + resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} engines: {node: '>=v18'} '@commitlint/types@19.5.0': resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} + '@commitlint/types@20.5.0': + resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} + engines: {node: '>=v18'} + + '@conventional-changelog/git-client@2.7.0': + resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.4.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + '@csstools/cascade-layer-name-parser@2.0.4': resolution: {integrity: sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==} engines: {node: '>=18'} @@ -3643,6 +3679,19 @@ packages: resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3830,36 +3879,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} @@ -3960,111 +4015,133 @@ packages: resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-gnueabihf@4.60.1': resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.28.0': resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm-musleabihf@4.60.1': resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.28.0': resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-gnu@4.60.1': resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.28.0': resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-musl@4.60.1': resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.1': resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.1': resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.60.1': resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.1': resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.28.0': resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.60.1': resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.1': resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.28.0': resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.60.1': resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.28.0': resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.1': resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.28.0': resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-linux-x64-musl@4.60.1': resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.1': resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} @@ -4120,6 +4197,14 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -4807,10 +4892,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -5192,6 +5273,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -5267,6 +5351,10 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + clipanion@4.0.0-rc.4: resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} peerDependencies: @@ -5400,20 +5488,20 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} + engines: {node: '>=18'} 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'} + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} hasBin: true convert-source-map@2.0.0: @@ -5478,6 +5566,15 @@ packages: typescript: optional: true + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -5618,10 +5715,6 @@ packages: resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} engines: {node: '>= 10'} - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -6184,10 +6277,6 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - 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'} @@ -6319,10 +6408,9 @@ packages: 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'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. + git-raw-commits@5.0.1: + resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} + engines: {node: '>=18'} hasBin: true github-slugger@1.5.0: @@ -6600,6 +6688,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + icss-utils@5.1.0: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -6672,6 +6764,10 @@ packages: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} + inquirer@9.3.8: + resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} + engines: {node: '>=18'} + interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -6822,10 +6918,6 @@ packages: 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.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -6969,10 +7061,6 @@ packages: 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==} @@ -7042,24 +7130,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -7311,9 +7403,9 @@ 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'} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -7561,6 +7653,10 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -8721,6 +8817,10 @@ packages: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8944,10 +9044,6 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -9136,10 +9232,6 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -9171,6 +9263,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + engines: {node: '>=18'} + tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} @@ -9323,10 +9419,6 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -9671,6 +9763,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -9760,6 +9856,10 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -10914,70 +11014,81 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.6.1(@types/node@22.10.1)(typescript@5.6.3)': + '@commitlint/cli@20.5.0(@types/node@22.10.1)(conventional-commits-parser@6.4.0)(typescript@5.6.3)': dependencies: - '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.6.0 - '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.6.3) - '@commitlint/read': 19.5.0 - '@commitlint/types': 19.5.0 - tinyexec: 0.3.1 + '@commitlint/format': 20.5.0 + '@commitlint/lint': 20.5.0 + '@commitlint/load': 20.5.0(@types/node@22.10.1)(typescript@5.6.3) + '@commitlint/read': 20.5.0(conventional-commits-parser@6.4.0) + '@commitlint/types': 20.5.0 + tinyexec: 1.1.1 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' + - conventional-commits-filter + - conventional-commits-parser - typescript - '@commitlint/config-conventional@19.6.0': + '@commitlint/config-conventional@20.5.0': dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-conventionalcommits: 7.0.2 + '@commitlint/types': 20.5.0 + conventional-changelog-conventionalcommits: 9.3.1 '@commitlint/config-validator@19.5.0': dependencies: '@commitlint/types': 19.5.0 ajv: 8.17.1 + optional: true - '@commitlint/cz-commitlint@19.6.1(@types/node@22.10.1)(commitizen@4.3.1(@types/node@22.10.1)(typescript@5.6.3))(inquirer@8.2.5)(typescript@5.6.3)': + '@commitlint/config-validator@20.5.0': dependencies: - '@commitlint/ensure': 19.5.0 - '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.6.3) - '@commitlint/types': 19.5.0 - chalk: 5.4.1 + '@commitlint/types': 20.5.0 + ajv: 8.17.1 + + '@commitlint/cz-commitlint@20.5.1(@types/node@22.10.1)(commitizen@4.3.1(@types/node@22.10.1)(typescript@5.6.3))(inquirer@9.3.8(@types/node@22.10.1))(typescript@5.6.3)': + dependencies: + '@commitlint/ensure': 20.5.0 + '@commitlint/load': 20.5.0(@types/node@22.10.1)(typescript@5.6.3) + '@commitlint/types': 20.5.0 commitizen: 4.3.1(@types/node@22.10.1)(typescript@5.6.3) - inquirer: 8.2.5 - lodash.isplainobject: 4.0.6 + inquirer: 9.3.8(@types/node@22.10.1) + is-plain-obj: 4.1.0 + picocolors: 1.1.1 word-wrap: 1.2.5 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/ensure@19.5.0': + '@commitlint/ensure@20.5.0': dependencies: - '@commitlint/types': 19.5.0 + '@commitlint/types': 20.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/execute-rule@19.5.0': + optional: true + + '@commitlint/execute-rule@20.0.0': {} - '@commitlint/format@19.5.0': + '@commitlint/format@20.5.0': dependencies: - '@commitlint/types': 19.5.0 - chalk: 5.4.1 + '@commitlint/types': 20.5.0 + picocolors: 1.1.1 - '@commitlint/is-ignored@19.6.0': + '@commitlint/is-ignored@20.5.0': dependencies: - '@commitlint/types': 19.5.0 + '@commitlint/types': 20.5.0 semver: 7.6.3 - '@commitlint/lint@19.6.0': + '@commitlint/lint@20.5.0': dependencies: - '@commitlint/is-ignored': 19.6.0 - '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.6.0 - '@commitlint/types': 19.5.0 + '@commitlint/is-ignored': 20.5.0 + '@commitlint/parse': 20.5.0 + '@commitlint/rules': 20.5.0 + '@commitlint/types': 20.5.0 '@commitlint/load@19.6.1(@types/node@22.10.1)(typescript@5.6.3)': dependencies: @@ -10994,22 +11105,41 @@ snapshots: transitivePeerDependencies: - '@types/node' - typescript + optional: true - '@commitlint/message@19.5.0': {} + '@commitlint/load@20.5.0(@types/node@22.10.1)(typescript@5.6.3)': + dependencies: + '@commitlint/config-validator': 20.5.0 + '@commitlint/execute-rule': 20.0.0 + '@commitlint/resolve-extends': 20.5.0 + '@commitlint/types': 20.5.0 + cosmiconfig: 9.0.1(typescript@5.6.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.1(typescript@5.6.3))(typescript@5.6.3) + is-plain-obj: 4.1.0 + lodash.mergewith: 4.6.2 + picocolors: 1.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@20.4.3': {} - '@commitlint/parse@19.5.0': + '@commitlint/parse@20.5.0': dependencies: - '@commitlint/types': 19.5.0 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 + '@commitlint/types': 20.5.0 + conventional-changelog-angular: 8.3.1 + conventional-commits-parser: 6.4.0 - '@commitlint/read@19.5.0': + '@commitlint/read@20.5.0(conventional-commits-parser@6.4.0)': dependencies: - '@commitlint/top-level': 19.5.0 - '@commitlint/types': 19.5.0 - git-raw-commits: 4.0.0 + '@commitlint/top-level': 20.4.3 + '@commitlint/types': 20.5.0 + git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0) minimist: 1.2.8 - tinyexec: 0.3.1 + tinyexec: 1.1.1 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser '@commitlint/resolve-extends@19.5.0': dependencies: @@ -11019,24 +11149,48 @@ snapshots: import-meta-resolve: 4.1.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 + optional: true - '@commitlint/rules@19.6.0': + '@commitlint/resolve-extends@20.5.0': dependencies: - '@commitlint/ensure': 19.5.0 - '@commitlint/message': 19.5.0 - '@commitlint/to-lines': 19.5.0 - '@commitlint/types': 19.5.0 + '@commitlint/config-validator': 20.5.0 + '@commitlint/types': 20.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 - '@commitlint/to-lines@19.5.0': {} + '@commitlint/rules@20.5.0': + dependencies: + '@commitlint/ensure': 20.5.0 + '@commitlint/message': 20.4.3 + '@commitlint/to-lines': 20.0.0 + '@commitlint/types': 20.5.0 + + '@commitlint/to-lines@20.0.0': {} - '@commitlint/top-level@19.5.0': + '@commitlint/top-level@20.4.3': dependencies: - find-up: 7.0.0 + escalade: 3.2.0 '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.1 chalk: 5.4.1 + optional: true + + '@commitlint/types@20.5.0': + dependencies: + conventional-commits-parser: 6.4.0 + picocolors: 1.1.1 + + '@conventional-changelog/git-client@2.7.0(conventional-commits-parser@6.4.0)': + dependencies: + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 + semver: 7.6.3 + optionalDependencies: + conventional-commits-parser: 6.4.0 '@csstools/cascade-layer-name-parser@2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': dependencies: @@ -11322,7 +11476,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/babel@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.5 @@ -11335,7 +11489,7 @@ snapshots: '@babel/runtime-corejs3': 7.26.7 '@babel/traverse': 7.26.5 '@docusaurus/logger': 3.6.3 - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.0 tslib: 2.8.1 @@ -11350,14 +11504,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/bundler@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@babel/core': 7.26.0 - '@docusaurus/babel': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/babel': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/cssnano-preset': 3.6.3 '@docusaurus/logger': 3.6.3 - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.27.7)) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.97.1(esbuild@0.27.7)) @@ -11395,15 +11549,15 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/core@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/babel': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/bundler': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/babel': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/bundler': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@mdx-js/react': 3.1.0(@types/react@18.3.13)(react@18.3.1) boxen: 6.2.1 chalk: 4.1.2 @@ -11475,12 +11629,12 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/mdx-loader@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.3 - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@mdx-js/mdx': 3.1.0(acorn@8.16.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.2.1 @@ -11512,9 +11666,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.13 '@types/react-router-config': 5.0.11 @@ -11531,17 +11685,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-blog@3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.0 @@ -11575,17 +11729,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.0 @@ -11617,13 +11771,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-pages@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11650,11 +11804,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-debug@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11681,11 +11835,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-analytics@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -11710,11 +11864,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-gtag@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11740,11 +11894,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-tag-manager@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -11769,14 +11923,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-sitemap@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11803,21 +11957,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-blog': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-debug': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-analytics': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-gtag': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-tag-manager': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-sitemap': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-classic': 3.6.3(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-search-algolia': 3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3) - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/preset-classic@3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-blog': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-debug': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-analytics': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-gtag': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-tag-manager': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-sitemap': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-classic': 3.6.3(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-search-algolia': 3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -11849,21 +12003,21 @@ snapshots: '@types/react': 18.3.13 react: 18.3.1 - '@docusaurus/theme-classic@3.6.3(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/theme-classic@3.6.3(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/theme-translations': 3.6.3 - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@mdx-js/react': 3.1.0(@types/react@18.3.13)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 @@ -11900,13 +12054,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/theme-common@3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/mdx-loader': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.13 '@types/react-router-config': 5.0.11 @@ -11926,16 +12080,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3)': + '@docusaurus/theme-search-algolia@3.6.3(@algolia/client-search@5.20.0)(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(@types/react@18.3.13)(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.6.3)': dependencies: '@docsearch/react': 3.8.3(@algolia/client-search@5.20.0)(@types/react@18.3.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.6.3 - '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.14.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.6.3(@docusaurus/plugin-content-docs@3.6.3(@mdx-js/react@3.1.0(@types/react@18.3.13)(react@18.3.1))(acorn@8.16.0)(esbuild@0.27.7)(eslint@9.20.0(jiti@2.4.1))(lightningcss@1.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/theme-translations': 3.6.3 - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) algoliasearch: 4.24.0 algoliasearch-helper: 3.24.1(algoliasearch@4.24.0) clsx: 2.1.1 @@ -11977,9 +12131,9 @@ snapshots: '@docusaurus/tsconfig@3.6.3': {} - '@docusaurus/types@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@mdx-js/mdx': 3.1.0(acorn@8.16.0) '@types/history': 4.7.11 '@types/react': 18.3.13 commander: 5.1.0 @@ -11998,9 +12152,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-common@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -12012,11 +12166,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/utils-validation@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.3 - '@docusaurus/utils': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -12033,11 +12187,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/utils@3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.3 - '@docusaurus/types': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.6.3(acorn@8.14.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.6.3(acorn@8.16.0)(esbuild@0.27.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/webpack': 8.1.0(typescript@5.6.3) escape-string-regexp: 4.0.0 file-loader: 6.2.0(webpack@5.97.1(esbuild@0.27.7)) @@ -12459,6 +12613,15 @@ snapshots: '@humanwhocodes/retry@0.4.1': optional: true + '@inquirer/external-editor@1.0.3(@types/node@22.10.1)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 22.10.1 + + '@inquirer/figures@1.0.15': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -12541,7 +12704,7 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/mdx@3.1.0(acorn@8.14.0)': + '@mdx-js/mdx@3.1.0(acorn@8.16.0)': dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -12555,7 +12718,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.2 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.14.0) + recma-jsx: 1.0.0(acorn@8.16.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -12845,6 +13008,12 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + + '@simple-libs/stream-utils@1.2.0': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@4.6.0': {} @@ -13363,6 +13532,7 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: '@types/node': 22.10.1 + optional: true '@types/debug@4.1.12': dependencies: @@ -13826,11 +13996,6 @@ snapshots: '@xtuc/long@4.2.2': {} - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -13843,7 +14008,6 @@ snapshots: acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 - optional: true acorn-walk@8.3.4: dependencies: @@ -14251,6 +14415,8 @@ snapshots: chardet@0.7.0: {} + chardet@2.1.1: {} + check-error@2.1.1: {} cheerio-select@2.1.0: @@ -14325,6 +14491,8 @@ snapshots: cli-width@3.0.0: {} + cli-width@4.1.0: {} + clipanion@4.0.0-rc.4(typanion@3.14.0): dependencies: typanion: 3.14.0 @@ -14455,22 +14623,20 @@ snapshots: content-type@1.0.5: {} - conventional-changelog-angular@7.0.0: + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: + conventional-changelog-conventionalcommits@9.3.1: dependencies: compare-func: 2.0.0 conventional-commit-types@3.0.0: {} - conventional-commits-parser@5.0.0: + conventional-commits-parser@6.4.0: dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 convert-source-map@2.0.0: {} @@ -14506,6 +14672,14 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 2.4.1 typescript: 5.6.3 + optional: true + + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.1(typescript@5.6.3))(typescript@5.6.3): + dependencies: + '@types/node': 22.10.1 + cosmiconfig: 9.0.1(typescript@5.6.3) + jiti: 2.4.1 + typescript: 5.6.3 cosmiconfig@6.0.0: dependencies: @@ -14532,6 +14706,16 @@ snapshots: parse-json: 5.2.0 optionalDependencies: typescript: 5.6.3 + optional: true + + cosmiconfig@9.0.1(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 cross-spawn@7.0.6: dependencies: @@ -14706,8 +14890,6 @@ snapshots: - '@types/node' - typescript - dargs@8.1.0: {} - data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -15414,12 +15596,6 @@ snapshots: locate-path: 7.2.0 path-exists: 5.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 @@ -15553,11 +15729,13 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - git-raw-commits@4.0.0: + git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): dependencies: - dargs: 8.1.0 - meow: 12.1.1 - split2: 4.2.0 + '@conventional-changelog/git-client': 2.7.0(conventional-commits-parser@6.4.0) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser github-slugger@1.5.0: {} @@ -15956,6 +16134,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -16020,6 +16202,23 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 + inquirer@9.3.8(@types/node@22.10.1): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@22.10.1) + '@inquirer/figures': 1.0.15 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + transitivePeerDependencies: + - '@types/node' + interpret@1.4.0: {} invariant@2.2.4: @@ -16125,10 +16324,6 @@ snapshots: dependencies: better-path-resolve: 1.0.0 - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 @@ -16285,8 +16480,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -16443,7 +16636,8 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.isplainobject@4.0.6: {} + lodash.isplainobject@4.0.6: + optional: true lodash.kebabcase@4.1.1: {} @@ -16451,7 +16645,8 @@ snapshots: lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} + lodash.merge@4.6.2: + optional: true lodash.mergewith@4.6.2: {} @@ -16742,7 +16937,7 @@ snapshots: dependencies: map-or-similar: 1.5.0 - meow@12.1.1: {} + meow@13.2.0: {} merge-descriptors@1.0.3: {} @@ -17130,6 +17325,8 @@ snapshots: mute-stream@0.0.8: {} + mute-stream@1.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -18164,9 +18361,9 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.14.0): + recma-jsx@1.0.0(acorn@8.16.0): dependencies: - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn-jsx: 5.3.2(acorn@8.16.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -18467,6 +18664,8 @@ snapshots: run-async@2.4.1: {} + run-async@3.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -18743,8 +18942,6 @@ snapshots: transitivePeerDependencies: - supports-color - split2@4.2.0: {} - sprintf-js@1.0.3: {} srcset@4.0.0: {} @@ -18918,8 +19115,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - text-extensions@2.4.0: {} - text-table@0.2.0: {} thenify-all@1.6.0: @@ -18944,6 +19139,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.1.1: {} + tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -19075,8 +19272,6 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} - unicorn-magic@0.1.0: {} - unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -19504,6 +19699,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -19569,6 +19770,8 @@ snapshots: yocto-queue@1.1.1: {} + yoctocolors-cjs@2.1.3: {} + zod-validation-error@3.4.0(zod@3.23.8): dependencies: zod: 3.23.8 From 45d73c50b9b7189c44ef22da0687df074334d949 Mon Sep 17 00:00:00 2001 From: Evan Date: Fri, 17 Apr 2026 12:49:03 +0900 Subject: [PATCH 04/33] chore(husky): update branch naming rules (#239) --- .husky/pre-push | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/.husky/pre-push b/.husky/pre-push index f99a921..296eb3f 100644 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,17 +1,32 @@ # 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-]+$' + +# Special branches that skip naming rules +SPECIAL_REGEX='^(main|dev\/.+)$' + +# Standard branch naming: /- +# At least one hyphen required (to enforce username suffix) +BRANCH_REGEX='^(feature|fix|docs|style|refactor|test|deploy|chore|settings)\/[a-zA-Z0-9]+(-[a-zA-Z0-9]+)+$' + +# Allow special branches to bypass the naming convention +if [[ $BRANCH_NAME =~ $SPECIAL_REGEX ]]; then + exit 0 +fi # Check if the branch name matches the defined regex if ! [[ $BRANCH_NAME =~ $BRANCH_REGEX ]]; then echo "Error: Invalid branch name format." - echo + 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 "SUBJECT: Use only lowercase letters(a-z), numbers(0-9), and hyphens(-)" - echo "ISSUENUMBER: Use only numbers(0-9)" + echo "git branch -m /-" + echo + echo "CATEGORY: feature, fix, docs, style, refactor, test, deploy, chore, settings" + echo "SUBJECT: Letters(a-zA-Z), numbers(0-9), and hyphens(-)" + echo "USERNAME: Your name (e.g., john)" + echo + echo "Examples:" + echo " feature/button-john" + echo " fix/233-login-bug-john" echo exit 1 fi From f446ab0e8fde4b682054a0f29c87881245ac20fe Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 18 Apr 2026 01:35:19 +0900 Subject: [PATCH 05/33] docs: sync convention sections with new rules (#240) --- .github/CONTRIBUTING.md | 38 +++++++++++++++++++------------------- AGENTS.md | 2 +- CLAUDE.md | 8 +++++--- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cd78cfa..019ed60 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -100,36 +100,36 @@ Before proposing changes, please **open an issue** to discuss the bug or feature ### Create a Pull Request 1. **Create a Branch** - Follow the branch naming convention: `/-` (`ISSUENUMBER` is optional) + Follow the branch naming convention: `/-` + - `USERNAME` is required (at least one hyphen must be present) ```bash - git checkout -b your-branch + git checkout -b feature/button-john ``` - | **Category** | **Description** | - |--------------|-----------------------------------------------------| - | **feat** | Developing a new feature | - | **fix** | Fixing a bug | - | **hotfix** | Emergency fixes for immediate release | - | **chore** | Maintenance tasks or minor updates | - | **refactor** | Code refactoring without functional changes | - | **release** | Preparing for a new release version | - | **test** | Writing or modifying test cases | - | **docs** | Documentation updates or additions | - | **ci** | CI/CD pipeline updates | - | **build** | Changes to the build system or dependencies | + | **Category** | **Description** | + |---------------|-----------------------------------------------------| + | **feature** | Developing a new feature | + | **fix** | Fixing a bug | + | **docs** | Documentation updates or additions | + | **style** | Code style changes (formatting, no logic change) | + | **refactor** | Code refactoring without functional changes | + | **test** | Writing or modifying test cases | + | **deploy** | Deployment-related changes | + | **chore** | Maintenance tasks or minor updates | + | **settings** | Configuration or settings changes | 2. **Commit Changes** Write meaningful commit messages using the [Conventional Commits](https://www.conventionalcommits.org/) format: ```bash git commit -m "(): " ``` - We recommend following the Conventional Commits standard for clear and consistent commit messages. Below is the suggested structure: - + We follow the [Conventional Commits](https://www.conventionalcommits.org/) standard with [`@commitlint/config-conventional`](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional): + | Element | Requirement | Description | |--------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | `` | **Required** | Describes the purpose of the commit. Examples: `feat`, `fix`, `docs`, `style`, `refactor`, `test` | - | `` | **Optional** | Specifies the affected module, file, or functionality. Limited to **20 characters** (e.g., `auth`, `header`). | - | `` | **Required** | A concise summary of the changes
- Starts with a lowercase letter
- Avoid ending with a period (.)
- Limited to **50 characters**
- Must contain only English characters, numbers, and basic punctuation (!@#$%^&*(),.?":{}|<>_-)
- Cannot be empty | + | `` | **Required** | Describes the purpose of the commit: `build`, `chore`, `ci`, `docs`, `feat`, `fix`, `perf`, `refactor`, `revert`, `style`, `test` | + | `` | **Optional** | Specifies the affected module, file, or functionality (e.g., `auth`, `header`). | + | `` | **Required** | A concise summary of the changes
- Starts with a lowercase letter
- Avoid ending with a period (.)
- Cannot be empty | diff --git a/AGENTS.md b/AGENTS.md index 5a88cea..9900f2b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,4 +24,4 @@ strict TypeScript를 사용하고, 각 패키지의 `src/index.ts`에서 공개 ## 커밋 및 PR 가이드라인 -`feat(chip): add removable variant`와 같은 Conventional Commits를 사용하세요. scope는 짧게, subject는 영어로, `commitlint.config.ts`를 만족하도록 50자 이내로 작성하세요. PR은 `.github/PULL_REQUEST_TEMPLATE.md`를 따르세요: 변경 사항 요약, UI 변경 시 시각 자료 첨부, 스펙과 테스트 추가 여부 확인. 배포 패키지에 영향을 주는 변경이면 `.changeset` 항목을 포함하고 PR 설명에 릴리스 영향을 명시하세요. +[Conventional Commits](https://www.conventionalcommits.org/) 사용. 커밋 타입: `build | chore | ci | docs | feat | fix | perf | refactor | revert | style | test` ([`config-conventional`](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) 기준). 브랜치: `/-` (하이픈 최소 1개). 카테고리: `feature | fix | docs | style | refactor | test | deploy | chore | settings`. 특수 브랜치 `main`, `dev/*`는 규칙 제외. PR은 `.github/PULL_REQUEST_TEMPLATE.md` 준수. 배포 패키지 변경 시 `.changeset` 항목 포함. diff --git a/CLAUDE.md b/CLAUDE.md index b41e5bb..34f734c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -68,12 +68,14 @@ export type ButtonSize = (typeof ButtonSize)[keyof typeof ButtonSize]; ## 커밋 컨벤션 -형식: `type(scope): subject` — 영어만, subject 최대 50자, scope 최대 20자. -타입: feat, fix, hotfix, chore, refactor, release, test, docs, ci, build. +`type(scope): subject` — [conventional commits](https://www.conventionalcommits.org/) + [`config-conventional`](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional). +타입: `build | chore | ci | docs | feat | fix | perf | refactor | revert | style | test` ## 브랜치 네이밍 -`/-` (이슈 번호는 선택) +`/-` — 하이픈 최소 1개 필수. +카테고리: `feature | fix | docs | style | refactor | test | deploy | chore | settings` +특수: `main`, `dev/*` ## 배포 From 0eacb9af51d479f0a995a9b9b258e045a3513500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9B=90=EC=A3=BC?= <101818687+3o14@users.noreply.github.com> Date: Sun, 19 Apr 2026 14:02:11 +0900 Subject: [PATCH 06/33] docs(#218): v1 token usage audit (#243) --- .github/decisions/v1-audit.md | 292 ++++++++++++++++++++++++++++++++++ .gitignore | 5 +- 2 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 .github/decisions/v1-audit.md diff --git a/.github/decisions/v1-audit.md b/.github/decisions/v1-audit.md new file mode 100644 index 0000000..c0e2de3 --- /dev/null +++ b/.github/decisions/v1-audit.md @@ -0,0 +1,292 @@ +# v1 토큰 사용 현황 감사 + +> 작성일: 2026-04-17 +> 목적: v2 설계 의사결정을 위한 v1 토큰 정의·사용 현황 파악 + +--- + +## 1. 토큰 정의 목록 (`packages/tokens`) + +### 1.1 Color + +**Primitive (팔레트)** + +| 그룹 | 범위 | 예시 | +|------|------|------| +| black/white | 2개 | `#131518`, `#ffffff` | +| gray | 50–950 (11단계) | `#fafafa` ~ `#111111` | +| red | 50–950 (11단계) | `#fef2f2` ~ `#1f0808` | +| orange | 50–950 (11단계) | `#fff7ed` ~ `#220a04` | +| yellow | 50–950 (11단계) | `#fefce8` ~ `#281304` | +| green | 50–950 (11단계) | `#f0fdf4` ~ `#03190c` | +| teal | 50–950 (11단계) | `#f0fdfa` ~ `#021716` | +| blue | 50–950 (11단계) | `#eff6ff` ~ `#0c142e` | +| cyan | 50–950 (11단계) | `#ecfeff` ~ `#051b24` | +| purple | 50–950 (11단계) | `#faf5ff` ~ `#1a032e` | +| pink | 50–950 (11단계) | `#fdf2f8` ~ `#2c0514` | + +**Semantic** + +| 키 | 참조 | 실제 값 | +|---|---|---| +| success | green500 | `#22c55e` | +| warning | orange400 | `#fb923c` | +| danger | red500 | `#ef4444` | +| positive | blue400 | `#60a5fa` | + +**Theme (4개 테마)** + +| 테마 | primary | secondary | background | +|------|---------|-----------|------------| +| theme1st | `#01fe13` | `#01fe13` | `#000000` | +| theme2nd | `#03ff31` | `#06ffe3` | `#131518` | +| theme3rd | `#00ffff` | `#00ff99` | `#0d0d0d` | +| theme4th | `#f4a1a0` | `#f4a1a0` | `#0f1010` | + +--- + +### 1.2 Typography + +| 카테고리 | 값 | +|---------|---| +| fontSize | 12, 14, 16, 18, 20, 24, 28, 32, 36, 48 | +| fontWeight | regular(400), medium(500), semiBold(600), bold(700) | +| lineHeight | regular(1.5), compact(1.3) | + +--- + +### 1.3 Effects + +**Border Radius** + +| 키 | 값 | +|---|---| +| none | 0 | +| sm | 2px | +| md | 4px | +| lg | 8px | +| xl | 12px | +| full | 9999px | + +**Shadows** + +| 키 | 값 | +|---|---| +| none | none | +| sm | `0 1px 2px 0 rgba(0,0,0,0.05)` | +| md | `0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)` | +| lg | `0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)` | +| xl | `0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)` | +| 2xl | `0 25px 50px -12px rgba(0,0,0,0.25)` | + +**Z-Index** + +| 키 | 값 | +|---|---| +| hide | -1 | +| base | 0 | +| dropdown | 1000 | +| sticky | 1100 | +| fixed | 1200 | +| overlay | 1300 | +| modal | 1400 | +| popover | 1500 | +| toast | 1600 | +| tooltip | 1700 | + +**Opacity**: 0, 0.05, 0.1, 0.2, 0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 0.8, 0.9, 0.95, 1 (15단계) + +**Border Width**: none(0), thin(1px), medium(2px), thick(4px) + +**Border Style**: solid, dashed, dotted + +--- + +### 1.4 Layout + +**Spacing** + +| 키 | 값 | +|---|---| +| 0 | 0px | +| 1 | 4px | +| 2 | 8px | +| 3 | 12px | +| 4 | 16px | +| 5 | 20px | +| 6 | 24px | +| 8 | 32px | +| 10 | 40px | +| 12 | 48px | +| 16 | 64px | +| 20 | 80px | +| 24 | 96px | + +**Breakpoints**: sm(0), md(780px), lg(1060px) + +**Grid**: 12컬럼, gutter sm(8)/md(16)/lg(24) + +--- + +### 1.5 Theme Contract Vars (`vars`) + +`packages/tokens/src/theme/contract.css.ts` 에서 export되는 CSS 변수 계약: + +- `vars.color`: primary, secondary, background, text, gradient +- `vars.spacing`: xs, sm, md, lg, xl +- `vars.typography.fontSize`: 050–900 +- `vars.typography.lineHeight`: regular, compact +- `vars.typography.fontWeight`: regular, medium, semiBold, bold +- `vars.typography.fontFamily` +- `vars.radius`: none, sm, md, lg, xl, full +- `vars.shadows`: none, sm, md, lg, xl, 2xl +- `vars.mode`, `vars.theme` + +--- + +## 2. 컴포넌트별 토큰 사용 매트릭스 + +| 패키지 | `@sipe-team/tokens` import | `vars` 사용 | 하드코딩 | +|-------|---------------------------|-------------|---------| +| button | ✅ `vars` | ✅ | ✗ | +| input | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| card | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| badge | ⚠️ `color`, `fontSize` (raw) | ✗ | ✅ | +| chip | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| checkbox | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| radio | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| switch | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| accordion | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| avatar | ✗ | ✗ | ✅ | +| skeleton | ⚠️ `color`, `radius` (raw) | ✅ (radius만) | ✅ | +| tooltip | ✗ | ✗ | ✅ | +| divider | ⚠️ `color` (raw 팔레트) | ✗ | ✅ | +| flex | ✗ | ✗ | ✗ (레이아웃 유틸) | +| grid | ✗ | ✗ | ✗ (레이아웃 유틸) | +| typography | ✅ `fontSize`, `fontWeight`, `lineHeight` | ✅ | ✗ | + +> **요약**: `button`, `typography` 만 `vars`를 올바르게 사용. 대부분의 컴포넌트는 raw 팔레트 값(`color.grayXXX`)을 직접 참조하거나 hex/px를 하드코딩. + +--- + +## 3. 누락 토큰 유형 + +| 카테고리 | 상태 | 비고 | +|---------|------|------| +| Animation Duration | ❌ 미정의 | 0.15s, 0.2s, 0.3s, 1.5s, 2s 등 분산 사용 | +| Animation Easing | ❌ 미정의 | ease-in-out, cubic-bezier(0.4,0,0.2,1), ease 등 분산 사용 | +| Component Dimensions | ❌ 미정의 | 버튼 height, 아바타 size, 칩 height 등 컴포넌트별 직접 기입 | +| Spacing (px단위 직접) | ⚠️ 부분 정의 | `vars.spacing` xs–xl 정의되어 있으나 컴포넌트에서 미사용 | +| Box Shadow (커스텀) | ⚠️ 부분 정의 | shadows 토큰 존재하나 컴포넌트에서 미사용 | +| Z-Index | ⚠️ 부분 정의 | 토큰 정의되어 있으나 Tooltip에서 `zIndex: 1000` 직접 기입 | +| Border Width | ⚠️ 부분 정의 | 토큰 정의되어 있으나 `1px` 직접 기입 | +| Outline / Focus Ring | ❌ 미정의 | outline-offset(2px, 3px), outline-color 직접 기입 | + +--- + +## 4. 컴포넌트별 하드코딩 값 수집 + +### 4.1 Border-Radius + +| 값 | 사용 컴포넌트 | 대응 토큰 | +|---|---|---| +| `2px` | skeleton (radius.sm 사용) | `vars.radius.sm` ✅ | +| `4px` | checkbox, avatar, tooltip, switch | `vars.radius.md` (미사용) | +| `8px` | card, accordion, tooltip, input | `vars.radius.lg` (미사용) | +| `12px` | card, accordion | `vars.radius.xl` (미사용) | +| `50%` / `100px` / `100px` | radio, avatar, chip | `vars.radius.full` (미사용) | +| `9999px` | chip | `vars.radius.full` (미사용) | + +### 4.2 Transition / Animation + +| 값 | 사용 컴포넌트 | +|---|---| +| `0.15s ease-in-out` | checkbox, radio | +| `0.2s ease-in-out` | button, chip | +| `0.3s ease-in-out` | tooltip | +| `0.3s cubic-bezier(0.4, 0, 0.2, 1)` | accordion (height) | +| `0.3s ease` | accordion (transform), skeleton | +| `150ms ease-in-out` | switch | +| `1.2s ease-in-out infinite` | skeleton | +| `1.5s ease-in-out infinite` | skeleton | +| `2s ease-in-out infinite` | skeleton | +| `2s infinite` | skeleton | + +### 4.3 Spacing (padding / margin / gap) + +| 값 | 사용 컴포넌트 | +|---|---| +| `4px` | chip, badge | +| `6px` | checkbox (container padding), radio (container gap) | +| `8px` | input, tooltip, radio, switch, badge, chip, checkbox | +| `10px` | checkbox, radio (lg size) | +| `12px` | input, badge, accordion, chip | +| `16px` | input, accordion, badge, chip | +| `20px` | card, accordion, chip | +| `24px` | badge | +| `-1px` | switch (thumb 위치 계산) | + +### 4.4 색상 하드코딩 (토큰 미참조) + +| 값 | 사용 컴포넌트 | 비고 | +|---|---|---| +| `#3B82F6` | checkbox | checked 상태 배경 (blue500에 해당) | +| `#1a202c` | accordion | 배경색 | +| `#2d3748` | accordion, avatar | 배경색 / 텍스트색 | +| `#e2e8f0` | avatar | 배경색 | +| `#000000` | tooltip | CSS 변수 fallback | +| `#ffffff` | tooltip | 텍스트색 | +| `rgba(0, 0, 0, 0.2)` | tooltip | box-shadow | +| `#ccc`, `#f9f9f9`, `#e6e6e6` | tooltip | 경계·배경 | + +### 4.5 Component Dimensions (height / width) + +| 컴포넌트 | 값 | +|---------|---| +| button | height: `32px`(sm), `48px`(lg) | +| input | defaultActionSize: `24px` | +| avatar | size: 24, 32, 40, 70, 96px | +| chip | height: `24px`, `32px`, `40px` | +| checkbox | inputSize: `16px`, `20px`, `24px` | +| radio | inputSize: `12px`, `16px`, `20px`; `::after` 4/6/8px | +| switch | 계산값: width 32–48px, height 16–24px | +| tooltip | maxWidth: `250px` | + +### 4.6 Typography 하드코딩 + +| 값 | 사용 컴포넌트 | 비고 | +|---|---|---| +| fontSize: 12, 14, 16px | chip, input, switch, tooltip, avatar | `0.8rem` 포함 | +| fontWeight: 600 | badge, chip | semiBold 토큰 미사용 | +| lineHeight: `16px`, `20px`, `24px` | chip | compact/regular 토큰 미사용 | + +--- + +## 5. 요약 및 v2 설계 시사점 + +### 토큰 정의 완성도 + +| 카테고리 | 정의 | `vars` 사용 | 평가 | +|---------|------|-------------|------| +| Color (팔레트) | ✅ 150+ | ⚠️ 선택적 | raw 팔레트 직접 참조가 주류 | +| Color (semantic) | ✅ 4개 | ❌ | 미사용 | +| FontSize | ✅ 10개 | ⚠️ typography만 | 대부분 px 문자열 직접 기입 | +| FontWeight | ✅ 4개 | ⚠️ typography만 | badge, chip 하드코딩 | +| LineHeight | ✅ 2개 | ⚠️ 부분 | chip은 px 직접 기입 | +| BorderRadius | ✅ 6개 | ⚠️ skeleton만 | 7개 컴포넌트 하드코딩 | +| Shadows | ✅ 6개 | ❌ | 전혀 미사용 | +| ZIndex | ✅ 10개 | ❌ | tooltip 하드코딩 | +| Opacity | ✅ 15개 | ❌ | 전혀 미사용 | +| Spacing | ✅ 13개 | ❌ | `vars.spacing` 미사용 | +| BorderWidth | ✅ 4개 | ❌ | `1px` 하드코딩 | +| **Animation Duration** | ❌ | ❌ | v2 신규 필요 | +| **Animation Easing** | ❌ | ❌ | v2 신규 필요 | +| **Component Dimensions** | ❌ | ❌ | v2 신규 필요 | + +### 핵심 문제 + +1. **토큰이 있어도 안 쓴다** — radius, shadows, zIndex, spacing 모두 정의되어 있지만 대부분 컴포넌트에서 미사용 +2. **raw 팔레트 직접 참조** — `vars` 대신 `color.grayXXX`를 직접 import하는 패턴이 주류 (button, typography 제외) +3. **animation 토큰 전무** — duration/easing이 컴포넌트마다 제각각 (5가지 이상의 서로 다른 duration 혼재) +4. **치수(dimension) 토큰 전무** — 컴포넌트 height/width/size를 직접 기입하는 방식 +5. **완전 미연동 컴포넌트** — avatar, tooltip은 토큰 import 자체 없음 diff --git a/.gitignore b/.gitignore index 90d53fa..4f3006f 100644 --- a/.gitignore +++ b/.gitignore @@ -181,4 +181,7 @@ storybook-static # Docusaurus build/ -.claude/settings.local.json \ No newline at end of file +.claude/settings.local.json + +# oh-my-claudecode local state +.omc/ \ No newline at end of file From a5452a23e95751547c4081706df8e7f24d5241be Mon Sep 17 00:00:00 2001 From: Jinho Yeom <81306489+Yeom-JinHo@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:38:31 +0900 Subject: [PATCH 07/33] fix(build): preserve css imports in sideEffects (#228) * fix(build): preserve css imports in sideEffects * fix(build): preserve css side effects in template * chore(changeset): add css sideEffects fix note * chore(changeset): fix package list and description --- .changeset/spicy-wasps-clap.md | 20 ++++++++++++++++++++ .templates/component/package.json | 4 +++- packages/accordion/package.json | 4 +++- packages/badge/package.json | 4 +++- packages/button/package.json | 4 +++- packages/card/package.json | 4 +++- packages/checkbox/package.json | 4 +++- packages/divider/package.json | 4 +++- packages/flex/package.json | 4 +++- packages/grid/package.json | 4 +++- packages/input/package.json | 4 +++- packages/radio/package.json | 4 +++- packages/reset/package.json | 4 +++- packages/side/package.json | 4 +++- packages/skeleton/package.json | 4 +++- packages/switch/package.json | 4 +++- packages/tooltip/package.json | 4 +++- packages/typography/package.json | 4 +++- 18 files changed, 71 insertions(+), 17 deletions(-) create mode 100644 .changeset/spicy-wasps-clap.md diff --git a/.changeset/spicy-wasps-clap.md b/.changeset/spicy-wasps-clap.md new file mode 100644 index 0000000..45be640 --- /dev/null +++ b/.changeset/spicy-wasps-clap.md @@ -0,0 +1,20 @@ +--- +"@sipe-team/accordion": patch +"@sipe-team/checkbox": patch +"@sipe-team/skeleton": patch +"@sipe-team/divider": patch +"@sipe-team/tooltip": patch +"@sipe-team/button": patch +"@sipe-team/switch": patch +"@sipe-team/badge": patch +"@sipe-team/input": patch +"@sipe-team/radio": patch +"@sipe-team/reset": patch +"@sipe-team/card": patch +"@sipe-team/flex": patch +"@sipe-team/grid": patch +"@sipe-team/side": patch +"@sipe-team/typography": patch +--- + +Preserve CSS imports in `sideEffects` so consumer bundlers don't tree-shake `./styles.css`. diff --git a/.templates/component/package.json b/.templates/component/package.json index 5e2cb05..6846715 100644 --- a/.templates/component/package.json +++ b/.templates/component/package.json @@ -61,6 +61,8 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false, + "sideEffects": [ + "**/*.css" + ], "private": true } diff --git a/packages/accordion/package.json b/packages/accordion/package.json index f89f41f..375de58 100644 --- a/packages/accordion/package.json +++ b/packages/accordion/package.json @@ -71,5 +71,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/badge/package.json b/packages/badge/package.json index 5811f1e..023edae 100644 --- a/packages/badge/package.json +++ b/packages/badge/package.json @@ -69,5 +69,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/button/package.json b/packages/button/package.json index d1c3bc0..17a8e56 100644 --- a/packages/button/package.json +++ b/packages/button/package.json @@ -71,5 +71,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/card/package.json b/packages/card/package.json index ddffe18..94d9a3c 100644 --- a/packages/card/package.json +++ b/packages/card/package.json @@ -70,5 +70,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/checkbox/package.json b/packages/checkbox/package.json index cc2e857..2053700 100644 --- a/packages/checkbox/package.json +++ b/packages/checkbox/package.json @@ -69,5 +69,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/divider/package.json b/packages/divider/package.json index f30a34a..86da356 100644 --- a/packages/divider/package.json +++ b/packages/divider/package.json @@ -67,5 +67,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/flex/package.json b/packages/flex/package.json index 3d350f5..287db18 100644 --- a/packages/flex/package.json +++ b/packages/flex/package.json @@ -68,5 +68,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/grid/package.json b/packages/grid/package.json index 1ced490..363c97c 100644 --- a/packages/grid/package.json +++ b/packages/grid/package.json @@ -67,5 +67,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/input/package.json b/packages/input/package.json index 198039b..6f1b16c 100644 --- a/packages/input/package.json +++ b/packages/input/package.json @@ -70,5 +70,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/radio/package.json b/packages/radio/package.json index 56be8f0..8fab47b 100644 --- a/packages/radio/package.json +++ b/packages/radio/package.json @@ -71,5 +71,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/reset/package.json b/packages/reset/package.json index 83618d5..020e2a9 100644 --- a/packages/reset/package.json +++ b/packages/reset/package.json @@ -53,5 +53,7 @@ "./reset.css": "./dist/reset.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/side/package.json b/packages/side/package.json index 9dff458..088221f 100644 --- a/packages/side/package.json +++ b/packages/side/package.json @@ -57,5 +57,7 @@ "./styles.css": "./styles.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json index 74f1e51..fe81ae0 100644 --- a/packages/skeleton/package.json +++ b/packages/skeleton/package.json @@ -70,5 +70,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/switch/package.json b/packages/switch/package.json index eca5473..1271d4d 100644 --- a/packages/switch/package.json +++ b/packages/switch/package.json @@ -71,5 +71,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/tooltip/package.json b/packages/tooltip/package.json index ed4ee71..32aa9ce 100644 --- a/packages/tooltip/package.json +++ b/packages/tooltip/package.json @@ -70,5 +70,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } diff --git a/packages/typography/package.json b/packages/typography/package.json index 3759e93..8fc2a52 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -70,5 +70,7 @@ "./styles.css": "./dist/index.css" } }, - "sideEffects": false + "sideEffects": [ + "**/*.css" + ] } From f33411643cc72e4dba38bd28221dff9ca18bedeb Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 19 Apr 2026 21:41:22 +0900 Subject: [PATCH 08/33] docs: sync README badges, license year, and CLAUDE.md pnpm version (#242) --- CLAUDE.md | 4 ++-- LICENSE | 2 +- README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 34f734c..af367bc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,8 +9,8 @@ ## 명령어 ```bash -mise install # Node v22.22.2 + pnpm 9.7.1 설치 (.mise.toml 기반) -pnpm install # 의존성 설치 (pnpm 9.7.1, Node v22.22.2) +mise install # Node v22.22.2 + pnpm 10.33.0 설치 (.mise.toml 기반) +pnpm install # 의존성 설치 (pnpm 10.33.0, Node v22.22.2) pnpm dev:storybook # Storybook 개발 서버 실행 (:6006) pnpm build:storybook # Storybook 빌드 pnpm lint # Biome 린트 + 수정 (변경된 패키지) diff --git a/LICENSE b/LICENSE index 726334b..fd2defc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 SIPE +Copyright (c) 2024-2026 SIPE Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index da54a0d..ef29f81 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![](./public/og-image.png) # Sipe Design System -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/side/blob/main/LICENSE) ![Tool Manager](https://img.shields.io/badge/mise-latest-purple?logo=mise) ![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://storybook.sipe.team/?path=/docs/what-is-side--docs) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/gh/sipe-team/side/branch/changeset-release%2Fmain/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/gh/sipe-team/side) Github Stars +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sipe-team/side/blob/main/LICENSE) ![Tool Manager](https://img.shields.io/badge/mise-latest-purple?logo=mise) ![Package Manager](https://img.shields.io/badge/pnpm-10.33.0-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.7-ff4785?logo=storybook)](https://storybook.sipe.team/?path=/docs/what-is-side--docs) ![Tests](https://img.shields.io/badge/Vitest-2.1.8-green?logo=vitest) [![codecov](https://codecov.io/gh/sipe-team/side/branch/changeset-release%2Fmain/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/gh/sipe-team/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. @@ -72,6 +72,6 @@ We warmly welcome contributions from the community, whether you're a Sipe team m ## License -Copyright (c) 2026 SIPE, Inc. See [LICENSE](./LICENSE) for details. +Copyright (c) 2024-2026 SIPE, Inc. See [LICENSE](./LICENSE) for details. From 319a4274ec81ca83bf5ce4aad7cdf487452335f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9B=90=EC=A3=BC?= <101818687+3o14@users.noreply.github.com> Date: Tue, 21 Apr 2026 23:31:21 +0900 Subject: [PATCH 09/33] docs: token architecture and naming convention (#246) --- .github/decisions/token-architecture.md | 331 +++++++++++++++ .github/decisions/token-naming-convention.md | 420 +++++++++++++++++++ 2 files changed, 751 insertions(+) create mode 100644 .github/decisions/token-architecture.md create mode 100644 .github/decisions/token-naming-convention.md diff --git a/.github/decisions/token-architecture.md b/.github/decisions/token-architecture.md new file mode 100644 index 0000000..e3c46a5 --- /dev/null +++ b/.github/decisions/token-architecture.md @@ -0,0 +1,331 @@ +# SIDE v2 토큰 아키텍처 + +## 1. 레퍼런스 디자인 시스템 비교 + +| 시스템 | 계층 수 | Primitive 키 | Semantic 키 예시 | 다크모드 전환 | 비고 | +|---|---|---|---|---|---| +| **Toss TDS** | 2 (Primitive → Semantic) | `blue-500` | `color-background-primary` | `data-tds-theme` attribute | Semantic만 CSS var 노출 | +| **Atlassian** | 3 (Base → Semantic → Component) | `color.blue.500` | `color.text.accent.blue` | `data-color-mode` attribute | Component 계층이 방대해 유지보수 부담 | +| **Adobe Spectrum** | 3 (Global → Alias → Component) | `--spectrum-blue-500` | `--spectrum-accent-color-default` | CSS selector 교체 | Alias = Semantic, 가장 세분화 | +| **shadcn/ui** ⚠️ | 2 (Scale → Semantic) | 직접 노출 안 함 | `--background`, `--primary` | `.dark` class | 컴포넌트 모음이지 디자인 시스템이 아님 — 토큰 구조 레퍼런스로만 참고 | +| **Radix Colors** ⚠️ | 1 (Primitive scale 제공) | `--blue-9` (12단계) | Semantic은 소비자가 정의 | 별도 dark scale 제공 | 색상 팔레트 도구 — 디자인 시스템 아님. 단계별 의미 고정(9=solid, 11=text)이 Primitive 설계에 참고할 만함 | +| **11번가** | 2 (Brand → Semantic) | `Gray_01`, `11STREET_Red` | `text-primary`, `icon-disabled` | 없음 (라이트 전용) | 브랜드 색상 중심; CSS var 기반 테마 없음 | +| **쏘카 SOCARFRAME 2.0** | 3 (Primitive → Semantic → Component) | `tw-blue-100` | `tw-text-primary-strong` | `data-theme` attribute | Tailwind 기반 — VE 미사용; Figma Code Connect 연동 | +| **G마켓 GDS** | 2 (Core Palette → Semantic) | `Green-500`, `Gray-900` | `text-primary`, `bg-white` | 없음 (라이트 전용) | 2021년 v1.0; WCAG 2.0 기반 색상 스케일 | +| **라인 LDSM** | 2+ (Primitive → Semantic 확인) | 미공개 (SPA 렌더링) | `line-semantic-colors` | 미확인 | Semantic 계층 존재 확인; 컴포넌트 라이브러리 규모 큼 | +| **카카오스타일 지그재그** ✅ | 2 (Primitive → Semantic) | 미공개 | — | `data-theme` attribute | **VE `createGlobalThemeContract` 사용** — 현 프로젝트와 구조 가장 유사 | + +- **Toss**: Component 계층은 컴포넌트 `.css.ts` 내부 변수로 처리해서 2계층으로 충분함 +- **Atlassian**: Component 계층을 토큰 패키지에 넣으면 컴포넌트 변경마다 토큰 패키지 릴리스가 강제되는 결합이 생김 +- **Radix Colors**: 단계별 의미를 고정한 방식(9=solid bg, 11=text)이 Semantic 색상 역할 분리에 참고할 만함 +- **shadcn/ui**: HSL 분리 대신 opacity 변형이 필요한 색상은 별도 토큰으로 명시하는 게 VE 방식에 더 맞음 +- **카카오스타일**: VE 기반 한국 디자인 시스템 중 가장 직접적인 레퍼런스 — [기술 블로그](https://devblog.kakaostyle.com/ko/2024-12-13-1-rebuilding-frontend-design-system/) 참고 + +--- + +## 2. 계층 구조 결정 + +``` +┌──────────────────────────────────────────────────┐ +│ Semantic Layer (목적·의미 기반 alias) │ +│ vars.color.text.primary │ +│ vars.color.bg.surface │ +│ CSS: --side-color-text-primary │ +└────────────────────┬─────────────────────────────┘ + │ alias only +┌────────────────────▼─────────────────────────────┐ +│ Primitive Layer (원시값 척도) │ +│ vars.color.blue[500] │ +│ vars.spacing[4] │ +│ CSS: --side-color-blue-500 │ +└──────────────────────────────────────────────────┘ +``` + +## 3. 계층별 허용 범위 원칙 + +### Primitive Layer + +- hex, px, rem, ms, 숫자 스케일 값 등 원시값만 허용 +- 다른 토큰 참조, 의미론적 이름 사용은 하지 않음 +- 라이트/다크 모드에 따라 값이 바뀌지 않는다 — 순수 팔레트 + +```json +// 올바른 예 +{ "color": { "blue": { "500": "#3b82f6" } } } + +// 금지 예 — Primitive에 Semantic 명명을 쓰는 것 +{ "color": { "primary": "#3b82f6" } } +``` + +### Semantic Layer + +- Primitive token에 대한 alias만 허용 +- hex, px 등 원시값 직접 사용 금지 +- 모드(light/dark)마다 **동일 키에 다른 Primitive를 할당**하는 방식으로 구현 + +```json +// 올바른 예 — Primitive alias +{ "color": { "text": { "primary": "{color.gray.950}" } } } + +// 금지 예 — Primitive 값 직접 기입 +{ "color": { "text": { "primary": "#131518" } } } +``` + +--- + +## 4. Vanilla Extract 파일 역할 정의 + +### 파일 목록 + +``` +packages/tokens/src/ +├── primitive/ +│ └── theme.css.ts # createGlobalTheme — 단일 구현, contract 불필요 +├── semantic/ +│ ├── contract.css.ts # createGlobalThemeContract (prefix 적용) — Semantic CSS var 계약 선언 +│ ├── _values.ts # light/dark 순수 값 객체 (CSS 생성 없음) +│ ├── light.css.ts # createGlobalTheme(':root', ...) — 라이트 모드 값 +│ └── dark.css.ts # createGlobalTheme + globalStyle @media — 다크 모드 값 +└── index.ts # vars (semantic)만 re-export +``` + +### `primitive/theme.css.ts` + +구현체가 하나뿐이므로 contract 없이 `createGlobalTheme`만으로 충분하다. 반환값 `primitiveVars`는 패키지 내부(`semantic/`)에서만 참조하며 외부로 노출하지 않는다. + +```ts +import { createGlobalTheme } from '@vanilla-extract/css'; + +// 단일 전역 주입 — 모드와 무관하게 항상 동일한 값 +// primitiveVars는 semantic 계층 내부 전용 — index.ts에서 export하지 않는다 +export const primitiveVars = createGlobalTheme(':root', { + color: { + blue: { '500': '#3b82f6', '600': '#2563eb' }, + gray: { '50': '#fafafa', '950': '#111111' }, + }, + spacing: { '1': '4px', '2': '8px' }, + // ... +}); +``` + +### `semantic/contract.css.ts` + +```ts +import { createGlobalThemeContract } from '@vanilla-extract/css'; + +export const vars = createGlobalThemeContract( + { + color: { + text: { primary: null, secondary: null, disabled: null, inverse: null, /* ... */ }, + bg: { base: null, surface: null, overlay: null, /* ... */ }, + border: { default: null, focused: null, error: null, /* ... */ }, + icon: { default: null, secondary: null, disabled: null }, + status: { success: null, warning: null, error: null, info: null }, + // 테마 브랜드 색상 + brand: { primary: null, secondary: null, gradient: null }, + }, + // Semantic spacing/radius는 Primitive를 그대로 alias + // 컴포넌트에서 vars.radius.md 처럼 쓰기 위해 재노출 + radius: { none: null, sm: null, md: null, lg: null, xl: null, full: null }, + }, + (_, path) => `side-${path.join('-')}`, +); +``` + +### `semantic/_values.ts` + +CSS를 생성하지 않는 순수 값 객체. `light.css.ts`와 `dark.css.ts` 두 파일이 동일한 값 객체를 각각 참조해야 하므로 별도 분리한다. + +```ts +// _values.ts +import { primitiveVars } from '../primitive/theme.css'; + +export const lightValues = { + color: { + text: { + primary: primitiveVars.color.gray['950'], + secondary: primitiveVars.color.gray['600'], + disabled: primitiveVars.color.gray['400'], + inverse: primitiveVars.color.gray['50'], + }, + bg: { + base: primitiveVars.color.gray['50'], + surface: primitiveVars.color.white, + }, + brand: { + primary: '#f4a1a0', // 예외: 브랜드 색은 테마별 고유값 + }, + // ... + }, + radius: primitiveVars.radius, + // ... +}; + +export const darkValues = { + color: { + text: { + primary: primitiveVars.color.gray['50'], + secondary: primitiveVars.color.gray['400'], + disabled: primitiveVars.color.gray['600'], + inverse: primitiveVars.color.gray['950'], + }, + bg: { + base: primitiveVars.color.gray['950'], + surface: primitiveVars.color.gray['900'], + }, + // ... + }, + // ... +}; +``` + +### `semantic/dark.css.ts` + +다크 모드가 기본값이므로 `:root`에 darkValues를 주입한다. + +```ts +import { createGlobalTheme } from '@vanilla-extract/css'; +import { vars } from './contract.css'; +import { darkValues } from './_values'; + +// 기본값: 다크 모드 +createGlobalTheme(':root', vars, darkValues); +``` + +### `semantic/light.css.ts` + +`createGlobalTheme`은 빌드타임 함수라 미디어 쿼리 안에 직접 넣을 수 없다. `data-mode="light"` 단독으로는 `prefers-color-scheme: light` 유저를 JS 토글 없이 커버할 수 없으므로 `globalStyle`로 시스템 라이트모드를 별도 처리한다. + +우선순위: `[data-mode="light"]` selector specificity > `@media` → `data-mode`가 명시된 경우 항상 우선된다. 단, 사용자가 시스템을 라이트로 설정했는데 `data-mode="dark"`가 명시된 경우 `@media`가 이겨버리는 충돌이 생기므로 이를 방어하는 `[data-mode="dark"]` override를 추가한다. + +```ts +import { assignVars, createGlobalTheme, globalStyle } from '@vanilla-extract/css'; +import { vars } from './contract.css'; +import { darkValues, lightValues } from './_values'; + +// ① JS 토글 방식 (data-mode attribute 기반) +createGlobalTheme('[data-mode="light"]', vars, lightValues); + +// ② 시스템 라이트모드 (JS 토글 없이도 동작) +globalStyle('body', { + '@media': { + '(prefers-color-scheme: light)': { + vars: assignVars(vars, lightValues), + }, + }, +}); + +// ③ data-mode="dark" 명시 시 @media를 덮어씀 (우선순위 방어) +globalStyle('[data-mode="dark"]', { + vars: assignVars(vars, darkValues), +}); +``` + +> **설계 원칙**: `light.css.ts` / `dark.css.ts`는 **codegen 대상**이다. `tokens/**/*.json`에서 자동 생성되며, 수동 편집하지 않는다. `contract.css.ts`는 타입 계약이므로 JSON 스키마 변경 시 함께 갱신된다. + +--- + +## 5. 다크 모드 확장성 + +### 파일 구조 + +``` +tokens/ +├── primitive/ +│ ├── color.json # 불변 팔레트 (모드 무관) +│ ├── spacing.json +│ ├── radius.json +│ └── typography.json +└── semantic/ + ├── light/ + │ └── color.json # 라이트 모드 alias 맵 + ├── dark/ + │ └── color.json # 다크 모드 alias 맵 + └── brand/ + ├── 1st.json # 각 SIPE 기수별 브랜드 색 + ├── 2nd.json + ├── 3rd.json + └── 4th.json +``` + +### Theme Switching 메커니즘 + +``` + + → vars가 semantic/light + brand/4th 조합으로 결정됨 + + + → vars가 semantic/dark + brand/4th 조합으로 결정됨 +``` + +CSS 우선순위: +1. `:root` — 기본 다크 모드 (4th 테마) +2. `@media (prefers-color-scheme: light)` — 시스템 라이트모드 (JS 토글 없이 동작) +3. `[data-mode="light"]` — 라이트 모드 명시 override (②보다 specificity 높음) +4. `[data-mode="dark"]` — 다크 모드 명시 override (②의 @media 충돌 방어) +5. `[data-theme="Nth"]` — 브랜드 색상 override (primary, secondary, gradient) + +### Tokens Studio Sets 구조 + +``` +Sets: + - primitive/color (global, always active) + - primitive/spacing (global, always active) + - primitive/radius (global, always active) + - primitive/typography (global, always active) + - semantic/light/color (theme set: mode=light) + - semantic/dark/color (theme set: mode=dark) + - brand/1st (theme set: theme=1st) + - brand/2nd (theme set: theme=2nd) + - brand/3rd (theme set: theme=3rd) + - brand/4th (theme set: theme=4th) +``` + +--- + +## 6. Vanilla Extract Contract 패턴 + +### createGlobalThemeContract의 역할 + +`createGlobalThemeContract`는 **타입의 근거**다: +- CSS 변수명을 매핑 함수 하나로 일관되게 결정한다. +- TypeScript 타입을 생성해 잘못된 토큰 참조를 컴파일 타임에 잡는다. +- `createGlobalTheme`에 값 주입 시 계약 키를 모두 채웠는지 타입으로 강제한다. + +```ts +// contract가 있으면 이 코드는 타입 에러 +createGlobalTheme(':root', vars, { + color: { text: { primary: '#000' } } + // TS Error: color.text.secondary 누락 +}); +``` + +### 컴포넌트에서의 사용 + +```ts +// packages/button/src/Button.css.ts +import { vars } from '@sipe-team/tokens'; // Semantic vars만 import + +export const buttonRecipe = recipe({ + base: { + backgroundColor: vars.color.bg.surface, + color: vars.color.text.primary, + borderRadius: vars.radius.md, + }, + variants: { + variant: { + primary: { + backgroundColor: vars.color.brand.primary, + }, + }, + }, +}); +``` + +컴포넌트는 **Semantic vars만** import한다. `primitiveVars`는 `semantic/` 내부에서만 참조하며, `index.ts`에서 export하지 않는다. 소비자가 `primitiveVars.color.blue['500']`을 컴포넌트에 직접 사용하기 시작하면 semantic 계층이 형식적으로 전락하므로 노출 자체를 차단한다. + +```ts +// index.ts +export { vars } from './semantic/contract.css'; // 소비자용 +// primitiveVars는 export하지 않는다 +``` diff --git a/.github/decisions/token-naming-convention.md b/.github/decisions/token-naming-convention.md new file mode 100644 index 0000000..765f6dd --- /dev/null +++ b/.github/decisions/token-naming-convention.md @@ -0,0 +1,420 @@ +# SIDE v2 토큰 네이밍 컨벤션 + +> 이 문서의 규칙은 `tokens/**/*.json` → codegen → `contract.css.ts` / `themes.css.ts` 파이프라인 전반에 적용된다. + +--- + +## 1. 구분자 결정 + +세 가지 표현 형식에 서로 다른 구분자를 사용하며, 변환 규칙은 고정이다. + +| 형식 | 구분자 | 예시 | +|---|---|---| +| **JSON 키** | `.` (점, 중첩 객체) | `color.blue.500` | +| **VE vars 경로** | `.` (객체 접근) + `[]` (숫자 키) | `vars.color.blue[500]` | +| **CSS 변수명** | `-` (하이픈) | `--side-color-blue-500` | + +### 변환 규칙 + +``` +JSON key path: color.blue.500 + ↓ join('-') +CSS var name: --side-color-blue-500 + ↓ TS 객체 경로 +VE vars path: vars.color.blue['500'] +``` + +> **camelCase 금지**: CSS 변수명에는 하이픈만 사용한다. `--side-fontWeight-bold`가 아니라 `--side-font-weight-bold`. + +--- + +## 2. Primitive Layer 네이밍 + +### 2.1 색상 (color) + +``` +color.. + +예시: + color.gray.50 → --side-color-gray-50 + color.blue.500 → --side-color-blue-500 + color.red.950 → --side-color-red-950 + color.black → --side-color-black + color.white → --side-color-white +``` + +- ``: `gray | red | orange | yellow | green | teal | blue | cyan | purple | pink | black | white` +- ``: `50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950` +- `black`, `white`는 step 없이 단일 값 +- v1의 `gray50` 형태(camelCase + 숫자 붙이기)는 **폐기** — `.` 분리가 표준 + +### 2.2 간격 (spacing) + +``` +spacing. + +예시: + spacing.1 → --side-spacing-1 (= 4px) + spacing.2 → --side-spacing-2 (= 8px) + spacing.4 → --side-spacing-4 (= 16px) +``` + +- 값은 `multiplier × 4px` 규칙으로 계산 +- v1의 키(0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)를 유지하되 JSON에서 문자열 키로 저장 (`"1"`, `"2"`) +- `spacing.0`은 `0px`, 토큰으로 정의하되 사용 빈도는 낮다 + +### 2.3 둥근 모서리 (radius) + +``` +radius. + +예시: + radius.none → --side-radius-none (= 0) + radius.sm → --side-radius-sm (= 2px) + radius.md → --side-radius-md (= 4px) + radius.lg → --side-radius-lg (= 8px) + radius.xl → --side-radius-xl (= 12px) + radius.full → --side-radius-full (= 9999px) +``` + +- 스케일: `none | sm | md | lg | xl | full` (v1 동일 유지) + +### 2.4 타이포그래피 (typography) + +``` +typography.fontSize. +typography.fontWeight. +typography.lineHeight. +typography.fontFamily. + +예시: + typography.fontSize.12 → --side-typography-font-size-12 + typography.fontWeight.semiBold → --side-typography-font-weight-semi-bold + typography.lineHeight.regular → --side-typography-line-height-regular +``` + +- `fontSize`: 숫자 값을 키로 사용 (`12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 36 | 48`) +- `fontWeight`: 시맨틱 이름 (`regular | medium | semiBold | bold`) +- CSS 변수명 변환 시 camelCase → kebab-case (`semiBold` → `semi-bold`) + +### 2.5 그림자 (shadow) + +``` +shadow. + +예시: + shadow.none → --side-shadow-none + shadow.sm → --side-shadow-sm + shadow.md → --side-shadow-md + shadow.lg → --side-shadow-lg + shadow.xl → --side-shadow-xl + shadow.2xl → --side-shadow-2xl +``` + +### 2.6 Z축 (z) + +``` +z. + +예시: + z.hide → --side-z-hide (= -1) + z.base → --side-z-base (= 0) + z.dropdown → --side-z-dropdown (= 1000) + z.sticky → --side-z-sticky (= 1100) + z.modal → --side-z-modal (= 1400) + z.toast → --side-z-toast (= 1600) + z.tooltip → --side-z-tooltip (= 1700) +``` + +- v1 `zIndex` 키 이름을 `z`로 단축 (CSS var에서 `z-index`와 혼동 없음) + +### 2.7 애니메이션 (motion) — v2 신규 + +``` +motion.duration. +motion.easing. + +예시: + motion.duration.fast → --side-motion-duration-fast (= 100ms) + motion.duration.normal → --side-motion-duration-normal (= 200ms) + motion.duration.slow → --side-motion-duration-slow (= 300ms) + motion.duration.slower → --side-motion-duration-slower (= 500ms) + + motion.easing.default → --side-motion-easing-default (= ease-in-out) + motion.easing.decelerate → --side-motion-easing-decelerate (= cubic-bezier(0,0,0.2,1)) + motion.easing.accelerate → --side-motion-easing-accelerate (= cubic-bezier(0.4,0,1,1)) + motion.easing.spring → --side-motion-easing-spring (= cubic-bezier(0.4,0,0.2,1)) +``` + +> v1 감사에서 확인된 분산된 duration 값 (`0.15s, 0.2s, 0.3s, 1.2s, 1.5s, 2s`)을 `fast/normal/slow/slower` + 별도 animation 전용 키로 통합 + +### 2.8 불투명도 (opacity) + +``` +opacity. + +예시: + opacity.0 → --side-opacity-0 (= 0) + opacity.50 → --side-opacity-50 (= 0.5) + opacity.100 → --side-opacity-100 (= 1) +``` + +- step: `0 | 5 | 10 | 20 | 25 | 30 | 40 | 50 | 60 | 70 | 75 | 80 | 90 | 95 | 100` +- 퍼센트 단위로 표현 (0.5 → `50`) + +### 2.9 테두리 (border) + +``` +border.width. +border.style. + +예시: + border.width.none → --side-border-width-none (= 0) + border.width.thin → --side-border-width-thin (= 1px) + border.width.medium → --side-border-width-medium (= 2px) + border.width.thick → --side-border-width-thick (= 4px) +``` + +--- + +## 3. Semantic Layer 네이밍 + +### 3.1 색상 카테고리 (color) + +Semantic 색상은 **역할(role)** 기반으로 명명한다. Primitive에 있는 색상 이름을 Semantic에 쓰지 않는다. + +``` +color..[.] + +카테고리: + text — 텍스트 + bg — 배경 + border — 경계선 + icon — 아이콘 + status — 상태 (success/warning/error/info) + brand — 테마 브랜드 색 +``` + +**text** + +| 키 | 용도 | +|---|---| +| `color.text.primary` | 본문 기본 텍스트 | +| `color.text.secondary` | 보조 텍스트, 설명 | +| `color.text.tertiary` | 더 약한 힌트, placeholder | +| `color.text.disabled` | 비활성 텍스트 | +| `color.text.inverse` | 어두운 배경 위 밝은 텍스트 | +| `color.text.link` | 링크 텍스트 | +| `color.text.onAccent` | accent 배경 위 텍스트 | + +**bg** + +| 키 | 용도 | +|---|---| +| `color.bg.base` | 페이지 최상위 배경 | +| `color.bg.surface` | 카드·패널 배경 | +| `color.bg.overlay` | 모달·드로어 배경 | +| `color.bg.subtle` | 구분선 없이 영역 구분할 때 | +| `color.bg.accent` | 강조 배경 (brand primary) | +| `color.bg.disabled` | 비활성 입력 배경 | + +**border** + +| 키 | 용도 | +|---|---| +| `color.border.default` | 일반 경계선 | +| `color.border.subtle` | 미세 구분선 | +| `color.border.focused` | 포커스 링 | +| `color.border.error` | 에러 상태 경계선 | +| `color.border.disabled` | 비활성 경계선 | + +**icon** + +| 키 | 용도 | +|---|---| +| `color.icon.default` | 기본 아이콘 | +| `color.icon.secondary` | 보조 아이콘 | +| `color.icon.disabled` | 비활성 아이콘 | +| `color.icon.onAccent` | accent 배경 위 아이콘 | + +**status** + +| 키 | 용도 | +|---|---| +| `color.status.success` | 성공·완료 | +| `color.status.warning` | 경고 | +| `color.status.error` | 오류 (v1 `danger` → `error`로 변경) | +| `color.status.info` | 정보 (v1 `positive` → `info`로 변경) | +| `color.status.success.bg` | 성공 상태 배경 | +| `color.status.error.bg` | 오류 상태 배경 | + +> v1 `danger` → `error`, `positive` → `info` 로 명칭 변경. 더 범용적이고 산업 표준에 가깝다. + +**brand** + +| 키 | 용도 | +|---|---| +| `color.brand.primary` | 테마 주 색상 (SIPE 기수별 상이) | +| `color.brand.secondary` | 테마 보조 색상 | +| `color.brand.gradient` | 그라디언트 (CSS value 전체) | +| `color.brand.onPrimary` | primary 배경 위 텍스트 | + +### 3.2 상태 접미사 (state suffix) + +상태를 가지는 토큰은 마지막 세그먼트에 상태를 붙인다. 기본 상태(default)는 접미사를 생략한다. + +| 접미사 | 의미 | 예시 | +|---|---|---| +| _(없음)_ | 기본 상태 | `color.text.primary` | +| `.hover` | 마우스 오버 | `color.bg.accent.hover` | +| `.active` | 클릭/누름 | `color.bg.accent.active` | +| `.disabled` | 비활성 | `color.text.disabled` | +| `.focus` | 키보드 포커스 | `color.border.focused` (별도 카테고리로 분리) | +| `.selected` | 선택됨 | `color.bg.surface.selected` | + +> `focus`는 `color.border.focused`처럼 `border` 카테고리 안에서 표현하는 것을 우선한다. 단독 `color.bg.xxx.focus`는 복합 상태에서만 사용. + +--- + +## 4. 계열 접두사 규칙 요약 + +| 카테고리 | Primitive 접두사 | Semantic 접두사 | VE vars 경로 | +|---|---|---|---| +| 색상 | `color..` | `color..*` | `vars.color.*` | +| 간격 | `spacing.` | — (Primitive 직접 사용) | `vars.spacing[n]` | +| 둥근 모서리 | `radius.` | — (Primitive 직접 alias) | `vars.radius.*` | +| 그림자 | `shadow.` | `shadow.` | `vars.shadow.*` | +| Z축 | `z.` | — (Primitive 직접 사용) | `vars.z.*` | +| 타이포그래피 | `typography.*` | — (Primitive 직접 사용) | `vars.typography.*` | +| 애니메이션 | `motion.duration.*` / `motion.easing.*` | — | `vars.motion.*` | +| 불투명도 | `opacity.` | — | `vars.opacity[n]` | +| 테두리 두께 | `border.width.*` | — | `vars.border.width.*` | + +Semantic이 없는 카테고리(spacing, radius 등)는 컴포넌트에서 Primitive vars를 직접 참조한다. + +--- + +## 5. VE Contract 키 규칙 + +### 숫자 키 처리 + +TypeScript 객체 키는 숫자로 시작할 수 없다. 숫자 키는 **문자열 키**로 선언한다. + +```ts +// 올바른 예 +const primitiveVars = createGlobalThemeContract({ + color: { + gray: { + '50': null, // 문자열 키 + '500': null, + '950': null, + }, + }, + spacing: { + '1': null, + '4': null, + }, +}); + +// 접근 시 +vars.color.gray['500'] // bracket notation +vars.spacing['4'] +``` + +### camelCase → kebab-case 변환 + +Contract 매핑 함수가 자동으로 변환한다: + +```ts +createGlobalThemeContract( + { typography: { fontWeight: { semiBold: null } } }, + (_, path) => `side-${path.map(toKebab).join('-')}`, + // → --side-typography-font-weight-semi-bold +); + +function toKebab(str: string) { + return str.replace(/([A-Z])/g, '-$1').toLowerCase(); +} +``` + +--- + +## 6. JSON 파일 키 예시 + +### `tokens/primitive/color.json` + +```json +{ + "color": { + "black": { "value": "#131518", "type": "color" }, + "white": { "value": "#ffffff", "type": "color" }, + "gray": { + "50": { "value": "#fafafa", "type": "color" }, + "500": { "value": "#71717a", "type": "color" }, + "950": { "value": "#111111", "type": "color" } + }, + "blue": { + "500": { "value": "#3b82f6", "type": "color" } + } + } +} +``` + +### `tokens/semantic/light/color.json` + +```json +{ + "color": { + "text": { + "primary": { "value": "{color.gray.950}", "type": "color" }, + "secondary": { "value": "{color.gray.600}", "type": "color" }, + "disabled": { "value": "{color.gray.400}", "type": "color" }, + "inverse": { "value": "{color.white}", "type": "color" } + }, + "bg": { + "base": { "value": "{color.gray.50}", "type": "color" }, + "surface": { "value": "{color.white}", "type": "color" } + }, + "status": { + "success": { "value": "{color.green.500}", "type": "color" }, + "warning": { "value": "{color.orange.400}", "type": "color" }, + "error": { "value": "{color.red.500}", "type": "color" }, + "info": { "value": "{color.blue.400}", "type": "color" } + } + } +} +``` + +### `tokens/semantic/dark/color.json` + +```json +{ + "color": { + "text": { + "primary": { "value": "{color.gray.50}", "type": "color" }, + "secondary": { "value": "{color.gray.400}", "type": "color" }, + "disabled": { "value": "{color.gray.600}", "type": "color" }, + "inverse": { "value": "{color.gray.950}", "type": "color" } + }, + "bg": { + "base": { "value": "{color.gray.950}", "type": "color" }, + "surface": { "value": "{color.gray.900}", "type": "color" } + } + } +} +``` + +--- + +## 7. 금지 패턴 + +| 금지 패턴 | 이유 | 대안 | +|---|---|---| +| Semantic에 hex 직접 사용 | 다크모드 전환 불가 | Primitive alias `{color.gray.950}` | +| Primitive에 의미론 이름 | 역할이 고정되어 확장 어려움 | `color.primary` → `color.brand.primary` (Semantic에) | +| 컴포넌트에서 `primitiveVars` import | Primitive는 내부 구현 세부사항 | `vars` (Semantic) 만 import | +| CSS var에 camelCase | CSS 관례 위반 | `--side-font-weight-semi-bold` | +| `danger`, `positive` 이름 | 비표준, 혼동 유발 | `error`, `info` | +| `vars.spacing.xs` 같은 t-shirt size | 범위가 불명확, 확장 어려움 | `vars.spacing['2']` (4px 단위 scale) | + +> v1의 `vars.spacing.xs/sm/md/lg/xl` 패턴은 **v2에서 폐기**. 숫자 스케일이 컴포넌트 조합 시 훨씬 예측 가능하다. From 8dbf884181be0aac33fb8b8c5a8edf9638882eda Mon Sep 17 00:00:00 2001 From: "YOUNGBEEN, KIM" <62539910+KYBee@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:27:24 +0900 Subject: [PATCH 10/33] test(flex): strengthen contract coverage (#241) * refactor(flex): align story options with constants - replace hardcoded story options with Flex constants - keep Storybook controls aligned with the current contract values - reduce the risk of drift between implementation and story definitions * test(flex): strengthen contract coverage - align tests with the current Flex contract in side - use constants as the source of truth for direction, align, justify, and wrap cases - add coverage for normal values, asChild behavior, style overrides, ref forwarding, and common consumer usage patterns - verify the Flex test suite passes at the package level * test(flex): translate test descriptions to english --------- Co-authored-by: KYBee --- packages/flex/src/Flex.stories.tsx | 9 +- packages/flex/src/Flex.test.tsx | 298 ++++++++++++++++++----------- 2 files changed, 192 insertions(+), 115 deletions(-) diff --git a/packages/flex/src/Flex.stories.tsx b/packages/flex/src/Flex.stories.tsx index 5df5216..9e522be 100644 --- a/packages/flex/src/Flex.stories.tsx +++ b/packages/flex/src/Flex.stories.tsx @@ -1,6 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Flex } from './Flex'; +import { FLEX_ALIGNS, FLEX_DIRECTIONS, FLEX_JUSTIFY_CONTENTS, FLEX_WRAPS } from './constants'; const meta = { title: 'Components/Flex', @@ -9,22 +10,22 @@ const meta = { argTypes: { direction: { control: 'select', - options: ['row', 'column', 'row-reverse', 'column-reverse'], + options: FLEX_DIRECTIONS, description: 'Flex direction', }, align: { control: 'select', - options: ['flex-start', 'flex-end', 'center', 'stretch', 'baseline', 'normal'], + options: FLEX_ALIGNS, description: 'Align items', }, justify: { control: 'select', - options: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly', 'normal'], + options: FLEX_JUSTIFY_CONTENTS, description: 'Justify content', }, wrap: { control: 'select', - options: ['nowrap', 'wrap', 'wrap-reverse'], + options: FLEX_WRAPS, description: 'Flex wrap', }, gap: { diff --git a/packages/flex/src/Flex.test.tsx b/packages/flex/src/Flex.test.tsx index eb71a4b..6382395 100644 --- a/packages/flex/src/Flex.test.tsx +++ b/packages/flex/src/Flex.test.tsx @@ -1,13 +1,14 @@ -import { type CSSProperties, createElement } from 'react'; +import { type CSSProperties, createElement, createRef } from 'react'; import { faker } from '@faker-js/faker'; import { render, screen } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { Flex } from './Flex'; +import { FLEX_ALIGNS, FLEX_DIRECTIONS, FLEX_JUSTIFY_CONTENTS, FLEX_WRAPS } from './constants'; describe('Flex', () => { - it('flex 컴포넌트는 props를 전달하지 않으면 flex의 기본값으로 설정된다.', () => { + it('uses the default flex styles when no props are provided', () => { render(
item 1
@@ -26,24 +27,17 @@ describe('Flex', () => { }); }); - it('flex 컴포넌트에 className을 주입하면 추가로 전달한다.', () => { + it('passes through a custom className', () => { const customClassName = faker.word.noun(); render(); expect(screen.getByTestId('flex-container')).toHaveClass(customClassName); }); - describe('flex 속성', () => { + describe('flex props', () => { 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 }) => { + it.each( + FLEX_JUSTIFY_CONTENTS.map((justifyContent) => ({ justifyContent })), + )('applies justifyContent: $justifyContent when justify is provided', ({ justifyContent }) => { render(
item 1
@@ -57,15 +51,9 @@ describe('Flex', () => { }); 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 }) => { + it.each( + FLEX_ALIGNS.map((alignItems) => ({ alignItems })), + )('applies alignItems: $alignItems when align is provided', ({ alignItems }) => { render(
item 1
@@ -79,9 +67,9 @@ describe('Flex', () => { }); describe('wrap', () => { - it.each([{ wrap: 'wrap' }, { wrap: 'nowrap' }, { wrap: 'wrap-reverse' }] satisfies Array<{ - wrap: CSSProperties['flexWrap']; - }>)('flex의 wrap prop에 $wrap 속성을 주입하면 해당 속성을 적용한다.', ({ wrap }) => { + it.each( + FLEX_WRAPS.map((wrap) => ({ wrap })), + )('applies flexWrap: $wrap when wrap is provided', ({ wrap }) => { render(
item 1
@@ -95,15 +83,9 @@ describe('Flex', () => { }); 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 }) => { + it.each( + FLEX_DIRECTIONS.map((direction) => ({ direction })), + )('applies flexDirection: $direction when direction is provided', ({ direction }) => { render(
item 1
@@ -114,89 +96,89 @@ describe('Flex', () => { 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']; + }>)('applies flexBasis: $basis when basis is provided', ({ basis }) => { + render( + +
item 1
+
item 2
+
, + ); - 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 }); - }); + 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']; + }>)('applies flexGrow: $grow when grow is provided', ({ grow }) => { + render( + +
item 1
+
item 2
+
, + ); - 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 }); - }); + 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']; + }>)('applies flexShrink: $shrink when shrink is provided', ({ shrink }) => { + render( + +
item 1
+
item 2
+
, + ); - 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 }); - }); + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ flexShrink: shrink }); }); + }); + + describe('inline', () => { + it('renders with inline-flex display when inline is true', () => { + render( + +
item 1
+
item 2
+
, + ); - describe('inline', () => { - it('flex의 inline prop에 true 속성을 주입하면 해당 속성을 적용한다.', () => { - render( - -
item 1
-
item 2
-
, - ); - - const flexContainer = screen.getByTestId('flex-container'); - expect(flexContainer).toHaveStyle({ display: 'inline-flex' }); - }); + 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']; + }>)('applies gap: $gap when gap is provided', ({ gap }) => { + render( + +
item 1
+
item 2
+
, + ); - 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 }); - }); + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ gap }); }); }); }); @@ -207,7 +189,7 @@ describe('Flex', () => { { style: { alignItems: 'center' } }, { style: { flexWrap: 'wrap' } }, { style: { flexDirection: 'column' } }, - ] satisfies Array<{ style: CSSProperties }>)('flex의 style prop에 $style 속성을 주입하면 해당 속성을 적용한다.', ({ + ] satisfies Array<{ style: CSSProperties }>)('applies style overrides from the style prop: $style', ({ style, }) => { render( @@ -220,6 +202,61 @@ describe('Flex', () => { const flexContainer = screen.getByTestId('flex-container'); expect(flexContainer).toHaveStyle(style); }); + + it('allows the style prop to override inline style values for the same CSS properties', () => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ + flexBasis: '50%', + gap: '16px', + }); + }); + }); + + describe('consumer usage patterns', () => { + it('preserves the expected layout styles when direction, align, and gap are combined', () => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '12px', + }); + }); + + it('preserves the expected layout styles when inline, justify, and gap are combined', () => { + render( + +
item 1
+
item 2
+
, + ); + + const flexContainer = screen.getByTestId('flex-container'); + expect(flexContainer).toHaveStyle({ + display: 'inline-flex', + justifyContent: 'center', + gap: '8px', + }); + }); }); describe('polymorphic', () => { @@ -230,7 +267,7 @@ describe('Flex', () => { 'input', 'label', 'div', - ])('flex의 asChild prop에 true 속성을 주입하면 자식으로 %s 엘리먼트가 전달되면 해당 엘리먼트의 태그로 렌더링된다', (element) => { + ])('renders as the child %s element when asChild is true', (element) => { render( {createElement(element)} @@ -241,5 +278,44 @@ describe('Flex', () => { expect(flexContainer).toBeInTheDocument(); expect(flexContainer.tagName.toLowerCase()).toBe(element); }); + + it('passes className, style, and rest props to the child element when asChild is used', () => { + render( + +