sparkle-design 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +5 -0
  3. package/README.en.md +275 -0
  4. package/README.md +328 -0
  5. package/dist/components/ui/badge/index.d.ts +67 -0
  6. package/dist/components/ui/badge/index.figma.d.ts +1 -0
  7. package/dist/components/ui/badge/index.figma.js +28 -0
  8. package/dist/components/ui/badge/index.js +129 -0
  9. package/dist/components/ui/breadcrumb/index.d.ts +70 -0
  10. package/dist/components/ui/breadcrumb/index.figma.d.ts +1 -0
  11. package/dist/components/ui/breadcrumb/index.figma.js +28 -0
  12. package/dist/components/ui/breadcrumb/index.js +96 -0
  13. package/dist/components/ui/button/index.d.ts +145 -0
  14. package/dist/components/ui/button/index.figma.d.ts +1 -0
  15. package/dist/components/ui/button/index.figma.js +59 -0
  16. package/dist/components/ui/button/index.js +375 -0
  17. package/dist/components/ui/card/index.d.ts +193 -0
  18. package/dist/components/ui/card/index.figma.d.ts +1 -0
  19. package/dist/components/ui/card/index.figma.js +28 -0
  20. package/dist/components/ui/card/index.js +219 -0
  21. package/dist/components/ui/checkbox/index.d.ts +62 -0
  22. package/dist/components/ui/checkbox/index.figma.d.ts +1 -0
  23. package/dist/components/ui/checkbox/index.figma.js +34 -0
  24. package/dist/components/ui/checkbox/index.js +192 -0
  25. package/dist/components/ui/dialog/index.d.ts +106 -0
  26. package/dist/components/ui/dialog/index.figma.d.ts +1 -0
  27. package/dist/components/ui/dialog/index.figma.js +21 -0
  28. package/dist/components/ui/dialog/index.js +157 -0
  29. package/dist/components/ui/divider/index.d.ts +44 -0
  30. package/dist/components/ui/divider/index.figma.d.ts +1 -0
  31. package/dist/components/ui/divider/index.figma.js +39 -0
  32. package/dist/components/ui/divider/index.js +81 -0
  33. package/dist/components/ui/form/index.d.ts +171 -0
  34. package/dist/components/ui/form/index.figma.d.ts +1 -0
  35. package/dist/components/ui/form/index.figma.js +129 -0
  36. package/dist/components/ui/form/index.js +214 -0
  37. package/dist/components/ui/form/label.d.ts +4 -0
  38. package/dist/components/ui/form/label.js +20 -0
  39. package/dist/components/ui/icon/index.d.ts +71 -0
  40. package/dist/components/ui/icon/index.figma.d.ts +1 -0
  41. package/dist/components/ui/icon/index.figma.js +1858 -0
  42. package/dist/components/ui/icon/index.js +57 -0
  43. package/dist/components/ui/icon-button/index.d.ts +77 -0
  44. package/dist/components/ui/icon-button/index.figma.d.ts +1 -0
  45. package/dist/components/ui/icon-button/index.figma.js +43 -0
  46. package/dist/components/ui/icon-button/index.js +341 -0
  47. package/dist/components/ui/inline-message/index.d.ts +83 -0
  48. package/dist/components/ui/inline-message/index.figma.d.ts +1 -0
  49. package/dist/components/ui/inline-message/index.figma.js +26 -0
  50. package/dist/components/ui/inline-message/index.js +154 -0
  51. package/dist/components/ui/input/index.d.ts +118 -0
  52. package/dist/components/ui/input/index.figma.d.ts +1 -0
  53. package/dist/components/ui/input/index.figma.js +36 -0
  54. package/dist/components/ui/input/index.js +256 -0
  55. package/dist/components/ui/input-password/index.d.ts +27 -0
  56. package/dist/components/ui/input-password/index.figma.d.ts +1 -0
  57. package/dist/components/ui/input-password/index.figma.js +36 -0
  58. package/dist/components/ui/input-password/index.js +35 -0
  59. package/dist/components/ui/link/index.d.ts +68 -0
  60. package/dist/components/ui/link/index.figma.d.ts +1 -0
  61. package/dist/components/ui/link/index.figma.js +22 -0
  62. package/dist/components/ui/link/index.js +92 -0
  63. package/dist/components/ui/modal/index.d.ts +83 -0
  64. package/dist/components/ui/modal/index.figma.d.ts +1 -0
  65. package/dist/components/ui/modal/index.figma.js +61 -0
  66. package/dist/components/ui/modal/index.js +143 -0
  67. package/dist/components/ui/overlay/index.d.ts +19 -0
  68. package/dist/components/ui/overlay/index.figma.d.ts +1 -0
  69. package/dist/components/ui/overlay/index.figma.js +14 -0
  70. package/dist/components/ui/overlay/index.js +39 -0
  71. package/dist/components/ui/radio/index.d.ts +94 -0
  72. package/dist/components/ui/radio/index.figma.d.ts +1 -0
  73. package/dist/components/ui/radio/index.figma.js +63 -0
  74. package/dist/components/ui/radio/index.js +204 -0
  75. package/dist/components/ui/select/index.d.ts +175 -0
  76. package/dist/components/ui/select/index.figma.d.ts +1 -0
  77. package/dist/components/ui/select/index.figma.js +30 -0
  78. package/dist/components/ui/select/index.js +281 -0
  79. package/dist/components/ui/skeleton/index.d.ts +21 -0
  80. package/dist/components/ui/skeleton/index.figma.d.ts +1 -0
  81. package/dist/components/ui/skeleton/index.figma.js +14 -0
  82. package/dist/components/ui/skeleton/index.js +32 -0
  83. package/dist/components/ui/slider/index.d.ts +75 -0
  84. package/dist/components/ui/slider/index.figma.d.ts +1 -0
  85. package/dist/components/ui/slider/index.figma.js +28 -0
  86. package/dist/components/ui/slider/index.js +113 -0
  87. package/dist/components/ui/slider/utils.d.ts +16 -0
  88. package/dist/components/ui/slider/utils.js +56 -0
  89. package/dist/components/ui/spinner/index.d.ts +42 -0
  90. package/dist/components/ui/spinner/index.figma.d.ts +1 -0
  91. package/dist/components/ui/spinner/index.figma.js +16 -0
  92. package/dist/components/ui/spinner/index.js +51 -0
  93. package/dist/components/ui/switch/index.d.ts +46 -0
  94. package/dist/components/ui/switch/index.figma.d.ts +1 -0
  95. package/dist/components/ui/switch/index.figma.js +27 -0
  96. package/dist/components/ui/switch/index.js +75 -0
  97. package/dist/components/ui/tabs/index.d.ts +53 -0
  98. package/dist/components/ui/tabs/index.figma.d.ts +1 -0
  99. package/dist/components/ui/tabs/index.figma.js +55 -0
  100. package/dist/components/ui/tabs/index.js +164 -0
  101. package/dist/components/ui/tag/index.d.ts +50 -0
  102. package/dist/components/ui/tag/index.figma.d.ts +1 -0
  103. package/dist/components/ui/tag/index.figma.js +32 -0
  104. package/dist/components/ui/tag/index.js +177 -0
  105. package/dist/components/ui/textarea/index.d.ts +49 -0
  106. package/dist/components/ui/textarea/index.figma.d.ts +1 -0
  107. package/dist/components/ui/textarea/index.figma.js +27 -0
  108. package/dist/components/ui/textarea/index.js +94 -0
  109. package/dist/components/ui/toast/index.d.ts +60 -0
  110. package/dist/components/ui/toast/index.figma.d.ts +1 -0
  111. package/dist/components/ui/toast/index.figma.js +26 -0
  112. package/dist/components/ui/toast/index.js +57 -0
  113. package/dist/components/ui/tooltip/index.d.ts +52 -0
  114. package/dist/components/ui/tooltip/index.figma.d.ts +1 -0
  115. package/dist/components/ui/tooltip/index.figma.js +23 -0
  116. package/dist/components/ui/tooltip/index.js +65 -0
  117. package/dist/index.d.ts +27 -0
  118. package/dist/index.js +27 -0
  119. package/dist/lib/utils.d.ts +2 -0
  120. package/dist/lib/utils.js +5 -0
  121. package/dist/test/helpers.d.ts +56 -0
  122. package/dist/test/helpers.js +182 -0
  123. package/dist/test/setup.d.ts +1 -0
  124. package/dist/test/setup.js +38 -0
  125. package/package.json +253 -0
@@ -0,0 +1,27 @@
1
+ export * from "./components/ui/badge";
2
+ export * from "./components/ui/breadcrumb";
3
+ export * from "./components/ui/button";
4
+ export * from "./components/ui/card";
5
+ export * from "./components/ui/checkbox";
6
+ export * from "./components/ui/dialog";
7
+ export * from "./components/ui/divider";
8
+ export * from "./components/ui/form";
9
+ export * from "./components/ui/icon";
10
+ export * from "./components/ui/icon-button";
11
+ export * from "./components/ui/inline-message";
12
+ export * from "./components/ui/input";
13
+ export * from "./components/ui/input-password";
14
+ export * from "./components/ui/link";
15
+ export * from "./components/ui/modal";
16
+ export * from "./components/ui/overlay";
17
+ export * from "./components/ui/radio";
18
+ export * from "./components/ui/select";
19
+ export * from "./components/ui/skeleton";
20
+ export * from "./components/ui/slider";
21
+ export * from "./components/ui/spinner";
22
+ export * from "./components/ui/switch";
23
+ export * from "./components/ui/tabs";
24
+ export * from "./components/ui/tag";
25
+ export * from "./components/ui/textarea";
26
+ export * from "./components/ui/toast";
27
+ export * from "./components/ui/tooltip";
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ export * from "./components/ui/badge/index.js";
2
+ export * from "./components/ui/breadcrumb/index.js";
3
+ export * from "./components/ui/button/index.js";
4
+ export * from "./components/ui/card/index.js";
5
+ export * from "./components/ui/checkbox/index.js";
6
+ export * from "./components/ui/dialog/index.js";
7
+ export * from "./components/ui/divider/index.js";
8
+ export * from "./components/ui/form/index.js";
9
+ export * from "./components/ui/icon/index.js";
10
+ export * from "./components/ui/icon-button/index.js";
11
+ export * from "./components/ui/inline-message/index.js";
12
+ export * from "./components/ui/input/index.js";
13
+ export * from "./components/ui/input-password/index.js";
14
+ export * from "./components/ui/link/index.js";
15
+ export * from "./components/ui/modal/index.js";
16
+ export * from "./components/ui/overlay/index.js";
17
+ export * from "./components/ui/radio/index.js";
18
+ export * from "./components/ui/select/index.js";
19
+ export * from "./components/ui/skeleton/index.js";
20
+ export * from "./components/ui/slider/index.js";
21
+ export * from "./components/ui/spinner/index.js";
22
+ export * from "./components/ui/switch/index.js";
23
+ export * from "./components/ui/tabs/index.js";
24
+ export * from "./components/ui/tag/index.js";
25
+ export * from "./components/ui/textarea/index.js";
26
+ export * from "./components/ui/toast/index.js";
27
+ export * from "./components/ui/tooltip/index.js";
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,5 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
@@ -0,0 +1,56 @@
1
+ import React from "react";
2
+ /**
3
+ * テストコンテナのセットアップとクリーンアップを管理するヘルパー
4
+ * en: Helper to manage test container setup and cleanup
5
+ */
6
+ export declare class TestContainer {
7
+ private container;
8
+ private root;
9
+ setup(): void;
10
+ cleanup(): void;
11
+ render(element: React.ReactElement): void;
12
+ getContainer(): HTMLDivElement;
13
+ querySelector<T extends Element = Element>(selector: string): T;
14
+ queryByTestId<T extends HTMLElement = HTMLElement>(testId: string): T;
15
+ queryInput(selector?: string): HTMLInputElement;
16
+ queryButton(selector?: string): HTMLButtonElement;
17
+ }
18
+ /**
19
+ * イベントディスパッチのヘルパー
20
+ * en: Event dispatch helpers
21
+ */
22
+ export declare const EventHelpers: {
23
+ click(element: Element): void;
24
+ change(element: HTMLInputElement | HTMLTextAreaElement, value: string): void;
25
+ keyDown(element: Element, key: string): void;
26
+ focus(element: HTMLElement): void;
27
+ blur(element: HTMLElement): void;
28
+ };
29
+ /**
30
+ * アクセシビリティテストのヘルパー
31
+ * en: Accessibility test helpers
32
+ */
33
+ export declare const A11yHelpers: {
34
+ hasAriaLabel(element: Element, expectedLabel: string): boolean;
35
+ hasAriaDescribedBy(element: Element): boolean;
36
+ hasRole(element: Element, expectedRole: string): boolean;
37
+ isDisabled(element: Element): boolean;
38
+ hasValidAriaExpanded(element: Element): boolean;
39
+ };
40
+ /**
41
+ * CSS クラステストのヘルパー
42
+ * en: CSS class test helpers
43
+ */
44
+ export declare const StyleHelpers: {
45
+ hasClass(element: Element, className: string): boolean;
46
+ hasClasses(element: Element, classNames: string[]): boolean;
47
+ getComputedStyleProperty(element: Element, property: string): string;
48
+ };
49
+ /**
50
+ * 非同期テストのヘルパー
51
+ * en: Async test helpers
52
+ */
53
+ export declare const AsyncHelpers: {
54
+ waitFor(callback: () => boolean | void, timeout?: number, interval?: number): Promise<void>;
55
+ delay(ms: number): Promise<void>;
56
+ };
@@ -0,0 +1,182 @@
1
+ import ReactDOM from "react-dom/client";
2
+ import { act } from "@testing-library/react";
3
+ /**
4
+ * テストコンテナのセットアップとクリーンアップを管理するヘルパー
5
+ * en: Helper to manage test container setup and cleanup
6
+ */
7
+ export class TestContainer {
8
+ constructor() {
9
+ this.container = null;
10
+ this.root = null;
11
+ }
12
+ setup() {
13
+ this.container = document.createElement("div");
14
+ document.body.appendChild(this.container);
15
+ this.root = ReactDOM.createRoot(this.container);
16
+ }
17
+ cleanup() {
18
+ if (this.root) {
19
+ act(() => {
20
+ this.root.unmount();
21
+ });
22
+ this.root = null;
23
+ }
24
+ if (this.container) {
25
+ document.body.removeChild(this.container);
26
+ this.container = null;
27
+ }
28
+ }
29
+ render(element) {
30
+ if (!this.root) {
31
+ throw new Error("Container not set up. Call setup() first.");
32
+ }
33
+ act(() => {
34
+ this.root.render(element);
35
+ });
36
+ }
37
+ getContainer() {
38
+ if (!this.container) {
39
+ throw new Error("Container not set up. Call setup() first.");
40
+ }
41
+ return this.container;
42
+ }
43
+ querySelector(selector) {
44
+ const element = this.getContainer().querySelector(selector);
45
+ if (!element) {
46
+ throw new Error(`Element not found: ${selector}`);
47
+ }
48
+ return element;
49
+ }
50
+ queryByTestId(testId) {
51
+ return this.querySelector(`[data-testid="${testId}"]`);
52
+ }
53
+ queryInput(selector = "input") {
54
+ const element = this.getContainer().querySelector(selector);
55
+ if (!element) {
56
+ throw new Error(`Input element not found: ${selector}`);
57
+ }
58
+ return element;
59
+ }
60
+ queryButton(selector = "button") {
61
+ const element = this.getContainer().querySelector(selector);
62
+ if (!element) {
63
+ throw new Error(`Button element not found: ${selector}`);
64
+ }
65
+ return element;
66
+ }
67
+ }
68
+ /**
69
+ * イベントディスパッチのヘルパー
70
+ * en: Event dispatch helpers
71
+ */
72
+ export const EventHelpers = {
73
+ click(element) {
74
+ act(() => {
75
+ element.dispatchEvent(new MouseEvent("click", { bubbles: true }));
76
+ });
77
+ },
78
+ change(element, value) {
79
+ act(() => {
80
+ var _a;
81
+ // input/textarea 双方に対応した value セッターを取得
82
+ // en: obtain native value setter for both input and textarea
83
+ const proto = element instanceof HTMLTextAreaElement
84
+ ? window.HTMLTextAreaElement.prototype
85
+ : window.HTMLInputElement.prototype;
86
+ const nativeValueSetter = (_a = Object.getOwnPropertyDescriptor(proto, "value")) === null || _a === void 0 ? void 0 : _a.set;
87
+ if (nativeValueSetter) {
88
+ nativeValueSetter.call(element, value);
89
+ }
90
+ else {
91
+ element.value = value; // フォールバック / fallback
92
+ }
93
+ element.dispatchEvent(new Event("input", { bubbles: true }));
94
+ element.dispatchEvent(new Event("change", { bubbles: true }));
95
+ });
96
+ },
97
+ keyDown(element, key) {
98
+ act(() => {
99
+ element.dispatchEvent(new KeyboardEvent("keydown", { key, bubbles: true }));
100
+ });
101
+ },
102
+ focus(element) {
103
+ act(() => {
104
+ element.focus();
105
+ });
106
+ },
107
+ blur(element) {
108
+ act(() => {
109
+ element.blur();
110
+ });
111
+ },
112
+ };
113
+ /**
114
+ * アクセシビリティテストのヘルパー
115
+ * en: Accessibility test helpers
116
+ */
117
+ export const A11yHelpers = {
118
+ hasAriaLabel(element, expectedLabel) {
119
+ return element.getAttribute("aria-label") === expectedLabel;
120
+ },
121
+ hasAriaDescribedBy(element) {
122
+ return element.hasAttribute("aria-describedby");
123
+ },
124
+ hasRole(element, expectedRole) {
125
+ return element.getAttribute("role") === expectedRole;
126
+ },
127
+ isDisabled(element) {
128
+ return (element.hasAttribute("disabled") ||
129
+ element.getAttribute("aria-disabled") === "true");
130
+ },
131
+ hasValidAriaExpanded(element) {
132
+ const ariaExpanded = element.getAttribute("aria-expanded");
133
+ return ariaExpanded === "true" || ariaExpanded === "false";
134
+ },
135
+ };
136
+ /**
137
+ * CSS クラステストのヘルパー
138
+ * en: CSS class test helpers
139
+ */
140
+ export const StyleHelpers = {
141
+ hasClass(element, className) {
142
+ return element.classList.contains(className);
143
+ },
144
+ hasClasses(element, classNames) {
145
+ return classNames.every(className => element.classList.contains(className));
146
+ },
147
+ getComputedStyleProperty(element, property) {
148
+ return window.getComputedStyle(element).getPropertyValue(property);
149
+ },
150
+ };
151
+ /**
152
+ * 非同期テストのヘルパー
153
+ * en: Async test helpers
154
+ */
155
+ export const AsyncHelpers = {
156
+ waitFor(callback, timeout = 1000, interval = 50) {
157
+ return new Promise((resolve, reject) => {
158
+ const startTime = Date.now();
159
+ const check = () => {
160
+ try {
161
+ const result = callback();
162
+ if (result !== false) {
163
+ resolve();
164
+ return;
165
+ }
166
+ }
167
+ catch (error) {
168
+ // Continue checking
169
+ }
170
+ if (Date.now() - startTime >= timeout) {
171
+ reject(new Error(`Timeout after ${timeout}ms`));
172
+ return;
173
+ }
174
+ setTimeout(check, interval);
175
+ };
176
+ check();
177
+ });
178
+ },
179
+ delay(ms) {
180
+ return new Promise(resolve => setTimeout(resolve, ms));
181
+ },
182
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ // Vitest テストセットアップファイル
2
+ // en: Vitest test setup file
3
+ import { expect } from "vitest";
4
+ import * as matchers from "@testing-library/jest-dom/matchers";
5
+ // Testing Library matcher拡張
6
+ // en: Extend Testing Library matchers
7
+ expect.extend(matchers);
8
+ // jsdom環境でのReact 18対応
9
+ // en: React 18 support for jsdom environment
10
+ Object.defineProperty(window, "IS_REACT_ACT_ENVIRONMENT", {
11
+ writable: true,
12
+ value: true,
13
+ });
14
+ // ResizeObserver polyfill for jsdom
15
+ // en: ResizeObserver polyfill for jsdom
16
+ global.ResizeObserver = class ResizeObserver {
17
+ constructor(callback) {
18
+ this.callback = callback;
19
+ }
20
+ observe() { }
21
+ unobserve() { }
22
+ disconnect() { }
23
+ };
24
+ // MatchMedia polyfill for jsdom
25
+ // en: MatchMedia polyfill for jsdom
26
+ Object.defineProperty(window, "matchMedia", {
27
+ writable: true,
28
+ value: (query) => ({
29
+ matches: false,
30
+ media: query,
31
+ onchange: null,
32
+ addListener: () => { },
33
+ removeListener: () => { },
34
+ addEventListener: () => { },
35
+ removeEventListener: () => { },
36
+ dispatchEvent: () => { },
37
+ }),
38
+ });
package/package.json ADDED
@@ -0,0 +1,253 @@
1
+ {
2
+ "name": "sparkle-design",
3
+ "version": "0.9.0",
4
+ "publishConfig": {
5
+ "registry": "https://registry.npmjs.org",
6
+ "access": "public"
7
+ },
8
+ "author": "Goodpatch Inc. <sparkle-design@goodpatch.com>",
9
+ "type": "module",
10
+ "license": "Apache-2.0",
11
+ "description": "Sparkle DesignのReactコンポーネントライブラリ",
12
+ "keywords": [
13
+ "react",
14
+ "components",
15
+ "ui",
16
+ "design-system",
17
+ "tailwind",
18
+ "sparkle-design"
19
+ ],
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/goodpatch/sparkle-design"
23
+ },
24
+ "homepage": "https://sparkle-design.goodpatch.com",
25
+ "bugs": {
26
+ "url": "https://github.com/goodpatch/sparkle-design/issues"
27
+ },
28
+ "scripts": {
29
+ "dev": "next dev",
30
+ "build": "next build",
31
+ "start": "next start",
32
+ "lint": "next lint",
33
+ "test": "vitest run --project unit",
34
+ "test:watch": "vitest --project unit",
35
+ "test:ai-analyze": "npm test > test-output.log 2>&1 && echo 'Test results saved to test-output.log for AI analysis'",
36
+ "test:failures": "npm test > test-output.log 2>&1 && grep -A 5 -B 5 'FAIL\\|✗\\|Error' test-output.log > test-failures.log && echo 'Test failures extracted to test-failures.log'",
37
+ "test:cleanup": "rm -f test-output.log test-failures.log test-*.log",
38
+ "storybook": "storybook dev -p 6006",
39
+ "build-storybook": "storybook build --output-dir public/storybook",
40
+ "build:css": "npx --yes sparkle-design-cli generate",
41
+ "build:registry": "shadcn build",
42
+ "build:registry:full": "make registry",
43
+ "build:registry:merge": "node scripts/merge-registry.mjs",
44
+ "build:registry:vercel": "bash scripts/build-registry-vercel.sh",
45
+ "preinstall": "npx only-allow pnpm",
46
+ "postinstall": "npx lightningcss --version || true",
47
+ "build:package": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
48
+ "format": "prettier --config ./.prettierrc -w \"**/*.{js,ts,tsx,css,md,json}\"",
49
+ "format:check": "prettier --config ./.prettierrc --check \"**/*.{js,ts,tsx,css,md,json}\"",
50
+ "lint:fix": "next lint --fix",
51
+ "lint:check": "next lint",
52
+ "type-check": "tsc --noEmit",
53
+ "update:public-domain": "node scripts/update-public-domain.mjs"
54
+ },
55
+ "dependencies": {
56
+ "@figma/code-connect": "^1.3.4",
57
+ "@hookform/resolvers": "^5.2.2",
58
+ "class-variance-authority": "^0.7.1",
59
+ "clsx": "^2.1.1",
60
+ "glob": "^11.0.0",
61
+ "lucide-react": "^0.487.0",
62
+ "radix-ui": "^1.4.2",
63
+ "react": "^18 || ^19",
64
+ "react-dom": "^18 || ^19",
65
+ "react-hook-form": "^7.63.0",
66
+ "shadcn": "^2.5.0",
67
+ "sonner": "^2.0.7",
68
+ "tailwind-merge": "^3.2.0",
69
+ "tw-animate-css": "^1.2.5",
70
+ "zod": "^4.1.11"
71
+ },
72
+ "devDependencies": {
73
+ "@chromatic-com/storybook": "^5.1.1",
74
+ "@storybook/addon-a11y": "^10.3.5",
75
+ "@storybook/addon-docs": "^10.3.5",
76
+ "@storybook/addon-onboarding": "^10.3.5",
77
+ "@storybook/addon-vitest": "^10.3.5",
78
+ "@storybook/nextjs-vite": "^10.3.5",
79
+ "@tailwindcss/postcss": "^4.1.7",
80
+ "@testing-library/jest-dom": "^6.6.3",
81
+ "@testing-library/react": "^16.3.0",
82
+ "@testing-library/user-event": "^14.6.1",
83
+ "@types/node": "^20",
84
+ "@types/react": "^18",
85
+ "@types/react-dom": "^18",
86
+ "@vitest/browser": "^3.0.9",
87
+ "@vitest/coverage-v8": "^3.0.9",
88
+ "axe-core": "^4.10.3",
89
+ "eslint": "^9",
90
+ "eslint-config-next": "15.3.1",
91
+ "eslint-plugin-import": "^2.32.0",
92
+ "eslint-plugin-jsx-a11y": "^6.10.2",
93
+ "eslint-plugin-storybook": "^10.3.5",
94
+ "next": "15.5.15",
95
+ "playwright": "^1.51.1",
96
+ "prettier": "^3.6.2",
97
+ "storybook": "^10.3.5",
98
+ "tailwindcss": "^4",
99
+ "tsc-alias": "^1.8.16",
100
+ "typescript": "^5",
101
+ "vite": "6.4.2",
102
+ "vitest": "^3.0.9"
103
+ },
104
+ "main": "./dist/index.js",
105
+ "types": "./dist/index.d.ts",
106
+ "exports": {
107
+ ".": {
108
+ "types": "./dist/index.d.ts",
109
+ "import": "./dist/index.js",
110
+ "require": "./dist/index.js"
111
+ },
112
+ "./badge": {
113
+ "types": "./dist/components/ui/badge/index.d.ts",
114
+ "import": "./dist/components/ui/badge/index.js",
115
+ "require": "./dist/components/ui/badge/index.js"
116
+ },
117
+ "./breadcrumb": {
118
+ "types": "./dist/components/ui/breadcrumb/index.d.ts",
119
+ "import": "./dist/components/ui/breadcrumb/index.js",
120
+ "require": "./dist/components/ui/breadcrumb/index.js"
121
+ },
122
+ "./button": {
123
+ "types": "./dist/components/ui/button/index.d.ts",
124
+ "import": "./dist/components/ui/button/index.js",
125
+ "require": "./dist/components/ui/button/index.js"
126
+ },
127
+ "./card": {
128
+ "types": "./dist/components/ui/card/index.d.ts",
129
+ "import": "./dist/components/ui/card/index.js",
130
+ "require": "./dist/components/ui/card/index.js"
131
+ },
132
+ "./checkbox": {
133
+ "types": "./dist/components/ui/checkbox/index.d.ts",
134
+ "import": "./dist/components/ui/checkbox/index.js",
135
+ "require": "./dist/components/ui/checkbox/index.js"
136
+ },
137
+ "./dialog": {
138
+ "types": "./dist/components/ui/dialog/index.d.ts",
139
+ "import": "./dist/components/ui/dialog/index.js",
140
+ "require": "./dist/components/ui/dialog/index.js"
141
+ },
142
+ "./divider": {
143
+ "types": "./dist/components/ui/divider/index.d.ts",
144
+ "import": "./dist/components/ui/divider/index.js",
145
+ "require": "./dist/components/ui/divider/index.js"
146
+ },
147
+ "./form": {
148
+ "types": "./dist/components/ui/form/index.d.ts",
149
+ "import": "./dist/components/ui/form/index.js",
150
+ "require": "./dist/components/ui/form/index.js"
151
+ },
152
+ "./icon": {
153
+ "types": "./dist/components/ui/icon/index.d.ts",
154
+ "import": "./dist/components/ui/icon/index.js",
155
+ "require": "./dist/components/ui/icon/index.js"
156
+ },
157
+ "./icon-button": {
158
+ "types": "./dist/components/ui/icon-button/index.d.ts",
159
+ "import": "./dist/components/ui/icon-button/index.js",
160
+ "require": "./dist/components/ui/icon-button/index.js"
161
+ },
162
+ "./inline-message": {
163
+ "types": "./dist/components/ui/inline-message/index.d.ts",
164
+ "import": "./dist/components/ui/inline-message/index.js",
165
+ "require": "./dist/components/ui/inline-message/index.js"
166
+ },
167
+ "./input": {
168
+ "types": "./dist/components/ui/input/index.d.ts",
169
+ "import": "./dist/components/ui/input/index.js",
170
+ "require": "./dist/components/ui/input/index.js"
171
+ },
172
+ "./input-password": {
173
+ "types": "./dist/components/ui/input-password/index.d.ts",
174
+ "import": "./dist/components/ui/input-password/index.js",
175
+ "require": "./dist/components/ui/input-password/index.js"
176
+ },
177
+ "./link": {
178
+ "types": "./dist/components/ui/link/index.d.ts",
179
+ "import": "./dist/components/ui/link/index.js",
180
+ "require": "./dist/components/ui/link/index.js"
181
+ },
182
+ "./modal": {
183
+ "types": "./dist/components/ui/modal/index.d.ts",
184
+ "import": "./dist/components/ui/modal/index.js",
185
+ "require": "./dist/components/ui/modal/index.js"
186
+ },
187
+ "./overlay": {
188
+ "types": "./dist/components/ui/overlay/index.d.ts",
189
+ "import": "./dist/components/ui/overlay/index.js",
190
+ "require": "./dist/components/ui/overlay/index.js"
191
+ },
192
+ "./radio": {
193
+ "types": "./dist/components/ui/radio/index.d.ts",
194
+ "import": "./dist/components/ui/radio/index.js",
195
+ "require": "./dist/components/ui/radio/index.js"
196
+ },
197
+ "./select": {
198
+ "types": "./dist/components/ui/select/index.d.ts",
199
+ "import": "./dist/components/ui/select/index.js",
200
+ "require": "./dist/components/ui/select/index.js"
201
+ },
202
+ "./skeleton": {
203
+ "types": "./dist/components/ui/skeleton/index.d.ts",
204
+ "import": "./dist/components/ui/skeleton/index.js",
205
+ "require": "./dist/components/ui/skeleton/index.js"
206
+ },
207
+ "./slider": {
208
+ "types": "./dist/components/ui/slider/index.d.ts",
209
+ "import": "./dist/components/ui/slider/index.js",
210
+ "require": "./dist/components/ui/slider/index.js"
211
+ },
212
+ "./spinner": {
213
+ "types": "./dist/components/ui/spinner/index.d.ts",
214
+ "import": "./dist/components/ui/spinner/index.js",
215
+ "require": "./dist/components/ui/spinner/index.js"
216
+ },
217
+ "./switch": {
218
+ "types": "./dist/components/ui/switch/index.d.ts",
219
+ "import": "./dist/components/ui/switch/index.js",
220
+ "require": "./dist/components/ui/switch/index.js"
221
+ },
222
+ "./tabs": {
223
+ "types": "./dist/components/ui/tabs/index.d.ts",
224
+ "import": "./dist/components/ui/tabs/index.js",
225
+ "require": "./dist/components/ui/tabs/index.js"
226
+ },
227
+ "./tag": {
228
+ "types": "./dist/components/ui/tag/index.d.ts",
229
+ "import": "./dist/components/ui/tag/index.js",
230
+ "require": "./dist/components/ui/tag/index.js"
231
+ },
232
+ "./textarea": {
233
+ "types": "./dist/components/ui/textarea/index.d.ts",
234
+ "import": "./dist/components/ui/textarea/index.js",
235
+ "require": "./dist/components/ui/textarea/index.js"
236
+ },
237
+ "./toast": {
238
+ "types": "./dist/components/ui/toast/index.d.ts",
239
+ "import": "./dist/components/ui/toast/index.js",
240
+ "require": "./dist/components/ui/toast/index.js"
241
+ },
242
+ "./tooltip": {
243
+ "types": "./dist/components/ui/tooltip/index.d.ts",
244
+ "import": "./dist/components/ui/tooltip/index.js",
245
+ "require": "./dist/components/ui/tooltip/index.js"
246
+ }
247
+ },
248
+ "files": [
249
+ "dist",
250
+ "LICENSE",
251
+ "NOTICE"
252
+ ]
253
+ }