diff --git a/pkgs/clan-app/fonts.nix b/pkgs/clan-app/fonts.nix index 0c1d31642..e9cd9b730 100644 --- a/pkgs/clan-app/fonts.nix +++ b/pkgs/clan-app/fonts.nix @@ -45,10 +45,10 @@ let }; }; - firaCode = fetchzip { - url = "https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip"; + commitMono = fetchzip { + url = "https://github.com/eigilnikolajsen/commit-mono/releases/download/v1.143/CommitMono-1.143.zip"; stripRoot = false; - hash = "sha256-UHOwZL9WpCHk6vZaqI/XfkZogKgycs5lWg1p0XdQt0A="; + hash = "sha256-JTyPgWfbWq+lXQU/rgnyvPG6+V3f+FB5QUkd+I1oFKE="; }; in @@ -63,5 +63,5 @@ runCommand "" { } '' cp ${archivoSemi.medium} $out/ArchivoSemiCondensed-Medium.woff2 cp ${archivoSemi.semiBold} $out/ArchivoSemiCondensed-SemiBold.woff2 - cp ${firaCode}/woff2/FiraCode-Regular.woff2 $out/FiraCode-Regular.woff2 + cp ${commitMono}/CommitMono-1.143/CommitMono-400-Regular.otf $out/CommitMono-400-Regular.otf '' diff --git a/pkgs/clan-app/ui/.storybook/preview.ts b/pkgs/clan-app/ui/.storybook/preview.ts index 90e8a31a2..a44a297c9 100644 --- a/pkgs/clan-app/ui/.storybook/preview.ts +++ b/pkgs/clan-app/ui/.storybook/preview.ts @@ -1,8 +1,8 @@ import type { Preview } from "@kachurun/storybook-solid"; import "@/src/components/v2/index.css"; -import "./preview.css"; import "../src/index.css"; +import "./preview.css"; export const preview: Preview = { tags: ["autodocs"], diff --git a/pkgs/clan-app/ui/icons/ai.svg b/pkgs/clan-app/ui/icons/ai.svg new file mode 100644 index 000000000..da09904db --- /dev/null +++ b/pkgs/clan-app/ui/icons/ai.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/checkmark.svg b/pkgs/clan-app/ui/icons/checkmark.svg index ef5a17ad3..9bb389986 100644 --- a/pkgs/clan-app/ui/icons/checkmark.svg +++ b/pkgs/clan-app/ui/icons/checkmark.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/clan-icon.svg b/pkgs/clan-app/ui/icons/clan-icon.svg index 43aa47bce..e752b66b1 100644 --- a/pkgs/clan-app/ui/icons/clan-icon.svg +++ b/pkgs/clan-app/ui/icons/clan-icon.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/clan-logo.svg b/pkgs/clan-app/ui/icons/clan-logo.svg index e164bb029..c64288280 100644 --- a/pkgs/clan-app/ui/icons/clan-logo.svg +++ b/pkgs/clan-app/ui/icons/clan-logo.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/cursor.svg b/pkgs/clan-app/ui/icons/cursor.svg new file mode 100644 index 000000000..2d9de47d2 --- /dev/null +++ b/pkgs/clan-app/ui/icons/cursor.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/dots.svg b/pkgs/clan-app/ui/icons/dots.svg new file mode 100644 index 000000000..57c9d33bb --- /dev/null +++ b/pkgs/clan-app/ui/icons/dots.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/heart.svg b/pkgs/clan-app/ui/icons/heart.svg new file mode 100644 index 000000000..65a61bfab --- /dev/null +++ b/pkgs/clan-app/ui/icons/heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/machine.svg b/pkgs/clan-app/ui/icons/machine.svg new file mode 100644 index 000000000..908827dfd --- /dev/null +++ b/pkgs/clan-app/ui/icons/machine.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/modules.svg b/pkgs/clan-app/ui/icons/modules.svg new file mode 100644 index 000000000..e43a47dad --- /dev/null +++ b/pkgs/clan-app/ui/icons/modules.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/new-machine.svg b/pkgs/clan-app/ui/icons/new-machine.svg new file mode 100644 index 000000000..178100e11 --- /dev/null +++ b/pkgs/clan-app/ui/icons/new-machine.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/offline.svg b/pkgs/clan-app/ui/icons/offline.svg new file mode 100644 index 000000000..7e68c551d --- /dev/null +++ b/pkgs/clan-app/ui/icons/offline.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/search-filled.svg b/pkgs/clan-app/ui/icons/search-filled.svg new file mode 100644 index 000000000..394ffd039 --- /dev/null +++ b/pkgs/clan-app/ui/icons/search-filled.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/switch.svg b/pkgs/clan-app/ui/icons/switch.svg new file mode 100644 index 000000000..da7093b58 --- /dev/null +++ b/pkgs/clan-app/ui/icons/switch.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/tag.svg b/pkgs/clan-app/ui/icons/tag.svg new file mode 100644 index 000000000..d9446d26a --- /dev/null +++ b/pkgs/clan-app/ui/icons/tag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/user.svg b/pkgs/clan-app/ui/icons/user.svg new file mode 100644 index 000000000..5fc3eff5b --- /dev/null +++ b/pkgs/clan-app/ui/icons/user.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pkgs/clan-app/ui/icons/warning.svg b/pkgs/clan-app/ui/icons/warning-filled.svg similarity index 100% rename from pkgs/clan-app/ui/icons/warning.svg rename to pkgs/clan-app/ui/icons/warning-filled.svg diff --git a/pkgs/clan-app/ui/package-lock.json b/pkgs/clan-app/ui/package-lock.json index c38ba7863..2a14052a3 100644 --- a/pkgs/clan-app/ui/package-lock.json +++ b/pkgs/clan-app/ui/package-lock.json @@ -10,9 +10,12 @@ "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.6.8", + "@kobalte/core": "^0.13.10", + "@kobalte/tailwindcss": "^0.9.0", "@modular-forms/solid": "^0.25.1", "@solid-primitives/storage": "^4.3.2", "@solidjs/router": "^0.15.3", + "@storybook/test": "^8.6.14", "@tanstack/eslint-plugin-query": "^5.51.12", "@tanstack/solid-query": "^5.76.0", "corvu": "^0.7.1", @@ -51,6 +54,7 @@ "prettier": "^3.2.5", "solid-devtools": "^0.34.0", "storybook": "^8.6.14", + "storybook-addon-pseudo-states": "^4.0.3", "tailwindcss": "^3.4.3", "typescript": "^5.4.5", "typescript-eslint": "^8.32.1", @@ -65,14 +69,12 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", - "dev": true, "license": "MIT" }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -113,7 +115,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -285,7 +286,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -574,7 +574,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -931,7 +930,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -948,7 +946,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -965,7 +962,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -982,7 +978,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -999,7 +994,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1016,7 +1010,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1033,7 +1026,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1050,7 +1042,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1067,7 +1058,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1084,7 +1074,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1101,7 +1090,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1118,7 +1106,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1135,7 +1122,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1152,7 +1138,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1169,7 +1154,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1186,7 +1170,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1203,7 +1186,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1220,7 +1202,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1237,7 +1218,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1254,7 +1234,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1271,7 +1250,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1288,7 +1266,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1305,7 +1282,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1322,7 +1298,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1339,7 +1314,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1615,11 +1589,28 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@internationalized/date": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.2.tgz", + "integrity": "sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.3.tgz", + "integrity": "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1637,7 +1628,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1650,7 +1640,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -2123,7 +2112,6 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -2138,7 +2126,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2148,7 +2135,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2158,14 +2144,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2219,6 +2203,64 @@ "vite-plugin-solid": "^2.10.0" } }, + "node_modules/@kobalte/core": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@kobalte/core/-/core-0.13.10.tgz", + "integrity": "sha512-lzP64ThxZqZB6O6MnMq6w7DxK38o2ClbW3Ob6afUI6p86cUMz5Hb4rdysvYI6m1TKYlOAlFODKkoRznqybQohw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1", + "@internationalized/date": "^3.4.0", + "@internationalized/number": "^3.2.1", + "@kobalte/utils": "^0.9.1", + "@solid-primitives/props": "^3.1.8", + "@solid-primitives/resize-observer": "^2.0.26", + "solid-presence": "^0.1.8", + "solid-prevent-scroll": "^0.1.4" + }, + "peerDependencies": { + "solid-js": "^1.8.15" + } + }, + "node_modules/@kobalte/core/node_modules/solid-presence": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/solid-presence/-/solid-presence-0.1.8.tgz", + "integrity": "sha512-pWGtXUFWYYUZNbg5YpG5vkQJyOtzn2KXhxYaMx/4I+lylTLYkITOLevaCwMRN+liCVk0pqB6EayLWojNqBFECA==", + "license": "MIT", + "dependencies": { + "@corvu/utils": "~0.4.0" + }, + "peerDependencies": { + "solid-js": "^1.8" + } + }, + "node_modules/@kobalte/tailwindcss": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@kobalte/tailwindcss/-/tailwindcss-0.9.0.tgz", + "integrity": "sha512-WbueJTVRiO4yrmfHIBwp07y3M5iibJ/gauEAQ7mOyg1tZulvpO7SM/UdgzX95a9a0KDt1mQFxwO7RmpOUXWOWA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": "^3.3.3" + } + }, + "node_modules/@kobalte/utils": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@kobalte/utils/-/utils-0.9.1.tgz", + "integrity": "sha512-eeU60A3kprIiBDAfv9gUJX1tXGLuZiKMajUfSQURAF2pk4ZoMYiqIzmrMBvzcxP39xnYttgTyQEVLwiTZnrV4w==", + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.2.14", + "@solid-primitives/keyed": "^1.2.0", + "@solid-primitives/map": "^0.4.7", + "@solid-primitives/media": "^2.2.4", + "@solid-primitives/props": "^3.1.8", + "@solid-primitives/refs": "^1.0.5", + "@solid-primitives/utils": "^6.2.1" + }, + "peerDependencies": { + "solid-js": "^1.8.8" + } + }, "node_modules/@mdx-js/react": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", @@ -2295,7 +2337,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -2696,7 +2737,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.4.1.tgz", "integrity": "sha512-Xc/lBCeuh9LwzR4lYbMDtopwWK7N9b4o+FmI4uoI8DOtVGYi0Ip20DG8PtwHk+g31lHgvwtFFVKfnUx2UaqZJg==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/utils": "^6.3.1" @@ -2720,11 +2760,31 @@ "solid-js": "^1.6.12" } }, + "node_modules/@solid-primitives/keyed": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@solid-primitives/keyed/-/keyed-1.5.1.tgz", + "integrity": "sha512-lAgQ1Jou8nxywifWsWjDTla9MI7Pfr46JRTC40K81fqz8dw4E8t/4gYuIwqP1EHVG0mItfIb3XqDw0wEQh+QYA==", + "license": "MIT", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/map": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@solid-primitives/map/-/map-0.4.13.tgz", + "integrity": "sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew==", + "license": "MIT", + "dependencies": { + "@solid-primitives/trigger": "^1.1.0" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, "node_modules/@solid-primitives/media": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@solid-primitives/media/-/media-2.3.1.tgz", "integrity": "sha512-UTX8LAaQS7k3rvekme8y5ihOrt5SJpgkw7xyUySlPhIapD7JxlhYncQoSFsys5D1XPCgI/3snobpvbanRcrTAw==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/event-listener": "^2.4.1", @@ -2759,11 +2819,22 @@ "solid-js": "^1.6.12" } }, + "node_modules/@solid-primitives/props": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@solid-primitives/props/-/props-3.2.1.tgz", + "integrity": "sha512-SuTuCctLLZbUL1QyWamQGWSWPIgoc/gXt5kL8P2yLhb51f9Dj+WHxU0shXBjzx7z+hDc5KtheQgM4NnJqQJi2A==", + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.1" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, "node_modules/@solid-primitives/refs": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@solid-primitives/refs/-/refs-1.1.1.tgz", "integrity": "sha512-MIQ7Bh59IiT9NDQPf6iWRnPe0RgKggEjF0H+iMoIi1KBCcp4Mfss2IkUWYPr9wqQg963ZQFbcg5D6oN9Up6Mww==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/utils": "^6.3.1" @@ -2776,7 +2847,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@solid-primitives/resize-observer/-/resize-observer-2.1.1.tgz", "integrity": "sha512-vb/VS9+YdUdVZ2V92JimFmFuaJ2MSyKOGnUay/mQvoQ0R+mtdT7FSylfQlVslCzm0ecx8Jkvsm1Sk2lopvMAdg==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/event-listener": "^2.4.1", @@ -2792,7 +2862,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/@solid-primitives/rootless/-/rootless-1.5.1.tgz", "integrity": "sha512-G4eNC6F3ufRT2Mjbodl7rSOH7uq/Emqs3S7/BIBWgh+V/IFUtvu6WELeqSrk4FJX3T/kKKvC+T8gXhepExSWyg==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/utils": "^6.3.1" @@ -2814,7 +2883,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@solid-primitives/static-store/-/static-store-0.1.1.tgz", "integrity": "sha512-daXWvpLjd+4hbYdGaaEJ2kKFuFhshvfIBFLveW7mfk2BWHl9lGQVwUuExp3qllkK9ONA9p+5D2cpwBQosv8odQ==", - "dev": true, "license": "MIT", "dependencies": { "@solid-primitives/utils": "^6.3.1" @@ -2858,6 +2926,18 @@ "solid-js": "^1.6.12" } }, + "node_modules/@solid-primitives/trigger": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@solid-primitives/trigger/-/trigger-1.2.1.tgz", + "integrity": "sha512-pvNmddYs5AYUpiH373F7wbQOlcc10SSNHY8kUiu4UHoDlv4jhSnlNXzbFkmt33hq4ODKdN5gVm00jCnAJ+wm8Q==", + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.1" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, "node_modules/@solid-primitives/utils": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/@solid-primitives/utils/-/utils-6.3.1.tgz", @@ -3165,7 +3245,6 @@ "version": "8.6.14", "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.14.tgz", "integrity": "sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==", - "dev": true, "license": "MIT", "dependencies": { "@storybook/theming": "8.6.14", @@ -3238,7 +3317,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true, "license": "MIT" }, "node_modules/@storybook/icons": { @@ -3259,7 +3337,6 @@ "version": "8.6.14", "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.14.tgz", "integrity": "sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==", - "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", @@ -3277,7 +3354,6 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", - "dev": true, "license": "MIT", "dependencies": { "tinyrainbow": "^1.2.0" @@ -3290,7 +3366,6 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", - "dev": true, "license": "MIT", "dependencies": { "@vitest/pretty-format": "2.1.9", @@ -3305,7 +3380,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -3345,7 +3419,6 @@ "version": "8.6.14", "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.14.tgz", "integrity": "sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==", - "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", @@ -3405,7 +3478,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", - "dev": true, "license": "MIT", "dependencies": { "@vitest/spy": "2.0.5", @@ -3421,7 +3493,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", - "dev": true, "license": "MIT", "dependencies": { "tinyrainbow": "^1.2.0" @@ -3434,7 +3505,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", - "dev": true, "license": "MIT", "dependencies": { "tinyspy": "^3.0.0" @@ -3447,7 +3517,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", - "dev": true, "license": "MIT", "dependencies": { "@vitest/pretty-format": "2.0.5", @@ -3463,7 +3532,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -3473,7 +3541,6 @@ "version": "8.6.14", "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.14.tgz", "integrity": "sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==", - "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -3713,6 +3780,15 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@swc/jest": { "version": "0.2.38", "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.38.tgz", @@ -3803,7 +3879,6 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", @@ -3823,7 +3898,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", - "dev": true, "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", @@ -3844,7 +3918,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3858,14 +3931,12 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, "license": "MIT" }, "node_modules/@testing-library/user-event": { "version": "14.5.2", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=12", @@ -3896,7 +3967,6 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -4563,7 +4633,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4588,14 +4657,12 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -4629,7 +4696,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -4642,7 +4708,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" @@ -4652,7 +4717,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4662,7 +4726,6 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.1" @@ -4737,7 +4800,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -4971,7 +5033,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, "license": "MIT", "dependencies": { "open": "^8.0.4" @@ -4984,7 +5045,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5024,8 +5084,7 @@ "node_modules/browser-assert": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==" }, "node_modules/browserslist": { "version": "4.24.5", @@ -5127,7 +5186,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -5146,7 +5204,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5160,7 +5217,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5196,7 +5252,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -5227,7 +5282,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", - "dev": true, "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", @@ -5280,7 +5334,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 16" @@ -5290,7 +5343,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -5315,7 +5367,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -5482,7 +5533,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -5664,14 +5714,12 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, "license": "MIT" }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -5837,7 +5885,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5879,7 +5926,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5897,7 +5943,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5949,7 +5994,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/diff-sequences": { @@ -5976,14 +6020,12 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, "license": "MIT" }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, "license": "MIT" }, "node_modules/dom-serializer": { @@ -6062,7 +6104,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6077,7 +6118,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { @@ -6104,7 +6144,6 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/entities": { @@ -6134,7 +6173,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6144,7 +6182,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6161,7 +6198,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6197,7 +6233,6 @@ "version": "0.25.4", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -6238,7 +6273,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -6441,7 +6475,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -6488,7 +6521,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -6829,7 +6861,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -6845,7 +6876,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -6930,7 +6960,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -6945,7 +6974,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6975,7 +7003,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -7010,7 +7037,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -7150,7 +7176,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7186,7 +7211,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -7199,7 +7223,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7212,7 +7235,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -7255,7 +7277,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7589,7 +7610,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7611,7 +7631,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -7631,7 +7650,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7655,7 +7673,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -7668,7 +7685,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7681,7 +7697,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7697,7 +7712,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -7722,7 +7736,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7742,7 +7755,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -7801,7 +7813,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7833,7 +7844,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -7879,7 +7889,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -8026,7 +8035,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -9170,7 +9178,6 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "devOptional": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -9194,7 +9201,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -9213,7 +9219,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -9363,7 +9368,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -9376,7 +9380,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -9398,7 +9401,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, "license": "MIT" }, "node_modules/lodash.castarray": { @@ -9446,21 +9448,18 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", - "dev": true, "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, "license": "MIT", "bin": { "lz-string": "bin/bin.js" @@ -9529,7 +9528,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10196,7 +10194,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -10231,7 +10228,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -10260,7 +10256,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0", @@ -10323,7 +10318,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10631,7 +10625,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10641,7 +10634,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -10690,7 +10682,6 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -10814,7 +10805,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { @@ -10903,14 +10893,12 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -10934,7 +10922,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 14.16" @@ -10944,7 +10931,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -10963,7 +10949,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10973,7 +10958,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -11126,7 +11110,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11136,7 +11119,6 @@ "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -11165,7 +11147,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", @@ -11183,7 +11164,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -11203,7 +11183,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -11239,7 +11218,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -11265,7 +11243,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -11336,14 +11313,12 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, "license": "MIT" }, "node_modules/postcss/node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -11371,7 +11346,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -11387,7 +11362,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", @@ -11402,7 +11376,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11415,7 +11388,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -11554,14 +11526,12 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "license": "MIT", "dependencies": { "pify": "^2.3.0" @@ -11586,7 +11556,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -11599,7 +11568,6 @@ "version": "0.23.11", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "dev": true, "license": "MIT", "dependencies": { "ast-types": "^0.16.1", @@ -11616,7 +11584,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "license": "MIT", "dependencies": { "indent-string": "^4.0.0", @@ -11700,7 +11667,6 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -11905,7 +11871,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11997,7 +11962,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -12132,7 +12096,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -12328,7 +12291,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -12338,7 +12300,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -12482,7 +12443,6 @@ "version": "8.6.14", "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.14.tgz", "integrity": "sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==", - "dev": true, "license": "MIT", "dependencies": { "@storybook/core": "8.6.14" @@ -12505,6 +12465,19 @@ } } }, + "node_modules/storybook-addon-pseudo-states": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/storybook-addon-pseudo-states/-/storybook-addon-pseudo-states-4.0.4.tgz", + "integrity": "sha512-hF3nLFpRPjqNxa7eqp+j1bd+DvyUCns1iesUZqMZz9ZuIijosOTQgJO5G0drbdxlHvXehu/BgcqbyxBb2eJR5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/icons": "^1.2.10" + }, + "peerDependencies": { + "storybook": "^8.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -12533,7 +12506,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -12552,7 +12524,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -12567,14 +12538,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -12587,7 +12556,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -12603,7 +12571,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12617,7 +12584,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12650,7 +12616,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, "license": "MIT", "dependencies": { "min-indent": "^1.0.0" @@ -12684,7 +12649,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", @@ -12707,7 +12671,6 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -12740,7 +12703,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -12796,7 +12758,6 @@ "version": "3.4.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -12834,7 +12795,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -12887,7 +12847,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0" @@ -12897,7 +12856,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -12916,7 +12874,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, "license": "MIT" }, "node_modules/tinybench": { @@ -13002,7 +12959,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -13129,14 +13085,12 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/type-check": { @@ -13409,7 +13363,6 @@ "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -13423,7 +13376,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/uuid": { @@ -13985,7 +13937,6 @@ "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -14033,7 +13984,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -14052,7 +14002,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14070,14 +14019,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -14092,7 +14039,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -14105,7 +14051,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -14118,7 +14063,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -14162,7 +14106,6 @@ "version": "8.18.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14235,7 +14178,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/pkgs/clan-app/ui/package.json b/pkgs/clan-app/ui/package.json index 490d433be..cf51772b4 100644 --- a/pkgs/clan-app/ui/package.json +++ b/pkgs/clan-app/ui/package.json @@ -47,6 +47,7 @@ "prettier": "^3.2.5", "solid-devtools": "^0.34.0", "storybook": "^8.6.14", + "storybook-addon-pseudo-states": "^4.0.3", "tailwindcss": "^3.4.3", "typescript": "^5.4.5", "typescript-eslint": "^8.32.1", @@ -58,9 +59,12 @@ }, "dependencies": { "@floating-ui/dom": "^1.6.8", + "@kobalte/core": "^0.13.10", + "@kobalte/tailwindcss": "^0.9.0", "@modular-forms/solid": "^0.25.1", "@solid-primitives/storage": "^4.3.2", "@solidjs/router": "^0.15.3", + "@storybook/test": "^8.6.14", "@tanstack/eslint-plugin-query": "^5.51.12", "@tanstack/solid-query": "^5.76.0", "corvu": "^0.7.1", diff --git a/pkgs/clan-app/ui/src/components/Button/Button-Dark.css b/pkgs/clan-app/ui/src/components/Button/Button-Dark.css index 19f82f830..07faf3f30 100644 --- a/pkgs/clan-app/ui/src/components/Button/Button-Dark.css +++ b/pkgs/clan-app/ui/src/components/Button/Button-Dark.css @@ -27,5 +27,5 @@ } .button--dark-active:active { - @apply active:border-secondary-900 active:shadow-inner-primary-active; + @apply active:border-secondary-900 active:shadow-button-primary-active; } diff --git a/pkgs/clan-app/ui/src/components/Button/Button-Ghost.css b/pkgs/clan-app/ui/src/components/Button/Button-Ghost.css index cee0cdb14..dcbd77556 100644 --- a/pkgs/clan-app/ui/src/components/Button/Button-Ghost.css +++ b/pkgs/clan-app/ui/src/components/Button/Button-Ghost.css @@ -7,5 +7,5 @@ } .button--ghost-active:active { - @apply active:bg-secondary-200 active:text-secondary-900 active:shadow-inner-primary-active; + @apply active:bg-secondary-200 active:text-secondary-900 active:shadow-button-primary-active; } diff --git a/pkgs/clan-app/ui/src/components/Button/Button-Light.css b/pkgs/clan-app/ui/src/components/Button/Button-Light.css index aa6a114cc..dde186706 100644 --- a/pkgs/clan-app/ui/src/components/Button/Button-Light.css +++ b/pkgs/clan-app/ui/src/components/Button/Button-Light.css @@ -27,7 +27,7 @@ } .button--light-active:active { - @apply active:bg-secondary-200 border-secondary-600 active:text-secondary-900 active:shadow-inner-primary-active; + @apply active:bg-secondary-200 border-secondary-600 active:text-secondary-900 active:shadow-button-primary-active; box-shadow: inset 2px 2px theme(backgroundColor.secondary.300); diff --git a/pkgs/clan-app/ui/src/components/TagList/TagList.stories.tsx b/pkgs/clan-app/ui/src/components/TagList/TagList.stories.tsx deleted file mode 100644 index 43d286a01..000000000 --- a/pkgs/clan-app/ui/src/components/TagList/TagList.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import type { Meta, StoryObj } from "@kachurun/storybook-solid"; -import { TagList, TagListProps } from "./TagList"; - -const meta: Meta = { - title: "Components/TagList", - component: TagList, - decorators: [ - // wrap in a fixed width div so we can check that it wraps - (Story) => { - return ( -
- -
- ); - }, - ], -}; - -export default meta; - -type Story = StoryObj; - -export const Default: Story = { - args: { - values: [ - "Titan", - "Enceladus", - "Mimas", - "Dione", - "Iapetus", - "Tethys", - "Hyperion", - "Epimetheus", - ], - }, -}; diff --git a/pkgs/clan-app/ui/src/components/TagList/__snapshots__/TagList.stories.tsx.snap b/pkgs/clan-app/ui/src/components/TagList/__snapshots__/TagList.stories.tsx.snap deleted file mode 100644 index 7ac0b3f35..000000000 --- a/pkgs/clan-app/ui/src/components/TagList/__snapshots__/TagList.stories.tsx.snap +++ /dev/null @@ -1,32 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Components/TagList Default smoke-test 1`] = ` -
-
- - Titan - - - Enceladus - - - Mimas - - - Dione - - - Iapetus - - - Tethys - - - Hyperion - - - Epimetheus - -
-
-`; diff --git a/pkgs/clan-app/ui/src/components/icon/index.tsx b/pkgs/clan-app/ui/src/components/icon/index.tsx index 32ea5261a..8e3df4b8a 100644 --- a/pkgs/clan-app/ui/src/components/icon/index.tsx +++ b/pkgs/clan-app/ui/src/components/icon/index.tsx @@ -33,7 +33,7 @@ import Search from "@/icons/search.svg"; import Settings from "@/icons/settings.svg"; import Trash from "@/icons/trash.svg"; import Update from "@/icons/update.svg"; -import Warning from "@/icons/warning.svg"; +import Warning from "@/icons/warning-filled.svg"; const icons = { ArrowBottom, diff --git a/pkgs/clan-app/ui/src/components/inputBase/index.tsx b/pkgs/clan-app/ui/src/components/inputBase/index.tsx index e25975647..b0c1d50fe 100644 --- a/pkgs/clan-app/ui/src/components/inputBase/index.tsx +++ b/pkgs/clan-app/ui/src/components/inputBase/index.tsx @@ -33,6 +33,7 @@ export const InputBase = (props: InputBaseProps) => { const [internal, inputProps] = splitProps(props, ["class", "divRef"]); return (
{ props.class, )} classList={{ + // eslint-disable-next-line tailwindcss/no-custom-classname [cx("!border !border-semantic-1 !outline-semantic-1")]: !!props.error, }} aria-invalid={props.error} diff --git a/pkgs/clan-app/ui/src/components/v2/Button/Button.css b/pkgs/clan-app/ui/src/components/v2/Button/Button.css new file mode 100644 index 000000000..7e60712c5 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Button/Button.css @@ -0,0 +1,134 @@ +.button { + @apply flex gap-2 shrink-0 items-center justify-center; + @apply px-4 py-2; + + height: theme(height.9); + border-radius: 3px; + + /* Add transition for smooth width animation */ + transition: width 0.5s ease 0.1s; + + &.s { + @apply px-3 py-1.5; + height: theme(height.7); + border-radius: 2px; + + &:has(> .icon-start):has(> .label) { + @apply pl-2; + } + + &:has(> .icon-end):has(> .label) { + @apply pr-2; + } + } + + &.primary { + @apply bg-inv-acc-4 fg-inv-1; + @apply border border-solid border-inv-4; + @apply shadow-button-primary; + + &.ghost { + @apply bg-transparent border-none shadow-none; + } + + &:hover { + @apply bg-inv-acc-3 border-solid shadow-button-primary-hover; + border-color: theme(backgroundColor.secondary.700); + } + + &:active { + @apply bg-inv-acc-4 border-solid border-inv-3 shadow-button-primary-active; + } + + &:focus-visible { + @apply bg-inv-acc-4 border-solid border-inv-3 shadow-button-primary-focus; + } + + &:disabled { + @apply bg-def-acc-3 border-solid border-def-3 fg-def-3 shadow-none; + } + + & > .icon { + @apply fg-inv-1; + } + } + + &.secondary { + @apply bg-def-acc-2 fg-def-1; + @apply border border-solid border-inv-2; + @apply shadow-button-secondary; + + &.ghost { + @apply bg-transparent border-none shadow-none; + } + + &:hover { + @apply bg-def-acc-3 border-solid shadow-button-secondary-hover; + border-color: theme(backgroundColor.secondary.700); + } + + &:focus-visible { + @apply bg-def-acc-3 border-solid border-inv-3 shadow-button-secondary-focus; + } + + &:active { + @apply bg-def-acc-3 border-solid border-inv-4 shadow-button-secondary-active; + } + + &:disabled { + @apply bg-def-2 border-solid border-def-2 fg-def-3 shadow-none; + } + + & > .icon { + @apply fg-def-1; + + &.icon-loading { + color: #0051ff; + } + } + } + + &.icon { + @apply p-2; + } + + &:has(> .icon-start):has(> .label) { + @apply pl-3.5; + } + + &:has(> .icon-end):has(> .label) { + @apply pr-3.5; + } + + & > div.loader { + @apply w-0 opacity-0; + @apply top-0 left-0 -mr-2; + transition: all 0.5s ease; + } + + &.loading { + @apply cursor-wait; + + & > div.loader { + @apply w-4 opacity-100; + margin-right: revert; + transition: all 0.5s ease; + } + } +} + +/* button group */ +.button-group .button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.button-group .button:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.button-group .button:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} diff --git a/pkgs/clan-app/ui/src/components/v2/Button/Button.mdx b/pkgs/clan-app/ui/src/components/v2/Button/Button.mdx new file mode 100644 index 000000000..9ecbb35a7 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Button/Button.mdx @@ -0,0 +1,43 @@ +import { DocsStory, Meta, Canvas } from "@storybook/blocks"; + +import * as ButtonStories from "./Button.stories"; + + + +# Button + +Buttons have a simple hierarchy, `primary` or `secondary`, and two sizes, `default` and `s`. + +A `Button` can also have a label with a `startIcon`, an `endIcon` or both: + +```tsx + +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+ + +); + +const meta: Meta = { + title: "Components/Button", + component: ButtonExamples, +}; + +export default meta; + +type Story = StoryObj; + +export const Primary: Story = { + args: { + hierarchy: "primary", + onAction: fn(async () => { + // wait 500 ms to simulate an action + await new Promise((resolve) => setTimeout(resolve, 500)); + // randomly fail to check that the loading state still returns to normal + if (Math.random() > 0.5) { + throw new Error("Action failure"); + } + }), + }, + parameters: { + test: { + mockTimers: true, + }, + }, + play: async ({ args, canvasElement, step }) => { + const canvas = within(canvasElement); + + const buttons = await canvas.findAllByRole("button"); + + for (const button of buttons) { + const testID = button.getAttribute("data-testid"); + + // skip disabled buttons + if (button.hasAttribute("disabled")) { + continue; + } + + await step(`Click on ${testID}`, async () => { + // check for the loader + const loaders = button.getElementsByClassName("loader"); + await expect(loaders.length).toEqual(1); + + // assert its width is 0 before we click + const [loader] = loaders; + await expect(loader.clientWidth).toEqual(0); + + // move the mouse over the button + await userEvent.hover(button); + + // the pointer should be normal + await expect(getCursorStyle(button)).toEqual("pointer"); + + // click the button + await userEvent.click(button); + + // check the button has changed + await waitFor(async () => { + // the action handler should have been called + await expect(args.onAction).toHaveBeenCalled(); + // the button should have a loading class + await expect(button).toHaveClass("loading"); + // the loader should be visible + await expect(loader.clientWidth).toBeGreaterThan(0); + // the pointer should have changed to wait + await expect(getCursorStyle(button)).toEqual("wait"); + }); + + // wait for the action handler to finish + await waitFor(async () => { + // the loading class should be removed + await expect(button).not.toHaveClass("loading"); + // the loader should be hidden + await expect(loader.clientWidth).toEqual(0); + // the pointer should be normal + await expect(getCursorStyle(button)).toEqual("pointer"); + }); + }); + } + }, +}; + +export const Secondary: Story = { + args: { + ...Primary.args, + hierarchy: "secondary", + }, + play: Primary.play, +}; + +export const GhostPrimary: Story = { + args: { + ...Primary.args, + hierarchy: "primary", + ghost: true, + }, + play: Primary.play, + decorators: [ + (Story) => ( +
+ +
+ ), + ], +}; + +export const GhostSecondary: Story = { + args: { + ...Primary.args, + hierarchy: "secondary", + ghost: true, + }, + play: Primary.play, +}; diff --git a/pkgs/clan-app/ui/src/components/v2/Button/Button.tsx b/pkgs/clan-app/ui/src/components/v2/Button/Button.tsx new file mode 100644 index 000000000..3416f525b --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Button/Button.tsx @@ -0,0 +1,116 @@ +import { splitProps, type JSX, createSignal, Show } from "solid-js"; +import cx from "classnames"; +import { Typography } from "../Typography/Typography"; +import { Button as KobalteButton } from "@kobalte/core/button"; + +import "./Button.css"; +import Icon, { IconVariant } from "@/src/components/v2/Icon/Icon"; +import { Loader } from "@/src/components/v2/Loader/Loader"; + +export type Size = "default" | "s"; +export type Hierarchy = "primary" | "secondary"; + +export type Action = () => Promise; + +export interface ButtonProps + extends JSX.ButtonHTMLAttributes { + hierarchy?: Hierarchy; + size?: Size; + ghost?: boolean; + children?: JSX.Element; + icon?: IconVariant; + startIcon?: IconVariant; + endIcon?: IconVariant; + class?: string; + onAction?: Action; +} + +const iconSizes: Record = { + default: "1rem", + s: "0.8125rem", +}; + +export const Button = (props: ButtonProps) => { + const [local, other] = splitProps(props, [ + "children", + "hierarchy", + "size", + "ghost", + "icon", + "startIcon", + "endIcon", + "class", + "onAction", + ]); + + const size = local.size || "default"; + const hierarchy = local.hierarchy || "primary"; + + const [loading, setLoading] = createSignal(false); + + const onClick = async () => { + if (!local.onAction) { + console.error("this should not be possible"); + return; + } + + setLoading(true); + + try { + await local.onAction(); + } catch (error) { + console.error("Error while executing action", error); + } + + setLoading(false); + }; + + const iconSize = iconSizes[local.size || "default"]; + + return ( + + + + {local.startIcon && ( + + )} + + {local.icon && !local.children && ( + + )} + + {local.children && !local.icon && ( + + {local.children} + + )} + + {local.endIcon && ( + + )} + + ); +}; diff --git a/pkgs/clan-app/ui/src/components/v2/Button/__snapshots__/Button.stories.tsx.snap b/pkgs/clan-app/ui/src/components/v2/Button/__snapshots__/Button.stories.tsx.snap new file mode 100644 index 000000000..c80fbcb65 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Button/__snapshots__/Button.stories.tsx.snap @@ -0,0 +1,1863 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Components/Button GhostPrimary play-test 1`] = ` +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+`; + +exports[`Components/Button GhostSecondary play-test 1`] = ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+`; + +exports[`Components/Button Primary play-test 1`] = ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+`; + +exports[`Components/Button Secondary play-test 1`] = ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+`; diff --git a/pkgs/clan-app/ui/src/components/v2/Icon/Icon.stories.tsx b/pkgs/clan-app/ui/src/components/v2/Icon/Icon.stories.tsx new file mode 100644 index 000000000..62bd72311 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Icon/Icon.stories.tsx @@ -0,0 +1,75 @@ +import type { Meta, StoryObj } from "@kachurun/storybook-solid"; +import { Component, For } from "solid-js"; +import Icon, { IconProps, IconVariant } from "./Icon"; + +const iconVariants: IconVariant[] = [ + "ClanIcon", + "Checkmark", + "Paperclip", + "Expand", + "Plus", + "Trash", + "Folder", + "CaretRight", + "CaretLeft", + "CaretUp", + "CaretDown", + "Close", + "Flash", + "EyeClose", + "EyeOpen", + "Settings", + "Grid", + "List", + "Edit", + "Load", + "ArrowRight", + "ArrowLeft", + "ArrowTop", + "ArrowBottom", + "Info", + "Update", + "Reload", + "Search", + "Report", + "Cursor", + "More", + "Filter", + "Download", + "Attention", + "User", + "WarningFilled", + "Modules", + "NewMachine", + "AI", + "Heart", + "SearchFilled", + "Offline", + "Switch", + "Tag", + "Machine", +]; + +const IconExamples: Component = (props) => ( +
+ {(item) => } +
+); + +const meta: Meta = { + title: "Components/Icon", + component: IconExamples, +}; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = {}; + +export const Large: Story = { + args: { + width: "2rem", + height: "2rem", + }, +}; diff --git a/pkgs/clan-app/ui/src/components/v2/Icon/Icon.tsx b/pkgs/clan-app/ui/src/components/v2/Icon/Icon.tsx new file mode 100644 index 000000000..67a2e5a10 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Icon/Icon.tsx @@ -0,0 +1,126 @@ +import cx from "classnames"; +import { Component, JSX, Show, splitProps } from "solid-js"; +import ArrowBottom from "@/icons/arrow-bottom.svg"; +import ArrowLeft from "@/icons/arrow-left.svg"; +import ArrowRight from "@/icons/arrow-right.svg"; +import ArrowTop from "@/icons/arrow-top.svg"; +import Attention from "@/icons/attention.svg"; +import CaretDown from "@/icons/caret-down.svg"; +import CaretLeft from "@/icons/caret-left.svg"; +import CaretRight from "@/icons/caret-right.svg"; +import CaretUp from "@/icons/caret-up.svg"; +import Checkmark from "@/icons/checkmark.svg"; +import ClanIcon from "@/icons/clan-icon.svg"; +import Cursor from "@/icons/cursor.svg"; +import Close from "@/icons/close.svg"; +import Download from "@/icons/download.svg"; +import Edit from "@/icons/edit.svg"; +import Expand from "@/icons/expand.svg"; +import EyeClose from "@/icons/eye-close.svg"; +import EyeOpen from "@/icons/eye-open.svg"; +import Filter from "@/icons/filter.svg"; +import Flash from "@/icons/flash.svg"; +import Folder from "@/icons/folder.svg"; +import Grid from "@/icons/grid.svg"; +import Info from "@/icons/info.svg"; +import List from "@/icons/list.svg"; +import Load from "@/icons/load.svg"; +import More from "@/icons/more.svg"; +import Paperclip from "@/icons/paperclip.svg"; +import Plus from "@/icons/plus.svg"; +import Reload from "@/icons/reload.svg"; +import Report from "@/icons/report.svg"; +import Search from "@/icons/search.svg"; +import Settings from "@/icons/settings.svg"; +import Trash from "@/icons/trash.svg"; +import Update from "@/icons/update.svg"; +import WarningFilled from "@/icons/warning-filled.svg"; +import Modules from "@/icons/modules.svg"; +import NewMachine from "@/icons/new-machine.svg"; +import AI from "@/icons/ai.svg"; +import User from "@/icons/user.svg"; +import Heart from "@/icons/heart.svg"; +import SearchFilled from "@/icons/search-filled.svg"; +import Offline from "@/icons/offline.svg"; +import Switch from "@/icons/switch.svg"; +import Tag from "@/icons/tag.svg"; +import Machine from "@/icons/machine.svg"; +import Loader from "@/icons/loader.svg"; +import { Dynamic } from "solid-js/web"; + +const icons = { + AI, + ArrowBottom, + ArrowLeft, + ArrowRight, + ArrowTop, + Attention, + CaretDown, + CaretLeft, + CaretRight, + CaretUp, + Checkmark, + ClanIcon, + Close, + Cursor, + Download, + Edit, + Expand, + EyeClose, + EyeOpen, + Filter, + Flash, + Folder, + Grid, + Heart, + Info, + List, + Load, + Machine, + Modules, + More, + NewMachine, + Offline, + Paperclip, + Plus, + Reload, + Report, + Search, + SearchFilled, + Settings, + Switch, + Tag, + Trash, + Update, + User, + WarningFilled, +}; + +export type IconVariant = keyof typeof icons; + +export interface IconProps extends JSX.SvgSVGAttributes { + icon: IconVariant; + class?: string; + size?: number | string; +} + +const Icon: Component = (props) => { + const [local, iconProps] = splitProps(props, ["icon", "class"]); + + const IconComponent = () => icons[local.icon]; + + return IconComponent() ? ( + + ) : undefined; +}; + +export default Icon; diff --git a/pkgs/clan-app/ui/src/components/v2/Icon/__snapshots__/Icon.stories.tsx.snap b/pkgs/clan-app/ui/src/components/v2/Icon/__snapshots__/Icon.stories.tsx.snap new file mode 100644 index 000000000..5811652d8 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Icon/__snapshots__/Icon.stories.tsx.snap @@ -0,0 +1,1071 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Components/Icon Default smoke-test 1`] = ` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+`; + +exports[`Components/Icon Large smoke-test 1`] = ` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+`; diff --git a/pkgs/clan-app/ui/src/components/v2/Loader/Loader.css b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.css new file mode 100644 index 000000000..c5a05e75b --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.css @@ -0,0 +1,104 @@ +.loader { + @apply relative; + @apply w-4 h-4; + + &.primary { + & > div.wrapper > div.parent, + & > div.child { + background: #00ff57; + } + } + + &.secondary { + & > div.wrapper > div.parent, + & > div.child { + background: #0051ff; + } + } + + & > div.wrapper { + @apply absolute top-0 left-0 w-full h-full; + + transform: translate(0%, 0%) rotate(-45deg); + animation: moveLoaderWrapper 1.8s ease-in-out infinite; + + & > div.parent { + @apply absolute top-1/2 left-1/2; + @apply w-2/3 h-2/3; + + border-radius: 50%; + animation: moveLoaderParent 1.8s ease-in-out infinite; + transform: translateX(-50%) translateY(-50%); + } + } + + & > .child { + @apply absolute z-10 top-1/2 left-1/2 w-1/2 h-1/2; + border-radius: 50%; + + transform: translate(-50%, -50%); + animation: moveLoaderChild 1.8s ease-in-out infinite; + } +} + +@keyframes moveLoaderWrapper { + 0% { + transform: translate(0%, 0%) rotate(-45deg); + } + + 35% { + transform: translate(-25%, 0%) rotate(-45deg); + } + + 50% { + transform: translate(0%, 0%) rotate(-45deg); + } + + 85% { + transform: translate(25%, 0%) rotate(-45deg); + } +} + +@keyframes moveLoaderParent { + 0% { + animation-timing-function: ease-in-out; + transform: translateX(-50%) translateY(-50%); + } + + 35% { + animation-timing-function: cubic-bezier(0.7, -0.9, 0.3, 3.2); + transform: translateX(-50%) translateY(-50%) skew(20deg, 20deg); + } + + 50% { + animation-timing-function: ease-in-out; + transform: translateX(-50%) translateY(-50%) skew(0deg, 0deg); + } + + 85% { + animation-timing-function: cubic-bezier(0.7, -0.9, 0.3, 3.2); + transform: translateX(-50%) translateY(-50%) skew(20deg, 20deg); + } +} + +@keyframes moveLoaderChild { + 0% { + animation-timing-function: ease-in-out; + transform: translateX(-50%) translateY(-50%); + } + + 35% { + animation-timing-function: cubic-bezier(0.7, -0.9, 0.3, 3.2); + transform: translateX(50%) translateY(-50%) scale(0.56); + } + + 50% { + animation-timing-function: ease-in-out; + transform: translateX(-50%) translateY(-50%); + } + + 85% { + animation-timing-function: cubic-bezier(0.7, -0.9, 0.3, 3.2); + transform: translateX(-150%) translateY(-50%) scale(0.56); + } +} diff --git a/pkgs/clan-app/ui/src/components/v2/Loader/Loader.stories.tsx b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.stories.tsx new file mode 100644 index 000000000..10f9218f1 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.stories.tsx @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from "@kachurun/storybook-solid"; +import { Loader, LoaderProps } from "@/src/components/v2/Loader/Loader"; + +const meta: Meta = { + title: "Components/Loader", + component: Loader, +}; + +export default meta; + +type Story = StoryObj; + +export const Primary: Story = { + args: { + hierarchy: "primary", + }, +}; + +export const Secondary: Story = { + args: { + hierarchy: "secondary", + }, +}; diff --git a/pkgs/clan-app/ui/src/components/v2/Loader/Loader.tsx b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.tsx new file mode 100644 index 000000000..2f6ca5dd8 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Loader/Loader.tsx @@ -0,0 +1,19 @@ +import "./Loader.css"; +import cx from "classnames"; + +export type Hierarchy = "primary" | "secondary"; + +export interface LoaderProps { + hierarchy?: Hierarchy; +} + +export const Loader = (props: LoaderProps) => { + return ( +
+
+
+
+
+
+ ); +}; diff --git a/pkgs/clan-app/ui/src/components/v2/Loader/__snapshots__/Loader.stories.tsx.snap b/pkgs/clan-app/ui/src/components/v2/Loader/__snapshots__/Loader.stories.tsx.snap new file mode 100644 index 000000000..800fd28e6 --- /dev/null +++ b/pkgs/clan-app/ui/src/components/v2/Loader/__snapshots__/Loader.stories.tsx.snap @@ -0,0 +1,23 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Components/Loader Primary smoke-test 1`] = ` +
+
+
+
+
+
+
+
+`; + +exports[`Components/Loader Secondary smoke-test 1`] = ` +
+
+
+
+
+
+
+
+`; diff --git a/pkgs/clan-app/ui/src/components/v2/Typography/Typography.css b/pkgs/clan-app/ui/src/components/v2/Typography/Typography.css index 3ebbf76ee..accb73569 100644 --- a/pkgs/clan-app/ui/src/components/v2/Typography/Typography.css +++ b/pkgs/clan-app/ui/src/components/v2/Typography/Typography.css @@ -23,25 +23,25 @@ &.font-size-default { font-size: 1rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.02rem; } &.font-size-s { font-size: 0.875rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.0175rem; } &.font-size-xs { font-size: 0.75rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.0225rem; } &.font-size-xxs { font-size: 0.6875rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.00688rem; } } @@ -52,38 +52,41 @@ &.font-size-default { font-size: 0.875rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.0175rem; } &.font-size-s { font-size: 0.8125rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.0175rem; } &.font-size-xs { font-size: 0.75rem; - line-height: 132%; + line-height: 1.32; letter-spacing: 0.0075rem; } } &.font-family-mono { - font-family: "Fira Code", monospace; + font-family: "Commit Mono", monospace; &.font-size-default { font-size: 0.8125rem; + line-height: 0; letter-spacing: normal; } &.font-size-s { font-size: 0.75rem; + line-height: 0; letter-spacing: normal; } &.font-size-xs { font-size: 0.6875rem; + line-height: 0; letter-spacing: normal; } } diff --git a/pkgs/clan-app/ui/src/components/v2/Typography/Typography.tsx b/pkgs/clan-app/ui/src/components/v2/Typography/Typography.tsx index 94e616413..743e61032 100644 --- a/pkgs/clan-app/ui/src/components/v2/Typography/Typography.tsx +++ b/pkgs/clan-app/ui/src/components/v2/Typography/Typography.tsx @@ -90,26 +90,6 @@ const sizeHierarchyMap: SizeForHierarchy = { }, }; -interface FamilyForHierarchy { - body: { - regular: string; - condensed: string; - }; - label: { - condensed: string; - mono: string; - }; - title: { - condensed: string; - }; - headline: { - regular: string; - }; - teaser: { - regular: string; - }; -} - const defaultFamilyMap: Record = { body: "condensed", label: "condensed", @@ -144,7 +124,7 @@ export const Typography = (props: _TypographyProps) => { const color = () => colorFor(props.color, props.inverted); const classList = mergeProps(props.classList, { - "font-body": props.hierarchy === "body" || !!props.hierarchy, + "font-body": props.hierarchy === "body" || !props.hierarchy, "font-label": props.hierarchy === "label", "font-title": props.hierarchy === "title", "font-headline": props.hierarchy === "headline", diff --git a/pkgs/clan-app/ui/src/components/v2/Typography/__snapshots__/Typography.stories.tsx.snap b/pkgs/clan-app/ui/src/components/v2/Typography/__snapshots__/Typography.stories.tsx.snap index 39aaff91d..1f20f4767 100644 --- a/pkgs/clan-app/ui/src/components/v2/Typography/__snapshots__/Typography.stories.tsx.snap +++ b/pkgs/clan-app/ui/src/components/v2/Typography/__snapshots__/Typography.stories.tsx.snap @@ -713,51 +713,51 @@ exports[`Components/Typography Headline smoke-test 1`] = ` - + headline / default / normal - + headline / default / medium - + headline / default / bold - + headline / m / normal - + headline / m / medium - + headline / m / bold - + headline / l / normal - + headline / l / medium - + headline / l / bold @@ -771,51 +771,51 @@ exports[`Components/Typography LabelCondensed smoke-test 1`] = ` - + label / default / normal - + label / default / medium - + label / default / bold - + label / s / normal - + label / s / medium - + label / s / bold - + label / xs / normal - + label / xs / medium - + label / xs / bold @@ -829,51 +829,51 @@ exports[`Components/Typography LabelMono smoke-test 1`] = ` - + label / default / normal - + label / default / medium - + label / default / bold - + label / s / normal - + label / s / medium - + label / s / bold - + label / xs / normal - + label / xs / medium - + label / xs / bold @@ -887,7 +887,7 @@ exports[`Components/Typography Teaser smoke-test 1`] = ` - + teaser / default / bold @@ -901,51 +901,51 @@ exports[`Components/Typography Title smoke-test 1`] = ` - + title / default / normal - + title / default / medium - + title / default / bold - + title / m / normal - + title / m / medium - + title / m / bold - + title / l / normal - + title / l / medium - + title / l / bold diff --git a/pkgs/clan-app/ui/src/components/v2/index.css b/pkgs/clan-app/ui/src/components/v2/index.css index fe2b4e799..35bb1af02 100644 --- a/pkgs/clan-app/ui/src/components/v2/index.css +++ b/pkgs/clan-app/ui/src/components/v2/index.css @@ -43,9 +43,50 @@ } @font-face { - font-family: "Fira Code"; + font-family: "Commit Mono"; font-weight: 400; - src: url(../../../.fonts/FiraCode-Regular.woff2) format("woff2"); + src: url(../../../.fonts/CommitMono-400-Regular.otf) format("otf"); +} + +:root { + --clr-bg-def-1: theme(colors.white); + --clr-bg-def-2: theme(colors.primary.50); + --clr-bg-def-3: theme(colors.secondary.100); + --clr-bg-def-4: theme(colors.secondary.200); + + --clr-border-def-1: theme(colors.secondary.50); + --clr-border-def-2: theme(colors.secondary.100); + --clr-border-def-3: theme(colors.secondary.200); + --clr-border-def-4: theme(colors.secondary.300); + + --clr-border-def-sem-inf-1: theme(colors.info.500); + --clr-border-def-sem-inf-2: theme(colors.info.600); + --clr-border-def-sem-inf-3: theme(colors.info.700); + --clr-border-def-sem-inf-4: theme(colors.info.800); + + --clr-bg-inv-1: theme(colors.primary.600); + --clr-bg-inv-2: theme(colors.primary.700); + --clr-bg-inv-3: theme(colors.primary.800); + --clr-bg-inv-4: theme(colors.primary.900); + + --clr-border-inv-1: theme(colors.secondary.700); + --clr-border-inv-2: theme(colors.secondary.800); + --clr-border-inv-3: theme(colors.secondary.900); + --clr-border-inv-4: theme(colors.secondary.950); + + --clr-bg-inv-acc-1: theme(colors.secondary.500); + --clr-bg-inv-acc-2: theme(colors.secondary.600); + --clr-bg-inv-acc-3: theme(colors.secondary.700); + + --clr-fg-def-1: theme(colors.secondary.950); + --clr-fg-def-2: theme(colors.secondary.900); + --clr-fg-def-3: theme(colors.secondary.700); + --clr-fg-def-4: theme(colors.secondary.400); + + --clr-fg-inv-1: theme(colors.white); + --clr-fg-inv-2: theme(colors.secondary.100); + --clr-fg-inv-3: theme(colors.secondary.300); + --clr-fg-inv-4: theme(colors.secondary.400); } html { diff --git a/pkgs/clan-app/ui/tailwind.config.ts b/pkgs/clan-app/ui/tailwind.config.ts index 2df88278b..a540896b4 100644 --- a/pkgs/clan-app/ui/tailwind.config.ts +++ b/pkgs/clan-app/ui/tailwind.config.ts @@ -1,11 +1,12 @@ import typography from "@tailwindcss/typography"; +import kobalte from "@kobalte/tailwindcss"; import core from "./tailwind/core-plugin"; /** @type {import('tailwindcss').Config} */ const config = { content: ["./src/**/*.{js,jsx,ts,tsx}"], theme: {}, - plugins: [typography, core], + plugins: [typography, core, kobalte], }; export default config; diff --git a/pkgs/clan-app/ui/tailwind/core-plugin.ts b/pkgs/clan-app/ui/tailwind/core-plugin.ts index 7e5264b42..3c1fbe6c9 100644 --- a/pkgs/clan-app/ui/tailwind/core-plugin.ts +++ b/pkgs/clan-app/ui/tailwind/core-plugin.ts @@ -25,6 +25,19 @@ const mkBorderUtils = ( [`.${prefix}-def-4`]: { [cssProperty]: theme("colors.secondary.400"), }, + // - def acc colors + [`.${prefix}-def-acc-1`]: { + [cssProperty]: theme("colors.secondary.500"), + }, + [`.${prefix}-def-acc-2`]: { + [cssProperty]: theme("colors.secondary.900"), + }, + [`.${prefix}-def-acc-3`]: { + [cssProperty]: theme("colors.secondary.900"), + }, + [`.${prefix}-def-acc-4`]: { + [cssProperty]: theme("colors.secondary.950"), + }, // - inverse colors [`.${prefix}-inv-1`]: { [cssProperty]: theme("colors.secondary.700"), @@ -38,7 +51,19 @@ const mkBorderUtils = ( [`.${prefix}-inv-4`]: { [cssProperty]: theme("colors.secondary.950"), }, - + // - inverse acc + [`.${prefix}-inv-acc-1`]: { + [cssProperty]: theme("colors.secondary.300"), + }, + [`.${prefix}-inv-acc-2`]: { + [cssProperty]: theme("colors.secondary.200"), + }, + [`.${prefix}-inv-acc-3`]: { + [cssProperty]: theme("colors.secondary.100"), + }, + [`.${prefix}-inv-acc-4`]: { + [cssProperty]: theme("colors.secondary.50"), + }, [`.${prefix}-int-1`]: { [cssProperty]: theme("colors.info.500"), }, @@ -191,7 +216,6 @@ export default plugin.withOptions( ...mkBorderUtils(theme, "border-t", "borderTop"), ...mkBorderUtils(theme, "border-l", "borderLeft"), ...mkBorderUtils(theme, "border-r", "borderRight"), - ...mkBorderUtils(theme, "outline", "outlineColor"), // Example: dark mode utilities (all elements within ) // ".dark .bg-def-1": { @@ -274,13 +298,21 @@ export default plugin.withOptions( }, boxShadow: { "input-active": "0px 0px 0px 1px #FFF, 0px 0px 0px 2px #203637", - "inner-primary": + "button-primary": "2px 2px 0px 0px var(--clr-bg-inv-acc-3, #415E63) inset", - "inner-primary-active": - "0px 0px 0px 1px #FFF, 0px 0px 0px 2px var(--clr-bg-inv-acc-4, #203637)", - "inner-secondary": + "button-primary-hover": + "2px 2px 0px 0px var(--clr-bg-inv-acc-2, #4F747A) inset", + "button-primary-focus": + "0px 0px 0px 1px #FFF, 0px 0px 0px 2px var(--clr-border-def-sem-inf-1, #06AAF1), 2px 2px 0px 0px var(--clr-bg-inv-acc-2, #4F747A) inset", + "button-primary-active": + "0px 0px 0px 1px #FFF, 0px 0px 0px 2px var(--clr-bg-inv-acc-4, #203637), -2px -2px 0px 0px var(--clr-bg-inv-acc-1, #7B9B9F) inset", + "button-secondary": "-2px -2px 0px 0px #CEDFE2 inset, 2px 2px 0px 0px white inset", - "inner-secondary-active": + "button-secondary-hover": + "-2px -2px 0px 0px #CEDFE2 inset, 2px 2px 0px 0px #FFF inset", + "button-secondary-focus": + "0px 0px 0px 1px #FFF, 0px 0px 0px 2px var(--clr-border-def-sem-inf-1, #06AAF1), -2px -2px 0px 0px #CEDFE2 inset, 2px 2px 0px 0px #FFF inset", + "button-secondary-active": "0px 0px 0px 1px white, 0px 0px 0px 2px var(--clr-bg-inv-acc-4, #203637), 2px 2px 0px 0px var(--clr-bg-inv-acc-2, #4F747A) inset", }, }, diff --git a/pkgs/icon-update/default.nix b/pkgs/icon-update/default.nix index 17c02338a..7de9b43bd 100644 --- a/pkgs/icon-update/default.nix +++ b/pkgs/icon-update/default.nix @@ -13,7 +13,7 @@ pkgs.writeShellApplication { text = '' REPO_ROOT="$(git rev-parse --show-toplevel)" - OUT_DIR="$(realpath "$REPO_ROOT"/pkgs/clan-app/ui/app/icons)" + OUT_DIR="$(realpath "$REPO_ROOT"/pkgs/clan-app/ui/src/icons)" export OUT_DIR deno run --allow-all ${src}/main.ts '';