From 217f956857beb4f7f5cc6fc5c161e6b645ee98f6 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Mon, 29 Jul 2024 23:13:48 +0900 Subject: [PATCH 01/46] =?UTF-8?q?chore:=20=EA=B0=9C=ED=8E=B8=EB=90=A0=20?= =?UTF-8?q?=EB=94=94=EC=9E=90=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 12 ++++++++++++ packages/design-system/packages/hooks/package.json | 12 ++++++++++++ packages/design-system/pnpm-workspace.yaml | 2 ++ 3 files changed, 26 insertions(+) create mode 100644 packages/design-system/packages/core/package.json create mode 100644 packages/design-system/packages/hooks/package.json create mode 100644 packages/design-system/pnpm-workspace.yaml diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json new file mode 100644 index 00000000..c84f54a0 --- /dev/null +++ b/packages/design-system/packages/core/package.json @@ -0,0 +1,12 @@ +{ + "name": "@attraction/ds-core", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json new file mode 100644 index 00000000..cb8d194a --- /dev/null +++ b/packages/design-system/packages/hooks/package.json @@ -0,0 +1,12 @@ +{ + "name": "@attraction/ds-hooks", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/packages/design-system/pnpm-workspace.yaml b/packages/design-system/pnpm-workspace.yaml new file mode 100644 index 00000000..18ec407e --- /dev/null +++ b/packages/design-system/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' From 7c6fb01c7a7fdb5c49c6828ad5ef1f5fa4594d68 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 10:59:58 +0900 Subject: [PATCH 02/46] =?UTF-8?q?chore:=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EC=97=90=20tsup=20=EC=84=A4=EC=B9=98=20=EB=B0=8F=20config=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/package.json | 6 ++ .../design-system/packages/core/tsconfig.json | 3 + .../packages/core/tsup.config.ts | 13 ++++ .../design-system/packages/hooks/package.json | 6 ++ .../packages/hooks/tsconfig.json | 3 + .../packages/hooks/tsup.config.ts | 13 ++++ packages/design-system/pnpm-workspace.yaml | 2 - pnpm-lock.yaml | 60 ++++++++++++------- pnpm-workspace.yaml | 1 + 9 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 packages/design-system/packages/core/tsconfig.json create mode 100644 packages/design-system/packages/core/tsup.config.ts create mode 100644 packages/design-system/packages/hooks/tsconfig.json create mode 100644 packages/design-system/packages/hooks/tsup.config.ts delete mode 100644 packages/design-system/pnpm-workspace.yaml diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index c84f54a0..bb868298 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -6,6 +6,12 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, + "dependencies": { + "tsup": "^8.1.0" + }, + "devDependencies": { + "@attraction/config": "workspace:^" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/core/tsconfig.json b/packages/design-system/packages/core/tsconfig.json new file mode 100644 index 00000000..aeb01c43 --- /dev/null +++ b/packages/design-system/packages/core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@attraction/config/tsconfig.base.json" +} diff --git a/packages/design-system/packages/core/tsup.config.ts b/packages/design-system/packages/core/tsup.config.ts new file mode 100644 index 00000000..79c8461d --- /dev/null +++ b/packages/design-system/packages/core/tsup.config.ts @@ -0,0 +1,13 @@ +import { Options } from 'tsup' + +const options: Options = { + format: ['cjs', 'esm'], + clean: true, + sourcemap: 'inline', + dts: true, + entryPoints: ['src/index.ts'], + external: ['react', 'react-dom'], + minify: true, +} + +export default options diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index cb8d194a..f97a4df2 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -6,6 +6,12 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, + "dependencies": { + "tsup": "^8.1.0" + }, + "devDependencies": { + "@attraction/config": "workspace:^" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/hooks/tsconfig.json b/packages/design-system/packages/hooks/tsconfig.json new file mode 100644 index 00000000..aeb01c43 --- /dev/null +++ b/packages/design-system/packages/hooks/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@attraction/config/tsconfig.base.json" +} diff --git a/packages/design-system/packages/hooks/tsup.config.ts b/packages/design-system/packages/hooks/tsup.config.ts new file mode 100644 index 00000000..79c8461d --- /dev/null +++ b/packages/design-system/packages/hooks/tsup.config.ts @@ -0,0 +1,13 @@ +import { Options } from 'tsup' + +const options: Options = { + format: ['cjs', 'esm'], + clean: true, + sourcemap: 'inline', + dts: true, + entryPoints: ['src/index.ts'], + external: ['react', 'react-dom'], + minify: true, +} + +export default options diff --git a/packages/design-system/pnpm-workspace.yaml b/packages/design-system/pnpm-workspace.yaml deleted file mode 100644 index 18ec407e..00000000 --- a/packages/design-system/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'packages/*' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd655269..c20c8a46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -289,6 +289,26 @@ importers: specifier: ^8.1.6 version: 8.1.6(@babel/preset-env@7.24.6(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + packages/design-system/packages/core: + dependencies: + tsup: + specifier: ^8.1.0 + version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) + devDependencies: + '@attraction/config': + specifier: workspace:^ + version: link:../../../config + + packages/design-system/packages/hooks: + dependencies: + tsup: + specifier: ^8.1.0 + version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) + devDependencies: + '@attraction/config': + specifier: workspace:^ + version: link:../../../config + packages/icons: dependencies: react: @@ -7874,10 +7894,10 @@ snapshots: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-bucket-endpoint': 3.598.0 '@aws-sdk/middleware-expect-continue': 3.598.0 '@aws-sdk/middleware-flexible-checksums': 3.598.0 @@ -7932,13 +7952,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.600.0': + '@aws-sdk/client-sso-oidc@3.600.0(@aws-sdk/client-sts@3.600.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0 @@ -7975,6 +7995,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.598.0': @@ -8020,13 +8041,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)': + '@aws-sdk/client-sts@3.600.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0 @@ -8063,7 +8084,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.598.0': @@ -8095,14 +8115,14 @@ snapshots: '@smithy/util-stream': 3.0.4 tslib: 2.6.3 - '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0 '@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.2 '@smithy/property-provider': 3.1.2 @@ -8113,14 +8133,14 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: '@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0 - '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.2 '@smithy/property-provider': 3.1.2 @@ -8153,9 +8173,9 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.2 '@smithy/types': 3.2.0 @@ -8271,7 +8291,7 @@ snapshots: '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.2 '@smithy/shared-ini-file-loader': 3.1.2 @@ -16129,7 +16149,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.14 + glob: 10.4.2 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e9b0dad6..e67b8881 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'apps/*' - 'packages/*' + - 'packages/design-system/packages/*' From 2bd9611f3197382c9ab7c99f7d5686c1f61120f0 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 11:09:58 +0900 Subject: [PATCH 03/46] =?UTF-8?q?chore:=20workspace=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EC=B6=95=EC=95=BD=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-workspace.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e67b8881..da2a30b7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,3 @@ packages: - 'apps/*' - - 'packages/*' - - 'packages/design-system/packages/*' + - '**/packages/*' From e7495e9985624bc8db0a274e7750386dde197729 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 13:31:23 +0900 Subject: [PATCH 04/46] =?UTF-8?q?chore:=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=8C=A8=ED=82=A4=EC=A7=80=20pee?= =?UTF-8?q?r=20dependency=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 11 ++++++++++- packages/design-system/packages/core/src/index.ts | 0 packages/design-system/packages/hooks/package.json | 11 ++++++++++- pnpm-lock.yaml | 12 ++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 packages/design-system/packages/core/src/index.ts diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index bb868298..823c72cc 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -2,7 +2,12 @@ "name": "@attraction/ds-core", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -12,6 +17,10 @@ "devDependencies": { "@attraction/config": "workspace:^" }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/core/src/index.ts b/packages/design-system/packages/core/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index f97a4df2..1ec327cc 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -2,7 +2,12 @@ "name": "@attraction/ds-hooks", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -12,6 +17,10 @@ "devDependencies": { "@attraction/config": "workspace:^" }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c20c8a46..7d8c64d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -291,6 +291,12 @@ importers: packages/design-system/packages/core: dependencies: + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) @@ -301,6 +307,12 @@ importers: packages/design-system/packages/hooks: dependencies: + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) From 60b400100c756ebc6aa56e72fe811eb0ff4ddcab Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Mon, 29 Jul 2024 23:13:48 +0900 Subject: [PATCH 05/46] =?UTF-8?q?chore:=20=EA=B0=9C=ED=8E=B8=EB=90=A0=20?= =?UTF-8?q?=EB=94=94=EC=9E=90=EC=9D=B8=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 12 ++++++++++++ packages/design-system/packages/hooks/package.json | 12 ++++++++++++ packages/design-system/pnpm-workspace.yaml | 2 ++ 3 files changed, 26 insertions(+) create mode 100644 packages/design-system/packages/core/package.json create mode 100644 packages/design-system/packages/hooks/package.json create mode 100644 packages/design-system/pnpm-workspace.yaml diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json new file mode 100644 index 00000000..c84f54a0 --- /dev/null +++ b/packages/design-system/packages/core/package.json @@ -0,0 +1,12 @@ +{ + "name": "@attraction/ds-core", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json new file mode 100644 index 00000000..cb8d194a --- /dev/null +++ b/packages/design-system/packages/hooks/package.json @@ -0,0 +1,12 @@ +{ + "name": "@attraction/ds-hooks", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/packages/design-system/pnpm-workspace.yaml b/packages/design-system/pnpm-workspace.yaml new file mode 100644 index 00000000..18ec407e --- /dev/null +++ b/packages/design-system/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' From 80dbcd2baccb4de4c2819ad6dbca739ef224823c Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 10:59:58 +0900 Subject: [PATCH 06/46] =?UTF-8?q?chore:=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EC=97=90=20tsup=20=EC=84=A4=EC=B9=98=20=EB=B0=8F=20config=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/package.json | 6 ++ .../design-system/packages/core/tsconfig.json | 3 + .../packages/core/tsup.config.ts | 13 ++++ .../design-system/packages/hooks/package.json | 6 ++ .../packages/hooks/tsconfig.json | 3 + .../packages/hooks/tsup.config.ts | 13 ++++ packages/design-system/pnpm-workspace.yaml | 2 - pnpm-lock.yaml | 60 ++++++++++++------- pnpm-workspace.yaml | 1 + 9 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 packages/design-system/packages/core/tsconfig.json create mode 100644 packages/design-system/packages/core/tsup.config.ts create mode 100644 packages/design-system/packages/hooks/tsconfig.json create mode 100644 packages/design-system/packages/hooks/tsup.config.ts delete mode 100644 packages/design-system/pnpm-workspace.yaml diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index c84f54a0..bb868298 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -6,6 +6,12 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, + "dependencies": { + "tsup": "^8.1.0" + }, + "devDependencies": { + "@attraction/config": "workspace:^" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/core/tsconfig.json b/packages/design-system/packages/core/tsconfig.json new file mode 100644 index 00000000..aeb01c43 --- /dev/null +++ b/packages/design-system/packages/core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@attraction/config/tsconfig.base.json" +} diff --git a/packages/design-system/packages/core/tsup.config.ts b/packages/design-system/packages/core/tsup.config.ts new file mode 100644 index 00000000..79c8461d --- /dev/null +++ b/packages/design-system/packages/core/tsup.config.ts @@ -0,0 +1,13 @@ +import { Options } from 'tsup' + +const options: Options = { + format: ['cjs', 'esm'], + clean: true, + sourcemap: 'inline', + dts: true, + entryPoints: ['src/index.ts'], + external: ['react', 'react-dom'], + minify: true, +} + +export default options diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index cb8d194a..f97a4df2 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -6,6 +6,12 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, + "dependencies": { + "tsup": "^8.1.0" + }, + "devDependencies": { + "@attraction/config": "workspace:^" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/hooks/tsconfig.json b/packages/design-system/packages/hooks/tsconfig.json new file mode 100644 index 00000000..aeb01c43 --- /dev/null +++ b/packages/design-system/packages/hooks/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@attraction/config/tsconfig.base.json" +} diff --git a/packages/design-system/packages/hooks/tsup.config.ts b/packages/design-system/packages/hooks/tsup.config.ts new file mode 100644 index 00000000..79c8461d --- /dev/null +++ b/packages/design-system/packages/hooks/tsup.config.ts @@ -0,0 +1,13 @@ +import { Options } from 'tsup' + +const options: Options = { + format: ['cjs', 'esm'], + clean: true, + sourcemap: 'inline', + dts: true, + entryPoints: ['src/index.ts'], + external: ['react', 'react-dom'], + minify: true, +} + +export default options diff --git a/packages/design-system/pnpm-workspace.yaml b/packages/design-system/pnpm-workspace.yaml deleted file mode 100644 index 18ec407e..00000000 --- a/packages/design-system/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'packages/*' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd655269..c20c8a46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -289,6 +289,26 @@ importers: specifier: ^8.1.6 version: 8.1.6(@babel/preset-env@7.24.6(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + packages/design-system/packages/core: + dependencies: + tsup: + specifier: ^8.1.0 + version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) + devDependencies: + '@attraction/config': + specifier: workspace:^ + version: link:../../../config + + packages/design-system/packages/hooks: + dependencies: + tsup: + specifier: ^8.1.0 + version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) + devDependencies: + '@attraction/config': + specifier: workspace:^ + version: link:../../../config + packages/icons: dependencies: react: @@ -7874,10 +7894,10 @@ snapshots: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-bucket-endpoint': 3.598.0 '@aws-sdk/middleware-expect-continue': 3.598.0 '@aws-sdk/middleware-flexible-checksums': 3.598.0 @@ -7932,13 +7952,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.600.0': + '@aws-sdk/client-sso-oidc@3.600.0(@aws-sdk/client-sts@3.600.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0 @@ -7975,6 +7995,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.598.0': @@ -8020,13 +8041,13 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)': + '@aws-sdk/client-sts@3.600.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-node': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/middleware-host-header': 3.598.0 '@aws-sdk/middleware-logger': 3.598.0 '@aws-sdk/middleware-recursion-detection': 3.598.0 @@ -8063,7 +8084,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.598.0': @@ -8095,14 +8115,14 @@ snapshots: '@smithy/util-stream': 3.0.4 tslib: 2.6.3 - '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-ini@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0 '@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.2 '@smithy/property-provider': 3.1.2 @@ -8113,14 +8133,14 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0)': dependencies: '@aws-sdk/credential-provider-env': 3.598.0 '@aws-sdk/credential-provider-http': 3.598.0 - '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-ini': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0) '@aws-sdk/credential-provider-process': 3.598.0 '@aws-sdk/credential-provider-sso': 3.598.0(@aws-sdk/client-sso-oidc@3.600.0) - '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)) + '@aws-sdk/credential-provider-web-identity': 3.598.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/credential-provider-imds': 3.1.2 '@smithy/property-provider': 3.1.2 @@ -8153,9 +8173,9 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0(@aws-sdk/client-sso-oidc@3.600.0))': + '@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0)': dependencies: - '@aws-sdk/client-sts': 3.600.0(@aws-sdk/client-sso-oidc@3.600.0) + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.2 '@smithy/types': 3.2.0 @@ -8271,7 +8291,7 @@ snapshots: '@aws-sdk/token-providers@3.598.0(@aws-sdk/client-sso-oidc@3.600.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0(@aws-sdk/client-sts@3.600.0) '@aws-sdk/types': 3.598.0 '@smithy/property-provider': 3.1.2 '@smithy/shared-ini-file-loader': 3.1.2 @@ -16129,7 +16149,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.14 + glob: 10.4.2 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e9b0dad6..e67b8881 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'apps/*' - 'packages/*' + - 'packages/design-system/packages/*' From 415fe64f7c35177fcea7233b5d222c4c856ca3a6 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 11:09:58 +0900 Subject: [PATCH 07/46] =?UTF-8?q?chore:=20workspace=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EC=B6=95=EC=95=BD=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-workspace.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e67b8881..da2a30b7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,3 @@ packages: - 'apps/*' - - 'packages/*' - - 'packages/design-system/packages/*' + - '**/packages/*' From 0fe087b932a2aeaf283e83c4eaa6edc0b714e490 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 30 Jul 2024 13:31:23 +0900 Subject: [PATCH 08/46] =?UTF-8?q?chore:=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=ED=8C=A8=ED=82=A4=EC=A7=80=20pee?= =?UTF-8?q?r=20dependency=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 11 ++++++++++- packages/design-system/packages/core/src/index.ts | 0 packages/design-system/packages/hooks/package.json | 11 ++++++++++- pnpm-lock.yaml | 12 ++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 packages/design-system/packages/core/src/index.ts diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index bb868298..823c72cc 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -2,7 +2,12 @@ "name": "@attraction/ds-core", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -12,6 +17,10 @@ "devDependencies": { "@attraction/config": "workspace:^" }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/packages/design-system/packages/core/src/index.ts b/packages/design-system/packages/core/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index f97a4df2..1ec327cc 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -2,7 +2,12 @@ "name": "@attraction/ds-hooks", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -12,6 +17,10 @@ "devDependencies": { "@attraction/config": "workspace:^" }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, "keywords": [], "author": "", "license": "ISC" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c20c8a46..7d8c64d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -291,6 +291,12 @@ importers: packages/design-system/packages/core: dependencies: + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) @@ -301,6 +307,12 @@ importers: packages/design-system/packages/hooks: dependencies: + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 version: 8.1.0(@swc/core@1.5.7)(postcss@8.4.38)(ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5))(typescript@5.4.5) From b0d7d780db9463dc9012dccd6aaad29c4a0e878a Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Thu, 1 Aug 2024 21:47:28 +0900 Subject: [PATCH 09/46] =?UTF-8?q?chore:=20=EA=B3=B5=EC=9A=A9=20hooks=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=ED=85=8C=EC=8A=A4=ED=8C=85=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98=20=EB=B0=8F=20=EB=B9=8C=EB=93=9C=20=EC=BB=A4=EB=A7=A8?= =?UTF-8?q?=EB=93=9C=20=EC=84=A4=EC=A0=95=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +- .../design-system/packages/hooks/package.json | 10 ++-- .../packages/hooks/tsconfig.json | 11 +++- pnpm-lock.yaml | 53 ++++++++++++++++++- 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 9a30dc7c..1c4109d5 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ ], "scripts": { "preinstall": "npx only-allow pnpm", - "postinstall": "husky install && pnpm build:icons && pnpm build:ds && pnpm build:utils", + "postinstall": "husky install && pnpm build:icons && pnpm build:ds && pnpm build:utils && pnpm build:ds-hooks", "prepare": "husky install", "lint": "pnpm -r run lint", "type": "pnpm -r run type", @@ -17,6 +17,8 @@ "build:service": "pnpm -F @attraction/service build", "build:icons": "pnpm -F @attraction/icons build", "build:ds": "pnpm -F @attraction/design-system build", + "build:ds-core": "pnpm -F @attraction/ds-core build", + "build:ds-hooks": "pnpm -F @attraction/ds-hooks build", "build:utils": "pnpm -F @attraction/utils build", "dev:service": "pnpm -F @attraction/service dev", "dev:ds": "pnpm -F @attraction/design-system storybook", diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index 1ec327cc..37875077 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -9,17 +9,19 @@ "dist" ], "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "build": "tsup" }, "dependencies": { "tsup": "^8.1.0" }, "devDependencies": { - "@attraction/config": "workspace:^" + "@attraction/config": "workspace:^", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.0.0" }, "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" + "react": "^18.0.0", + "react-dom": "^18.0.0" }, "keywords": [], "author": "", diff --git a/packages/design-system/packages/hooks/tsconfig.json b/packages/design-system/packages/hooks/tsconfig.json index aeb01c43..4d1fbc5a 100644 --- a/packages/design-system/packages/hooks/tsconfig.json +++ b/packages/design-system/packages/hooks/tsconfig.json @@ -1,3 +1,12 @@ { - "extends": "@attraction/config/tsconfig.base.json" + "extends": "@attraction/config/tsconfig.base.json", + "main": "index.ts", + "compilerOptions": { + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d8c64d5..f7595ad1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -291,6 +291,9 @@ importers: packages/design-system/packages/core: dependencies: + '@attraction/ds-hooks': + specifier: workspace:^ + version: link:../hooks react: specifier: ^18.2.0 version: 18.3.1 @@ -308,10 +311,10 @@ importers: packages/design-system/packages/hooks: dependencies: react: - specifier: ^18.2.0 + specifier: ^18.0.0 version: 18.3.1 react-dom: - specifier: ^18.2.0 + specifier: ^18.0.0 version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 @@ -320,6 +323,12 @@ importers: '@attraction/config': specifier: workspace:^ version: link:../../../config + '@testing-library/dom': + specifier: ^10.4.0 + version: 10.4.0 + '@testing-library/react': + specifier: ^16.0.0 + version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) packages/icons: dependencies: @@ -3393,6 +3402,10 @@ packages: peerDependencies: react: ^18.0.0 + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + '@testing-library/dom@9.3.4': resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} @@ -3418,6 +3431,21 @@ packages: vitest: optional: true + '@testing-library/react@16.0.0': + resolution: {integrity: sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@testing-library/user-event@14.5.2': resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} engines: {node: '>=12', npm: '>=6'} @@ -12006,6 +12034,17 @@ snapshots: '@tanstack/query-core': 5.36.1 react: 18.3.1 + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/runtime': 7.24.5 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + '@testing-library/dom@9.3.4': dependencies: '@babel/code-frame': 7.24.6 @@ -12028,6 +12067,16 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 + '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.1 + '@types/react-dom': 18.3.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 From 87d21fdde6e817a4feebcd755da7b5b7bd297f89 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Thu, 1 Aug 2024 21:59:25 +0900 Subject: [PATCH 10/46] =?UTF-8?q?refactor:=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=ED=9B=85=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/hooks/.eslintrc.cjs | 14 +++++++++ .../design-system/packages/hooks/src/index.ts | 5 +++ .../packages/hooks/src/use-debounce/index.ts | 1 + .../hooks/src/use-debounce/useDebounce.ts | 15 +++++++++ .../hooks/src/use-outside-click/index.ts | 1 + .../src/use-outside-click/useOutsideClick.ts | 21 +++++++++++++ .../hooks/src/use-scroll-observer/index.ts | 1 + .../use-scroll-observer/useScrollObserver.ts | 31 +++++++++++++++++++ .../hooks/src/use-scroll-progress/index.ts | 1 + .../use-scroll-progress/useScrollProgress.ts | 16 ++++++++++ .../hooks/src/use-window-event/index.ts | 1 + .../src/use-window-event/useWindowEvent.ts | 14 +++++++++ .../packages/hooks/tsconfig.json | 5 +-- 13 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 packages/design-system/packages/hooks/.eslintrc.cjs create mode 100644 packages/design-system/packages/hooks/src/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-debounce/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts create mode 100644 packages/design-system/packages/hooks/src/use-outside-click/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts create mode 100644 packages/design-system/packages/hooks/src/use-scroll-observer/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts create mode 100644 packages/design-system/packages/hooks/src/use-scroll-progress/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts create mode 100644 packages/design-system/packages/hooks/src/use-window-event/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts diff --git a/packages/design-system/packages/hooks/.eslintrc.cjs b/packages/design-system/packages/hooks/.eslintrc.cjs new file mode 100644 index 00000000..49ab1966 --- /dev/null +++ b/packages/design-system/packages/hooks/.eslintrc.cjs @@ -0,0 +1,14 @@ +module.exports = { + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + rules: { + 'import/no-unresolved': [2, { caseSensitive: false }], + }, + settings: { + 'import/resolver': { + typescript: {}, + }, + }, +} diff --git a/packages/design-system/packages/hooks/src/index.ts b/packages/design-system/packages/hooks/src/index.ts new file mode 100644 index 00000000..78f7a3b3 --- /dev/null +++ b/packages/design-system/packages/hooks/src/index.ts @@ -0,0 +1,5 @@ +export * from './use-outside-click' +export * from './use-debounce' +export * from './use-window-event' +export * from './use-scroll-observer' +export * from './use-scroll-progress' diff --git a/packages/design-system/packages/hooks/src/use-debounce/index.ts b/packages/design-system/packages/hooks/src/use-debounce/index.ts new file mode 100644 index 00000000..a6758264 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-debounce/index.ts @@ -0,0 +1 @@ +export { default as useDebounce } from './useDebounce' diff --git a/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts new file mode 100644 index 00000000..5505b313 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts @@ -0,0 +1,15 @@ +import React from 'react' + +export default function useDebounce(value: T, delay: number) { + const [debouncedValue, setDebouncedValue] = React.useState(value) + + React.useEffect(() => { + const timeoutId = setTimeout(() => { + setDebouncedValue(value) + }, delay) + + return () => clearTimeout(timeoutId) + }, [value, delay]) + + return debouncedValue +} diff --git a/packages/design-system/packages/hooks/src/use-outside-click/index.ts b/packages/design-system/packages/hooks/src/use-outside-click/index.ts new file mode 100644 index 00000000..499d4fa7 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-outside-click/index.ts @@ -0,0 +1 @@ +export { default as useOutsideClick } from './useOutsideClick' diff --git a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts new file mode 100644 index 00000000..e7632313 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts @@ -0,0 +1,21 @@ +import React from 'react' + +export default function useOutsideClick(callback: () => void) { + const targetAreaRef = React.useRef(null) + + React.useEffect(() => { + const clickHandler = (e: MouseEvent) => { + if (!targetAreaRef.current) return + if (targetAreaRef.current.contains(e.target as Node | null)) { + return + } + callback() + } + document.addEventListener('click', clickHandler) + return () => { + document.removeEventListener('click', clickHandler) + } + }, [callback]) + + return targetAreaRef +} diff --git a/packages/design-system/packages/hooks/src/use-scroll-observer/index.ts b/packages/design-system/packages/hooks/src/use-scroll-observer/index.ts new file mode 100644 index 00000000..a7f42100 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-scroll-observer/index.ts @@ -0,0 +1 @@ +export { default as useScrollObserver } from './useScrollObserver' diff --git a/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts b/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts new file mode 100644 index 00000000..e18fa369 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts @@ -0,0 +1,31 @@ +import React from 'react' + +export default function useScrollObserver( + callback: () => void, + options?: IntersectionObserverInit, +) { + const targetRef = React.useRef(null) + const observerRef = React.useRef(null) + const defaultOptions = { root: null, rootMargin: '0px', threshold: 1.0 } + + React.useEffect(() => { + if (!observerRef.current) { + observerRef.current = new IntersectionObserver(([target]) => { + if (target.isIntersecting) { + callback() + } + }, options ?? defaultOptions) + } + + if (targetRef.current) { + observerRef.current.observe(targetRef.current) + } + + return () => { + observerRef.current?.disconnect() + observerRef.current = null + } + }, [targetRef, callback]) + + return targetRef +} diff --git a/packages/design-system/packages/hooks/src/use-scroll-progress/index.ts b/packages/design-system/packages/hooks/src/use-scroll-progress/index.ts new file mode 100644 index 00000000..9929fed9 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-scroll-progress/index.ts @@ -0,0 +1 @@ +export { default as useScrollProgress } from './useScrollProgress' diff --git a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts new file mode 100644 index 00000000..d8454fbe --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts @@ -0,0 +1,16 @@ +import React from 'react' +import { useWindowEvent } from '../use-window-event' + +export default function useScrollProgress() { + const [scrollProgress, setScrollProgress] = React.useState(0) + const handleScroll = () => { + const currentScroll = window.scrollY + const totalHeight = document.body.scrollHeight - window.innerHeight + const progress = Math.round((currentScroll / totalHeight) * 100) + setScrollProgress(progress) + } + + useWindowEvent('scroll', handleScroll) + + return { scrollProgress } +} diff --git a/packages/design-system/packages/hooks/src/use-window-event/index.ts b/packages/design-system/packages/hooks/src/use-window-event/index.ts new file mode 100644 index 00000000..c14175f4 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-window-event/index.ts @@ -0,0 +1 @@ +export { default as useWindowEvent } from './useWindowEvent' diff --git a/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts b/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts new file mode 100644 index 00000000..dbeeecfa --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts @@ -0,0 +1,14 @@ +import React from 'react' + +export default function useWindowEvent( + type: K, + listener: (this: Window, e: DocumentEventMap[K]) => void, + option?: boolean | AddEventListenerOptions, +) { + React.useEffect(() => { + window.addEventListener(type as any, listener, option) + return () => { + window.removeEventListener(type as any, listener, option) + } + }, [type, listener, option]) +} diff --git a/packages/design-system/packages/hooks/tsconfig.json b/packages/design-system/packages/hooks/tsconfig.json index 4d1fbc5a..83f0758b 100644 --- a/packages/design-system/packages/hooks/tsconfig.json +++ b/packages/design-system/packages/hooks/tsconfig.json @@ -2,10 +2,7 @@ "extends": "@attraction/config/tsconfig.base.json", "main": "index.ts", "compilerOptions": { - "jsx": "preserve", - "paths": { - "@/*": ["./src/*"] - } + "jsx": "preserve" }, "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] From 3032b8213d9c1bc2293534d41a830bc7b5e080b2 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 2 Aug 2024 14:00:16 +0900 Subject: [PATCH 11/46] =?UTF-8?q?refactor:=20use=20document=20event=20?= =?UTF-8?q?=ED=9B=85=20=EC=9E=91=EC=84=B1=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/hooks/src/index.ts | 1 + .../hooks/src/use-document-event/index.ts | 1 + .../use-document-event/useDocumentEvent.ts | 14 ++++++++++++++ .../src/use-outside-click/useOutsideClick.ts | 19 +++++++------------ 4 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 packages/design-system/packages/hooks/src/use-document-event/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-document-event/useDocumentEvent.ts diff --git a/packages/design-system/packages/hooks/src/index.ts b/packages/design-system/packages/hooks/src/index.ts index 78f7a3b3..32f2c269 100644 --- a/packages/design-system/packages/hooks/src/index.ts +++ b/packages/design-system/packages/hooks/src/index.ts @@ -3,3 +3,4 @@ export * from './use-debounce' export * from './use-window-event' export * from './use-scroll-observer' export * from './use-scroll-progress' +export * from './use-document-event' diff --git a/packages/design-system/packages/hooks/src/use-document-event/index.ts b/packages/design-system/packages/hooks/src/use-document-event/index.ts new file mode 100644 index 00000000..fb44a140 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-document-event/index.ts @@ -0,0 +1 @@ +export { default as useDocumentEvent } from './useDocumentEvent' diff --git a/packages/design-system/packages/hooks/src/use-document-event/useDocumentEvent.ts b/packages/design-system/packages/hooks/src/use-document-event/useDocumentEvent.ts new file mode 100644 index 00000000..e0216f33 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-document-event/useDocumentEvent.ts @@ -0,0 +1,14 @@ +import React from 'react' + +export default function useDocumentEvent( + type: K, + listener: (this: Document, e: DocumentEventMap[K]) => void, + option?: boolean | AddEventListenerOptions, +) { + React.useEffect(() => { + document.addEventListener(type, listener, option) + return () => { + document.removeEventListener(type, listener, option) + } + }, [type, listener, option]) +} diff --git a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts index e7632313..3584a022 100644 --- a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts +++ b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts @@ -1,21 +1,16 @@ import React from 'react' +import { useDocumentEvent } from '../use-document-event' export default function useOutsideClick(callback: () => void) { const targetAreaRef = React.useRef(null) - React.useEffect(() => { - const clickHandler = (e: MouseEvent) => { - if (!targetAreaRef.current) return - if (targetAreaRef.current.contains(e.target as Node | null)) { - return - } - callback() + useDocumentEvent('click', (e) => { + if (!targetAreaRef.current) return + if (targetAreaRef.current.contains(e.target as Node | null)) { + return } - document.addEventListener('click', clickHandler) - return () => { - document.removeEventListener('click', clickHandler) - } - }, [callback]) + callback() + }) return targetAreaRef } From c1da64aa0f182ccb98bf66e5d834afcf26cb72c9 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 2 Aug 2024 14:00:36 +0900 Subject: [PATCH 12/46] =?UTF-8?q?refactor:=20use=20window=20event=20?= =?UTF-8?q?=ED=9B=85=20=EB=82=B4=EB=B6=80=20=ED=83=80=EC=9E=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/src/use-scroll-progress/useScrollProgress.ts | 7 +++---- .../packages/hooks/src/use-window-event/useWindowEvent.ts | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts index d8454fbe..c70e5002 100644 --- a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts +++ b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts @@ -3,14 +3,13 @@ import { useWindowEvent } from '../use-window-event' export default function useScrollProgress() { const [scrollProgress, setScrollProgress] = React.useState(0) - const handleScroll = () => { + + useWindowEvent('scroll', () => { const currentScroll = window.scrollY const totalHeight = document.body.scrollHeight - window.innerHeight const progress = Math.round((currentScroll / totalHeight) * 100) setScrollProgress(progress) - } - - useWindowEvent('scroll', handleScroll) + }) return { scrollProgress } } diff --git a/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts b/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts index dbeeecfa..08c54996 100644 --- a/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts +++ b/packages/design-system/packages/hooks/src/use-window-event/useWindowEvent.ts @@ -1,14 +1,14 @@ import React from 'react' -export default function useWindowEvent( +export default function useWindowEvent( type: K, - listener: (this: Window, e: DocumentEventMap[K]) => void, + listener: (this: Window, e: WindowEventMap[K]) => void, option?: boolean | AddEventListenerOptions, ) { React.useEffect(() => { - window.addEventListener(type as any, listener, option) + window.addEventListener(type, listener, option) return () => { - window.removeEventListener(type as any, listener, option) + window.removeEventListener(type, listener, option) } }, [type, listener, option]) } From 73c446c599f18209ac8171d825e836356d8d0cba Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 2 Aug 2024 16:09:19 +0900 Subject: [PATCH 13/46] =?UTF-8?q?chore:=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EC=BD=94=EC=96=B4=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=ED=8F=B4=EB=8D=94=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B0=8F=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B2=84=EC=A0=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 7 ++++--- .../packages/core/src/components/button/index.ts | 0 .../design-system/packages/core/src/components/index.ts | 0 .../packages/core/src/components/input/index.ts | 0 .../packages/core/src/components/navigation/index.ts | 0 .../packages/core/src/components/overlay/index.ts | 0 packages/design-system/packages/core/src/core/index.ts | 0 .../design-system/packages/core/src/core/token/index.ts | 0 .../design-system/packages/core/src/core/utils/index.ts | 0 packages/design-system/packages/core/tsconfig.json | 8 +++++++- pnpm-lock.yaml | 4 ++-- 11 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 packages/design-system/packages/core/src/components/button/index.ts create mode 100644 packages/design-system/packages/core/src/components/index.ts create mode 100644 packages/design-system/packages/core/src/components/input/index.ts create mode 100644 packages/design-system/packages/core/src/components/navigation/index.ts create mode 100644 packages/design-system/packages/core/src/components/overlay/index.ts create mode 100644 packages/design-system/packages/core/src/core/index.ts create mode 100644 packages/design-system/packages/core/src/core/token/index.ts create mode 100644 packages/design-system/packages/core/src/core/utils/index.ts diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index 823c72cc..23f43427 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -9,7 +9,7 @@ "dist" ], "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "build": "tsup" }, "dependencies": { "tsup": "^8.1.0" @@ -18,8 +18,9 @@ "@attraction/config": "workspace:^" }, "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@attraction/ds-hooks": "workspace:^", + "react": "^18.0.0", + "react-dom": "^18.0.0" }, "keywords": [], "author": "", diff --git a/packages/design-system/packages/core/src/components/button/index.ts b/packages/design-system/packages/core/src/components/button/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/components/index.ts b/packages/design-system/packages/core/src/components/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/components/input/index.ts b/packages/design-system/packages/core/src/components/input/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/components/navigation/index.ts b/packages/design-system/packages/core/src/components/navigation/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/components/overlay/index.ts b/packages/design-system/packages/core/src/components/overlay/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/core/index.ts b/packages/design-system/packages/core/src/core/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/core/token/index.ts b/packages/design-system/packages/core/src/core/token/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/src/core/utils/index.ts b/packages/design-system/packages/core/src/core/utils/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/design-system/packages/core/tsconfig.json b/packages/design-system/packages/core/tsconfig.json index aeb01c43..83f0758b 100644 --- a/packages/design-system/packages/core/tsconfig.json +++ b/packages/design-system/packages/core/tsconfig.json @@ -1,3 +1,9 @@ { - "extends": "@attraction/config/tsconfig.base.json" + "extends": "@attraction/config/tsconfig.base.json", + "main": "index.ts", + "compilerOptions": { + "jsx": "preserve" + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7595ad1..5f57e991 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -295,10 +295,10 @@ importers: specifier: workspace:^ version: link:../hooks react: - specifier: ^18.2.0 + specifier: ^18.0.0 version: 18.3.1 react-dom: - specifier: ^18.2.0 + specifier: ^18.0.0 version: 18.3.1(react@18.3.1) tsup: specifier: ^8.1.0 From 8ab632026516af7fa11500c142ecf2d6e861bed0 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 2 Aug 2024 22:02:39 +0900 Subject: [PATCH 14/46] =?UTF-8?q?chore:=20=EA=B3=B5=EC=9A=A9=20=ED=9B=85?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EC=84=B8=ED=8C=85=20=EB=B0=8F=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/hooks/package.json | 11 +- .../packages/hooks/vitest.config.ts | 12 + pnpm-lock.yaml | 711 +++++++++++++++++- 3 files changed, 720 insertions(+), 14 deletions(-) create mode 100644 packages/design-system/packages/hooks/vitest.config.ts diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index 37875077..3ef33348 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -9,7 +9,10 @@ "dist" ], "scripts": { - "build": "tsup" + "build": "tsup", + "test": "vitest", + "test:ui": "vitest --ui", + "coverage": "vitest run --coverage" }, "dependencies": { "tsup": "^8.1.0" @@ -17,7 +20,11 @@ "devDependencies": { "@attraction/config": "workspace:^", "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.0.0" + "@testing-library/react": "^16.0.0", + "@vitest/coverage-v8": "^2.0.5", + "@vitest/ui": "^2.0.5", + "jsdom": "^24.1.1", + "vitest": "^2.0.5" }, "peerDependencies": { "react": "^18.0.0", diff --git a/packages/design-system/packages/hooks/vitest.config.ts b/packages/design-system/packages/hooks/vitest.config.ts new file mode 100644 index 00000000..0a311a5b --- /dev/null +++ b/packages/design-system/packages/hooks/vitest.config.ts @@ -0,0 +1,12 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + coverage: { + reporter: ['text'], + }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f57e991..f4475e26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -257,7 +257,7 @@ importers: version: 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: ^8.1.6 - version: 8.1.6 + version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) '@storybook/addon-links': specifier: ^8.1.6 version: 8.1.6(react@18.3.1) @@ -275,7 +275,7 @@ importers: version: 8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) '@storybook/test': specifier: ^8.1.6 - version: 8.1.6 + version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) chromatic: specifier: ^11.5.5 version: 11.5.5 @@ -329,6 +329,18 @@ importers: '@testing-library/react': specifier: ^16.0.0 version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@vitest/coverage-v8': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1)) + '@vitest/ui': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.0.5) + jsdom: + specifier: ^24.1.1 + version: 24.1.1 + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) packages/icons: dependencies: @@ -1298,6 +1310,9 @@ packages: '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bundled-es-modules/cookie@2.0.0': resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} @@ -1743,6 +1758,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2070,6 +2089,9 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@prisma/instrumentation@5.15.0': resolution: {integrity: sha512-fCWOOOajTKOUEp43gRmBqwt6oN9bPJcLiloi2OG/2ED0N5z62Cuza6FDrlm3SJHQAXYlXqLE0HLdEE5WcUkOzg==} @@ -3812,21 +3834,49 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitest/coverage-v8@2.0.5': + resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} + peerDependencies: + vitest: 2.0.5 + '@vitest/expect@1.3.1': resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/runner@2.0.5': + resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + + '@vitest/snapshot@2.0.5': + resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + '@vitest/spy@1.3.1': resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} '@vitest/spy@1.6.0': resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/ui@2.0.5': + resolution: {integrity: sha512-m+ZpVt/PVi/nbeRKEjdiYeoh0aOfI9zr3Ria9LO7V2PlMETtAXJS3uETEZkc8Be2oOl8mhd7Ew+5SRBXRYncNw==} + peerDependencies: + vitest: 2.0.5 + '@vitest/utils@1.3.1': resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -3941,6 +3991,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -4063,6 +4117,10 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -4073,6 +4131,9 @@ packages: async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -4226,6 +4287,10 @@ packages: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4245,6 +4310,10 @@ packages: check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -4350,6 +4419,10 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -4510,6 +4583,10 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -4524,6 +4601,10 @@ packages: resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} engines: {node: '>=4'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -4567,10 +4648,26 @@ packages: supports-color: optional: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + deep-eql@4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} @@ -4604,6 +4701,10 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -5069,6 +5170,9 @@ packages: fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5133,6 +5237,10 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -5380,6 +5488,13 @@ packages: html-dom-parser@5.0.8: resolution: {integrity: sha512-vuWiX9EXgu8CJ5m9EP5c7bvBmNSuQVnrY8tl0z0ZX96Uth1IPlYH/8W8VZ/hBajFf18EN+j2pukbCNd01HEd1w==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-react-parser@5.1.10: resolution: {integrity: sha512-gV22PvLij4wdEdtrZbGVC7Zy2OVWnQ0bYhX63S196ZRSx4+K0TuutCreHSXr+saUia8KeKB+2TYziVfijpH4Tw==} peerDependencies: @@ -5400,10 +5515,18 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -5421,6 +5544,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -5620,6 +5747,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -5695,6 +5825,22 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} @@ -5739,6 +5885,15 @@ packages: '@babel/preset-env': optional: true + jsdom@24.1.1: + resolution: {integrity: sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -5919,6 +6074,9 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -5951,6 +6109,9 @@ packages: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} + magicast@0.3.4: + resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -5959,6 +6120,10 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -6088,6 +6253,10 @@ packages: module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -6197,6 +6366,9 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + nypm@0.3.8: resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} engines: {node: ^14.16.0 || >=16.10.0} @@ -6332,6 +6504,9 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -6391,6 +6566,10 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} @@ -6621,6 +6800,9 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} @@ -6642,6 +6824,9 @@ packages: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -6850,6 +7035,9 @@ packages: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -6908,6 +7096,12 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6928,6 +7122,10 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -6994,6 +7192,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -7001,6 +7202,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -7073,6 +7278,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -7081,6 +7289,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -7230,6 +7441,9 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -7306,6 +7520,10 @@ packages: engines: {node: '>=10'} hasBin: true + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -7329,10 +7547,25 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + + tinypool@1.0.0: + resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} + tinyspy@3.0.0: + resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} + engines: {node: '>=14.0.0'} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -7348,12 +7581,24 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -7549,6 +7794,10 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7581,6 +7830,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-callback-ref@1.3.2: resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -7631,6 +7883,11 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + vite-node@2.0.5: + resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite@5.2.13: resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -7659,6 +7916,35 @@ packages: terser: optional: true + vitest@2.0.5: + resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.0.5 + '@vitest/ui': 2.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -7672,6 +7958,10 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-sources@1.4.3: resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} @@ -7695,6 +7985,18 @@ packages: webpack-cli: optional: true + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -7721,6 +8023,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -7817,6 +8124,25 @@ packages: utf-8-validate: optional: true + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -9262,6 +9588,8 @@ snapshots: '@base2/pretty-print-object@1.0.1': {} + '@bcoe/v8-coverage@0.2.3': {} + '@bundled-es-modules/cookie@2.0.0': dependencies: cookie: 0.5.0 @@ -9646,6 +9974,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 @@ -10014,6 +10344,8 @@ snapshots: '@pkgr/core@0.1.1': {} + '@polka/url@1.0.0-next.25': {} + '@prisma/instrumentation@5.15.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -11289,11 +11621,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.1.6': + '@storybook/addon-interactions@8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.1.6 - '@storybook/test': 8.1.6 + '@storybook/test': 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) '@storybook/types': 8.1.6 polished: 4.3.1 ts-dedent: 2.2.0 @@ -11803,14 +12135,14 @@ snapshots: - prettier - supports-color - '@storybook/test@8.1.6': + '@storybook/test@8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': dependencies: '@storybook/client-logger': 8.1.6 '@storybook/core-events': 8.1.6 '@storybook/instrumenter': 8.1.6 '@storybook/preview-api': 8.1.6 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.5 + '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.6.0 @@ -12056,7 +12388,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5': + '@testing-library/jest-dom@6.4.5(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.24.5 @@ -12066,6 +12398,8 @@ snapshots: dom-accessibility-api: 0.6.3 lodash: 4.17.21 redent: 3.0.0 + optionalDependencies: + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12386,7 +12720,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.6 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -12450,7 +12784,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.9.0 '@typescript-eslint/visitor-keys': 7.9.0 - debug: 4.3.4 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -12509,12 +12843,52 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.6 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.10 + magicast: 0.3.4 + std-env: 3.7.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + '@vitest/expect@1.3.1': dependencies: '@vitest/spy': 1.3.1 '@vitest/utils': 1.3.1 chai: 4.4.1 + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.0.5': + dependencies: + '@vitest/utils': 2.0.5 + pathe: 1.1.2 + + '@vitest/snapshot@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + magic-string: 0.30.10 + pathe: 1.1.2 + '@vitest/spy@1.3.1': dependencies: tinyspy: 2.2.1 @@ -12523,6 +12897,21 @@ snapshots: dependencies: tinyspy: 2.2.1 + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.0 + + '@vitest/ui@2.0.5(vitest@2.0.5)': + dependencies: + '@vitest/utils': 2.0.5 + fast-glob: 3.3.2 + fflate: 0.8.2 + flatted: 3.3.1 + pathe: 1.1.2 + sirv: 2.0.4 + tinyrainbow: 1.2.0 + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + '@vitest/utils@1.3.1': dependencies: diff-sequences: 29.6.3 @@ -12537,6 +12926,13 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -12671,7 +13067,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.1: + dependencies: + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -12830,6 +13232,8 @@ snapshots: assertion-error@1.1.0: {} + assertion-error@2.0.1: {} + ast-types-flow@0.0.8: {} ast-types@0.16.1: @@ -12838,6 +13242,8 @@ snapshots: async@3.2.5: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} autoprefixer@10.4.19(postcss@8.4.38): @@ -13007,6 +13413,14 @@ snapshots: pathval: 1.1.1 type-detect: 4.0.8 + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -13029,6 +13443,8 @@ snapshots: dependencies: get-func-name: 2.0.2 + check-error@2.1.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -13120,6 +13536,10 @@ snapshots: colorette@2.0.20: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@11.1.0: {} commander@2.20.3: {} @@ -13265,6 +13685,10 @@ snapshots: dependencies: css-tree: 2.2.1 + cssstyle@4.0.1: + dependencies: + rrweb-cssom: 0.6.0 + csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} @@ -13273,6 +13697,11 @@ snapshots: dashify@2.0.0: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 @@ -13307,10 +13736,18 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.6: + dependencies: + ms: 2.1.2 + + decimal.js@10.4.3: {} + deep-eql@4.1.4: dependencies: type-detect: 4.0.8 + deep-eql@5.0.2: {} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -13361,6 +13798,8 @@ snapshots: defu@6.1.4: {} + delayed-stream@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} @@ -13610,7 +14049,7 @@ snapshots: esbuild-register@3.5.0(esbuild@0.20.2): dependencies: - debug: 4.3.4 + debug: 4.3.6 esbuild: 0.20.2 transitivePeerDependencies: - supports-color @@ -14057,6 +14496,8 @@ snapshots: fetch-retry@5.0.6: {} + fflate@0.8.2: {} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -14139,6 +14580,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + forwarded@0.2.0: {} fraction.js@4.3.7: {} @@ -14413,6 +14860,12 @@ snapshots: domhandler: 5.0.3 htmlparser2: 9.1.0 + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-escaper@2.0.2: {} + html-react-parser@5.1.10(@types/react@18.3.1)(react@18.3.1): dependencies: domhandler: 5.0.3 @@ -14440,10 +14893,24 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -14457,6 +14924,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + idb@7.1.1: {} ieee754@1.2.1: {} @@ -14636,6 +15107,8 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.5 @@ -14698,6 +15171,27 @@ snapshots: isobject@3.0.1: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.6 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 @@ -14768,6 +15262,34 @@ snapshots: transitivePeerDependencies: - supports-color + jsdom@24.1.1: + dependencies: + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.12 + parse5: 7.1.2 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.18.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -14932,6 +15454,10 @@ snapshots: dependencies: get-func-name: 2.0.2 + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + lower-case@2.0.2: dependencies: tslib: 2.6.3 @@ -14964,6 +15490,12 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magicast@0.3.4: + dependencies: + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + source-map-js: 1.2.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -14973,6 +15505,10 @@ snapshots: dependencies: semver: 6.3.1 + make-dir@4.0.0: + dependencies: + semver: 7.6.2 + make-error@1.3.6: {} map-or-similar@1.5.0: {} @@ -15065,6 +15601,8 @@ snapshots: module-details-from-path@1.0.3: {} + mrmime@2.0.0: {} + ms@2.0.0: {} ms@2.1.2: {} @@ -15180,6 +15718,8 @@ snapshots: dependencies: boolbase: 1.0.0 + nwsapi@2.2.12: {} + nypm@0.3.8: dependencies: citty: 0.1.6 @@ -15342,6 +15882,10 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse5@7.1.2: + dependencies: + entities: 4.5.0 + parseurl@1.3.3: {} path-exists@3.0.0: {} @@ -15380,6 +15924,8 @@ snapshots: pathval@1.1.1: {} + pathval@2.0.0: {} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 @@ -15536,6 +16082,8 @@ snapshots: proxy-from-env@1.1.0: {} + psl@1.9.0: {} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 @@ -15562,6 +16110,8 @@ snapshots: dependencies: side-channel: 1.0.6 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} ramda@0.29.0: {} @@ -15817,6 +16367,8 @@ snapshots: requireindex@1.2.0: {} + requires-port@1.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -15887,6 +16439,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 + rrweb-cssom@0.6.0: {} + + rrweb-cssom@0.7.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -15910,6 +16466,10 @@ snapshots: safer-buffer@2.1.2: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -15998,10 +16558,18 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.1 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.25 + mrmime: 2.0.0 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -16065,12 +16633,16 @@ snapshots: split2@4.2.0: {} + stackback@0.0.2: {} + stacktrace-parser@0.1.10: dependencies: type-fest: 0.7.1 statuses@2.0.1: {} + std-env@3.7.0: {} + stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 @@ -16242,6 +16814,8 @@ snapshots: csso: 5.0.5 picocolors: 1.0.0 + symbol-tree@3.2.4: {} + synckit@0.8.8: dependencies: '@pkgr/core': 0.1.1 @@ -16352,6 +16926,12 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.2 + minimatch: 9.0.4 + text-extensions@2.4.0: {} text-table@0.2.0: {} @@ -16373,8 +16953,16 @@ snapshots: tiny-invariant@1.3.3: {} + tinybench@2.8.0: {} + + tinypool@1.0.0: {} + + tinyrainbow@1.2.0: {} + tinyspy@2.2.1: {} + tinyspy@3.0.0: {} + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -16385,12 +16973,25 @@ snapshots: toidentifier@1.0.1: {} + totalist@3.0.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} tr46@1.0.1: dependencies: punycode: 2.3.1 + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + tree-kill@1.2.2: {} ts-api-utils@1.3.0(typescript@5.4.5): @@ -16584,6 +17185,8 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universalify@0.2.0: {} + universalify@2.0.1: {} unpipe@1.0.0: {} @@ -16616,6 +17219,11 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + use-callback-ref@1.3.2(@types/react@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 @@ -16663,6 +17271,23 @@ snapshots: - '@types/react' - '@types/react-dom' + vite-node@2.0.5(@types/node@20.12.11)(terser@5.31.1): + dependencies: + cac: 6.7.14 + debug: 4.3.6 + pathe: 1.1.2 + tinyrainbow: 1.2.0 + vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + vite@5.2.13(@types/node@20.12.11)(terser@5.31.1): dependencies: esbuild: 0.20.2 @@ -16673,6 +17298,44 @@ snapshots: fsevents: 2.3.3 terser: 5.31.1 + vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1): + dependencies: + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.5 + '@vitest/pretty-format': 2.0.5 + '@vitest/runner': 2.0.5 + '@vitest/snapshot': 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + debug: 4.3.6 + execa: 8.0.1 + magic-string: 0.30.10 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.8.0 + tinypool: 1.0.0 + tinyrainbow: 1.2.0 + vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite-node: 2.0.5(@types/node@20.12.11)(terser@5.31.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.12.11 + '@vitest/ui': 2.0.5(vitest@2.0.5) + jsdom: 24.1.1 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 @@ -16686,6 +17349,8 @@ snapshots: webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: {} + webpack-sources@1.4.3: dependencies: source-list-map: 2.0.1 @@ -16728,6 +17393,17 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -16781,6 +17457,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -16944,6 +17625,12 @@ snapshots: ws@8.17.0: {} + ws@8.18.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + xtend@4.0.2: {} y18n@5.0.8: {} From d36c63f15679ab3ff93e4f9a7a49f47816f4e74a Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 2 Aug 2024 22:44:47 +0900 Subject: [PATCH 15/46] =?UTF-8?q?refactor:=20use=20debounce=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20(#ATR-600)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/use-debounce/useDebounce.spec.ts | 55 +++++++++++++++++++ .../hooks/src/use-debounce/useDebounce.ts | 8 +-- 2 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 packages/design-system/packages/hooks/src/use-debounce/useDebounce.spec.ts diff --git a/packages/design-system/packages/hooks/src/use-debounce/useDebounce.spec.ts b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.spec.ts new file mode 100644 index 00000000..9a8699ad --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.spec.ts @@ -0,0 +1,55 @@ +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { act, renderHook } from '@testing-library/react' +import useDebounce from './useDebounce' + +describe('@/use-debounce', () => { + const delay = 500 + const initialValue = 'initial value' + const changedValue = 'changed value' + + beforeEach(() => { + vi.useFakeTimers() + }) + + afterEach(() => { + vi.useRealTimers() + }) + + test('지연된 후에 값이 올바르게 변경됨', () => { + const { result, rerender } = renderHook( + ({ value }) => useDebounce(value, delay), + { initialProps: { value: initialValue } }, + ) + + expect(result.current).toBe(initialValue) + + rerender({ value: changedValue }) + + expect(result.current).toBe(initialValue) + + act(() => vi.advanceTimersByTime(delay * 2)) + + expect(result.current).toBe(changedValue) + }) + + test('unmount 됐을 때 실행 중이던 debounce가 취소됨', () => { + const { result, rerender, unmount } = renderHook( + ({ value }) => useDebounce(value, delay), + { initialProps: { value: initialValue } }, + ) + + expect(result.current).toBe(initialValue) + + rerender({ value: changedValue }) + + expect(result.current).toBe(initialValue) + + act(() => vi.advanceTimersByTime(delay / 2)) + + unmount() + + act(() => vi.advanceTimersByTime(delay)) + + expect(result.current).toBe(initialValue) + }) +}) diff --git a/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts index 5505b313..4754ac07 100644 --- a/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts +++ b/packages/design-system/packages/hooks/src/use-debounce/useDebounce.ts @@ -4,11 +4,11 @@ export default function useDebounce(value: T, delay: number) { const [debouncedValue, setDebouncedValue] = React.useState(value) React.useEffect(() => { - const timeoutId = setTimeout(() => { - setDebouncedValue(value) - }, delay) + const timeoutId = setTimeout(() => setDebouncedValue(value), delay) - return () => clearTimeout(timeoutId) + return () => { + clearTimeout(timeoutId) + } }, [value, delay]) return debouncedValue From ffd75d2cce87932a70821ec1a0d9ae6c2e1270e8 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 3 Aug 2024 16:52:06 +0900 Subject: [PATCH 16/46] =?UTF-8?q?chore:=20=EA=B3=B5=EC=9A=A9=20=ED=9B=85?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=A6=B0=ED=8A=B8=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/hooks/.eslintrc.cjs | 1 + packages/design-system/packages/hooks/.lintstagedrc.json | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 packages/design-system/packages/hooks/.lintstagedrc.json diff --git a/packages/design-system/packages/hooks/.eslintrc.cjs b/packages/design-system/packages/hooks/.eslintrc.cjs index 49ab1966..f98251f8 100644 --- a/packages/design-system/packages/hooks/.eslintrc.cjs +++ b/packages/design-system/packages/hooks/.eslintrc.cjs @@ -1,4 +1,5 @@ module.exports = { + extends: ['../../../../.eslintrc.cjs'], parserOptions: { project: ['./tsconfig.json'], tsconfigRootDir: __dirname, diff --git a/packages/design-system/packages/hooks/.lintstagedrc.json b/packages/design-system/packages/hooks/.lintstagedrc.json new file mode 100644 index 00000000..1344e803 --- /dev/null +++ b/packages/design-system/packages/hooks/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{js,jsx,ts,tsx}": ["eslint --fix --cache"], + "**/*": "prettier --write . --ignore-unknown" +} From e403ad283685371a30c7cff6551c56d76a3356fc Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 3 Aug 2024 16:53:12 +0900 Subject: [PATCH 17/46] =?UTF-8?q?chore:=20user=20event=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20vitest=20react=20=ED=94=8C=EB=9F=AC?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=84=A4=EC=B9=98=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/hooks/package.json | 8 +- .../packages/hooks/vitest.config.ts | 2 + pnpm-lock.yaml | 144 ++++++++---------- 3 files changed, 70 insertions(+), 84 deletions(-) diff --git a/packages/design-system/packages/hooks/package.json b/packages/design-system/packages/hooks/package.json index 3ef33348..2c3f53c0 100644 --- a/packages/design-system/packages/hooks/package.json +++ b/packages/design-system/packages/hooks/package.json @@ -10,9 +10,11 @@ ], "scripts": { "build": "tsup", - "test": "vitest", + "lint": "eslint .", + "lint-staged": "lint-staged", + "test": "vitest --reporter verbose", "test:ui": "vitest --ui", - "coverage": "vitest run --coverage" + "test:coverage": "vitest run --coverage" }, "dependencies": { "tsup": "^8.1.0" @@ -21,6 +23,8 @@ "@attraction/config": "workspace:^", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.5.2", + "@vitejs/plugin-react": "^4.3.1", "@vitest/coverage-v8": "^2.0.5", "@vitest/ui": "^2.0.5", "jsdom": "^24.1.1", diff --git a/packages/design-system/packages/hooks/vitest.config.ts b/packages/design-system/packages/hooks/vitest.config.ts index 0a311a5b..db024515 100644 --- a/packages/design-system/packages/hooks/vitest.config.ts +++ b/packages/design-system/packages/hooks/vitest.config.ts @@ -1,7 +1,9 @@ /* eslint-disable import/no-extraneous-dependencies */ import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' export default defineConfig({ + plugins: [react()], test: { globals: true, environment: 'jsdom', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4475e26..0d5b9373 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -329,6 +329,12 @@ importers: '@testing-library/react': specifier: ^16.0.0 version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.0) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) '@vitest/coverage-v8': specifier: ^2.0.5 version: 2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1)) @@ -568,18 +574,10 @@ packages: resolution: {integrity: sha512-ZIa2RK7CHFTZ4gwK77WRtsZ6vF7xwRXxJ8KQIxK2duhoTVcn0xYxpFLdW9WZZZvdP9GIF3Loqvf8DRdeU5Jc7Q==} engines: {node: '>=16.0.0'} - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.6': resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.4': - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.6': resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} @@ -600,10 +598,6 @@ packages: resolution: {integrity: sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.6': resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} engines: {node: '>=6.9.0'} @@ -653,20 +647,10 @@ packages: resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.6': resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.5': - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.24.6': resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} engines: {node: '>=6.9.0'} @@ -697,10 +681,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.5': - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-simple-access@7.24.6': resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} engines: {node: '>=6.9.0'} @@ -733,10 +713,6 @@ packages: resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.6': resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} engines: {node: '>=6.9.0'} @@ -753,10 +729,6 @@ packages: resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.5': - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.6': resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} @@ -1161,6 +1133,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.24.7': + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.24.6': resolution: {integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==} engines: {node: '>=6.9.0'} @@ -3834,6 +3818,12 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitejs/plugin-react@4.3.1': + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + '@vitest/coverage-v8@2.0.5': resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} peerDependencies: @@ -6908,6 +6898,10 @@ packages: react-property@2.0.2: resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.6: resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} @@ -8703,34 +8697,27 @@ snapshots: '@smithy/types': 3.2.0 tslib: 2.6.3 - '@babel/code-frame@7.24.2': - dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.0 - '@babel/code-frame@7.24.6': dependencies: '@babel/highlight': 7.24.6 picocolors: 1.0.0 - '@babel/compat-data@7.24.4': {} - '@babel/compat-data@7.24.6': {} '@babel/core@7.24.5': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.5) '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8752,14 +8739,6 @@ snapshots: dependencies: '@babel/types': 7.24.6 - '@babel/helper-compilation-targets@7.23.6': - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.24.6': dependencies: '@babel/compat-data': 7.24.6 @@ -8825,23 +8804,10 @@ snapshots: dependencies: '@babel/types': 7.24.6 - '@babel/helper-module-imports@7.24.3': - dependencies: - '@babel/types': 7.24.5 - '@babel/helper-module-imports@7.24.6': dependencies: '@babel/types': 7.24.6 - '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 - '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -8873,10 +8839,6 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.24.6 '@babel/helper-optimise-call-expression': 7.24.6 - '@babel/helper-simple-access@7.24.5': - dependencies: - '@babel/types': 7.24.5 - '@babel/helper-simple-access@7.24.6': dependencies: '@babel/types': 7.24.6 @@ -8901,8 +8863,6 @@ snapshots: '@babel/helper-validator-identifier@7.24.6': {} - '@babel/helper-validator-option@7.23.5': {} - '@babel/helper-validator-option@7.24.6': {} '@babel/helper-validator-option@7.24.7': {} @@ -8921,13 +8881,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/highlight@7.24.5': - dependencies: - '@babel/helper-validator-identifier': 7.24.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - '@babel/highlight@7.24.6': dependencies: '@babel/helper-validator-identifier': 7.24.6 @@ -9329,6 +9282,16 @@ snapshots: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 + + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -12411,6 +12374,10 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 @@ -12843,6 +12810,17 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@vitejs/plugin-react@4.3.1(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1))': + dependencies: + '@babel/core': 7.24.5 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.5) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 @@ -16199,6 +16177,8 @@ snapshots: react-property@2.0.2: {} + react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.6(@types/react@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 From 9fb531a9581588ec8bc3f73468d4caa4d19c1cd6 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 3 Aug 2024 16:59:48 +0900 Subject: [PATCH 18/46] =?UTF-8?q?refactor:=20use=20outside=20click=20?= =?UTF-8?q?=ED=9B=85=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20(#ATR-600)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useOutsideClick.spec.tsx | 77 +++++++++++++++++++ .../src/use-outside-click/useOutsideClick.ts | 7 +- 2 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx diff --git a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx new file mode 100644 index 00000000..5ff25566 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx @@ -0,0 +1,77 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { describe, expect, test, vi } from 'vitest' +import { render, screen } from '@testing-library/react' +import { userEvent } from '@testing-library/user-event' +import React from 'react' +import useOutsideClick from './useOutsideClick' + +const WRAPPER_EL = 'inside' +const INSIDE_BUTTON = 'inside' +const OUTSIDE_BUTTON = 'outside' + +function TestComponent({ callback }: { callback: () => void }) { + const ref = useOutsideClick(callback) + return ( +
+
+ +
+ +
+ ) +} + +describe('@/use-outside-click', () => { + test('target node를 클릭한 경우 콜백 함수가 실행되지 않음', async () => { + const callback = vi.fn() + const user = userEvent.setup() + + render() + + const wrapper = screen.getByTestId(WRAPPER_EL) + + await user.click(wrapper) + await user.click(wrapper) + await user.click(wrapper) + + const button = screen.getByText(INSIDE_BUTTON) + + await user.click(button) + await user.click(button) + await user.click(button) + + expect(callback).not.toHaveBeenCalled() + }) + test('target node 바깥의 node를 클릭한 경우 콜백 함수가 실행됨', async () => { + const callback = vi.fn() + const user = userEvent.setup() + + render() + + const button = screen.getByText(OUTSIDE_BUTTON) + + await user.click(button) + await user.click(button) + await user.click(button) + + expect(callback).toHaveBeenCalledTimes(3) + }) + test('컴포넌트가 unmount 됐을 때 target node 바깥의 node를 클릭한 경우 콜백 함수가 실행되지 않음', async () => { + const callback = vi.fn() + const user = userEvent.setup() + + const { unmount } = render() + + const button = screen.getByText(OUTSIDE_BUTTON) + + await user.click(button) + + unmount() + + await user.click(button) + await user.click(button) + await user.click(button) + + expect(callback).toHaveBeenCalledOnce() + }) +}) diff --git a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts index 3584a022..f6798c96 100644 --- a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts +++ b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.ts @@ -1,9 +1,10 @@ import React from 'react' import { useDocumentEvent } from '../use-document-event' -export default function useOutsideClick(callback: () => void) { - const targetAreaRef = React.useRef(null) - +export default function useOutsideClick( + callback: () => void, +) { + const targetAreaRef = React.useRef(null) useDocumentEvent('click', (e) => { if (!targetAreaRef.current) return if (targetAreaRef.current.contains(e.target as Node | null)) { From 865498e7551467c5e5d5f4f5d3654391bcd50060 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 4 Aug 2024 19:32:27 +0900 Subject: [PATCH 19/46] =?UTF-8?q?refactor:=20use=20scroll=20progress=20?= =?UTF-8?q?=ED=9B=85=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20(#ATR-600)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useScrollProgress.spec.ts | 70 +++++++++++++++++++ .../use-scroll-progress/useScrollProgress.ts | 8 +-- 2 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.spec.ts diff --git a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.spec.ts b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.spec.ts new file mode 100644 index 00000000..bc273b0b --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.spec.ts @@ -0,0 +1,70 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { describe, expect, test } from 'vitest' +import { act, renderHook } from '@testing-library/react' +import useScrollProgress from './useScrollProgress' + +describe('@/use-scroll-progress', () => { + test('progress 초기 값이 0으로 출력됨', () => { + const { result } = renderHook(() => useScrollProgress()) + + expect(result.current.progress).toBe(0) + }) + test('스크롤 시 progress 값이 올바르게 계산됨', () => { + Object.defineProperty(window, 'innerHeight', { + writable: true, + configurable: true, + value: 1000, + }) + Object.defineProperty(document.body, 'scrollHeight', { + writable: true, + configurable: true, + value: 3000, + }) + Object.defineProperty(window, 'scrollY', { + writable: true, + configurable: true, + value: 0, + }) + + const { result, unmount } = renderHook(() => useScrollProgress()) + + expect(result.current.progress).toBe(0) + + act(() => { + window.scrollY = 500 + window.dispatchEvent(new Event('scroll')) + }) + + expect(result.current.progress).toBe(25) + + act(() => { + window.scrollY = 1000 + window.dispatchEvent(new Event('scroll')) + }) + + expect(result.current.progress).toBe(50) + + act(() => { + window.scrollY = 1500 + window.dispatchEvent(new Event('scroll')) + }) + + expect(result.current.progress).toBe(75) + + act(() => { + window.scrollY = 2000 + window.dispatchEvent(new Event('scroll')) + }) + + expect(result.current.progress).toBe(100) + + unmount() + + act(() => { + window.scrollY = 1000 + window.dispatchEvent(new Event('scroll')) + }) + + expect(result.current.progress).toBe(100) + }) +}) diff --git a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts index c70e5002..ef88ab9c 100644 --- a/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts +++ b/packages/design-system/packages/hooks/src/use-scroll-progress/useScrollProgress.ts @@ -2,14 +2,14 @@ import React from 'react' import { useWindowEvent } from '../use-window-event' export default function useScrollProgress() { - const [scrollProgress, setScrollProgress] = React.useState(0) + const [progress, setProgress] = React.useState(0) useWindowEvent('scroll', () => { const currentScroll = window.scrollY const totalHeight = document.body.scrollHeight - window.innerHeight - const progress = Math.round((currentScroll / totalHeight) * 100) - setScrollProgress(progress) + const scrollProgress = Math.round((currentScroll / totalHeight) * 100) + setProgress(scrollProgress) }) - return { scrollProgress } + return { progress } } From 56cf18f621444c9eff8f08a9480b1bcf9b21f873 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 4 Aug 2024 19:33:19 +0900 Subject: [PATCH 20/46] =?UTF-8?q?refactor:=20use=20scroll=20observer=20?= =?UTF-8?q?=ED=9B=85=20=EB=82=B4=EB=B6=80=20element=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=20=EC=A0=9C=EB=84=A4=EB=A6=AD=20=EB=B0=A9=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95=20(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/src/use-scroll-observer/useScrollObserver.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts b/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts index e18fa369..b2e9a515 100644 --- a/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts +++ b/packages/design-system/packages/hooks/src/use-scroll-observer/useScrollObserver.ts @@ -1,10 +1,10 @@ import React from 'react' -export default function useScrollObserver( +export default function useScrollObserver( callback: () => void, options?: IntersectionObserverInit, ) { - const targetRef = React.useRef(null) + const targetRef = React.useRef(null) const observerRef = React.useRef(null) const defaultOptions = { root: null, rootMargin: '0px', threshold: 1.0 } From e2572bca695632b34d007e0a4f60984acbad5bdb Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Mon, 5 Aug 2024 14:45:31 +0900 Subject: [PATCH 21/46] =?UTF-8?q?refactor:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=95=84=EC=9D=B4=EB=94=94=20=ED=91=9C=EA=B8=B0=EB=B2=95=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#ATR-600)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/src/use-outside-click/useOutsideClick.spec.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx index 5ff25566..74986170 100644 --- a/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx +++ b/packages/design-system/packages/hooks/src/use-outside-click/useOutsideClick.spec.tsx @@ -5,7 +5,7 @@ import { userEvent } from '@testing-library/user-event' import React from 'react' import useOutsideClick from './useOutsideClick' -const WRAPPER_EL = 'inside' +const wrapperEl = 'wrapper' const INSIDE_BUTTON = 'inside' const OUTSIDE_BUTTON = 'outside' @@ -13,7 +13,7 @@ function TestComponent({ callback }: { callback: () => void }) { const ref = useOutsideClick(callback) return (
-
+
@@ -28,7 +28,7 @@ describe('@/use-outside-click', () => { render() - const wrapper = screen.getByTestId(WRAPPER_EL) + const wrapper = screen.getByTestId(wrapperEl) await user.click(wrapper) await user.click(wrapper) From c0ebf9be9d498ee7bf34f14be0317ce231134e79 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Mon, 5 Aug 2024 23:22:31 +0900 Subject: [PATCH 22/46] =?UTF-8?q?chore:=20ds-core=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=A6=B0=ED=8A=B8=20=EC=84=A4=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/.eslintrc.cjs | 29 +++++++++++++++++++ .../packages/core/.lintstagedrc.json | 4 +++ 2 files changed, 33 insertions(+) create mode 100644 packages/design-system/packages/core/.eslintrc.cjs create mode 100644 packages/design-system/packages/core/.lintstagedrc.json diff --git a/packages/design-system/packages/core/.eslintrc.cjs b/packages/design-system/packages/core/.eslintrc.cjs new file mode 100644 index 00000000..e0a47dec --- /dev/null +++ b/packages/design-system/packages/core/.eslintrc.cjs @@ -0,0 +1,29 @@ +module.exports = { + extends: ['../../../../.eslintrc.cjs'], + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + rules: { + 'import/no-unresolved': [2, { caseSensitive: false }], + 'react/require-default-props': 'off', + 'react/prop-types': 'off', + 'react/jsx-no-constructed-context-values': 'off', + 'jsx-a11y/label-has-associated-control': [ + 2, + { + some: ['nesting', 'id'], + }, + ], + }, + settings: { + 'import/resolver': { + typescript: {}, + }, + }, + settings: { + 'import/resolver': { + typescript: {}, + }, + }, +} diff --git a/packages/design-system/packages/core/.lintstagedrc.json b/packages/design-system/packages/core/.lintstagedrc.json new file mode 100644 index 00000000..1344e803 --- /dev/null +++ b/packages/design-system/packages/core/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{js,jsx,ts,tsx}": ["eslint --fix --cache"], + "**/*": "prettier --write . --ignore-unknown" +} From 7ffbaa3045e06247e14c67e269ad7f59d7eb9d36 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 6 Aug 2024 16:19:12 +0900 Subject: [PATCH 23/46] =?UTF-8?q?feat:=20use=20timeout=20=ED=9B=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/hooks/src/index.ts | 1 + .../packages/hooks/src/use-timeout/index.ts | 1 + .../hooks/src/use-timeout/useTimeout.spec.ts | 51 +++++++++++++++++++ .../hooks/src/use-timeout/useTimeout.ts | 24 +++++++++ 4 files changed, 77 insertions(+) create mode 100644 packages/design-system/packages/hooks/src/use-timeout/index.ts create mode 100644 packages/design-system/packages/hooks/src/use-timeout/useTimeout.spec.ts create mode 100644 packages/design-system/packages/hooks/src/use-timeout/useTimeout.ts diff --git a/packages/design-system/packages/hooks/src/index.ts b/packages/design-system/packages/hooks/src/index.ts index 32f2c269..c9c976b6 100644 --- a/packages/design-system/packages/hooks/src/index.ts +++ b/packages/design-system/packages/hooks/src/index.ts @@ -4,3 +4,4 @@ export * from './use-window-event' export * from './use-scroll-observer' export * from './use-scroll-progress' export * from './use-document-event' +export * from './use-timeout' diff --git a/packages/design-system/packages/hooks/src/use-timeout/index.ts b/packages/design-system/packages/hooks/src/use-timeout/index.ts new file mode 100644 index 00000000..a19c1065 --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-timeout/index.ts @@ -0,0 +1 @@ +export { default as useTimeout } from './useTimeout' diff --git a/packages/design-system/packages/hooks/src/use-timeout/useTimeout.spec.ts b/packages/design-system/packages/hooks/src/use-timeout/useTimeout.spec.ts new file mode 100644 index 00000000..a2d9d5af --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-timeout/useTimeout.spec.ts @@ -0,0 +1,51 @@ +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { act, renderHook } from '@testing-library/react' +import useTimeout from './useTimeout' + +describe('@/use-timeout', () => { + const delay = 500 + + beforeEach(() => { + vi.useFakeTimers() + }) + + afterEach(() => { + vi.useRealTimers() + }) + + test('timeout 후에 콜백 함수가 올바르게 실행됨', () => { + const { result } = renderHook(() => useTimeout()) + const callback = vi.fn() + + result.current.start(callback, delay) + + expect(callback).not.toHaveBeenCalled() + + act(() => vi.advanceTimersByTime(delay / 2)) + + result.current.start(callback, delay) + + expect(callback).not.toHaveBeenCalled() + + act(() => vi.advanceTimersByTime(delay)) + + expect(callback).toHaveBeenCalledOnce() + }) + + test('timeout 도중 unmount 됐을 때 콜백 함수가 실행되지 않음', () => { + const { result, unmount } = renderHook(() => useTimeout()) + const callback = vi.fn() + + result.current.start(callback, delay) + + expect(callback).not.toHaveBeenCalled() + + act(() => vi.advanceTimersByTime(delay / 2)) + + unmount() + + act(() => vi.advanceTimersByTime(delay)) + + expect(callback).not.toHaveBeenCalled() + }) +}) diff --git a/packages/design-system/packages/hooks/src/use-timeout/useTimeout.ts b/packages/design-system/packages/hooks/src/use-timeout/useTimeout.ts new file mode 100644 index 00000000..d2659a3a --- /dev/null +++ b/packages/design-system/packages/hooks/src/use-timeout/useTimeout.ts @@ -0,0 +1,24 @@ +import React from 'react' + +export default function useTimeout() { + const timeoutRef = React.useRef(null) + + const clear = React.useCallback(() => { + if (timeoutRef.current) { + window.clearTimeout(timeoutRef.current) + timeoutRef.current = null + } + }, []) + + const start = React.useCallback((callback: () => void, delay?: number) => { + clear() + timeoutRef.current = window.setTimeout(() => { + callback() + timeoutRef.current = null + }, delay) + }, []) + + React.useEffect(() => clear, []) + + return { start, clear } +} From 5e0d89a6ff773cbca6df86ccc4d0aa3312b16005 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 6 Aug 2024 22:34:11 +0900 Subject: [PATCH 24/46] =?UTF-8?q?refactor:=20utils=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20copy=20=EC=9C=A0=ED=8B=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#ATR-597)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/utils/src/copy.ts | 7 +++++++ packages/utils/src/index.ts | 1 + 2 files changed, 8 insertions(+) create mode 100644 packages/utils/src/copy.ts diff --git a/packages/utils/src/copy.ts b/packages/utils/src/copy.ts new file mode 100644 index 00000000..aa496154 --- /dev/null +++ b/packages/utils/src/copy.ts @@ -0,0 +1,7 @@ +export async function copy(value: string) { + if (navigator?.clipboard) { + await navigator.clipboard.writeText(value) + return true + } + return false +} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 1e3a5994..6dcb0a06 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,2 +1,3 @@ export * from './string' export * from './day' +export * from './copy' From 7042cb6e8e124e9a768d8a1dbecd75e8c4704fce Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Tue, 6 Aug 2024 22:43:32 +0900 Subject: [PATCH 25/46] =?UTF-8?q?chore:=20ds=20core=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20scss=20=EC=84=A4=EC=B9=98=20=EB=B0=8F=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/package.json | 5 +- .../packages/core/tsup.config.ts | 5 +- pnpm-lock.yaml | 343 ++++++++++++++++-- 3 files changed, 312 insertions(+), 41 deletions(-) diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index 23f43427..cfd72e9f 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -15,10 +15,13 @@ "tsup": "^8.1.0" }, "devDependencies": { - "@attraction/config": "workspace:^" + "@attraction/config": "workspace:^", + "esbuild-sass-plugin": "^3.3.1", + "sass": "^1.77.8" }, "peerDependencies": { "@attraction/ds-hooks": "workspace:^", + "@attraction/utils": "workspace:^", "react": "^18.0.0", "react-dom": "^18.0.0" }, diff --git a/packages/design-system/packages/core/tsup.config.ts b/packages/design-system/packages/core/tsup.config.ts index 79c8461d..31e847c8 100644 --- a/packages/design-system/packages/core/tsup.config.ts +++ b/packages/design-system/packages/core/tsup.config.ts @@ -1,13 +1,16 @@ +/* eslint-disable import/no-extraneous-dependencies */ import { Options } from 'tsup' +import { sassPlugin } from 'esbuild-sass-plugin' const options: Options = { format: ['cjs', 'esm'], clean: true, sourcemap: 'inline', dts: true, - entryPoints: ['src/index.ts'], + entryPoints: ['src/index.ts', 'src/index.scss'], external: ['react', 'react-dom'], minify: true, + esbuildPlugins: [sassPlugin({ type: 'css' })], } export default options diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d5b9373..a2543756 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,10 +91,10 @@ importers: version: 3.600.0 '@ducanh2912/next-pwa': specifier: ^10.2.7 - version: 10.2.7(@types/babel__core@7.20.5)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.92.1(@swc/core@1.5.7)) + version: 10.2.7(@types/babel__core@7.20.5)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(webpack@5.92.1(@swc/core@1.5.7)) '@sentry/nextjs': specifier: ^8.11.0 - version: 8.11.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1(@swc/core@1.5.7)) + version: 8.11.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.92.1(@swc/core@1.5.7)) '@tanstack/react-query': specifier: ^5.36.2 version: 5.36.2(react@18.3.1) @@ -115,7 +115,7 @@ importers: version: 5.1.10(@types/react@18.3.1)(react@18.3.1) next: specifier: 14.2.3 - version: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) react: specifier: ^18 version: 18.3.1 @@ -257,7 +257,7 @@ importers: version: 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': specifier: ^8.1.6 - version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) + version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@storybook/addon-links': specifier: ^8.1.6 version: 8.1.6(react@18.3.1) @@ -272,10 +272,10 @@ importers: version: 8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/react-vite': specifier: ^8.1.6 - version: 8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) + version: 8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@storybook/test': specifier: ^8.1.6 - version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) + version: 8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) chromatic: specifier: ^11.5.5 version: 11.5.5 @@ -294,6 +294,9 @@ importers: '@attraction/ds-hooks': specifier: workspace:^ version: link:../hooks + '@attraction/utils': + specifier: workspace:^ + version: link:../../../utils react: specifier: ^18.0.0 version: 18.3.1 @@ -307,6 +310,12 @@ importers: '@attraction/config': specifier: workspace:^ version: link:../../../config + esbuild-sass-plugin: + specifier: ^3.3.1 + version: 3.3.1(esbuild@0.21.5)(sass-embedded@1.77.8) + sass: + specifier: ^1.77.8 + version: 1.77.8 packages/design-system/packages/hooks: dependencies: @@ -334,10 +343,10 @@ importers: version: 14.5.2(@testing-library/dom@10.4.0) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.1(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) + version: 4.3.1(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@vitest/coverage-v8': specifier: ^2.0.5 - version: 2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1)) + version: 2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) '@vitest/ui': specifier: ^2.0.5 version: 2.0.5(vitest@2.0.5) @@ -346,7 +355,7 @@ importers: version: 24.1.1 vitest: specifier: ^2.0.5 - version: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + version: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) packages/icons: dependencies: @@ -1297,6 +1306,9 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bufbuild/protobuf@1.10.0': + resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} + '@bundled-es-modules/cookie@2.0.0': resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} @@ -4222,6 +4234,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -4902,6 +4917,12 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild-sass-plugin@3.3.1: + resolution: {integrity: sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==} + peerDependencies: + esbuild: '>=0.20.1' + sass-embedded: ^1.71.1 + esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -5548,6 +5569,9 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -7099,6 +7123,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -7109,6 +7136,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -7116,6 +7146,130 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-embedded-android-arm64@1.77.8: + resolution: {integrity: sha512-EmWHLbEx0Zo/f/lTFzMeH2Du+/I4RmSRlEnERSUKQWVp3aBSO04QDvdxfFezgQ+2Yt/ub9WMqBpma9P/8MPsLg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + hasBin: true + + sass-embedded-android-arm@1.77.8: + resolution: {integrity: sha512-GpGL7xZ7V1XpFbnflib/NWbM0euRzineK0iwoo31/ntWKAXGj03iHhGzkSiOwWSFcXgsJJi3eRA5BTmBvK5Q+w==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + hasBin: true + + sass-embedded-android-ia32@1.77.8: + resolution: {integrity: sha512-+GjfJ3lDezPi4dUUyjQBxlNKXNa+XVWsExtGvVNkv1uKyaOxULJhubVo2G6QTJJU0esJdfeXf5Ca5/J0ph7+7w==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + hasBin: true + + sass-embedded-android-x64@1.77.8: + resolution: {integrity: sha512-YZbFDzGe5NhaMCygShqkeCWtzjhkWxGVunc7ULR97wmxYPQLPeVyx7XFQZc84Aj0lKAJBJS4qRZeqphMqZEJsQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + hasBin: true + + sass-embedded-darwin-arm64@1.77.8: + resolution: {integrity: sha512-aifgeVRNE+i43toIkDFFJc/aPLMo0PJ5s5hKb52U+oNdiJE36n65n2L8F/8z3zZRvCa6eYtFY2b7f1QXR3B0LA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + hasBin: true + + sass-embedded-darwin-x64@1.77.8: + resolution: {integrity: sha512-/VWZQtcWIOek60Zj6Sxk6HebXA1Qyyt3sD8o5qwbTgZnKitB1iEBuNunyGoAgMNeUz2PRd6rVki6hvbas9hQ6w==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + hasBin: true + + sass-embedded-linux-arm64@1.77.8: + resolution: {integrity: sha512-6iIOIZtBFa2YfMsHqOb3qake3C9d/zlKxjooKKnTSo+6g6z+CLTzMXe1bOfayb7yxeenElmFoK1k54kWD/40+g==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + hasBin: true + + sass-embedded-linux-arm@1.77.8: + resolution: {integrity: sha512-2edZMB6jf0whx3T0zlgH+p131kOEmWp+I4wnKj7ZMUeokiY4Up05d10hSvb0Q63lOrSjFAWu6P5/pcYUUx8arQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + hasBin: true + + sass-embedded-linux-ia32@1.77.8: + resolution: {integrity: sha512-63GsFFHWN5yRLTWiSef32TM/XmjhCBx1DFhoqxmj+Yc6L9Z1h0lDHjjwdG6Sp5XTz5EmsaFKjpDgnQTP9hJX3Q==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + hasBin: true + + sass-embedded-linux-musl-arm64@1.77.8: + resolution: {integrity: sha512-j8cgQxNWecYK+aH8ESFsyam/Q6G+9gg8eJegiRVpA9x8yk3ykfHC7UdQWwUcF22ZcuY4zegrjJx8k+thsgsOVA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.77.8: + resolution: {integrity: sha512-nFkhSl3uu9btubm+JBW7uRglNVJ8W8dGfzVqh3fyQJKS1oyBC3vT3VOtfbT9YivXk28wXscSHpqXZwY7bUuopA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.77.8: + resolution: {integrity: sha512-oWveMe+8TFlP8WBWPna/+Ec5TV0CE+PxEutyi0ltSruBds2zxRq9dPVOqrpPcDN9QUx50vNZC0Afgch0aQEd0g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-x64@1.77.8: + resolution: {integrity: sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-x64@1.77.8: + resolution: {integrity: sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + hasBin: true + + sass-embedded-win32-arm64@1.77.8: + resolution: {integrity: sha512-7L8zT6xzEvTYj86MvUWnbkWYCNQP+74HvruLILmiPPE+TCgOjgdi750709BtppVJGGZSs40ZuN6mi/YQyGtwXg==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + hasBin: true + + sass-embedded-win32-ia32@1.77.8: + resolution: {integrity: sha512-7Buh+4bP0WyYn6XPbthkIa3M2vtcR8QIsFVg3JElVlr+8Ng19jqe0t0SwggDgbMX6AdQZC+Wj4F1BprZSok42A==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + hasBin: true + + sass-embedded-win32-x64@1.77.8: + resolution: {integrity: sha512-rZmLIx4/LLQm+4GW39sRJW0MIlDqmyV0fkRzTmhFP5i/wVC7cuj8TUubPHw18rv2rkHFfBZKZJTCkPjCS5Z+SA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + hasBin: true + + sass-embedded@1.77.8: + resolution: {integrity: sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA==} + engines: {node: '>=16.0.0'} + + sass@1.77.8: + resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} + engines: {node: '>=14.0.0'} + hasBin: true + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -7867,6 +8021,9 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -9553,6 +9710,8 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@bufbuild/protobuf@1.10.0': {} + '@bundled-es-modules/cookie@2.0.0': dependencies: cookie: 0.5.0 @@ -9693,10 +9852,10 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@ducanh2912/next-pwa@10.2.7(@types/babel__core@7.20.5)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.92.1(@swc/core@1.5.7))': + '@ducanh2912/next-pwa@10.2.7(@types/babel__core@7.20.5)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(webpack@5.92.1(@swc/core@1.5.7))': dependencies: fast-glob: 3.3.2 - next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) semver: 7.6.0 webpack: 5.92.1(@swc/core@1.5.7) workbox-build: 7.1.0(@types/babel__core@7.20.5) @@ -9943,13 +10102,13 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.4.5) - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) optionalDependencies: typescript: 5.4.5 @@ -11060,7 +11219,7 @@ snapshots: '@sentry/types': 8.11.0 '@sentry/utils': 8.11.0 - '@sentry/nextjs@8.11.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1(@swc/core@1.5.7))': + '@sentry/nextjs@8.11.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)(webpack@5.92.1(@swc/core@1.5.7))': dependencies: '@opentelemetry/instrumentation-http': 0.52.0(@opentelemetry/api@1.9.0) '@rollup/plugin-commonjs': 26.0.1(rollup@3.29.4) @@ -11073,7 +11232,7 @@ snapshots: '@sentry/vercel-edge': 8.11.0 '@sentry/webpack-plugin': 2.18.0(webpack@5.92.1(@swc/core@1.5.7)) chalk: 3.0.0 - next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) react: 18.3.1 resolve: 1.22.8 rollup: 3.29.4 @@ -11584,11 +11743,11 @@ snapshots: dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': + '@storybook/addon-interactions@8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@storybook/global': 5.0.0 '@storybook/instrumenter': 8.1.6 - '@storybook/test': 8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) + '@storybook/test': 8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@storybook/types': 8.1.6 polished: 4.3.1 ts-dedent: 2.2.0 @@ -11686,7 +11845,7 @@ snapshots: - prettier - supports-color - '@storybook/builder-vite@8.1.6(prettier@3.2.5)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1))': + '@storybook/builder-vite@8.1.6(prettier@3.2.5)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@storybook/channels': 8.1.6 '@storybook/client-logger': 8.1.6 @@ -11705,7 +11864,7 @@ snapshots: fs-extra: 11.2.0 magic-string: 0.30.10 ts-dedent: 2.2.0 - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -12020,11 +12179,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-vite@8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1))': + '@storybook/react-vite@8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - '@storybook/builder-vite': 8.1.6(prettier@3.2.5)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1)) + '@storybook/builder-vite': 8.1.6(prettier@3.2.5)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@storybook/node-logger': 8.1.6 '@storybook/react': 8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/types': 8.1.6 @@ -12035,7 +12194,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 tsconfig-paths: 4.2.0 - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -12098,14 +12257,14 @@ snapshots: - prettier - supports-color - '@storybook/test@8.1.6(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': + '@storybook/test@8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@storybook/client-logger': 8.1.6 '@storybook/core-events': 8.1.6 '@storybook/instrumenter': 8.1.6 '@storybook/preview-api': 8.1.6 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1)) + '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.6.0 @@ -12351,7 +12510,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5(vitest@2.0.5(@types/node@20.12.11)(terser@5.31.1))': + '@testing-library/jest-dom@6.4.5(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.24.5 @@ -12362,7 +12521,7 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 optionalDependencies: - vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12810,18 +12969,18 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.1(vite@5.2.13(@types/node@20.12.11)(terser@5.31.1))': + '@vitejs/plugin-react@4.3.1(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.5) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1))': + '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -12835,7 +12994,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) transitivePeerDependencies: - supports-color @@ -12888,7 +13047,7 @@ snapshots: pathe: 1.1.2 sirv: 2.0.4 tinyrainbow: 1.2.0 - vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1) + vitest: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) '@vitest/utils@1.3.1': dependencies: @@ -13341,6 +13500,8 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.15(browserslist@4.23.0) + buffer-builder@0.2.0: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -14032,6 +14193,14 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-sass-plugin@3.3.1(esbuild@0.21.5)(sass-embedded@1.77.8): + dependencies: + esbuild: 0.21.5 + resolve: 1.22.8 + safe-identifier: 0.4.2 + sass: 1.77.8 + sass-embedded: 1.77.8 + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -14912,6 +15081,8 @@ snapshots: ignore@5.3.1: {} + immutable@4.3.7: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -15630,7 +15801,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.3(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 @@ -15652,6 +15823,7 @@ snapshots: '@next/swc-win32-ia32-msvc': 14.2.3 '@next/swc-win32-x64-msvc': 14.2.3 '@opentelemetry/api': 1.9.0 + sass: 1.77.8 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -16427,6 +16599,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.6.3 + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -16438,6 +16614,8 @@ snapshots: safe-buffer@5.2.1: {} + safe-identifier@0.4.2: {} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -16446,6 +16624,90 @@ snapshots: safer-buffer@2.1.2: {} + sass-embedded-android-arm64@1.77.8: + optional: true + + sass-embedded-android-arm@1.77.8: + optional: true + + sass-embedded-android-ia32@1.77.8: + optional: true + + sass-embedded-android-x64@1.77.8: + optional: true + + sass-embedded-darwin-arm64@1.77.8: + optional: true + + sass-embedded-darwin-x64@1.77.8: + optional: true + + sass-embedded-linux-arm64@1.77.8: + optional: true + + sass-embedded-linux-arm@1.77.8: + optional: true + + sass-embedded-linux-ia32@1.77.8: + optional: true + + sass-embedded-linux-musl-arm64@1.77.8: + optional: true + + sass-embedded-linux-musl-arm@1.77.8: + optional: true + + sass-embedded-linux-musl-ia32@1.77.8: + optional: true + + sass-embedded-linux-musl-x64@1.77.8: + optional: true + + sass-embedded-linux-x64@1.77.8: + optional: true + + sass-embedded-win32-arm64@1.77.8: + optional: true + + sass-embedded-win32-ia32@1.77.8: + optional: true + + sass-embedded-win32-x64@1.77.8: + optional: true + + sass-embedded@1.77.8: + dependencies: + '@bufbuild/protobuf': 1.10.0 + buffer-builder: 0.2.0 + immutable: 4.3.7 + rxjs: 7.8.1 + supports-color: 8.1.1 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.77.8 + sass-embedded-android-arm64: 1.77.8 + sass-embedded-android-ia32: 1.77.8 + sass-embedded-android-x64: 1.77.8 + sass-embedded-darwin-arm64: 1.77.8 + sass-embedded-darwin-x64: 1.77.8 + sass-embedded-linux-arm: 1.77.8 + sass-embedded-linux-arm64: 1.77.8 + sass-embedded-linux-ia32: 1.77.8 + sass-embedded-linux-musl-arm: 1.77.8 + sass-embedded-linux-musl-arm64: 1.77.8 + sass-embedded-linux-musl-ia32: 1.77.8 + sass-embedded-linux-musl-x64: 1.77.8 + sass-embedded-linux-x64: 1.77.8 + sass-embedded-win32-arm64: 1.77.8 + sass-embedded-win32-ia32: 1.77.8 + sass-embedded-win32-x64: 1.77.8 + + sass@1.77.8: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.7 + source-map-js: 1.2.0 + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -17240,6 +17502,8 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + varint@6.0.0: {} + vary@1.1.2: {} vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -17251,13 +17515,13 @@ snapshots: - '@types/react' - '@types/react-dom' - vite-node@2.0.5(@types/node@20.12.11)(terser@5.31.1): + vite-node@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1): dependencies: cac: 6.7.14 debug: 4.3.6 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) transitivePeerDependencies: - '@types/node' - less @@ -17268,7 +17532,7 @@ snapshots: - supports-color - terser - vite@5.2.13(@types/node@20.12.11)(terser@5.31.1): + vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -17276,9 +17540,10 @@ snapshots: optionalDependencies: '@types/node': 20.12.11 fsevents: 2.3.3 + sass: 1.77.8 terser: 5.31.1 - vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(terser@5.31.1): + vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 @@ -17296,8 +17561,8 @@ snapshots: tinybench: 2.8.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.2.13(@types/node@20.12.11)(terser@5.31.1) - vite-node: 2.0.5(@types/node@20.12.11)(terser@5.31.1) + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) + vite-node: 2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.12.11 From d7727104d16e72c04cb5488fae13cfc0ca67377c Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Wed, 7 Aug 2024 18:16:18 +0900 Subject: [PATCH 26/46] =?UTF-8?q?chore:=20ds=20core=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=20=EC=84=B8=ED=8C=85=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/package.json | 15 +++++- .../packages/core/vitest.config.ts | 14 ++++++ pnpm-lock.yaml | 46 ++++++++++++++----- 3 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 packages/design-system/packages/core/vitest.config.ts diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index cfd72e9f..503fa20e 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -9,15 +9,26 @@ "dist" ], "scripts": { - "build": "tsup" + "build": "tsup", + "test": "vitest --reporter verbose", + "test:ui": "vitest --ui", + "test:coverage": "vitest run --coverage" }, "dependencies": { "tsup": "^8.1.0" }, "devDependencies": { "@attraction/config": "workspace:^", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.5.2", + "@vitejs/plugin-react": "^4.3.1", + "@vitest/coverage-v8": "^2.0.5", + "@vitest/ui": "^2.0.5", "esbuild-sass-plugin": "^3.3.1", - "sass": "^1.77.8" + "jsdom": "^24.1.1", + "sass": "^1.77.8", + "vitest": "^2.0.5" }, "peerDependencies": { "@attraction/ds-hooks": "workspace:^", diff --git a/packages/design-system/packages/core/vitest.config.ts b/packages/design-system/packages/core/vitest.config.ts new file mode 100644 index 00000000..db024515 --- /dev/null +++ b/packages/design-system/packages/core/vitest.config.ts @@ -0,0 +1,14 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + test: { + globals: true, + environment: 'jsdom', + coverage: { + reporter: ['text'], + }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2543756..1ff46357 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -310,12 +310,36 @@ importers: '@attraction/config': specifier: workspace:^ version: link:../../../config + '@testing-library/dom': + specifier: ^10.4.0 + version: 10.4.0 + '@testing-library/react': + specifier: ^16.0.0 + version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.0) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) + '@vitest/coverage-v8': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) + '@vitest/ui': + specifier: ^2.0.5 + version: 2.0.5(vitest@2.0.5) esbuild-sass-plugin: specifier: ^3.3.1 version: 3.3.1(esbuild@0.21.5)(sass-embedded@1.77.8) + jsdom: + specifier: ^24.1.1 + version: 24.1.1 sass: specifier: ^1.77.8 version: 1.77.8 + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) packages/design-system/packages/hooks: dependencies: @@ -8883,7 +8907,7 @@ snapshots: '@babel/generator@7.24.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -8929,7 +8953,7 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.6 - debug: 4.3.4 + debug: 4.3.6 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -8942,7 +8966,7 @@ snapshots: '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@babel/helper-function-name@7.24.6': dependencies: @@ -8951,7 +8975,7 @@ snapshots: '@babel/helper-hoist-variables@7.22.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@babel/helper-hoist-variables@7.24.6': dependencies: @@ -9006,7 +9030,7 @@ snapshots: '@babel/helper-split-export-declaration@7.24.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@babel/helper-split-export-declaration@7.24.6': dependencies: @@ -9034,7 +9058,7 @@ snapshots: dependencies: '@babel/template': 7.24.0 '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 transitivePeerDependencies: - supports-color @@ -9047,7 +9071,7 @@ snapshots: '@babel/parser@7.24.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@babel/parser@7.24.6': dependencies: @@ -9689,7 +9713,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 - debug: 4.3.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -12866,7 +12890,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 @@ -13956,7 +13980,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -16511,7 +16535,7 @@ snapshots: require-in-the-middle@7.3.0: dependencies: - debug: 4.3.4 + debug: 4.3.6 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: From 59052253d535d7e0e061250999e51586dfa0062c Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Thu, 8 Aug 2024 16:11:25 +0900 Subject: [PATCH 27/46] =?UTF-8?q?chore:=20ds=20core=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20cva=20=EC=84=A4=EC=B9=98=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index 503fa20e..ef0580c4 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -15,6 +15,7 @@ "test:coverage": "vitest run --coverage" }, "dependencies": { + "class-variance-authority": "^0.7.0", "tsup": "^8.1.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ff46357..285d5e3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -297,6 +297,9 @@ importers: '@attraction/utils': specifier: workspace:^ version: link:../../../utils + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 react: specifier: ^18.0.0 version: 18.3.1 From 3b32a439e5b1b394bc65b66041984d82b5f55d66 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Fri, 9 Aug 2024 17:11:35 +0900 Subject: [PATCH 28/46] =?UTF-8?q?chore:=20sass=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20esbuild?= =?UTF-8?q?=20sass=20=ED=94=8C=EB=9F=AC=EA=B7=B8=EC=9D=B8=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design-system/packages/core/package.json | 4 +- .../packages/core/tsup.config.ts | 5 +- pnpm-lock.yaml | 241 ------------------ 3 files changed, 3 insertions(+), 247 deletions(-) diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index ef0580c4..f4fa4dab 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -9,7 +9,8 @@ "dist" ], "scripts": { - "build": "tsup", + "build": "tsup && pnpm -F @attraction/ds-core build:style", + "build:style": "sass --embed-source-map src/components/index.scss:dist/component.css src/token/index.scss:dist/system.css", "test": "vitest --reporter verbose", "test:ui": "vitest --ui", "test:coverage": "vitest run --coverage" @@ -26,7 +27,6 @@ "@vitejs/plugin-react": "^4.3.1", "@vitest/coverage-v8": "^2.0.5", "@vitest/ui": "^2.0.5", - "esbuild-sass-plugin": "^3.3.1", "jsdom": "^24.1.1", "sass": "^1.77.8", "vitest": "^2.0.5" diff --git a/packages/design-system/packages/core/tsup.config.ts b/packages/design-system/packages/core/tsup.config.ts index 31e847c8..79c8461d 100644 --- a/packages/design-system/packages/core/tsup.config.ts +++ b/packages/design-system/packages/core/tsup.config.ts @@ -1,16 +1,13 @@ -/* eslint-disable import/no-extraneous-dependencies */ import { Options } from 'tsup' -import { sassPlugin } from 'esbuild-sass-plugin' const options: Options = { format: ['cjs', 'esm'], clean: true, sourcemap: 'inline', dts: true, - entryPoints: ['src/index.ts', 'src/index.scss'], + entryPoints: ['src/index.ts'], external: ['react', 'react-dom'], minify: true, - esbuildPlugins: [sassPlugin({ type: 'css' })], } export default options diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 285d5e3a..b4404fde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -331,9 +331,6 @@ importers: '@vitest/ui': specifier: ^2.0.5 version: 2.0.5(vitest@2.0.5) - esbuild-sass-plugin: - specifier: ^3.3.1 - version: 3.3.1(esbuild@0.21.5)(sass-embedded@1.77.8) jsdom: specifier: ^24.1.1 version: 24.1.1 @@ -1333,9 +1330,6 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bufbuild/protobuf@1.10.0': - resolution: {integrity: sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==} - '@bundled-es-modules/cookie@2.0.0': resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} @@ -4261,9 +4255,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-builder@0.2.0: - resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -4944,12 +4935,6 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild-sass-plugin@3.3.1: - resolution: {integrity: sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==} - peerDependencies: - esbuild: '>=0.20.1' - sass-embedded: ^1.71.1 - esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -7150,9 +7135,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -7163,9 +7145,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-identifier@0.4.2: - resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -7173,125 +7152,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-android-arm64@1.77.8: - resolution: {integrity: sha512-EmWHLbEx0Zo/f/lTFzMeH2Du+/I4RmSRlEnERSUKQWVp3aBSO04QDvdxfFezgQ+2Yt/ub9WMqBpma9P/8MPsLg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [android] - hasBin: true - - sass-embedded-android-arm@1.77.8: - resolution: {integrity: sha512-GpGL7xZ7V1XpFbnflib/NWbM0euRzineK0iwoo31/ntWKAXGj03iHhGzkSiOwWSFcXgsJJi3eRA5BTmBvK5Q+w==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [android] - hasBin: true - - sass-embedded-android-ia32@1.77.8: - resolution: {integrity: sha512-+GjfJ3lDezPi4dUUyjQBxlNKXNa+XVWsExtGvVNkv1uKyaOxULJhubVo2G6QTJJU0esJdfeXf5Ca5/J0ph7+7w==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [android] - hasBin: true - - sass-embedded-android-x64@1.77.8: - resolution: {integrity: sha512-YZbFDzGe5NhaMCygShqkeCWtzjhkWxGVunc7ULR97wmxYPQLPeVyx7XFQZc84Aj0lKAJBJS4qRZeqphMqZEJsQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [android] - hasBin: true - - sass-embedded-darwin-arm64@1.77.8: - resolution: {integrity: sha512-aifgeVRNE+i43toIkDFFJc/aPLMo0PJ5s5hKb52U+oNdiJE36n65n2L8F/8z3zZRvCa6eYtFY2b7f1QXR3B0LA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [darwin] - hasBin: true - - sass-embedded-darwin-x64@1.77.8: - resolution: {integrity: sha512-/VWZQtcWIOek60Zj6Sxk6HebXA1Qyyt3sD8o5qwbTgZnKitB1iEBuNunyGoAgMNeUz2PRd6rVki6hvbas9hQ6w==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [darwin] - hasBin: true - - sass-embedded-linux-arm64@1.77.8: - resolution: {integrity: sha512-6iIOIZtBFa2YfMsHqOb3qake3C9d/zlKxjooKKnTSo+6g6z+CLTzMXe1bOfayb7yxeenElmFoK1k54kWD/40+g==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - hasBin: true - - sass-embedded-linux-arm@1.77.8: - resolution: {integrity: sha512-2edZMB6jf0whx3T0zlgH+p131kOEmWp+I4wnKj7ZMUeokiY4Up05d10hSvb0Q63lOrSjFAWu6P5/pcYUUx8arQ==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - hasBin: true - - sass-embedded-linux-ia32@1.77.8: - resolution: {integrity: sha512-63GsFFHWN5yRLTWiSef32TM/XmjhCBx1DFhoqxmj+Yc6L9Z1h0lDHjjwdG6Sp5XTz5EmsaFKjpDgnQTP9hJX3Q==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] - hasBin: true - - sass-embedded-linux-musl-arm64@1.77.8: - resolution: {integrity: sha512-j8cgQxNWecYK+aH8ESFsyam/Q6G+9gg8eJegiRVpA9x8yk3ykfHC7UdQWwUcF22ZcuY4zegrjJx8k+thsgsOVA==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [linux] - - sass-embedded-linux-musl-arm@1.77.8: - resolution: {integrity: sha512-nFkhSl3uu9btubm+JBW7uRglNVJ8W8dGfzVqh3fyQJKS1oyBC3vT3VOtfbT9YivXk28wXscSHpqXZwY7bUuopA==} - engines: {node: '>=14.0.0'} - cpu: [arm] - os: [linux] - - sass-embedded-linux-musl-ia32@1.77.8: - resolution: {integrity: sha512-oWveMe+8TFlP8WBWPna/+Ec5TV0CE+PxEutyi0ltSruBds2zxRq9dPVOqrpPcDN9QUx50vNZC0Afgch0aQEd0g==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [linux] - - sass-embedded-linux-musl-x64@1.77.8: - resolution: {integrity: sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - - sass-embedded-linux-x64@1.77.8: - resolution: {integrity: sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [linux] - hasBin: true - - sass-embedded-win32-arm64@1.77.8: - resolution: {integrity: sha512-7L8zT6xzEvTYj86MvUWnbkWYCNQP+74HvruLILmiPPE+TCgOjgdi750709BtppVJGGZSs40ZuN6mi/YQyGtwXg==} - engines: {node: '>=14.0.0'} - cpu: [arm64] - os: [win32] - hasBin: true - - sass-embedded-win32-ia32@1.77.8: - resolution: {integrity: sha512-7Buh+4bP0WyYn6XPbthkIa3M2vtcR8QIsFVg3JElVlr+8Ng19jqe0t0SwggDgbMX6AdQZC+Wj4F1BprZSok42A==} - engines: {node: '>=14.0.0'} - cpu: [ia32] - os: [win32] - hasBin: true - - sass-embedded-win32-x64@1.77.8: - resolution: {integrity: sha512-rZmLIx4/LLQm+4GW39sRJW0MIlDqmyV0fkRzTmhFP5i/wVC7cuj8TUubPHw18rv2rkHFfBZKZJTCkPjCS5Z+SA==} - engines: {node: '>=14.0.0'} - cpu: [x64] - os: [win32] - hasBin: true - - sass-embedded@1.77.8: - resolution: {integrity: sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA==} - engines: {node: '>=16.0.0'} - sass@1.77.8: resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} engines: {node: '>=14.0.0'} @@ -8048,9 +7908,6 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -9737,8 +9594,6 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@bufbuild/protobuf@1.10.0': {} - '@bundled-es-modules/cookie@2.0.0': dependencies: cookie: 0.5.0 @@ -13527,8 +13382,6 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.15(browserslist@4.23.0) - buffer-builder@0.2.0: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -14220,14 +14073,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-sass-plugin@3.3.1(esbuild@0.21.5)(sass-embedded@1.77.8): - dependencies: - esbuild: 0.21.5 - resolve: 1.22.8 - safe-identifier: 0.4.2 - sass: 1.77.8 - sass-embedded: 1.77.8 - esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -16626,10 +16471,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: - dependencies: - tslib: 2.6.3 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -16641,8 +16482,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-identifier@0.4.2: {} - safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -16651,84 +16490,6 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-android-arm64@1.77.8: - optional: true - - sass-embedded-android-arm@1.77.8: - optional: true - - sass-embedded-android-ia32@1.77.8: - optional: true - - sass-embedded-android-x64@1.77.8: - optional: true - - sass-embedded-darwin-arm64@1.77.8: - optional: true - - sass-embedded-darwin-x64@1.77.8: - optional: true - - sass-embedded-linux-arm64@1.77.8: - optional: true - - sass-embedded-linux-arm@1.77.8: - optional: true - - sass-embedded-linux-ia32@1.77.8: - optional: true - - sass-embedded-linux-musl-arm64@1.77.8: - optional: true - - sass-embedded-linux-musl-arm@1.77.8: - optional: true - - sass-embedded-linux-musl-ia32@1.77.8: - optional: true - - sass-embedded-linux-musl-x64@1.77.8: - optional: true - - sass-embedded-linux-x64@1.77.8: - optional: true - - sass-embedded-win32-arm64@1.77.8: - optional: true - - sass-embedded-win32-ia32@1.77.8: - optional: true - - sass-embedded-win32-x64@1.77.8: - optional: true - - sass-embedded@1.77.8: - dependencies: - '@bufbuild/protobuf': 1.10.0 - buffer-builder: 0.2.0 - immutable: 4.3.7 - rxjs: 7.8.1 - supports-color: 8.1.1 - varint: 6.0.0 - optionalDependencies: - sass-embedded-android-arm: 1.77.8 - sass-embedded-android-arm64: 1.77.8 - sass-embedded-android-ia32: 1.77.8 - sass-embedded-android-x64: 1.77.8 - sass-embedded-darwin-arm64: 1.77.8 - sass-embedded-darwin-x64: 1.77.8 - sass-embedded-linux-arm: 1.77.8 - sass-embedded-linux-arm64: 1.77.8 - sass-embedded-linux-ia32: 1.77.8 - sass-embedded-linux-musl-arm: 1.77.8 - sass-embedded-linux-musl-arm64: 1.77.8 - sass-embedded-linux-musl-ia32: 1.77.8 - sass-embedded-linux-musl-x64: 1.77.8 - sass-embedded-linux-x64: 1.77.8 - sass-embedded-win32-arm64: 1.77.8 - sass-embedded-win32-ia32: 1.77.8 - sass-embedded-win32-x64: 1.77.8 - sass@1.77.8: dependencies: chokidar: 3.6.0 @@ -17529,8 +17290,6 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - varint@6.0.0: {} - vary@1.1.2: {} vaul@0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): From b91f9e64981f96399b0e64d6f75fa0b5b2f05a88 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 10 Aug 2024 00:48:45 +0900 Subject: [PATCH 29/46] =?UTF-8?q?chore:=20ds=20core=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20storybook=20=EA=B0=9C=EB=B0=9C=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + .../design-system/packages/core/.eslintrc.cjs | 2 +- .../packages/core/.storybook/main.ts | 49 + .../packages/core/.storybook/preview.ts | 17 + .../design-system/packages/core/package.json | 25 +- pnpm-lock.yaml | 981 +++++++++++++++++- 6 files changed, 1048 insertions(+), 27 deletions(-) create mode 100644 packages/design-system/packages/core/.storybook/main.ts create mode 100644 packages/design-system/packages/core/.storybook/preview.ts diff --git a/package.json b/package.json index 1c4109d5..d74c7f72 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "build:utils": "pnpm -F @attraction/utils build", "dev:service": "pnpm -F @attraction/service dev", "dev:ds": "pnpm -F @attraction/design-system storybook", + "dev:ds-core": "pnpm -F @attraction/ds-core dev", "start:service": "pnpm -F @attraction/service start" }, "devDependencies": { diff --git a/packages/design-system/packages/core/.eslintrc.cjs b/packages/design-system/packages/core/.eslintrc.cjs index e0a47dec..c5ce7f04 100644 --- a/packages/design-system/packages/core/.eslintrc.cjs +++ b/packages/design-system/packages/core/.eslintrc.cjs @@ -1,5 +1,5 @@ module.exports = { - extends: ['../../../../.eslintrc.cjs'], + extends: ['../../../../.eslintrc.cjs', 'plugin:storybook/recommended'], parserOptions: { project: ['./tsconfig.json'], tsconfigRootDir: __dirname, diff --git a/packages/design-system/packages/core/.storybook/main.ts b/packages/design-system/packages/core/.storybook/main.ts new file mode 100644 index 00000000..917d680c --- /dev/null +++ b/packages/design-system/packages/core/.storybook/main.ts @@ -0,0 +1,49 @@ +import type { StorybookConfig } from '@storybook/react-vite' + +const config: StorybookConfig = { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + '@storybook/addon-a11y', + '@storybook/addon-themes', + { + name: 'storybook-addon-sass-postcss', + options: { + rules: [ + { + test: /\.s[ac]ss$/, + sideEffects: true, + use: [ + require.resolve('style-loader'), + { + loader: require.resolve('css-loader'), + options: { + importLoaders: 2, + }, + }, + require.resolve('resolve-url-loader'), + { + loader: require.resolve('sass-loader'), + options: { + // Want to add more Sass options? Read more here https://webpack.js.org/loaders/sass-loader/#options + implementation: require.resolve('sass'), + sourceMap: true, + sassOptions: {}, + }, + }, + ], + }, + ], + }, + }, + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} +export default config diff --git a/packages/design-system/packages/core/.storybook/preview.ts b/packages/design-system/packages/core/.storybook/preview.ts new file mode 100644 index 00000000..37c980d0 --- /dev/null +++ b/packages/design-system/packages/core/.storybook/preview.ts @@ -0,0 +1,17 @@ +import type { Preview } from '@storybook/react' + +import '../src/token/index.scss' +import '../src/components/index.scss' + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +} + +export default preview diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index f4fa4dab..bb43a6ba 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -10,10 +10,12 @@ ], "scripts": { "build": "tsup && pnpm -F @attraction/ds-core build:style", - "build:style": "sass --embed-source-map src/components/index.scss:dist/component.css src/token/index.scss:dist/system.css", + "build:style": "sass --embed-source-map src/components/index.scss:dist/component.css src/token/index.scss:dist/token.css", + "build:storybook": "storybook build", "test": "vitest --reporter verbose", "test:ui": "vitest --ui", - "test:coverage": "vitest run --coverage" + "test:coverage": "vitest run --coverage", + "dev": "storybook dev -p 6006" }, "dependencies": { "class-variance-authority": "^0.7.0", @@ -21,14 +23,33 @@ }, "devDependencies": { "@attraction/config": "workspace:^", + "@chromatic-com/storybook": "^1.6.1", + "@storybook/addon-a11y": "^8.2.8", + "@storybook/addon-essentials": "^8.2.8", + "@storybook/addon-interactions": "^8.2.8", + "@storybook/addon-links": "^8.2.8", + "@storybook/addon-onboarding": "^8.2.8", + "@storybook/addon-themes": "^8.2.8", + "@storybook/blocks": "^8.2.8", + "@storybook/react": "^8.2.8", + "@storybook/react-vite": "^8.2.8", + "@storybook/test": "^8.2.8", "@testing-library/dom": "^10.4.0", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", "@vitejs/plugin-react": "^4.3.1", "@vitest/coverage-v8": "^2.0.5", "@vitest/ui": "^2.0.5", + "css-loader": "^7.1.2", + "eslint-plugin-storybook": "^0.8.0", "jsdom": "^24.1.1", + "prop-types": "^15.8.1", + "resolve-url-loader": "^5.0.0", "sass": "^1.77.8", + "sass-loader": "^16.0.0", + "storybook": "^8.2.8", + "storybook-addon-sass-postcss": "^0.3.0", + "style-loader": "^4.0.0", "vitest": "^2.0.5" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4404fde..5cc6ae1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -313,6 +313,39 @@ importers: '@attraction/config': specifier: workspace:^ version: link:../../../config + '@chromatic-com/storybook': + specifier: ^1.6.1 + version: 1.6.1(react@18.3.1) + '@storybook/addon-a11y': + specifier: ^8.2.8 + version: 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-essentials': + specifier: ^8.2.8 + version: 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-interactions': + specifier: ^8.2.8 + version: 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) + '@storybook/addon-links': + specifier: ^8.2.8 + version: 8.2.8(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-onboarding': + specifier: ^8.2.8 + version: 8.2.8(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-themes': + specifier: ^8.2.8 + version: 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/blocks': + specifier: ^8.2.8 + version: 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/react': + specifier: ^8.2.8 + version: 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5) + '@storybook/react-vite': + specifier: ^8.2.8 + version: 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) + '@storybook/test': + specifier: ^8.2.8 + version: 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -331,12 +364,36 @@ importers: '@vitest/ui': specifier: ^2.0.5 version: 2.0.5(vitest@2.0.5) + css-loader: + specifier: ^7.1.2 + version: 7.1.2(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + eslint-plugin-storybook: + specifier: ^0.8.0 + version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) jsdom: specifier: ^24.1.1 version: 24.1.1 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + resolve-url-loader: + specifier: ^5.0.0 + version: 5.0.0 sass: specifier: ^1.77.8 version: 1.77.8 + sass-loader: + specifier: ^16.0.0 + version: 16.0.0(sass@1.77.8)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + storybook: + specifier: ^8.2.8 + version: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + storybook-addon-sass-postcss: + specifier: ^0.3.0 + version: 0.3.0(postcss@8.4.38)(sass@1.77.8)(typescript@5.4.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + style-loader: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) vitest: specifier: ^2.0.5 version: 2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1) @@ -1340,6 +1397,10 @@ packages: resolution: {integrity: sha512-LkLKv7SWu/6kGep1ft2HA1T/cm14wU0zoW71gE4cZRcgUoRQJtyhITFTLHrjqAxz6bVqNgqzQtd5oBZ2nK3L3g==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + '@chromatic-com/storybook@1.6.1': + resolution: {integrity: sha512-x1x1NB3j4xpfeSWKr96emc+7ZvfsvH+/WVb3XCjkB24PPbT8VZXb3mJSAQMrSzuQ8+eQE9kDogYHH9Fj3tb/Cw==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -3054,27 +3115,67 @@ packages: resolution: {integrity: sha512-5OVcC5ZcmmutY208ADY/l2eB4H4DVXs+hPUo/M1spF4/YEmF9DdLkfwBvohej2dIeVJayKY7hMlD0X8j3F3/Uw==} engines: {node: '>=16.0.0'} + '@storybook/addon-a11y@8.2.8': + resolution: {integrity: sha512-pUjTjJjoP/52hoB2BGqWmGPOUpM1YwEKsYJmY4ki3qJo/ehau+mMlal9xY9/mxafYFkYbrWvHoVSLxSRBxt3yg==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-actions@8.1.6': resolution: {integrity: sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==} + '@storybook/addon-actions@8.2.8': + resolution: {integrity: sha512-dyajqsMNAUktpi7aiml0Fsm4ey8Nh2YwRyTDuTJZ1iJFcFyARqfr5iKH4/qElq80y0FYXGgGRJB+dKJsCdefLw==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-backgrounds@8.1.6': resolution: {integrity: sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==} + '@storybook/addon-backgrounds@8.2.8': + resolution: {integrity: sha512-OqXGpq8KzWwAAQWPnby/v4ayWuUAB18Twgi6zeb+QNLEQdFnSp7kz6+4mP8ZVg8RS3ACGXD31nnvvlF7GYoJjQ==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-controls@8.1.6': resolution: {integrity: sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==} + '@storybook/addon-controls@8.2.8': + resolution: {integrity: sha512-adhg68CSFaR/r95rgyKU4ZzWwZz+MU0c4vr9hqrR1UGvg/zl33IZQQzb5j5v3Axo0O31yPMaY6LRty7pOv3+/Q==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-docs@8.1.6': resolution: {integrity: sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==} + '@storybook/addon-docs@8.2.8': + resolution: {integrity: sha512-8hqUYYveJjR3e/XdXt0vduA7TxFRIFWgXoa9jN5axa63kqfiHcfkpFYPjM8jCRhsfDIRgdrwe2qxsA0wewO1pA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-essentials@8.1.6': resolution: {integrity: sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==} + '@storybook/addon-essentials@8.2.8': + resolution: {integrity: sha512-NRbFv2ociM1l/Oi/1go/ZC5bUU41n9aKD1DzIbguEKBhUs/TGAES+f5x+7DvYnt3Hvd925/FyTXuMU+vNUeiUA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-highlight@8.1.6': resolution: {integrity: sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==} + '@storybook/addon-highlight@8.2.8': + resolution: {integrity: sha512-IM1pPx6CCZbHV0bv3oB1qBCGDsr8soq7XLl93tc7mc4hstWSDFfNn7rx4CWycSlCqXlNTKh8cEkbrPrhV9cwbg==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-interactions@8.1.6': resolution: {integrity: sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==} + '@storybook/addon-interactions@8.2.8': + resolution: {integrity: sha512-ggctlrSlK72xMfhviHHRslZF5tr9aHr1VFwCG/tjF7s1lM3S7OGqgHLJpcja/wNREvq9GMEvX95ZSu5NMh5CtA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-links@8.1.6': resolution: {integrity: sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==} peerDependencies: @@ -3083,21 +3184,60 @@ packages: react: optional: true + '@storybook/addon-links@8.2.8': + resolution: {integrity: sha512-2igEaSdKAFjKjioT6LGdBxZulpbVCzmlmV//sTu3sQiVnnxRjjGFt77sEeLMajrsSvg9DB1RMbDsvJ4FJTzXfQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.8 + peerDependenciesMeta: + react: + optional: true + '@storybook/addon-measure@8.1.6': resolution: {integrity: sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==} + '@storybook/addon-measure@8.2.8': + resolution: {integrity: sha512-oqZiX571F9NNy8o/oVyM1Pe2cJz3WJ/OpL0lVbepHrV4ir1f+SDYZdMI58jGBAtoM52cwFc2ZPbzXKQs7a513A==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-onboarding@8.1.6': resolution: {integrity: sha512-y70Y8bAXOb31nT4vL/BiAN2NjwsFRINVdux75HQg+SBUDquCHIurA+hftpcjAUOOunOoLE9udRi2k88vJQvw6A==} + '@storybook/addon-onboarding@8.2.8': + resolution: {integrity: sha512-fKy3uwggIZKFQL9qo4niVYnAhMAdO/xBsEzJNj2ueTaWoJYO6c0jDWhVQW3pxlMw6yq/WdYT6tW/lsbHKFBUVQ==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-outline@8.1.6': resolution: {integrity: sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==} + '@storybook/addon-outline@8.2.8': + resolution: {integrity: sha512-Cbk4Z0ojggiXjpbS2c4WUP56yikQdT4O7+8AuBNNjVUHNvJQADWYovi6SvDmrS5dH1iyIkB+4saXMr0syp+BDw==} + peerDependencies: + storybook: ^8.2.8 + + '@storybook/addon-themes@8.2.8': + resolution: {integrity: sha512-lJzLAAs2gPm0fbE+NB7oQSbetQoENe3jrlb+vUemUpGBJuhiiz+Aue47DEiFtWCzeNze6dhigMJKFlFacvLz+A==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-toolbars@8.1.6': resolution: {integrity: sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==} + '@storybook/addon-toolbars@8.2.8': + resolution: {integrity: sha512-k64G3FUpX3H/mhJ7AG1r/4Drsk6cdUtxI3yVdgWb7O3Ka7v/OFZexRXRSiV03n5q/kaqVKDu96Tuog57+7EB4w==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/addon-viewport@8.1.6': resolution: {integrity: sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==} + '@storybook/addon-viewport@8.2.8': + resolution: {integrity: sha512-/JZeIgB33yhryUvWaNO+3t9akcS8nGLyAUmlljPFr3LUDDYrO/0H9tE4CgjLqtwCXBq3k3s0HLzEJOrKI9Tmbw==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/blocks@8.1.6': resolution: {integrity: sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==} peerDependencies: @@ -3109,6 +3249,18 @@ packages: react-dom: optional: true + '@storybook/blocks@8.2.8': + resolution: {integrity: sha512-AHBXu9s73Xv9r1JageIL7C4eGf5XYEByai4Y6NYQsE+jF7b7e8oaSUoLW6fWSyLGuqvjRx+5P7GMNI2K1EngBA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.8 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@storybook/builder-manager@8.1.6': resolution: {integrity: sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==} @@ -3127,6 +3279,22 @@ packages: vite-plugin-glimmerx: optional: true + '@storybook/builder-vite@8.2.8': + resolution: {integrity: sha512-p9EJfZkX9ZsVi1Qr3jYyCJaZZ/2pt0KVTOYnDzNnhi3P/suU6O3Lp/YCV5+KOfAmlg2IgTND0EidqZinqPIBSg==} + peerDependencies: + '@preact/preset-vite': '*' + storybook: ^8.2.8 + typescript: '>= 4.3.x' + vite: ^4.0.0 || ^5.0.0 + vite-plugin-glimmerx: '*' + peerDependenciesMeta: + '@preact/preset-vite': + optional: true + typescript: + optional: true + vite-plugin-glimmerx: + optional: true + '@storybook/channels@8.1.6': resolution: {integrity: sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==} @@ -3140,12 +3308,20 @@ packages: '@storybook/codemod@8.1.6': resolution: {integrity: sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==} + '@storybook/codemod@8.2.8': + resolution: {integrity: sha512-dqD4j6JTsS8BM2y1yHBIe5fHvsGM08qpJQXkE77aXJIm5UfUeuWC7rY0xAheX3fU5G98l3BJk0ySUGspQL5pNg==} + '@storybook/components@8.1.6': resolution: {integrity: sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + '@storybook/components@8.2.8': + resolution: {integrity: sha512-d4fI7Clogx4rgLAM7vZVr9L2EFtAkGXvpkZFuB0H0eyYaxZSbuZYvDCzRglQGQGsqD8IA8URTgPVSXC3L3k6Bg==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/core-common@8.1.6': resolution: {integrity: sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==} peerDependencies: @@ -3160,15 +3336,26 @@ packages: '@storybook/core-server@8.1.6': resolution: {integrity: sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==} + '@storybook/core@8.2.8': + resolution: {integrity: sha512-Wwm/Txh87hbxqU9OaxXwdGAmdRBjDn7rlZEPjNBx0tt43SQ11fKambY7nVWrWuw46YsJpdF9V/PQr4noNEXXEA==} + '@storybook/csf-plugin@8.1.6': resolution: {integrity: sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==} + '@storybook/csf-plugin@8.2.8': + resolution: {integrity: sha512-CEHY7xloBPE8d8h0wg2AM2kRaZkHK8/vkYMNZPbccqAYj6PQIdTuOcXZIBAhAGydyIBULZmsmmsASxM9RO5fKA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/csf-tools@8.1.6': resolution: {integrity: sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==} '@storybook/csf@0.0.1': resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + '@storybook/csf@0.1.11': + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} + '@storybook/csf@0.1.8': resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} @@ -3191,9 +3378,19 @@ packages: '@storybook/instrumenter@8.1.6': resolution: {integrity: sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==} + '@storybook/instrumenter@8.2.8': + resolution: {integrity: sha512-6Gk3CzoYQQXBXpW86PKqYSozOB/C9dSYiFvwPRo4XsEfjARDi8yglqkbOtG+FVqKDL66I5krcveB8bTWigqc9g==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/manager-api@8.1.6': resolution: {integrity: sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==} + '@storybook/manager-api@8.2.8': + resolution: {integrity: sha512-wzfRu3vrD9a99pN3W/RJXVtgNGNsy9PyvetjUfgQVtUZ9eXXDuA+tM7ITTu3xvONtV/rT2YEBwzOpowa+r1GNQ==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/manager@8.1.6': resolution: {integrity: sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==} @@ -3203,6 +3400,11 @@ packages: '@storybook/preview-api@8.1.6': resolution: {integrity: sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==} + '@storybook/preview-api@8.2.8': + resolution: {integrity: sha512-BDt1lo5oEWAaTVCsl6JUHCBFtIWI/Za4qvIdn2Lx9eCA+Ae6IDliosmu273DcvGD9R4OPF6sm1dML3TXILGGcA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/preview@8.1.6': resolution: {integrity: sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==} @@ -3212,6 +3414,13 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + '@storybook/react-dom-shim@8.2.8': + resolution: {integrity: sha512-2my3dGBOpBe30+FsSdQOIYCfxMyT68+SEq0qcXxfuax0BkhhJnZLpwvpqOna6EOVTgBD+Tk1TKmjpGwxuwp4rg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.8 + '@storybook/react-vite@8.1.6': resolution: {integrity: sha512-aUrSOVVG/11v5FBWjxyVVYtL1MhFcGFvkHcT2tTUK2lN/EMNFugL5t5YYPv0FIi/DXxg8RBdJIV9vdNCd6tNOA==} engines: {node: '>=18.0.0'} @@ -3220,6 +3429,15 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta vite: ^4.0.0 || ^5.0.0 + '@storybook/react-vite@8.2.8': + resolution: {integrity: sha512-xzXWyhFnLoFtJGgj8F5j/33QB4YTyEX61On6kolt7WFAjRFaUWJGYUC8cPPL4PNwsdouyCrnHvlJj77AvFlvfQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.8 + vite: ^4.0.0 || ^5.0.0 + '@storybook/react@8.1.6': resolution: {integrity: sha512-2CSc3MLeaY7QaYAQLwaXRboKkgQnWrSZAo/WTJcSHUr2YFxH5+iECB0Kci12GqaJklhhgmfTfVZ4Jo9ZJ6LQfg==} engines: {node: '>=18.0.0'} @@ -3231,6 +3449,18 @@ packages: typescript: optional: true + '@storybook/react@8.2.8': + resolution: {integrity: sha512-Nln0DDTQ930P4J+SEkWbLSgaDe8eDd5gP6h3l4b5RwT7sRuSyHtTtYHPCnU9U7sLQ3AbMsclgtJukHXDitlccg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.8 + typescript: '>= 4.2.x' + peerDependenciesMeta: + typescript: + optional: true + '@storybook/router@8.1.6': resolution: {integrity: sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==} @@ -3240,6 +3470,11 @@ packages: '@storybook/test@8.1.6': resolution: {integrity: sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==} + '@storybook/test@8.2.8': + resolution: {integrity: sha512-Lbt4DHP8WhnakTPw981kP85DeoONKN+zVLjFPa5ptllyT+jazZANjIdGhNUlBdIzOw3oyDXhGlWIdtqztS3pSA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/theming@8.1.6': resolution: {integrity: sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==} peerDependencies: @@ -3251,6 +3486,11 @@ packages: react-dom: optional: true + '@storybook/theming@8.2.8': + resolution: {integrity: sha512-jt5oUO82LN3z5aygNdHucBZcErSicIAwzhR5Kz9E/C9wUbhyZhbWsWyhpZaytu8LJUj2YWAIPS8kq/jGx+qLZA==} + peerDependencies: + storybook: ^8.2.8 + '@storybook/types@8.1.6': resolution: {integrity: sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==} @@ -3441,6 +3681,10 @@ packages: peerDependencies: react: ^18.0.0 + '@testing-library/dom@10.1.0': + resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + engines: {node: '>=18'} + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -3865,6 +4109,9 @@ packages: '@vitest/expect@1.3.1': resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + '@vitest/expect@1.6.0': + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -4010,6 +4257,10 @@ packages: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4213,6 +4464,9 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -4518,6 +4772,9 @@ packages: engines: {node: '>=16'} hasBin: true + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -4579,6 +4836,18 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} @@ -4859,6 +5128,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -5190,6 +5463,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fd-package-json@1.2.0: + resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} + fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} @@ -5571,6 +5847,12 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -6033,6 +6315,10 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -6162,6 +6448,12 @@ packages: peerDependencies: react: '>= 0.14.0' + markdown-to-jsx@7.4.7: + resolution: {integrity: sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==} + engines: {node: '>= 10'} + peerDependencies: + react: '>= 0.14.0' + mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -6678,6 +6970,43 @@ packages: ts-node: optional: true + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.0.5: + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.0: + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + postcss-nested@6.0.1: resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} @@ -7031,6 +7360,9 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regex-parser@2.3.0: + resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} + regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -7079,6 +7411,10 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -7152,6 +7488,48 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-loader@14.2.1: + resolution: {integrity: sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + + sass-loader@16.0.0: + resolution: {integrity: sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + sass@1.77.8: resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} engines: {node: '>=14.0.0'} @@ -7334,10 +7712,21 @@ packages: store2@2.14.3: resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} + storybook-addon-sass-postcss@0.3.0: + resolution: {integrity: sha512-d5NH8wZB7iIz415gLKBVlJrXPSSQ9mZp32twfZXwUQvspio+Ap9JC3TAwTcwlZN9uuHouxIM9qYtmHikHxv2pw==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8 + sass: ^1 + storybook@8.1.6: resolution: {integrity: sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==} hasBin: true + storybook@8.2.8: + resolution: {integrity: sha512-sh4CNCXkieVgJ5GXrCOESS0BjRbQ9wG7BVnurQPl6izNnB9zR8rag+aUmjPZWBwbj55V1BFA5A/vEsCov21qjg==} + hasBin: true + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -7428,6 +7817,12 @@ packages: strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + style-loader@4.0.0: + resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.27.0 + style-to-js@1.1.12: resolution: {integrity: sha512-tv+/FkgNYHI2fvCoBMsqPHh5xovwiw+C3X0Gfnss/Syau0Nr3IqGOJ9XiOYXoPnToHVbllKFf5qCNFJGwFg5mg==} @@ -7980,6 +8375,9 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -8147,18 +8545,6 @@ packages: write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -9614,6 +10000,18 @@ snapshots: - '@chromatic-com/playwright' - react + '@chromatic-com/storybook@1.6.1(react@18.3.1)': + dependencies: + chromatic: 11.5.5 + filesize: 10.1.2 + jsonfile: 6.1.0 + react-confetti: 6.1.0(react@18.3.1) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + '@colors/colors@1.5.0': optional: true @@ -11538,6 +11936,12 @@ snapshots: '@smithy/types': 3.2.0 tslib: 2.6.3 + '@storybook/addon-a11y@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/addon-highlight': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + axe-core: 4.7.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/addon-actions@8.1.6': dependencies: '@storybook/core-events': 8.1.6 @@ -11547,12 +11951,28 @@ snapshots: polished: 4.3.1 uuid: 9.0.1 + '@storybook/addon-actions@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + uuid: 9.0.1 + '@storybook/addon-backgrounds@8.1.6': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 + '@storybook/addon-backgrounds@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + '@storybook/addon-controls@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/blocks': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -11568,6 +11988,13 @@ snapshots: - react-dom - supports-color + '@storybook/addon-controls@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + dequal: 2.0.3 + lodash: 4.17.21 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + '@storybook/addon-docs@8.1.6(@types/react-dom@18.3.0)(prettier@3.2.5)': dependencies: '@babel/core': 7.24.5 @@ -11596,6 +12023,25 @@ snapshots: - prettier - supports-color + '@storybook/addon-docs@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@babel/core': 7.24.5 + '@mdx-js/react': 3.0.1(@types/react@18.3.1)(react@18.3.1) + '@storybook/blocks': 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/csf-plugin': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@types/react': 18.3.1 + fs-extra: 11.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rehype-external-links: 3.0.0 + rehype-slug: 6.0.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + '@storybook/addon-essentials@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/addon-actions': 8.1.6 @@ -11621,10 +12067,31 @@ snapshots: - react-dom - supports-color + '@storybook/addon-essentials@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/addon-actions': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-backgrounds': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-controls': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-docs': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-highlight': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-measure': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-outline': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-toolbars': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/addon-viewport': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + '@storybook/addon-highlight@8.1.6': dependencies: '@storybook/global': 5.0.0 + '@storybook/addon-highlight@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/addon-interactions@8.1.6(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@storybook/global': 5.0.0 @@ -11640,17 +12107,47 @@ snapshots: - jest - vitest - '@storybook/addon-links@8.1.6(react@18.3.1)': + '@storybook/addon-interactions@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1))': dependencies: - '@storybook/csf': 0.1.8 '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/test': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) + polished: 4.3.1 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) ts-dedent: 2.2.0 - optionalDependencies: - react: 18.3.1 - - '@storybook/addon-measure@8.1.6': - dependencies: + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest + + '@storybook/addon-links@8.1.6(react@18.3.1)': + dependencies: + '@storybook/csf': 0.1.8 + '@storybook/global': 5.0.0 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + + '@storybook/addon-links@8.2.8(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/csf': 0.1.11 + '@storybook/global': 5.0.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + + '@storybook/addon-measure@8.1.6': + dependencies: + '@storybook/global': 5.0.0 + tiny-invariant: 1.3.3 + + '@storybook/addon-measure@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: '@storybook/global': 5.0.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) tiny-invariant: 1.3.3 '@storybook/addon-onboarding@8.1.6(react@18.3.1)': @@ -11659,17 +12156,44 @@ snapshots: transitivePeerDependencies: - react + '@storybook/addon-onboarding@8.2.8(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + react-confetti: 6.1.0(react@18.3.1) + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + transitivePeerDependencies: + - react + '@storybook/addon-outline@8.1.6': dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 + '@storybook/addon-outline@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + + '@storybook/addon-themes@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + '@storybook/addon-toolbars@8.1.6': {} + '@storybook/addon-toolbars@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/addon-viewport@8.1.6': dependencies: memoizerific: 1.11.3 + '@storybook/addon-viewport@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/blocks@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.6 @@ -11706,6 +12230,27 @@ snapshots: - prettier - supports-color + '@storybook/blocks@8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/csf': 0.1.11 + '@storybook/global': 5.0.0 + '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/lodash': 4.17.5 + color-convert: 2.0.1 + dequal: 2.0.3 + lodash: 4.17.21 + markdown-to-jsx: 7.4.7(react@18.3.1) + memoizerific: 1.11.3 + polished: 4.3.1 + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + telejson: 7.2.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@storybook/builder-manager@8.1.6(prettier@3.2.5)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 @@ -11754,6 +12299,24 @@ snapshots: - prettier - supports-color + '@storybook/builder-vite@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': + dependencies: + '@storybook/csf-plugin': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@types/find-cache-dir': 3.2.1 + browser-assert: 1.2.1 + es-module-lexer: 1.5.3 + express: 4.19.2 + find-cache-dir: 3.3.2 + fs-extra: 11.2.0 + magic-string: 0.30.10 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@storybook/channels@8.1.6': dependencies: '@storybook/client-logger': 8.1.6 @@ -11833,6 +12396,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@storybook/codemod@8.2.8': + dependencies: + '@babel/core': 7.24.5 + '@babel/preset-env': 7.24.6(@babel/core@7.24.5) + '@babel/types': 7.24.6 + '@storybook/core': 8.2.8 + '@storybook/csf': 0.1.11 + '@types/cross-spawn': 6.0.6 + cross-spawn: 7.0.3 + globby: 14.0.1 + jscodeshift: 0.15.2(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + lodash: 4.17.21 + prettier: 3.2.5 + recast: 0.23.9 + tiny-invariant: 1.3.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@storybook/components@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -11851,6 +12434,10 @@ snapshots: - '@types/react' - '@types/react-dom' + '@storybook/components@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/core-common@8.1.6(prettier@3.2.5)': dependencies: '@storybook/core-events': 8.1.6 @@ -11939,7 +12526,7 @@ snapshots: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - encoding @@ -11949,6 +12536,24 @@ snapshots: - supports-color - utf-8-validate + '@storybook/core@8.2.8': + dependencies: + '@storybook/csf': 0.1.11 + '@types/express': 4.17.21 + '@types/node': 18.19.34 + browser-assert: 1.2.1 + esbuild: 0.21.5 + esbuild-register: 3.5.0(esbuild@0.21.5) + express: 4.19.2 + process: 0.11.10 + recast: 0.23.9 + util: 0.12.5 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@storybook/csf-plugin@8.1.6': dependencies: '@storybook/csf-tools': 8.1.6 @@ -11956,6 +12561,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@storybook/csf-plugin@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + unplugin: 1.10.1 + '@storybook/csf-tools@8.1.6': dependencies: '@babel/generator': 7.24.5 @@ -11974,6 +12584,10 @@ snapshots: dependencies: lodash: 4.17.21 + '@storybook/csf@0.1.11': + dependencies: + type-fest: 2.19.0 + '@storybook/csf@0.1.8': dependencies: type-fest: 2.19.0 @@ -12012,6 +12626,13 @@ snapshots: '@vitest/utils': 1.6.0 util: 0.12.5 + '@storybook/instrumenter@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + '@storybook/global': 5.0.0 + '@vitest/utils': 1.6.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + util: 0.12.5 + '@storybook/manager-api@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@storybook/channels': 8.1.6 @@ -12033,6 +12654,10 @@ snapshots: - react - react-dom + '@storybook/manager-api@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/manager@8.1.6': {} '@storybook/node-logger@8.1.6': {} @@ -12054,6 +12679,10 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 + '@storybook/preview-api@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/preview@8.1.6': {} '@storybook/react-dom-shim@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -12061,6 +12690,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@storybook/react-dom-shim@8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/react-vite@8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) @@ -12086,6 +12721,28 @@ snapshots: - typescript - vite-plugin-glimmerx + '@storybook/react-vite@8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.18.0)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + '@storybook/builder-vite': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5)(vite@5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) + '@storybook/react': 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5) + find-up: 5.0.0 + magic-string: 0.30.10 + react: 18.3.1 + react-docgen: 7.0.3 + react-dom: 18.3.1(react@18.3.1) + resolve: 1.22.8 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + tsconfig-paths: 4.2.0 + vite: 5.2.13(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1) + transitivePeerDependencies: + - '@preact/preset-vite' + - rollup + - supports-color + - typescript + - vite-plugin-glimmerx + '@storybook/react@8.1.6(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': dependencies: '@storybook/client-logger': 8.1.6 @@ -12118,6 +12775,35 @@ snapshots: - prettier - supports-color + '@storybook/react@8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(typescript@5.4.5)': + dependencies: + '@storybook/components': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/preview-api': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/react-dom-shim': 8.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@storybook/theming': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@types/escodegen': 0.0.6 + '@types/estree': 0.0.51 + '@types/node': 18.19.34 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + escodegen: 2.1.0 + html-tags: 3.3.1 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + semver: 7.6.2 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + ts-dedent: 2.2.0 + type-fest: 2.19.0 + util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.4.5 + '@storybook/router@8.1.6': dependencies: '@storybook/client-logger': 8.1.6 @@ -12146,7 +12832,7 @@ snapshots: '@storybook/instrumenter': 8.1.6 '@storybook/preview-api': 8.1.6 '@testing-library/dom': 9.3.4 - '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1)) + '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) '@vitest/expect': 1.3.1 '@vitest/spy': 1.6.0 @@ -12158,6 +12844,24 @@ snapshots: - jest - vitest + '@storybook/test@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1))': + dependencies: + '@storybook/csf': 0.1.11 + '@storybook/instrumenter': 8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5))) + '@testing-library/dom': 10.1.0 + '@testing-library/jest-dom': 6.4.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1)) + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.1.0) + '@vitest/expect': 1.6.0 + '@vitest/spy': 1.6.0 + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + util: 0.12.5 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest + '@storybook/theming@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) @@ -12168,6 +12872,10 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@storybook/theming@8.2.8(storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)))': + dependencies: + storybook: 8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + '@storybook/types@8.1.6': dependencies: '@storybook/channels': 8.1.6 @@ -12370,6 +13078,17 @@ snapshots: '@tanstack/query-core': 5.36.1 react: 18.3.1 + '@testing-library/dom@10.1.0': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/runtime': 7.24.5 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.24.6 @@ -12392,7 +13111,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.5(vitest@2.0.5(@types/node@20.12.11)(sass@1.77.8)(terser@5.31.1))': + '@testing-library/jest-dom@6.4.5(vitest@2.0.5(@types/node@20.12.11)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)(terser@5.31.1))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.24.5 @@ -12415,6 +13134,10 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.1.0)': + dependencies: + '@testing-library/dom': 10.1.0 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 @@ -12886,6 +13609,12 @@ snapshots: '@vitest/utils': 1.3.1 chai: 4.4.1 + '@vitest/expect@1.6.0': + dependencies: + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + chai: 4.4.1 + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -13084,6 +13813,11 @@ snapshots: address@1.2.2: {} + adjust-sourcemap-loader@4.0.0: + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.3.0 + agent-base@6.0.2: dependencies: debug: 4.3.6 @@ -13323,6 +14057,8 @@ snapshots: big-integer@1.6.52: {} + big.js@5.2.2: {} + binary-extensions@2.3.0: {} bl@4.1.0: @@ -13623,6 +14359,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie-signature@1.0.6: {} @@ -13676,6 +14414,19 @@ snapshots: dependencies: type-fest: 1.4.0 + css-loader@7.1.2(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) + postcss-value-parser: 4.2.0 + semver: 7.6.2 + optionalDependencies: + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -13932,6 +14683,8 @@ snapshots: emoji-regex@9.2.2: {} + emojis-list@3.0.0: {} + encodeurl@1.0.2: {} end-of-stream@1.4.4: @@ -14073,6 +14826,13 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-register@3.5.0(esbuild@0.21.5): + dependencies: + debug: 4.3.6 + esbuild: 0.21.5 + transitivePeerDependencies: + - supports-color + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -14513,6 +15273,10 @@ snapshots: dependencies: reusify: 1.0.4 + fd-package-json@1.2.0: + dependencies: + walk-up-path: 3.0.1 + fetch-retry@5.0.6: {} fflate@0.8.2: {} @@ -14947,6 +15711,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + idb@7.1.1: {} ieee754@1.2.1: {} @@ -15413,6 +16181,12 @@ snapshots: loader-runner@4.3.0: {} + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -15538,6 +16312,10 @@ snapshots: dependencies: react: 18.3.1 + markdown-to-jsx@7.4.7(react@18.3.1): + dependencies: + react: 18.3.1 + mdn-data@2.0.28: {} mdn-data@2.0.30: {} @@ -16016,6 +16794,38 @@ snapshots: postcss: 8.4.38 ts-node: 10.9.2(@swc/core@1.5.7)(@types/node@20.12.11)(typescript@5.4.5) + postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + cosmiconfig: 9.0.0(typescript@5.4.5) + jiti: 1.21.0 + postcss: 8.4.38 + semver: 7.6.2 + optionalDependencies: + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + transitivePeerDependencies: + - typescript + + postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + + postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.0(postcss@8.4.38): + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + + postcss-modules-values@4.0.0(postcss@8.4.38): + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-nested@6.0.1(postcss@8.4.38): dependencies: postcss: 8.4.38 @@ -16340,6 +17150,8 @@ snapshots: dependencies: '@babel/runtime': 7.24.5 + regex-parser@2.3.0: {} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -16399,6 +17211,14 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve-url-loader@5.0.0: + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 8.4.38 + source-map: 0.6.1 + resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -16490,6 +17310,20 @@ snapshots: safer-buffer@2.1.2: {} + sass-loader@14.2.1(sass@1.77.8)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.77.8 + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + + sass-loader@16.0.0(sass@1.77.8)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.77.8 + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + sass@1.77.8: dependencies: chokidar: 3.6.0 @@ -16679,6 +17513,22 @@ snapshots: store2@2.14.3: {} + storybook-addon-sass-postcss@0.3.0(postcss@8.4.38)(sass@1.77.8)(typescript@5.4.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + '@storybook/node-logger': 8.1.6 + css-loader: 7.1.2(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + postcss: 8.4.38 + postcss-loader: 8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + sass: 1.77.8 + sass-loader: 14.2.1(sass@1.77.8)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + style-loader: 4.0.0(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + transitivePeerDependencies: + - '@rspack/core' + - node-sass + - sass-embedded + - typescript + - webpack + storybook@8.1.6(@babel/preset-env@7.24.6(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@storybook/cli': 8.1.6(@babel/preset-env@7.24.6(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -16691,6 +17541,42 @@ snapshots: - supports-color - utf-8-validate + storybook@8.2.8(@babel/preset-env@7.24.6(@babel/core@7.24.5)): + dependencies: + '@babel/core': 7.24.5 + '@babel/types': 7.24.6 + '@storybook/codemod': 8.2.8 + '@storybook/core': 8.2.8 + '@types/semver': 7.5.8 + '@yarnpkg/fslib': 2.10.3 + '@yarnpkg/libzip': 2.3.0 + chalk: 4.1.2 + commander: 6.2.1 + cross-spawn: 7.0.3 + detect-indent: 6.1.0 + envinfo: 7.13.0 + execa: 5.1.1 + fd-package-json: 1.2.0 + find-up: 5.0.0 + fs-extra: 11.2.0 + giget: 1.2.3 + globby: 14.0.1 + jscodeshift: 0.15.2(@babel/preset-env@7.24.6(@babel/core@7.24.5)) + leven: 3.1.0 + ora: 5.4.1 + prettier: 3.2.5 + prompts: 2.4.2 + semver: 7.6.2 + strip-json-comments: 3.1.1 + tempy: 3.1.0 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@babel/preset-env' + - bufferutil + - supports-color + - utf-8-validate + stream-shift@1.0.3: {} streamsearch@1.1.0: {} @@ -16793,6 +17679,10 @@ snapshots: strnum@1.0.5: {} + style-loader@4.0.0(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + style-to-js@1.1.12: dependencies: style-to-object: 1.0.6 @@ -16938,6 +17828,18 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 + terser-webpack-plugin@5.3.10(@swc/core@1.5.7)(esbuild@0.21.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.31.1 + webpack: 5.92.1(@swc/core@1.5.7)(esbuild@0.21.5) + optionalDependencies: + '@swc/core': 1.5.7 + esbuild: 0.21.5 + terser-webpack-plugin@5.3.10(@swc/core@1.5.7)(webpack@5.92.1(@swc/core@1.5.7)): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -17367,6 +18269,8 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + walk-up-path@3.0.1: {} + watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 @@ -17424,6 +18328,37 @@ snapshots: - esbuild - uglify-js + webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-attributes: 1.9.5(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(@swc/core@1.5.7)(esbuild@0.21.5)(webpack@5.92.1(@swc/core@1.5.7)(esbuild@0.21.5)) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 @@ -17654,8 +18589,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@8.17.0: {} - ws@8.18.0: {} xml-name-validator@5.0.0: {} From 77a534ad62b61ce3e7ec5eea6010694d6856a16b Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 10 Aug 2024 19:53:56 +0900 Subject: [PATCH 30/46] =?UTF-8?q?refactor:=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=ED=99=94=20(#ATR-602)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/core/src/core/token/index.ts | 0 .../design-system/packages/core/src/index.ts | 2 + .../packages/core/src/token/index.scss | 81 ++++++++++++++++++ .../packages/core/src/token/index.ts | 1 + .../core/src/token/variable/_index.scss | 84 +++++++++++++++++++ .../packages/core/src/token/variable/color.ts | 59 +++++++++++++ .../core/src/token/variable/font/index.ts | 3 + .../core/src/token/variable/font/leading.ts | 3 + .../core/src/token/variable/font/size.ts | 9 ++ .../core/src/token/variable/font/weight.ts | 3 + .../packages/core/src/token/variable/index.ts | 2 + 11 files changed, 247 insertions(+) delete mode 100644 packages/design-system/packages/core/src/core/token/index.ts create mode 100644 packages/design-system/packages/core/src/token/index.scss create mode 100644 packages/design-system/packages/core/src/token/index.ts create mode 100644 packages/design-system/packages/core/src/token/variable/_index.scss create mode 100644 packages/design-system/packages/core/src/token/variable/color.ts create mode 100644 packages/design-system/packages/core/src/token/variable/font/index.ts create mode 100644 packages/design-system/packages/core/src/token/variable/font/leading.ts create mode 100644 packages/design-system/packages/core/src/token/variable/font/size.ts create mode 100644 packages/design-system/packages/core/src/token/variable/font/weight.ts create mode 100644 packages/design-system/packages/core/src/token/variable/index.ts diff --git a/packages/design-system/packages/core/src/core/token/index.ts b/packages/design-system/packages/core/src/core/token/index.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/design-system/packages/core/src/index.ts b/packages/design-system/packages/core/src/index.ts index e69de29b..301d2d9f 100644 --- a/packages/design-system/packages/core/src/index.ts +++ b/packages/design-system/packages/core/src/index.ts @@ -0,0 +1,2 @@ +export * from './components' +export * from './token' diff --git a/packages/design-system/packages/core/src/token/index.scss b/packages/design-system/packages/core/src/token/index.scss new file mode 100644 index 00000000..9fbaa7ea --- /dev/null +++ b/packages/design-system/packages/core/src/token/index.scss @@ -0,0 +1,81 @@ +:root { + font-size: 16px; + + --attraction-ds-gray-000: #ffffff; + --attraction-ds-gray-050: #f4f6f8; + --attraction-ds-gray-100: #dde0e3; + --attraction-ds-gray-200: #c2c7cc; + --attraction-ds-gray-300: #a6adb5; + --attraction-ds-gray-400: #8a949e; + --attraction-ds-gray-500: #6f7a86; + --attraction-ds-gray-600: #58616a; + --attraction-ds-gray-700: #3c4249; + --attraction-ds-gray-800: #202427; + --attraction-ds-gray-900: #131517; + + --attraction-ds-red-050: #fbe9e9; + --attraction-ds-red-100: #f8d3d4; + --attraction-ds-red-200: #f2b0b1; + --attraction-ds-red-300: #eb8586; + --attraction-ds-red-400: #e14b4d; + --attraction-ds-red-500: #d22325; + --attraction-ds-red-600: #a61c1e; + --attraction-ds-red-700: #831617; + --attraction-ds-red-800: #561c1d; + --attraction-ds-red-900: #3b1617; + + --attraction-ds-yellow-050: #fff5e0; + --attraction-ds-yellow-100: #ffe7b8; + --attraction-ds-yellow-200: #ffda8f; + --attraction-ds-yellow-300: #ffbf3d; + --attraction-ds-yellow-400: #ffab01; + --attraction-ds-yellow-500: #eb9d00; + --attraction-ds-yellow-600: #c28200; + --attraction-ds-yellow-700: #8f6000; + --attraction-ds-yellow-800: #543d0e; + --attraction-ds-yellow-900: #3d2c0b; + + --attraction-ds-green-050: #e5faf1; + --attraction-ds-green-100: #b1f1d6; + --attraction-ds-green-200: #75e6b6; + --attraction-ds-green-300: #39db97; + --attraction-ds-green-400: #23be7d; + --attraction-ds-green-500: #1ea46c; + --attraction-ds-green-600: #198a5b; + --attraction-ds-green-700: #15704a; + --attraction-ds-green-800: #133d2b; + --attraction-ds-green-900: #0f2e21; + + --attraction-ds-blue-050: #e5effa; + --attraction-ds-blue-100: #c3daf3; + --attraction-ds-blue-200: #99bfeb; + --attraction-ds-blue-300: #77aae4; + --attraction-ds-blue-400: #3b84d8; + --attraction-ds-blue-500: #256bbb; + --attraction-ds-blue-600: #1d5391; + --attraction-ds-blue-700: #163f6f; + --attraction-ds-blue-800: #233851; + --attraction-ds-blue-900: #192739; + + --attraction-ds-dimmed-light: rgba(0, 0, 0, 0.3); + --attraction-ds-dimmed-dark: rgba(255, 255, 255, 0.2); + --attraction-ds-hovering-bg: rgba(0, 0, 0, 0.6); + + --attraction-ds-font-size-100: 0.75rem; // 12px + --attraction-ds-font-size-200: 0.875rem; // 14px + --attraction-ds-font-size-300: 1rem; // 16px + --attraction-ds-font-size-400: 1.125rem; // 18px + --attraction-ds-font-size-500: 1.25rem; // 20px + --attraction-ds-font-size-600: 1.5rem; // 24px + --attraction-ds-font-size-700: 1.75rem; // 28px + --attraction-ds-font-size-800: 2rem; // 32px + --attraction-ds-font-size-900: 3rem; // 48px + + --attraction-ds-font-weight-regular: 400; + --attraction-ds-font-weight-medium: 500; + --attraction-ds-font-weight-bold: 700; + + --attraction-ds-leading-tight: 100%; + --attraction-ds-leading-normal: 120%; + --attraction-ds-leading-relaxed: 160%; +} diff --git a/packages/design-system/packages/core/src/token/index.ts b/packages/design-system/packages/core/src/token/index.ts new file mode 100644 index 00000000..cf5f5f2d --- /dev/null +++ b/packages/design-system/packages/core/src/token/index.ts @@ -0,0 +1 @@ +export * as $variable from './variable' diff --git a/packages/design-system/packages/core/src/token/variable/_index.scss b/packages/design-system/packages/core/src/token/variable/_index.scss new file mode 100644 index 00000000..414a70b8 --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/_index.scss @@ -0,0 +1,84 @@ +$ds-gray-000: var(--attraction-ds-gray-000); +$ds-gray-050: var(--attraction-ds-gray-050); +$ds-gray-100: var(--attraction-ds-gray-100); +$ds-gray-200: var(--attraction-ds-gray-200); +$ds-gray-300: var(--attraction-ds-gray-300); +$ds-gray-400: var(--attraction-ds-gray-400); +$ds-gray-500: var(--attraction-ds-gray-500); +$ds-gray-600: var(--attraction-ds-gray-600); +$ds-gray-700: var(--attraction-ds-gray-700); +$ds-gray-800: var(--attraction-ds-gray-800); +$ds-gray-900: var(--attraction-ds-gray-900); + +$ds-red-050: var(--attraction-ds-red-050); +$ds-red-100: var(--attraction-ds-red-100); +$ds-red-200: var(--attraction-ds-red-200); +$ds-red-300: var(--attraction-ds-red-300); +$ds-red-400: var(--attraction-ds-red-400); +$ds-red-500: var(--attraction-ds-red-500); +$ds-red-600: var(--attraction-ds-red-600); +$ds-red-700: var(--attraction-ds-red-700); +$ds-red-800: var(--attraction-ds-red-800); +$ds-red-900: var(--attraction-ds-red-900); + +$ds-yellow-050: var(--attraction-ds-yellow-050); +$ds-yellow-100: var(--attraction-ds-yellow-100); +$ds-yellow-200: var(--attraction-ds-yellow-200); +$ds-yellow-300: var(--attraction-ds-yellow-300); +$ds-yellow-400: var(--attraction-ds-yellow-400); +$ds-yellow-500: var(--attraction-ds-yellow-500); +$ds-yellow-600: var(--attraction-ds-yellow-600); +$ds-yellow-700: var(--attraction-ds-yellow-700); +$ds-yellow-800: var(--attraction-ds-yellow-800); +$ds-yellow-900: var(--attraction-ds-yellow-900); + +$ds-green-050: var(--attraction-ds-green-050); +$ds-green-100: var(--attraction-ds-green-100); +$ds-green-200: var(--attraction-ds-green-200); +$ds-green-300: var(--attraction-ds-green-300); +$ds-green-400: var(--attraction-ds-green-400); +$ds-green-500: var(--attraction-ds-green-500); +$ds-green-600: var(--attraction-ds-green-600); +$ds-green-700: var(--attraction-ds-green-700); +$ds-green-800: var(--attraction-ds-green-800); +$ds-green-900: var(--attraction-ds-green-900); + +$ds-blue-050: var(--attraction-ds-blue-050); +$ds-blue-100: var(--attraction-ds-blue-100); +$ds-blue-200: var(--attraction-ds-blue-200); +$ds-blue-300: var(--attraction-ds-blue-300); +$ds-blue-400: var(--attraction-ds-blue-400); +$ds-blue-500: var(--attraction-ds-blue-500); +$ds-blue-600: var(--attraction-ds-blue-600); +$ds-blue-700: var(--attraction-ds-blue-700); +$ds-blue-800: var(--attraction-ds-blue-800); +$ds-blue-900: var(--attraction-ds-blue-900); + +$ds-font-size-100: var(--attraction-ds-font-size-100); +$ds-font-size-200: var(--attraction-ds-font-size-200); +$ds-font-size-300: var(--attraction-ds-font-size-300); +$ds-font-size-400: var(--attraction-ds-font-size-400); +$ds-font-size-500: var(--attraction-ds-font-size-500); +$ds-font-size-600: var(--attraction-ds-font-size-600); +$ds-font-size-700: var(--attraction-ds-font-size-700); +$ds-font-size-800: var(--attraction-ds-font-size-800); +$ds-font-size-900: var(--attraction-ds-font-size-900); + +$ds-font-weight-regular: var(--attraction-ds-font-weight-regular); +$ds-font-weight-medium: var(--attraction-ds-font-weight-medium); +$ds-font-weight-bold: var(--attraction-ds-font-weight-bold); + +$ds-leading-tight: var(--attraction-ds-leading-tight); +$ds-leading-normal: var(--attraction-ds-leading-normal); +$ds-leading-relaxed: var(--attraction-ds-leading-relaxed); + +$ds-dimmed-light: var(--attraction-ds-dimmed-light); +$ds-dimmed-dark: var(--attraction-ds-dimmed-dark); +$ds-hovering-bg: var(--attraction-ds-hovering-bg); + +@mixin transition-colors() { + transition-property: color, background-color, border-color, + text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} diff --git a/packages/design-system/packages/core/src/token/variable/color.ts b/packages/design-system/packages/core/src/token/variable/color.ts new file mode 100644 index 00000000..e2fa8014 --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/color.ts @@ -0,0 +1,59 @@ +export const gray000 = 'var(--attraction-ds-gray-000)' +export const gray050 = 'var(--attraction-ds-gray-050)' +export const gray100 = 'var(--attraction-ds-gray-100)' +export const gray200 = 'var(--attraction-ds-gray-200)' +export const gray300 = 'var(--attraction-ds-gray-300)' +export const gray400 = 'var(--attraction-ds-gray-400)' +export const gray500 = 'var(--attraction-ds-gray-500)' +export const gray600 = 'var(--attraction-ds-gray-600)' +export const gray700 = 'var(--attraction-ds-gray-700)' +export const gray800 = 'var(--attraction-ds-gray-800)' +export const gray900 = 'var(--attraction-ds-gray-900)' + +export const red050 = 'var(--attraction-ds-red-050)' +export const red100 = 'var(--attraction-ds-red-100)' +export const red200 = 'var(--attraction-ds-red-200)' +export const red300 = 'var(--attraction-ds-red-300)' +export const red400 = 'var(--attraction-ds-red-400)' +export const red500 = 'var(--attraction-ds-red-500)' +export const red600 = 'var(--attraction-ds-red-600)' +export const red700 = 'var(--attraction-ds-red-700)' +export const red800 = 'var(--attraction-ds-red-800)' +export const red900 = 'var(--attraction-ds-red-900)' + +export const yellow050 = 'var(--attraction-ds-yellow-050)' +export const yellow100 = 'var(--attraction-ds-yellow-100)' +export const yellow200 = 'var(--attraction-ds-yellow-200)' +export const yellow300 = 'var(--attraction-ds-yellow-300)' +export const yellow400 = 'var(--attraction-ds-yellow-400)' +export const yellow500 = 'var(--attraction-ds-yellow-500)' +export const yellow600 = 'var(--attraction-ds-yellow-600)' +export const yellow700 = 'var(--attraction-ds-yellow-700)' +export const yellow800 = 'var(--attraction-ds-yellow-800)' +export const yellow900 = 'var(--attraction-ds-yellow-900)' + +export const green100 = 'var(--attraction-ds-green-050)' +export const green050 = 'var(--attraction-ds-green-100)' +export const green200 = 'var(--attraction-ds-green-200)' +export const green300 = 'var(--attraction-ds-green-300)' +export const green400 = 'var(--attraction-ds-green-400)' +export const green500 = 'var(--attraction-ds-green-500)' +export const green600 = 'var(--attraction-ds-green-600)' +export const green700 = 'var(--attraction-ds-green-700)' +export const green800 = 'var(--attraction-ds-green-800)' +export const green900 = 'var(--attraction-ds-green-900)' + +export const blue050 = 'var(--attraction-ds-blue-050)' +export const blue100 = 'var(--attraction-ds-blue-100)' +export const blue200 = 'var(--attraction-ds-blue-200)' +export const blue300 = 'var(--attraction-ds-blue-300)' +export const blue400 = 'var(--attraction-ds-blue-400)' +export const blue500 = 'var(--attraction-ds-blue-500)' +export const blue600 = 'var(--attraction-ds-blue-600)' +export const blue700 = 'var(--attraction-ds-blue-700)' +export const blue800 = 'var(--attraction-ds-blue-800)' +export const blue900 = 'var(--attraction-ds-blue-900)' + +export const dimmedLight = 'var(--attraction-ds-dimmed-light)' +export const dimmedDark = 'var(--attraction-ds-dimmed-dark)' +export const hoveringBg = 'var(--attraction-ds-hovering-bg)' diff --git a/packages/design-system/packages/core/src/token/variable/font/index.ts b/packages/design-system/packages/core/src/token/variable/font/index.ts new file mode 100644 index 00000000..c824974b --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/font/index.ts @@ -0,0 +1,3 @@ +export * from './size' +export * as weight from './weight' +export * as leading from './leading' diff --git a/packages/design-system/packages/core/src/token/variable/font/leading.ts b/packages/design-system/packages/core/src/token/variable/font/leading.ts new file mode 100644 index 00000000..67e01b1f --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/font/leading.ts @@ -0,0 +1,3 @@ +export const tight = 'var(--attraction-ds-leading-tight)' +export const normal = 'var(--attraction-ds-leading-normal)' +export const relaxed = 'var(--attraction-ds-leading-relaxed)' diff --git a/packages/design-system/packages/core/src/token/variable/font/size.ts b/packages/design-system/packages/core/src/token/variable/font/size.ts new file mode 100644 index 00000000..62145bd2 --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/font/size.ts @@ -0,0 +1,9 @@ +export const size100 = 'var(--attraction-ds-font-size-100)' +export const size200 = 'var(--attraction-ds-font-size-200)' +export const size300 = 'var(--attraction-ds-font-size-300)' +export const size400 = 'var(--attraction-ds-font-size-400)' +export const size500 = 'var(--attraction-ds-font-size-500)' +export const size600 = 'var(--attraction-ds-font-size-600)' +export const size700 = 'var(--attraction-ds-font-size-700)' +export const size800 = 'var(--attraction-ds-font-size-800)' +export const size900 = 'var(--attraction-ds-font-size-900)' diff --git a/packages/design-system/packages/core/src/token/variable/font/weight.ts b/packages/design-system/packages/core/src/token/variable/font/weight.ts new file mode 100644 index 00000000..6a05d100 --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/font/weight.ts @@ -0,0 +1,3 @@ +export const regular = 'var(--attraction-ds-font-weight-regular)' +export const medium = 'var(--attraction-ds-font-weight-medium)' +export const bold = 'var(--attraction-ds-font-weight-bold)' diff --git a/packages/design-system/packages/core/src/token/variable/index.ts b/packages/design-system/packages/core/src/token/variable/index.ts new file mode 100644 index 00000000..f40b93f3 --- /dev/null +++ b/packages/design-system/packages/core/src/token/variable/index.ts @@ -0,0 +1,2 @@ +export * as color from './color' +export * as font from './font' From 312a55f6c207a7cb7a6792bd0a1fac689b547684 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 10 Aug 2024 19:54:53 +0900 Subject: [PATCH 31/46] =?UTF-8?q?refactor:=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(#A?= =?UTF-8?q?TR-603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/button/Button.stories.tsx | 436 +++++++++++++++ .../src/components/button/Button.style.ts | 46 ++ .../core/src/components/button/Button.tsx | 30 ++ .../core/src/components/button/_index.scss | 507 ++++++++++++++++++ .../core/src/components/button/index.ts | 1 + .../packages/core/src/components/index.scss | 1 + .../packages/core/src/components/index.ts | 1 + 7 files changed, 1022 insertions(+) create mode 100644 packages/design-system/packages/core/src/components/button/Button.stories.tsx create mode 100644 packages/design-system/packages/core/src/components/button/Button.style.ts create mode 100644 packages/design-system/packages/core/src/components/button/Button.tsx create mode 100644 packages/design-system/packages/core/src/components/button/_index.scss create mode 100644 packages/design-system/packages/core/src/components/index.scss diff --git a/packages/design-system/packages/core/src/components/button/Button.stories.tsx b/packages/design-system/packages/core/src/components/button/Button.stories.tsx new file mode 100644 index 00000000..89e30c80 --- /dev/null +++ b/packages/design-system/packages/core/src/components/button/Button.stories.tsx @@ -0,0 +1,436 @@ +/* eslint-disable tailwindcss/no-custom-classname */ +import React from 'react' +import type { Meta, StoryObj } from '@storybook/react' +import Button from './Button' +import { $variable } from '../../token' + +const meta: Meta = { + title: 'Buttons/Button', + component: Button, + tags: ['autodocs'], + parameters: { + componentSubtitle: 'Attraction에서 사용되는 버튼 컴포넌트입니다.', + }, + argTypes: { + variant: { + description: '버튼의 형태를 지정합니다.', + control: 'select', + options: ['default', 'light', 'filled', 'subtle', 'hovering'], + table: { + type: { + summary: ['default', 'light', 'filled', 'subtle', 'hovering'].join( + ' | ', + ), + }, + defaultValue: { summary: 'default' }, + }, + }, + color: { + description: '버튼의 색상을 지정합니다.', + control: 'select', + options: ['gray', 'red', 'yellow', 'green', 'blue'], + table: { + type: { + summary: ['gray', 'red', 'yellow', 'green', 'blue'].join(' | '), + }, + defaultValue: { summary: 'gray' }, + }, + }, + size: { + description: '버튼의 크기를 지정합니다.', + control: 'select', + options: ['xs', 'sm', 'md', 'lg', 'xl'], + table: { + type: { summary: ['xs', 'sm', 'md', 'lg', 'xl'].join(' | ') }, + defaultValue: { summary: 'md' }, + }, + }, + round: { + description: '버튼의 모서리 형태를 지정합니다.', + control: 'select', + options: ['xs', 'sm', 'md', 'lg', 'xl', 'full'], + table: { + type: { summary: ['xs', 'sm', 'md', 'lg', 'xl', 'full'].join(' | ') }, + defaultValue: { summary: 'sm' }, + }, + }, + disabled: { + description: '버튼의 비활성화 상태를 지정합니다.', + control: 'boolean', + table: { + type: { summary: 'boolean' }, + defaultValue: { summary: 'false' }, + }, + }, + children: { + description: '버튼에 표시할 내용을 입력합니다.', + control: 'text', + table: { + type: { summary: 'ReactNode' }, + defaultValue: { summary: 'Button' }, + }, + }, + }, +} + +export default meta + +type Story = StoryObj + +const style = { + display: 'flex', + justifyContent: 'space-around', + alignItems: 'center', + padding: '30px', +} + +export const ButtonDefault: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'default', + children: 'Button', + }, +} + +export const ButtonLightGray: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'light', + color: 'gray', + children: 'Button', + }, +} + +export const ButtonLightRed: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'light', + color: 'red', + children: 'Button', + }, +} + +export const ButtonLightYellow: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'light', + color: 'yellow', + children: 'Button', + }, +} + +export const ButtonLightGreen: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'light', + color: 'green', + children: 'Button', + }, +} + +export const ButtonLightBlue: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'light', + color: 'blue', + children: 'Button', + }, +} + +export const ButtonFilledGray: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'filled', + color: 'gray', + children: 'Button', + }, +} + +export const ButtonFilledRed: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'filled', + color: 'red', + children: 'Button', + }, +} + +export const ButtonFilledYellow: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'filled', + color: 'yellow', + children: 'Button', + }, +} + +export const ButtonFilledGreen: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'filled', + color: 'green', + children: 'Button', + }, +} + +export const ButtonFilledBlue: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'filled', + color: 'blue', + children: 'Button', + }, +} + +export const ButtonSubtleGray: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'subtle', + color: 'gray', + children: 'Button', + }, +} + +export const ButtonSubtleRed: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'subtle', + color: 'red', + children: 'Button', + }, +} + +export const ButtonSubtleYellow: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'subtle', + color: 'yellow', + children: 'Button', + }, +} + +export const ButtonSubtleGreen: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'subtle', + color: 'green', + children: 'Button', + }, +} + +export const ButtonSubtleBlue: Story = { + render: (props) => ( +
+
+
+
+
+
+ ), + args: { + variant: 'subtle', + color: 'blue', + children: 'Button', + }, +} diff --git a/packages/design-system/packages/core/src/components/button/Button.style.ts b/packages/design-system/packages/core/src/components/button/Button.style.ts new file mode 100644 index 00000000..908d1f5e --- /dev/null +++ b/packages/design-system/packages/core/src/components/button/Button.style.ts @@ -0,0 +1,46 @@ +import { cva } from 'class-variance-authority' + +const buttonClassName = 'ds-button' +const getButtonModifier = (name: string) => `${buttonClassName}--${name}` + +export const variants = { + variant: { + default: '', + light: getButtonModifier('light'), + filled: getButtonModifier('filled'), + subtle: getButtonModifier('subtle'), + hovering: getButtonModifier('hovering'), + }, + color: { + gray: getButtonModifier('gray'), + red: getButtonModifier('red'), + yellow: getButtonModifier('yellow'), + green: getButtonModifier('green'), + blue: getButtonModifier('blue'), + }, + size: { + xs: getButtonModifier('size-xs'), + sm: getButtonModifier('size-sm'), + md: getButtonModifier('size-md'), + lg: getButtonModifier('size-lg'), + xl: getButtonModifier('size-xl'), + }, + round: { + xs: getButtonModifier('round-xs'), + sm: getButtonModifier('round-sm'), + md: getButtonModifier('round-md'), + lg: getButtonModifier('round-lg'), + xl: getButtonModifier('round-xl'), + full: getButtonModifier('round-full'), + }, +} + +export const buttonVariants = cva(buttonClassName, { + variants, + defaultVariants: { + variant: 'default', + color: 'gray', + size: 'md', + round: 'sm', + }, +}) diff --git a/packages/design-system/packages/core/src/components/button/Button.tsx b/packages/design-system/packages/core/src/components/button/Button.tsx new file mode 100644 index 00000000..fa701253 --- /dev/null +++ b/packages/design-system/packages/core/src/components/button/Button.tsx @@ -0,0 +1,30 @@ +import React from 'react' +import { cn } from '@attraction/utils' +import { buttonVariants, variants } from './Button.style' + +type ButtonVariants = typeof variants + +interface ButtonProps + extends React.DetailedHTMLProps< + React.ButtonHTMLAttributes, + HTMLButtonElement + > { + variant?: keyof ButtonVariants['variant'] + color?: keyof ButtonVariants['color'] + size?: keyof ButtonVariants['size'] + round?: keyof ButtonVariants['round'] +} + +const Button = React.forwardRef( + ({ type, className, variant, color, size, round, ...props }, ref) => ( + + )} + + ) +} + +describe('CopyButton.tsx', () => { + test('copy 버튼을 클릭했을 때 status 값이 올바르게 변경됨', async () => { + const onSuccess = vi.fn() + const onFailed = vi.fn() + + render() + + const user = userEvent.setup() + const button = screen.getByRole('button', { name: DEFAULT_TXT }) + + user.click(button) + user.click(button) + user.click(button) + + expect(button.textContent).toBe(DEFAULT_TXT) + + await waitFor(() => expect(button.textContent).toBe(SUCCESS_TXT)) + + await waitFor(() => expect(button.textContent).toBe(DEFAULT_TXT), { + timeout: DEFAULT_DELAY + 10, + }) + + expect(onSuccess).toHaveBeenCalledOnce() + expect(onFailed).not.toHaveBeenCalled() + }) + test('복사에 성공했을 시 onSuccess 함수가 실행됨', async () => { + const onSuccess = vi.fn() + const onFailed = vi.fn() + + render() + + const user = userEvent.setup() + const button = screen.getByRole('button', { name: DEFAULT_TXT }) + + user.click(button) + user.click(button) + user.click(button) + + expect(button.textContent).toBe(DEFAULT_TXT) + + await waitFor(() => expect(onSuccess).toHaveBeenCalled()) + + expect(button.textContent).toBe(SUCCESS_TXT) + + await waitFor(() => expect(button.textContent).toBe(DEFAULT_TXT), { + timeout: DEFAULT_DELAY + 10, + }) + + expect(onSuccess).toHaveBeenCalledOnce() + expect(onFailed).not.toHaveBeenCalled() + }) + test('복사에 실패했을 시 onFailed 함수가 실행됨', async () => { + Object.defineProperty(navigator.clipboard, 'writeText', { + writable: false, + value: () => { + throw new Error('error for test') + }, + }) + + const onSuccess = vi.fn() + const onFailed = vi.fn() + + render() + + const user = userEvent.setup() + const button = screen.getByRole('button', { name: DEFAULT_TXT }) + + user.click(button) + + await waitFor(() => expect(onFailed).toHaveBeenCalled()) + + expect(onSuccess).not.toHaveBeenCalled() + expect(onFailed).toHaveBeenCalledOnce() + }) +}) diff --git a/packages/design-system/packages/core/src/components/copy-button/CopyButton.stories.tsx b/packages/design-system/packages/core/src/components/copy-button/CopyButton.stories.tsx new file mode 100644 index 00000000..538f39aa --- /dev/null +++ b/packages/design-system/packages/core/src/components/copy-button/CopyButton.stories.tsx @@ -0,0 +1,74 @@ +import React from 'react' +import type { Meta, StoryObj } from '@storybook/react' +import { $variable } from '../../token' +import { Button } from '../button' +import CopyButton from './CopyButton' + +const meta: Meta = { + title: 'Buttons/CopyButton', + component: CopyButton, + tags: ['autodocs'], + parameters: { + componentSubtitle: 'Attraction에서 사용되는 버튼 컴포넌트입니다.', + }, + argTypes: { + value: { + description: '복사할 텍스트를 지정합니다.', + control: 'text', + table: { + type: { summary: 'string' }, + }, + }, + delay: { + description: + '복사 성공 시 status가 다시 원상복구 되는 시간(ms)을 지정합니다.', + control: 'number', + table: { + type: { summary: 'number' }, + defaultValue: { summary: '800' }, + }, + }, + children: { + description: + 'render props 패턴을 통해 상태를 위임받을 버튼 컴포넌트를 렌더링합니다.', + control: 'text', + table: { + type: { summary: '({ status, copy }) => ReactNode' }, + }, + }, + }, +} + +export default meta + +type Story = StoryObj + +export const CopyButtonDefault: Story = { + render: ({ value, delay, onSuccess, onFailed }) => ( +
+ + {({ status, copy }) => ( + + )} + +
+ ), +} diff --git a/packages/design-system/packages/core/src/components/copy-button/CopyButton.tsx b/packages/design-system/packages/core/src/components/copy-button/CopyButton.tsx new file mode 100644 index 00000000..e7c917df --- /dev/null +++ b/packages/design-system/packages/core/src/components/copy-button/CopyButton.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import { useTimeout } from '@attraction/ds-hooks' +import { copy as copyToClipboard } from '@attraction/utils' + +interface CopyButtonState { + status: boolean + copy: () => Promise +} + +interface CopyButtonProps { + value: string + children: (params: CopyButtonState) => React.JSX.Element + delay?: number + onSuccess?: () => void + onFailed?: () => void +} + +export default function CopyButton({ + value, + delay = 800, + children, + onSuccess, + onFailed, +}: CopyButtonProps) { + const { start } = useTimeout() + const [status, setStatus] = React.useState(false) + + const copy = React.useCallback(async () => { + try { + const success = await copyToClipboard(value) + if (!success) { + throw new Error('failed to copy') + } + start(() => setStatus(false), delay) + setStatus(true) + onSuccess?.() + } catch { + onFailed?.() + } + }, [value, delay, onSuccess, onFailed]) + + return children({ status, copy }) +} diff --git a/packages/design-system/packages/core/src/components/copy-button/index.ts b/packages/design-system/packages/core/src/components/copy-button/index.ts new file mode 100644 index 00000000..1a8d5a70 --- /dev/null +++ b/packages/design-system/packages/core/src/components/copy-button/index.ts @@ -0,0 +1 @@ +export { default as CopyButton } from './CopyButton' diff --git a/packages/design-system/packages/core/src/components/index.ts b/packages/design-system/packages/core/src/components/index.ts index 14757e72..3b6f4e74 100644 --- a/packages/design-system/packages/core/src/components/index.ts +++ b/packages/design-system/packages/core/src/components/index.ts @@ -1 +1,2 @@ export * from './button' +export * from './copy-button' From 4a65193f5e5e6e8655c6f6b6849df7b15d3da308 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sat, 10 Aug 2024 20:24:01 +0900 Subject: [PATCH 33/46] =?UTF-8?q?refactor:=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EB=B3=84=20=EC=8A=A4=ED=83=80=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20(#ATR-603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/components/button/_index.scss | 704 ++++++++++-------- 1 file changed, 388 insertions(+), 316 deletions(-) diff --git a/packages/design-system/packages/core/src/components/button/_index.scss b/packages/design-system/packages/core/src/components/button/_index.scss index d42264fd..ea4c3800 100644 --- a/packages/design-system/packages/core/src/components/button/_index.scss +++ b/packages/design-system/packages/core/src/components/button/_index.scss @@ -53,396 +53,468 @@ margin-left: 0.25rem; } - &--light { - border: none; - - &.ds-button--gray { - background-color: variable.$ds-gray-050; - } - &.ds-button--gray:focus, - &.ds-button--gray:hover, - &.ds-button--gray:active { - background-color: variable.$ds-gray-100; - } - &.ds-button--gray:disabled { - background-color: variable.$ds-gray-050; - } - .dark &.ds-button--gray { - background-color: variable.$ds-gray-700; - } - .dark &.ds-button--gray:focus, - .dark &.ds-button--gray:hover, - .dark &.ds-button--gray:active { - background-color: variable.$ds-gray-600; - } - .dark &.ds-button--gray:disabled { - background-color: variable.$ds-gray-700; - } + &--red { + color: variable.$ds-red-400; - &.ds-button--red { - color: variable.$ds-red-400; - background-color: variable.$ds-red-050; - } - &.ds-button--red:focus, - &.ds-button--red:hover, - &.ds-button--red:active { - background-color: variable.$ds-red-100; - } - &.ds-button--red:disabled { - color: variable.$ds-red-200; - background-color: variable.$ds-red-050; - } - .dark &.ds-button--red { + .dark & { color: variable.$ds-red-300; - background-color: variable.$ds-red-800; } - .dark &.ds-button--red:focus, - .dark &.ds-button--red:hover, - .dark &.ds-button--red:active { - background-color: variable.$ds-red-700; + &:disabled { + color: variable.$ds-red-200; } - .dark &.ds-button--red:disabled { + .dark &:disabled { color: variable.$ds-red-600; - background-color: variable.$ds-red-800; } + } + &--yellow { + color: variable.$ds-yellow-400; - &.ds-button--yellow { - color: variable.$ds-yellow-400; - background-color: variable.$ds-yellow-050; - } - &.ds-button--yellow:focus, - &.ds-button--yellow:hover, - &.ds-button--yellow:active { - background-color: variable.$ds-yellow-100; - } - &.ds-button--yellow:disabled { - color: variable.$ds-yellow-200; - background-color: variable.$ds-yellow-050; - } - .dark &.ds-button--yellow { + .dark & { color: variable.$ds-yellow-300; - background-color: variable.$ds-yellow-800; } - .dark &.ds-button--yellow:focus, - .dark &.ds-button--yellow:hover, - .dark &.ds-button--yellow:active { - background-color: variable.$ds-yellow-700; + &:disabled { + color: variable.$ds-yellow-200; } - .dark &.ds-button--yellow:disabled { + .dark &:disabled { color: variable.$ds-yellow-700; - background-color: variable.$ds-yellow-800; } + } + &--green { + color: variable.$ds-green-400; - &.ds-button--green { - color: variable.$ds-green-400; - background-color: variable.$ds-green-050; - } - &.ds-button--green:focus, - &.ds-button--green:hover, - &.ds-button--green:active { - background-color: variable.$ds-green-100; - } - &.ds-button--green:disabled { - color: variable.$ds-green-200; - background-color: variable.$ds-green-050; - } - .dark &.ds-button--green { + .dark & { color: variable.$ds-green-300; - background-color: variable.$ds-green-800; } - .dark &.ds-button--green:focus, - .dark &.ds-button--green:hover, - .dark &.ds-button--green:active { - background-color: variable.$ds-green-700; + &:disabled { + color: variable.$ds-green-200; } - .dark &.ds-button--green:disabled { - color: variable.$ds-green-700; - background-color: variable.$ds-green-800; + .dark &:disabled { + color: variable.$ds-green-600; } + } + &--blue { + color: variable.$ds-blue-400; - &.ds-button--blue { - color: variable.$ds-blue-400; - background-color: variable.$ds-blue-050; - } - &.ds-button--blue:focus, - &.ds-button--blue:hover, - &.ds-button--blue:active { - background-color: variable.$ds-blue-100; - } - &.ds-button--blue:disabled { - color: variable.$ds-blue-200; - background-color: variable.$ds-blue-050; - } - .dark &.ds-button--blue { + .dark & { color: variable.$ds-blue-300; - background-color: variable.$ds-blue-800; } - .dark &.ds-button--blue:focus, - .dark &.ds-button--blue:hover, - .dark &.ds-button--blue:active { - background-color: variable.$ds-blue-700; + &:disabled { + color: variable.$ds-blue-200; } - .dark &.ds-button--blue:disabled { + .dark &:disabled { color: variable.$ds-blue-600; - background-color: variable.$ds-blue-800; } } - &--filled { + &--light { border: none; &.ds-button--gray { - color: variable.$ds-gray-050; - background-color: variable.$ds-gray-700; - } - &.ds-button--gray:focus, - &.ds-button--gray:hover, - &.ds-button--gray:active { - background-color: variable.$ds-gray-600; - } - &.ds-button--gray:disabled { - color: variable.$ds-gray-400; background-color: variable.$ds-gray-050; - } - .dark &.ds-button--gray { - color: variable.$ds-gray-700; - background-color: variable.$ds-gray-050; - } - .dark &.ds-button--gray:focus, - .dark &.ds-button--gray:hover, - .dark &.ds-button--gray:active { - background-color: variable.$ds-gray-200; - } - .dark &.ds-button--gray:disabled { - color: variable.$ds-gray-500; - background-color: variable.$ds-gray-700; - } - &.ds-button--red, - .dark &.ds-button--red { - color: variable.$ds-gray-000; - background-color: variable.$ds-red-400; - } - &.ds-button--red:focus, - &.ds-button--red:hover, - &.ds-button--red:active, - .dark &.ds-button--red:hover, - .dark &.ds-button--red:hover, - .dark &.ds-button--red:active { - background-color: variable.$ds-red-500; + &:focus, + &:hover, + &:active { + background-color: variable.$ds-gray-100; + } + &:disabled { + background-color: variable.$ds-gray-050; + } + .dark & { + background-color: variable.$ds-gray-700; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-gray-600; + } + .dark &:disabled { + background-color: variable.$ds-gray-700; + } } - &.ds-button--red:disabled { - color: variable.$ds-red-200; + + &.ds-button--red { + color: variable.$ds-red-400; background-color: variable.$ds-red-050; - } - .dark &.ds-button--red:disabled { - color: variable.$ds-red-600; - background-color: variable.$ds-red-800; - } - &.ds-button--yellow, - .dark &.ds-button--yellow { - color: variable.$ds-gray-000; - background-color: variable.$ds-yellow-400; + &:focus, + &:hover, + &:active { + background-color: variable.$ds-red-100; + } + &:disabled { + color: variable.$ds-red-200; + background-color: variable.$ds-red-050; + } + .dark & { + color: variable.$ds-red-300; + background-color: variable.$ds-red-800; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-red-700; + } + .dark &:disabled { + color: variable.$ds-red-600; + background-color: variable.$ds-red-800; + } } - &.ds-button--yellow:focus, - &.ds-button--yellow:hover, - &.ds-button--yellow:active, - .dark &.ds-button--yellow:hover, - .dark &.ds-button--yellow:hover, - .dark &.ds-button--yellow:active { - background-color: variable.$ds-yellow-500; - } - &.ds-button--yellow:disabled { - color: variable.$ds-yellow-200; + + &.ds-button--yellow { + color: variable.$ds-yellow-400; background-color: variable.$ds-yellow-050; - } - .dark &.ds-button--yellow:disabled { - color: variable.$ds-yellow-700; - background-color: variable.$ds-yellow-800; - } - &.ds-button--green, - .dark &.ds-button--green { - color: variable.$ds-gray-000; - background-color: variable.$ds-green-400; + &:focus, + &:hover, + &:active { + background-color: variable.$ds-yellow-100; + } + &:disabled { + color: variable.$ds-yellow-200; + background-color: variable.$ds-yellow-050; + } + .dark & { + color: variable.$ds-yellow-300; + background-color: variable.$ds-yellow-800; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-yellow-700; + } + .dark &:disabled { + color: variable.$ds-yellow-700; + background-color: variable.$ds-yellow-800; + } } - &.ds-button--green:focus, - &.ds-button--green:hover, - &.ds-button--green:active, - .dark &.ds-button--green:hover, - .dark &.ds-button--green:hover, - .dark &.ds-button--green:active { - background-color: variable.$ds-green-500; - } - &.ds-button--green:disabled { - color: variable.$ds-green-200; + + &.ds-button--green { + color: variable.$ds-green-400; background-color: variable.$ds-green-050; - } - .dark &.ds-button--green:disabled { - color: variable.$ds-green-700; - background-color: variable.$ds-green-800; - } - &.ds-button--blue, - .dark &.ds-button--blue { - color: variable.$ds-gray-000; - background-color: variable.$ds-blue-400; - } - &.ds-button--blue:focus, - &.ds-button--blue:hover, - &.ds-button--blue:active, - .dark &.ds-button--blue:hover, - .dark &.ds-button--blue:hover, - .dark &.ds-button--blue:active { - background-color: variable.$ds-blue-500; + &:focus, + &:hover, + &:active { + background-color: variable.$ds-green-100; + } + &:disabled { + color: variable.$ds-green-200; + background-color: variable.$ds-green-050; + } + .dark & { + color: variable.$ds-green-300; + background-color: variable.$ds-green-800; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-green-700; + } + .dark &:disabled { + color: variable.$ds-green-700; + background-color: variable.$ds-green-800; + } } - &.ds-button--blue:disabled { - color: variable.$ds-blue-200; + + &.ds-button--blue { + color: variable.$ds-blue-400; background-color: variable.$ds-blue-050; - } - .dark &.ds-button--blue:disabled { - color: variable.$ds-blue-600; - background-color: variable.$ds-blue-800; + + &:focus, + &:hover, + &:active { + background-color: variable.$ds-blue-100; + } + &:disabled { + color: variable.$ds-blue-200; + background-color: variable.$ds-blue-050; + } + .dark & { + color: variable.$ds-blue-300; + background-color: variable.$ds-blue-800; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-blue-700; + } + .dark &:disabled { + color: variable.$ds-blue-600; + background-color: variable.$ds-blue-800; + } } } - &--subtle { + &--filled { border: none; &.ds-button--gray { - color: variable.$ds-gray-700; - background-color: transparent; - } - .dark &.ds-button--gray { color: variable.$ds-gray-050; - background-color: transparent; - } - &.ds-button--gray:focus, - &.ds-button--gray:hover, - &.ds-button--gray:active { - background-color: variable.$ds-gray-100; - } - .dark &.ds-button--gray:hover, - .dark &.ds-button--gray:hover, - .dark &.ds-button--gray:active { background-color: variable.$ds-gray-700; - } - &.ds-button--gray:disabled { - color: variable.$ds-gray-400; - background-color: transparent; - } - .dark &.ds-button--gray:disabled { - color: variable.$ds-gray-500; - background-color: transparent; + + &:focus, + &:hover, + &:active { + background-color: variable.$ds-gray-600; + } + &:disabled { + color: variable.$ds-gray-400; + background-color: variable.$ds-gray-050; + } + .dark & { + color: variable.$ds-gray-700; + background-color: variable.$ds-gray-050; + } + .dark &:focus, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-gray-200; + } + .dark &:disabled { + color: variable.$ds-gray-500; + background-color: variable.$ds-gray-700; + } } &.ds-button--red { - color: variable.$ds-red-400; - background-color: transparent; + &, + .dark & { + color: variable.$ds-gray-000; + background-color: variable.$ds-red-400; + } + &:focus, + &:hover, + &:active, + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-red-500; + } + &:disabled { + color: variable.$ds-red-200; + background-color: variable.$ds-red-050; + } + .dark &:disabled { + color: variable.$ds-red-600; + background-color: variable.$ds-red-800; + } } - .dark &.ds-button--red { - color: variable.$ds-red-300; - background-color: transparent; + + &.ds-button--yellow { + &, + .dark & { + color: variable.$ds-gray-000; + background-color: variable.$ds-yellow-400; + } + &:focus, + &:hover, + &:active, + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-yellow-500; + } + &:disabled { + color: variable.$ds-yellow-200; + background-color: variable.$ds-yellow-050; + } + .dark &:disabled { + color: variable.$ds-yellow-700; + background-color: variable.$ds-yellow-800; + } } - &.ds-button--red:focus, - &.ds-button--red:hover, - &.ds-button--red:active { - background-color: variable.$ds-red-050; + + &.ds-button--green { + &, + .dark & { + color: variable.$ds-gray-000; + background-color: variable.$ds-green-400; + } + &:focus, + &:hover, + &:active, + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-green-500; + } + &:disabled { + color: variable.$ds-green-200; + background-color: variable.$ds-green-050; + } + .dark &:disabled { + color: variable.$ds-green-700; + background-color: variable.$ds-green-800; + } } - .dark &.ds-button--red:hover, - .dark &.ds-button--red:hover, - .dark &.ds-button--red:active { - background-color: variable.$ds-red-800; + + &.ds-button--blue { + &, + .dark & { + color: variable.$ds-gray-000; + background-color: variable.$ds-blue-400; + } + &:focus, + &:hover, + &:active, + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-blue-500; + } + &:disabled { + color: variable.$ds-blue-200; + background-color: variable.$ds-blue-050; + } + .dark &:disabled { + color: variable.$ds-blue-600; + background-color: variable.$ds-blue-800; + } } - &.ds-button--red:disabled { - color: variable.$ds-red-200; + } + + &--subtle { + border: none; + + &.ds-button--gray { + color: variable.$ds-gray-700; background-color: transparent; + + .dark & { + color: variable.$ds-gray-050; + background-color: transparent; + } + &:focus, + &:hover, + &:active { + background-color: variable.$ds-gray-100; + } + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-gray-700; + } + &:disabled { + color: variable.$ds-gray-400; + background-color: transparent; + } + .dark &:disabled { + color: variable.$ds-gray-500; + background-color: transparent; + } } - .dark &.ds-button--red:disabled { - color: variable.$ds-red-600; + + &.ds-button--red { + color: variable.$ds-red-400; background-color: transparent; + + .dark & { + color: variable.$ds-red-300; + background-color: transparent; + } + &:focus, + &:hover, + &:active { + background-color: variable.$ds-red-050; + } + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-red-800; + } + &:disabled { + color: variable.$ds-red-200; + background-color: transparent; + } + .dark &:disabled { + color: variable.$ds-red-600; + background-color: transparent; + } } &.ds-button--yellow { color: variable.$ds-yellow-400; background-color: transparent; - } - .dark &.ds-button--yellow { - color: variable.$ds-yellow-300; - background-color: transparent; - } - &.ds-button--yellow:focus, - &.ds-button--yellow:hover, - &.ds-button--yellow:active { - background-color: variable.$ds-yellow-050; - } - .dark &.ds-button--yellow:hover, - .dark &.ds-button--yellow:hover, - .dark &.ds-button--yellow:active { - background-color: variable.$ds-yellow-800; - } - &.ds-button--yellow:disabled { - color: variable.$ds-yellow-200; - background-color: transparent; - } - .dark &.ds-button--yellow:disabled { - color: variable.$ds-yellow-700; - background-color: transparent; + + .dark & { + color: variable.$ds-yellow-300; + background-color: transparent; + } + &:focus, + &:hover, + &:active { + background-color: variable.$ds-yellow-050; + } + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-yellow-800; + } + &:disabled { + color: variable.$ds-yellow-200; + background-color: transparent; + } + .dark &:disabled { + color: variable.$ds-yellow-700; + background-color: transparent; + } } &.ds-button--green { color: variable.$ds-green-400; background-color: transparent; - } - .dark &.ds-button--green { - color: variable.$ds-green-300; - background-color: transparent; - } - &.ds-button--green:focus, - &.ds-button--green:hover, - &.ds-button--green:active { - background-color: variable.$ds-green-050; - } - .dark &.ds-button--green:hover, - .dark &.ds-button--green:hover, - .dark &.ds-button--green:active { - background-color: variable.$ds-green-800; - } - &.ds-button--green:disabled { - color: variable.$ds-green-200; - background-color: transparent; - } - .dark &.ds-button--green:disabled { - color: variable.$ds-green-600; - background-color: transparent; + + .dark & { + color: variable.$ds-green-300; + background-color: transparent; + } + &:focus, + &:hover, + &:active { + background-color: variable.$ds-green-050; + } + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-green-800; + } + &:disabled { + color: variable.$ds-green-200; + background-color: transparent; + } + .dark &:disabled { + color: variable.$ds-green-600; + background-color: transparent; + } } &.ds-button--blue { color: variable.$ds-blue-400; background-color: transparent; - } - .dark &.ds-button--blue { - color: variable.$ds-blue-300; - background-color: transparent; - } - &.ds-button--blue:focus, - &.ds-button--blue:hover, - &.ds-button--blue:active { - background-color: variable.$ds-blue-050; - } - .dark &.ds-button--blue:hover, - .dark &.ds-button--blue:hover, - .dark &.ds-button--blue:active { - background-color: variable.$ds-blue-800; - } - &.ds-button--blue:disabled { - color: variable.$ds-blue-200; - background-color: transparent; - } - .dark &.ds-button--blue:disabled { - color: variable.$ds-blue-600; - background-color: transparent; + + .dark & { + color: variable.$ds-blue-300; + background-color: transparent; + } + &:focus, + &:hover, + &:active { + background-color: variable.$ds-blue-050; + } + .dark &:hover, + .dark &:hover, + .dark &:active { + background-color: variable.$ds-blue-800; + } + &:disabled { + color: variable.$ds-blue-200; + background-color: transparent; + } + .dark &:disabled { + color: variable.$ds-blue-600; + background-color: transparent; + } } } From 526310a02f6a1fb23556f211ee98b847dfca25f0 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 11 Aug 2024 12:14:49 +0900 Subject: [PATCH 34/46] =?UTF-8?q?refactor:=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EB=8B=A8=EC=9C=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=ED=83=80=EC=9E=85=20=EC=A7=80=EC=A0=95?= =?UTF-8?q?=20(#ATR-603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/core/src/components/button/Button.stories.tsx | 2 +- .../packages/core/src/components/button/_index.scss | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/design-system/packages/core/src/components/button/Button.stories.tsx b/packages/design-system/packages/core/src/components/button/Button.stories.tsx index 89e30c80..6b55089e 100644 --- a/packages/design-system/packages/core/src/components/button/Button.stories.tsx +++ b/packages/design-system/packages/core/src/components/button/Button.stories.tsx @@ -77,7 +77,7 @@ export default meta type Story = StoryObj -const style = { +const style: React.CSSProperties = { display: 'flex', justifyContent: 'space-around', alignItems: 'center', diff --git a/packages/design-system/packages/core/src/components/button/_index.scss b/packages/design-system/packages/core/src/components/button/_index.scss index ea4c3800..34f39170 100644 --- a/packages/design-system/packages/core/src/components/button/_index.scss +++ b/packages/design-system/packages/core/src/components/button/_index.scss @@ -6,9 +6,11 @@ justify-content: center; align-items: center; gap: 0.5rem; + width: auto; + height: 2.5rem; box-sizing: border-box; padding: 0.5rem 0.75rem; - border: 1px solid variable.$ds-gray-100; + border: 0.0625rem solid variable.$ds-gray-100; font-size: variable.$ds-font-size-300; font-weight: variable.$ds-font-weight-medium; color: variable.$ds-gray-700; From 39e1f34fe8b18e9612635bd18549b9807b444068 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 11 Aug 2024 12:15:51 +0900 Subject: [PATCH 35/46] =?UTF-8?q?chore:=20=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#ATR-591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design-system/packages/core/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/design-system/packages/core/package.json b/packages/design-system/packages/core/package.json index bb43a6ba..2d3c17c5 100644 --- a/packages/design-system/packages/core/package.json +++ b/packages/design-system/packages/core/package.json @@ -54,6 +54,7 @@ }, "peerDependencies": { "@attraction/ds-hooks": "workspace:^", + "@attraction/icons": "workspace:^", "@attraction/utils": "workspace:^", "react": "^18.0.0", "react-dom": "^18.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5cc6ae1b..9f1c7074 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -294,6 +294,9 @@ importers: '@attraction/ds-hooks': specifier: workspace:^ version: link:../hooks + '@attraction/icons': + specifier: workspace:^ + version: link:../../../icons '@attraction/utils': specifier: workspace:^ version: link:../../../utils From e222879490217d296d40c0a127804a9d21d22133 Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 11 Aug 2024 13:19:32 +0900 Subject: [PATCH 36/46] =?UTF-8?q?refactor:=20checkbox=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(#ATR-603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/checkbox/Checkbox.stories.tsx | 239 ++++++++++++++++++ .../src/components/checkbox/Checkbox.style.ts | 27 ++ .../core/src/components/checkbox/Checkbox.tsx | 48 ++++ .../core/src/components/checkbox/_index.scss | 219 ++++++++++++++++ .../core/src/components/checkbox/index.ts | 1 + .../packages/core/src/components/index.scss | 1 + .../packages/core/src/components/index.ts | 1 + 7 files changed, 536 insertions(+) create mode 100644 packages/design-system/packages/core/src/components/checkbox/Checkbox.stories.tsx create mode 100644 packages/design-system/packages/core/src/components/checkbox/Checkbox.style.ts create mode 100644 packages/design-system/packages/core/src/components/checkbox/Checkbox.tsx create mode 100644 packages/design-system/packages/core/src/components/checkbox/_index.scss create mode 100644 packages/design-system/packages/core/src/components/checkbox/index.ts diff --git a/packages/design-system/packages/core/src/components/checkbox/Checkbox.stories.tsx b/packages/design-system/packages/core/src/components/checkbox/Checkbox.stories.tsx new file mode 100644 index 00000000..11123ea9 --- /dev/null +++ b/packages/design-system/packages/core/src/components/checkbox/Checkbox.stories.tsx @@ -0,0 +1,239 @@ +/* eslint-disable tailwindcss/no-custom-classname */ +import React from 'react' +import type { Meta, StoryObj } from '@storybook/react' +import Checkbox from './Checkbox' +import { $variable } from '../../token' + +const meta: Meta = { + title: 'Inputs/Checkbox', + component: Checkbox, + tags: ['autodocs'], + parameters: { + componentSubtitle: 'Attraction에서 사용되는 체크박스 컴포넌트입니다.', + }, + argTypes: { + color: { + description: '체크박스의 색상을 지정합니다.', + control: 'select', + options: ['gray', 'red', 'yellow', 'green', 'blue'], + table: { + type: { + summary: ['gray', 'red', 'yellow', 'green', 'blue'].join(' | '), + }, + defaultValue: { summary: 'gray' }, + }, + }, + round: { + description: '체크박스의 모서리 형태를 지정합니다.', + control: 'select', + options: ['default', 'full'], + table: { + type: { summary: ['default', 'full'].join(' | ') }, + defaultValue: { summary: 'default' }, + }, + }, + disabled: { + description: '체크박스의 비활성화 상태를 지정합니다.', + control: 'boolean', + table: { + type: { summary: 'boolean' }, + defaultValue: { summary: 'undefined' }, + }, + }, + label: { + description: '체크박스의 레이블을 지정합니다.', + control: 'text', + table: { + type: { summary: ['ReactNode', 'string'].join(' | ') }, + defaultValue: { summary: 'undefined' }, + }, + }, + }, +} + +export default meta + +type Story = StoryObj + +const boxStyle: React.CSSProperties = { + display: 'flex', + justifyContent: 'space-around', + alignItems: 'center', + padding: '30px', +} + +export const CheckboxDefault: Story = { + render: (props) => ( +
+
+ +
+
+ +
+
+ ), + args: { + color: 'gray', + round: 'default', + }, +} + +export const CheckboxRed: Story = { + render: (props) => ( +
+
+ + + +
+
+ + + +
+
+ ), + args: { + color: 'red', + round: 'default', + }, +} + +export const CheckboxYellow: Story = { + render: (props) => ( +
+
+ + + +
+
+ + + +
+
+ ), + args: { + color: 'yellow', + round: 'default', + }, +} + +export const CheckboxGreen: Story = { + render: (props) => ( +
+
+ + + +
+
+ + + +
+
+ ), + args: { + color: 'green', + round: 'default', + }, +} + +export const CheckboxBlue: Story = { + render: (props) => ( +
+
+ + + +
+
+ + + +
+
+ ), + args: { + color: 'blue', + round: 'default', + }, +} + +export const CheckboxWithLabel: Story = { + render: (props) => ( +
+
+ +
+
+ +
+
+ ), + args: { + color: 'gray', + round: 'default', + label: 'checkbox with label', + }, +} diff --git a/packages/design-system/packages/core/src/components/checkbox/Checkbox.style.ts b/packages/design-system/packages/core/src/components/checkbox/Checkbox.style.ts new file mode 100644 index 00000000..fbf7f156 --- /dev/null +++ b/packages/design-system/packages/core/src/components/checkbox/Checkbox.style.ts @@ -0,0 +1,27 @@ +import { cva } from 'class-variance-authority' + +const checkboxClassName = 'ds-checkbox' +const getCheckboxModifier = (name: string) => `${checkboxClassName}--${name}` + +export const variants = { + color: { + gray: '', + red: getCheckboxModifier('red'), + yellow: getCheckboxModifier('yellow'), + green: getCheckboxModifier('green'), + blue: getCheckboxModifier('blue'), + }, + round: { + default: '', + full: getCheckboxModifier('round-full'), + }, + disabled: { + default: '', + disabled: getCheckboxModifier('disabled'), + }, +} + +export const checkboxVariants = cva(checkboxClassName, { + variants, + defaultVariants: { color: 'gray', round: 'default', disabled: 'default' }, +}) diff --git a/packages/design-system/packages/core/src/components/checkbox/Checkbox.tsx b/packages/design-system/packages/core/src/components/checkbox/Checkbox.tsx new file mode 100644 index 00000000..0998a9ec --- /dev/null +++ b/packages/design-system/packages/core/src/components/checkbox/Checkbox.tsx @@ -0,0 +1,48 @@ +import React from 'react' +import { cn } from '@attraction/utils' +import { CheckOutline } from '@attraction/icons' +import { variants, checkboxVariants } from './Checkbox.style' + +type CheckboxVariants = typeof variants + +interface CheckboxProps + extends React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement + > { + label?: React.ReactNode | string + color?: keyof CheckboxVariants['color'] + round?: keyof CheckboxVariants['round'] +} + +const Checkbox = React.forwardRef( + ({ type, id, className, style, label, color, round, ...props }, ref) => { + if (!label) { + return ( + + + + + ) + } + return ( + + ) + }, +) + +export default Checkbox diff --git a/packages/design-system/packages/core/src/components/checkbox/_index.scss b/packages/design-system/packages/core/src/components/checkbox/_index.scss new file mode 100644 index 00000000..c32aac3c --- /dev/null +++ b/packages/design-system/packages/core/src/components/checkbox/_index.scss @@ -0,0 +1,219 @@ +@use '../../token/variable'; + +label.ds-checkbox { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 0.75rem; + cursor: pointer; + + &.ds-checkbox--disabled { + cursor: not-allowed; + + & span.ds-checkbox + span { + color: variable.$ds-gray-400; + + .dark & { + color: variable.$ds-gray-500; + } + } + } +} +span.ds-checkbox { + position: relative; + display: block; + width: 1.5rem; + height: 1.5rem; + box-sizing: border-box; + + & input { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + box-sizing: border-box; + padding: 0px; + margin: 0px; + border: 0.125rem solid variable.$ds-gray-100; + border-radius: 0.25rem; + background-color: variable.$ds-gray-000; + cursor: pointer; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + @include variable.transition-colors(); + + &:disabled { + cursor: not-allowed; + background-color: variable.$ds-gray-050; + } + .dark &:disabled { + background-color: variable.$ds-gray-700; + } + + .dark & { + border-color: variable.$ds-gray-700; + background-color: variable.$ds-gray-800; + } + + &:checked { + border-color: variable.$ds-gray-700; + background-color: variable.$ds-gray-700; + } + .dark &:checked { + border-color: variable.$ds-gray-050; + background-color: variable.$ds-gray-050; + } + &:checked:disabled { + border-color: variable.$ds-gray-050; + background-color: variable.$ds-gray-050; + } + .dark &:checked:disabled { + border-color: variable.$ds-gray-700; + background-color: variable.$ds-gray-700; + } + & + svg { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + width: variable.$ds-font-size-300; + height: variable.$ds-font-size-300; + margin: auto; + font-size: variable.$ds-font-size-300; + color: transparent; + pointer-events: none; + @include variable.transition-colors(); + } + &:checked + svg { + color: variable.$ds-gray-000; + } + .dark &:checked + svg { + color: variable.$ds-gray-700; + } + &:checked:disabled + svg { + color: variable.$ds-gray-400; + } + .dark &:checked:disabled + svg { + color: variable.$ds-gray-500; + } + } + + &--red input { + &:checked, + .dark &:checked { + border-color: variable.$ds-red-400; + background-color: variable.$ds-red-400; + } + &:checked + svg, + .dark &:checked + svg { + color: variable.$ds-gray-000; + } + &:checked:disabled { + border-color: variable.$ds-red-050; + background-color: variable.$ds-red-050; + } + .dark &:checked:disabled { + border-color: variable.$ds-red-800; + background-color: variable.$ds-red-800; + } + &:checked:disabled + svg { + color: variable.$ds-red-200; + } + .dark &:checked:disabled + svg { + color: variable.$ds-red-600; + } + } + &--yellow input { + &:checked, + .dark &:checked { + border-color: variable.$ds-yellow-400; + background-color: variable.$ds-yellow-400; + } + &:checked + svg, + .dark &:checked + svg { + color: variable.$ds-gray-000; + } + &:checked:disabled { + border-color: variable.$ds-yellow-050; + background-color: variable.$ds-yellow-050; + } + .dark &:checked:disabled { + border-color: variable.$ds-yellow-800; + background-color: variable.$ds-yellow-800; + } + &:checked:disabled + svg { + color: variable.$ds-yellow-200; + } + .dark &:checked:disabled + svg { + color: variable.$ds-yellow-700; + } + } + &--green input { + &:checked, + .dark &:checked { + border-color: variable.$ds-green-400; + background-color: variable.$ds-green-400; + } + &:checked + svg, + .dark &:checked + svg { + color: variable.$ds-gray-000; + } + &:checked:disabled { + border-color: variable.$ds-green-050; + background-color: variable.$ds-green-050; + } + .dark &:checked:disabled { + border-color: variable.$ds-green-800; + background-color: variable.$ds-green-800; + } + &:checked:disabled + svg { + color: variable.$ds-green-200; + } + .dark &:checked:disabled + svg { + color: variable.$ds-green-700; + } + } + &--blue input { + &:checked, + .dark &:checked { + border-color: variable.$ds-blue-400; + background-color: variable.$ds-blue-400; + } + &:checked + svg, + .dark &:checked + svg { + color: variable.$ds-gray-000; + } + &:checked:disabled { + border-color: variable.$ds-blue-050; + background-color: variable.$ds-blue-050; + } + .dark &:checked:disabled { + border-color: variable.$ds-blue-800; + background-color: variable.$ds-blue-800; + } + &:checked:disabled + svg { + color: variable.$ds-blue-200; + } + .dark &:checked:disabled + svg { + color: variable.$ds-blue-600; + } + } + + & + span { + padding-right: 0.5rem; + font-size: variable.$ds-font-size-300; + color: variable.$ds-gray-700; + line-height: variable.$ds-leading-normal; + word-break: keep-all; + } + .dark & + span { + color: variable.$ds-gray-050; + } + + &--round-full input { + border-radius: 9999px; + } +} diff --git a/packages/design-system/packages/core/src/components/checkbox/index.ts b/packages/design-system/packages/core/src/components/checkbox/index.ts new file mode 100644 index 00000000..ce25e825 --- /dev/null +++ b/packages/design-system/packages/core/src/components/checkbox/index.ts @@ -0,0 +1 @@ +export { default as Checkbox } from './Checkbox' diff --git a/packages/design-system/packages/core/src/components/index.scss b/packages/design-system/packages/core/src/components/index.scss index 2d432248..766a505d 100644 --- a/packages/design-system/packages/core/src/components/index.scss +++ b/packages/design-system/packages/core/src/components/index.scss @@ -1 +1,2 @@ @import 'button'; +@import 'checkbox'; diff --git a/packages/design-system/packages/core/src/components/index.ts b/packages/design-system/packages/core/src/components/index.ts index 3b6f4e74..a43023cd 100644 --- a/packages/design-system/packages/core/src/components/index.ts +++ b/packages/design-system/packages/core/src/components/index.ts @@ -1,2 +1,3 @@ export * from './button' export * from './copy-button' +export * from './checkbox' From 4f55c2cbd3368625ad22d9d3ac8db539ce582b7b Mon Sep 17 00:00:00 2001 From: ChanLee_KR Date: Sun, 11 Aug 2024 13:36:25 +0900 Subject: [PATCH 37/46] =?UTF-8?q?refactor:=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20square=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80=20(#ATR-603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/button/Button.stories.tsx | 8 +++++++ .../src/components/button/Button.style.ts | 5 ++++ .../core/src/components/button/Button.tsx | 14 +++++++++-- .../core/src/components/button/_index.scss | 24 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/packages/design-system/packages/core/src/components/button/Button.stories.tsx b/packages/design-system/packages/core/src/components/button/Button.stories.tsx index 6b55089e..1715c0d6 100644 --- a/packages/design-system/packages/core/src/components/button/Button.stories.tsx +++ b/packages/design-system/packages/core/src/components/button/Button.stories.tsx @@ -62,6 +62,14 @@ const meta: Meta = { defaultValue: { summary: 'false' }, }, }, + square: { + description: '버튼을 정사각형 형태로 지정합니다.', + control: 'boolean', + table: { + type: { summary: 'boolean' }, + defaultValue: { summary: 'undefined' }, + }, + }, children: { description: '버튼에 표시할 내용을 입력합니다.', control: 'text', diff --git a/packages/design-system/packages/core/src/components/button/Button.style.ts b/packages/design-system/packages/core/src/components/button/Button.style.ts index 908d1f5e..e3d610d9 100644 --- a/packages/design-system/packages/core/src/components/button/Button.style.ts +++ b/packages/design-system/packages/core/src/components/button/Button.style.ts @@ -33,6 +33,10 @@ export const variants = { xl: getButtonModifier('round-xl'), full: getButtonModifier('round-full'), }, + square: { + default: '', + square: getButtonModifier('square'), + }, } export const buttonVariants = cva(buttonClassName, { @@ -42,5 +46,6 @@ export const buttonVariants = cva(buttonClassName, { color: 'gray', size: 'md', round: 'sm', + square: 'default', }, }) diff --git a/packages/design-system/packages/core/src/components/button/Button.tsx b/packages/design-system/packages/core/src/components/button/Button.tsx index fa701253..5e96922a 100644 --- a/packages/design-system/packages/core/src/components/button/Button.tsx +++ b/packages/design-system/packages/core/src/components/button/Button.tsx @@ -13,14 +13,24 @@ interface ButtonProps color?: keyof ButtonVariants['color'] size?: keyof ButtonVariants['size'] round?: keyof ButtonVariants['round'] + square?: boolean } const Button = React.forwardRef( - ({ type, className, variant, color, size, round, ...props }, ref) => ( + ({ type, className, variant, color, size, round, square, ...props }, ref) => (