@grasp-labs/ds-react-components 0.13.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 (104) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +52 -0
  3. package/dist/assets/fonts/Inter-VariableFont_opsz,wght.ttf +0 -0
  4. package/dist/components/advancedFilter/AdvancedFilter.d.ts +8 -0
  5. package/dist/components/advancedFilter/AdvancedFilterRow.d.ts +7 -0
  6. package/dist/components/advancedFilter/index.d.ts +4 -0
  7. package/dist/components/advancedFilter/types.d.ts +43 -0
  8. package/dist/components/advancedFilter/utils.d.ts +3 -0
  9. package/dist/components/alert/Alert.d.ts +19 -0
  10. package/dist/components/alert/index.d.ts +1 -0
  11. package/dist/components/animatedList/AnimatedList.d.ts +19 -0
  12. package/dist/components/animatedList/hooks/useLayoutAnimation.d.ts +9 -0
  13. package/dist/components/animatedList/index.d.ts +2 -0
  14. package/dist/components/animatedList/types.d.ts +19 -0
  15. package/dist/components/baseButton/BaseButton.d.ts +13 -0
  16. package/dist/components/baseButton/index.d.ts +1 -0
  17. package/dist/components/baseTextBox/BaseTextBox.d.ts +40 -0
  18. package/dist/components/baseTextBox/index.d.ts +1 -0
  19. package/dist/components/baseTextBox/useInputValidation.d.ts +3 -0
  20. package/dist/components/breadcrumb/Breadcrumb.d.ts +29 -0
  21. package/dist/components/breadcrumb/index.d.ts +1 -0
  22. package/dist/components/button/Button.d.ts +15 -0
  23. package/dist/components/button/index.d.ts +1 -0
  24. package/dist/components/card/Card.d.ts +27 -0
  25. package/dist/components/card/index.d.ts +1 -0
  26. package/dist/components/checkbox/Checkbox.d.ts +17 -0
  27. package/dist/components/checkbox/CheckboxIcon.d.ts +14 -0
  28. package/dist/components/checkbox/index.d.ts +4 -0
  29. package/dist/components/dialog/ConfirmationDialog.d.ts +36 -0
  30. package/dist/components/dialog/Dialog.d.ts +31 -0
  31. package/dist/components/dialog/index.d.ts +2 -0
  32. package/dist/components/dynamicIcon/DynamicIcon.d.ts +8 -0
  33. package/dist/components/dynamicIcon/index.d.ts +2 -0
  34. package/dist/components/field/Field.d.ts +82 -0
  35. package/dist/components/field/index.d.ts +16 -0
  36. package/dist/components/flow/FlowTile.d.ts +3 -0
  37. package/dist/components/flow/MetadataList.d.ts +6 -0
  38. package/dist/components/flow/StatusIcon.d.ts +5 -0
  39. package/dist/components/flow/TileHeader.d.ts +8 -0
  40. package/dist/components/flow/index.d.ts +2 -0
  41. package/dist/components/flow/types.d.ts +15 -0
  42. package/dist/components/iconButton/IconButton.d.ts +15 -0
  43. package/dist/components/iconButton/index.d.ts +1 -0
  44. package/dist/components/jsonEditor/JsonEditor.d.ts +7 -0
  45. package/dist/components/jsonEditor/index.d.ts +1 -0
  46. package/dist/components/list/List.d.ts +28 -0
  47. package/dist/components/list/ListItem.d.ts +20 -0
  48. package/dist/components/list/index.d.ts +2 -0
  49. package/dist/components/logo/Logo.d.ts +5 -0
  50. package/dist/components/logo/index.d.ts +2 -0
  51. package/dist/components/menu/Menu.d.ts +51 -0
  52. package/dist/components/menu/MenuEntry.d.ts +73 -0
  53. package/dist/components/menu/MenuFooter.d.ts +23 -0
  54. package/dist/components/menu/index.d.ts +11 -0
  55. package/dist/components/multiSelect/MultiSelect.d.ts +28 -0
  56. package/dist/components/multiSelect/index.d.ts +2 -0
  57. package/dist/components/popover/Popover.d.ts +60 -0
  58. package/dist/components/popover/index.d.ts +2 -0
  59. package/dist/components/radioButton/RadioButton.d.ts +29 -0
  60. package/dist/components/radioButton/index.d.ts +2 -0
  61. package/dist/components/select/Select.d.ts +30 -0
  62. package/dist/components/select/index.d.ts +1 -0
  63. package/dist/components/tabPanel/Tab.d.ts +22 -0
  64. package/dist/components/tabPanel/TabPanel.d.ts +20 -0
  65. package/dist/components/tabPanel/index.d.ts +2 -0
  66. package/dist/components/tabPanel/useTabKeyboard.d.ts +16 -0
  67. package/dist/components/table/Table.d.ts +33 -0
  68. package/dist/components/table/TableCell.d.ts +17 -0
  69. package/dist/components/table/TableHeaderCell.d.ts +17 -0
  70. package/dist/components/table/components/Pagination.d.ts +21 -0
  71. package/dist/components/table/components/index.d.ts +1 -0
  72. package/dist/components/table/index.d.ts +6 -0
  73. package/dist/components/tag/Tag.d.ts +18 -0
  74. package/dist/components/tag/index.d.ts +1 -0
  75. package/dist/components/tagList/TagList.d.ts +20 -0
  76. package/dist/components/tagList/index.d.ts +2 -0
  77. package/dist/components/tagList/utils.d.ts +2 -0
  78. package/dist/components/textBox/TextBox.d.ts +8 -0
  79. package/dist/components/textBox/index.d.ts +1 -0
  80. package/dist/components/toast/Toast.d.ts +2 -0
  81. package/dist/components/toast/Toaster.d.ts +10 -0
  82. package/dist/components/toast/index.d.ts +3 -0
  83. package/dist/components/toast/types.d.ts +22 -0
  84. package/dist/components/typography/Typography.d.ts +27 -0
  85. package/dist/components/typography/index.d.ts +2 -0
  86. package/dist/components/unstyledButton/UnstyledButton.d.ts +12 -0
  87. package/dist/components/unstyledButton/index.d.ts +1 -0
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/useArrowNavigation.d.ts +30 -0
  90. package/dist/hooks/useResizeObserver.d.ts +1 -0
  91. package/dist/hooks/useViewportCollision.d.ts +7 -0
  92. package/dist/icons/icons.d.ts +256 -0
  93. package/dist/icons/index.d.ts +1 -0
  94. package/dist/index-CQ7w5dl6.js +8258 -0
  95. package/dist/index.css +1 -0
  96. package/dist/index.d.ts +32 -0
  97. package/dist/index.esm-DgyjJxy1.js +786 -0
  98. package/dist/index.js +92 -0
  99. package/dist/tailwind-styles.css +229 -0
  100. package/dist/test/setup.d.ts +0 -0
  101. package/dist/types/BaseOption.d.ts +5 -0
  102. package/dist/types/IconComponent.d.ts +6 -0
  103. package/dist/types/index.d.ts +1 -0
  104. package/package.json +94 -0
package/dist/index.js ADDED
@@ -0,0 +1,92 @@
1
+ import { A as o, b as e, B as n, a as l, c, d as t, $ as i, C as I, a0 as r, e as d, f as u, a1 as C, a2 as g, a3 as b, a4 as T, a5 as h, a6 as F, a7 as x, g as D, a8 as B, a9 as L, aa as p, ab as H, D as E, h as S, E as m, ac as v, ad as P, ae as f, af as O, ah as R, ag as w, F as y, k, o as M, i as A, n as W, l as _, p as q, m as z, ai as G, q as J, O as N, Q as U, U as V, V as Y, W as j, X as K, aj as Q, ak as X, I as Z, al as $, am as aa, J as sa, Y as oa, L as ea, r as na, s as la, M as ca, t as ta, w as ia, an as Ia, ao as ra, P as da, R as ua, ap as Ca, aq as ga, ar as ba, as as Ta, S as ha, at as Fa, au as xa, x as Da, y as Ba, T as La, av as pa, u as Ha, v as Ea, aw as Sa, z as ma, G as va, H as Pa, K as fa, N as Oa, Z as Ra, ax as wa, ay as ya, _ as ka, az as Ma } from "./index-CQ7w5dl6.js";
2
+ export {
3
+ o as Alert,
4
+ e as AnimatedList,
5
+ n as BaseButton,
6
+ l as BaseTextBox,
7
+ c as Breadcrumb,
8
+ t as Button,
9
+ i as CalendarIcon,
10
+ I as Card,
11
+ r as CheckIcon,
12
+ d as Checkbox,
13
+ u as CheckboxIcon,
14
+ C as ChevronDoubleLeftIcon,
15
+ g as ChevronDoubleRightIcon,
16
+ b as ChevronLeftIcon,
17
+ T as ChevronRightIcon,
18
+ h as CircleIcon,
19
+ F as CloseIcon,
20
+ x as CogWheelIcon,
21
+ D as ConfirmationDialog,
22
+ B as DashIcon,
23
+ L as DatabaseIcon,
24
+ p as DeleteIcon,
25
+ H as DetailsIcon,
26
+ E as Dialog,
27
+ S as DynamicIcon,
28
+ m as EMPTY_OPTION_ID,
29
+ v as EarthIcon,
30
+ P as ErrorFilledIcon,
31
+ f as ErrorOutlinedIcon,
32
+ O as ExpandDownIcon,
33
+ R as ExpandIcon,
34
+ w as ExpandRightIcon,
35
+ y as Field,
36
+ k as FieldContent,
37
+ M as FieldGroup,
38
+ A as FieldLabel,
39
+ W as FieldLegend,
40
+ _ as FieldMessage,
41
+ q as FieldSeparator,
42
+ z as FieldSet,
43
+ G as FilterIcon,
44
+ J as FlowTile,
45
+ N as H1,
46
+ U as H2,
47
+ V as H3,
48
+ Y as H4,
49
+ j as H5,
50
+ K as H6,
51
+ Q as HourglassCircleIcon,
52
+ X as HourglassFilledIcon,
53
+ Z as IconButton,
54
+ $ as IdeaIcon,
55
+ aa as InfoOutlinedIcon,
56
+ sa as JsonEditor,
57
+ oa as Label,
58
+ ea as List,
59
+ na as ListItem,
60
+ la as Logo,
61
+ ca as Menu,
62
+ ta as MultiSelect,
63
+ ia as Pagination,
64
+ Ia as PlayIcon,
65
+ ra as PlusIcon,
66
+ da as Popover,
67
+ ua as RadioButton,
68
+ Ca as RecycleIcon,
69
+ ga as ReloadIcon,
70
+ ba as SaveIcon,
71
+ Ta as SearchIcon,
72
+ ha as Select,
73
+ Fa as SuccessFilledIcon,
74
+ xa as SuccessOutlinedIcon,
75
+ Da as Tab,
76
+ Ba as TabPanel,
77
+ La as Table,
78
+ pa as TableArrowIcon,
79
+ Ha as TableCell,
80
+ Ea as TableHeaderCell,
81
+ Sa as TableIcon,
82
+ ma as Tag,
83
+ va as TagList,
84
+ Pa as TextBox,
85
+ fa as Toast,
86
+ Oa as Toaster,
87
+ Ra as UnstyledButton,
88
+ wa as WarningFilledIcon,
89
+ ya as WarningOutlinedIcon,
90
+ ka as icons,
91
+ Ma as useViewportCollision
92
+ };
@@ -0,0 +1,229 @@
1
+ @import "tailwindcss";
2
+
3
+ @theme {
4
+ --text-3xs: 0.625rem; /* 10px */
5
+ --text-xxs: 0.75rem; /* 12px */
6
+ --text-xs: 0.875rem; /* 14px */
7
+ --text-sm: 1rem; /* 16px */
8
+ --text-md: 1.125rem; /* 18px */
9
+ --text-lg: 1.5625rem; /* 25px */
10
+ --text-xl: 1.875rem; /* 30px */
11
+ --text-2xl: 3.75rem; /* 60px */
12
+ --text-3xl: 4.6875rem; /* 75px */
13
+ --text-4xl: 5rem; /* 80px */
14
+
15
+ --spacing-0: 0;
16
+ --spacing-0_5: 0.125rem; /* 2px */
17
+ --spacing-1: 0.25rem; /* 4px */
18
+ --spacing-2: 0.5rem; /* 8px */
19
+ --spacing-3: 0.75rem; /* 12px */
20
+ --spacing-4: 1rem; /* 16px */
21
+ --spacing-5: 1.25rem; /* 20px */
22
+ --spacing-6: 1.5rem; /* 24px */
23
+ --spacing-7: 1.75rem; /* 28px */
24
+ --spacing-8: 2rem; /* 32px */
25
+ --spacing-9: 2.25rem; /* 36px */
26
+ --spacing-10: 2.5rem; /* 40px */
27
+ --spacing-11: 2.75rem; /* 44px */
28
+ --spacing-12: 3rem; /* 48px */
29
+ --spacing-13: 3.25rem; /* 52px */
30
+ --spacing-14: 3.5rem; /* 56px */
31
+ --spacing-15: 3.75rem; /* 60px */
32
+ --spacing-16: 4rem; /* 64px */
33
+ --spacing-17: 4.25rem; /* 68px */
34
+ --spacing-18: 4.5rem; /* 72px */
35
+ --spacing-19: 4.75rem; /* 76px */
36
+ --spacing-20: 5rem; /* 80px */
37
+ --spacing-full: 100%;
38
+
39
+ --shadow-md: 0 0 12px 2px rgba(100, 103, 198, 0.25);
40
+
41
+ --animate-fadeIn: fadeIn;
42
+ }
43
+
44
+ @theme inline {
45
+ --color-primary: var(--primary);
46
+ --color-primary-light: var(--primary-light);
47
+ --color-primary-super-light: var(--primary-super-light);
48
+ --color-secondary: var(--secondary);
49
+ --color-text: var(--text);
50
+ --color-text-contrast: var(--text-contrast);
51
+ --color-text-disabled: var(--text-disabled);
52
+ --color-background: var(--background);
53
+ --color-background-disabled: var(--background-disabled);
54
+ --color-background-success: var(--background-success);
55
+ --color-background-error: var(--background-error);
56
+ --color-background-warning: var(--background-warning);
57
+ --color-contrast: var(--contrast);
58
+ --color-error: var(--error);
59
+ --color-error-light: var(--error-light);
60
+ --color-success: var(--success);
61
+ --color-warning: var(--warning);
62
+ --color-shade: var(--shade);
63
+ --color-shade-light: var(--shade-light);
64
+ --color-mask: var(--mask);
65
+
66
+ --font-inter: var(--inter);
67
+ }
68
+
69
+ @font-face {
70
+ font-family: Inter;
71
+ src: url("./assets/fonts/Inter-VariableFont_opsz,wght.ttf") format("truetype");
72
+ font-weight: 100 900;
73
+ font-style: normal;
74
+ font-display: swap;
75
+ }
76
+
77
+ :root {
78
+ --inter: Inter, sans-serif;
79
+ --font-base: 16px;
80
+ --primary: rgba(100, 103, 198, 1);
81
+ --primary-light: rgba(167, 164, 224, 1);
82
+ --primary-super-light: rgba(239, 240, 249, 1);
83
+ --secondary: rgba(217, 217, 217, 1);
84
+ --text: rgba(34, 28, 53, 1);
85
+ --text-contrast: rgba(247, 246, 247, 1);
86
+ --text-disabled: rgba(191, 191, 191, 1);
87
+ --background: rgba(247, 246, 247, 1);
88
+ --background-disabled: rgba(240, 240, 240, 1);
89
+ --background-success: rgba(82, 196, 26, 0.20000000298023224);
90
+ --background-error: rgba(255, 77, 79, 0.30000001192092896);
91
+ --background-warning: rgba(255, 165, 0, 0.20000000298023224);
92
+ --contrast: rgba(255, 255, 255, 1);
93
+ --error: rgba(255, 77, 79, 1);
94
+ --error-light: rgba(255, 148, 149, 1);
95
+ --success: rgba(82, 196, 26, 1);
96
+ --warning: rgba(255, 165, 0, 1);
97
+ --shade: rgba(240, 240, 240, 1);
98
+ --shade-light: rgba(252, 252, 254, 1);
99
+ --mask: rgba(0, 0, 0, 0.44999998807907104);
100
+ --elevation-dialog: 9999;
101
+ --elevation-toast: 99999;
102
+ }
103
+
104
+ .dark {
105
+ --primary: rgba(100, 103, 198, 1);
106
+ --primary-light: rgba(167, 164, 224, 1);
107
+ --primary-super-light: rgba(70, 58, 109, 1);
108
+ --secondary: rgba(79, 78, 78, 1);
109
+ --text: rgba(247, 246, 247, 1);
110
+ --text-contrast: rgba(34, 28, 53, 1);
111
+ --text-disabled: rgba(100, 100, 100, 1);
112
+ --background: rgba(34, 28, 53, 1);
113
+ --background-disabled: rgba(65, 65, 65, 1);
114
+ --background-success: rgba(82, 196, 26, 0.2);
115
+ --background-error: rgba(255, 77, 79, 0.3);
116
+ --background-warning: rgba(255, 165, 0, 0.2);
117
+ --contrast: rgba(34, 28, 53, 1);
118
+ --error: rgba(255, 77, 79, 1);
119
+ --error-light: rgba(255, 148, 149, 1);
120
+ --success: rgba(82, 196, 26, 1);
121
+ --warning: rgba(255, 165, 0, 1);
122
+ --shade: rgba(52, 43, 81, 1);
123
+ --shade-light: rgba(43, 35, 67, 1);
124
+ --mask: rgba(255, 255, 255, 0.45);
125
+ }
126
+
127
+ .alt1 {
128
+ --primary: #1c1c1e;
129
+ --primary-light: #8e8e93;
130
+ --primary-super-light: #f2f2f5;
131
+ --secondary: #c7c7cc;
132
+ --text: #1c1c1e;
133
+ --text-contrast: #fafafa;
134
+ --text-disabled: #8e8e93;
135
+ --background: #fcfcfc;
136
+ --background-disabled: #f5f5f5;
137
+ --background-error: #dc354533;
138
+ --background-success: #28a74533;
139
+ --background-warning: #ffc10733;
140
+ --contrast: #ffffff;
141
+ --error: #dc3545;
142
+ --error-light: #edb3b8;
143
+ --success: #28a745;
144
+ --warning: #ffc107;
145
+ --shade: #e5e5ea;
146
+ --shade-light: #f2f2f5;
147
+ --mask: #00000073;
148
+ }
149
+
150
+ .alt2 {
151
+ --primary: #2a2a2a;
152
+ --primary-light: #5c5c5c;
153
+ --primary-super-light: #e0e0df;
154
+ --secondary: #8b8b8b;
155
+ --text: #2b292a;
156
+ --text-contrast: #f8f7f6;
157
+ --text-disabled: #acaaa9;
158
+ --background: #f5f4f3;
159
+ --background-disabled: #eaeaea;
160
+ --background-error: #ff4d4f4d;
161
+ --background-success: #52c41a33;
162
+ --background-warning: #ffa50033;
163
+ --contrast: #ffffff;
164
+ --error: #ff4d4f;
165
+ --error-light: #ff9495;
166
+ --mask: #2a2a2a73;
167
+ --shade: #d1d1d1;
168
+ --shade-light: #f3f2f4;
169
+ --success: #52c41a;
170
+ --warning: #ffa500;
171
+ }
172
+
173
+ body {
174
+ background: var(--background);
175
+ color: var(--text);
176
+ font-size: var(--font-base);
177
+ font-family: var(--font-inter);
178
+ }
179
+
180
+ @layer base {
181
+ h1,
182
+ h2,
183
+ h3,
184
+ h4,
185
+ h5,
186
+ h6 {
187
+ margin: 0;
188
+ padding: 0;
189
+ }
190
+
191
+ h1 {
192
+ font-size: var(--text-4xl);
193
+ line-height: var(--text-4xl);
194
+ }
195
+
196
+ h2 {
197
+ font-size: var(--text-3xl);
198
+ line-height: var(--text-3xl);
199
+ }
200
+
201
+ h3 {
202
+ font-size: var(--text-xxl);
203
+ line-height: var(--text-xxl);
204
+ }
205
+
206
+ h4 {
207
+ font-size: var(--text-xl);
208
+ line-height: var(--text-xl);
209
+ }
210
+
211
+ h5 {
212
+ font-size: var(--text-lg);
213
+ line-height: var(--text-lg);
214
+ }
215
+
216
+ h6 {
217
+ font-size: var(--text-md);
218
+ line-height: var(--text-md);
219
+ }
220
+ }
221
+
222
+ @keyframes fadeIn {
223
+ from {
224
+ opacity: 0;
225
+ }
226
+ to {
227
+ opacity: 1;
228
+ }
229
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ export type BaseOption = {
2
+ id: string | number;
3
+ label: string;
4
+ disabled?: boolean;
5
+ };
@@ -0,0 +1,6 @@
1
+ import { FC, SVGProps } from 'react';
2
+ export type IconProps = SVGProps<SVGSVGElement> & {
3
+ title?: string;
4
+ titleId?: string;
5
+ };
6
+ export type IconComponent = FC<IconProps>;
@@ -0,0 +1 @@
1
+ export * from './BaseOption';
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@grasp-labs/ds-react-components",
3
+ "version": "0.13.0",
4
+ "private": false,
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "main": "dist/index.js",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ },
16
+ "./styles.css": "./dist/index.css",
17
+ "./tailwind-styles.css": "./dist/tailwind-styles.css"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "engines": {
23
+ "node": ">=22"
24
+ },
25
+ "sideEffects": false,
26
+ "scripts": {
27
+ "build": "tsc && vite build",
28
+ "lint": "eslint .",
29
+ "lint:fix": "eslint . --fix",
30
+ "storybook": "storybook dev -p 6006",
31
+ "build-storybook": "storybook build",
32
+ "dev": "npm run build -- --watch",
33
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
34
+ "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
35
+ "test": "vitest run",
36
+ "test:watch": "vitest",
37
+ "test:storybook": "vitest --project=storybook run",
38
+ "test:coverage": "vitest run --coverage"
39
+ },
40
+ "peerDependencies": {
41
+ "@tanstack/react-table": "^8.0.0",
42
+ "@xyflow/react": "^12.0.0",
43
+ "react": "^19.0.0",
44
+ "react-dom": "^19.0.0",
45
+ "react-router": "^7.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "@eslint/js": "^9.32.0",
49
+ "@storybook/addon-a11y": "^10.0.1",
50
+ "@storybook/addon-themes": "^10.0.1",
51
+ "@storybook/addon-vitest": "^10.0.1",
52
+ "@storybook/react-vite": "^10.0.1",
53
+ "@tailwindcss/vite": "^4.1.11",
54
+ "@tanstack/react-table": "^8.21.3",
55
+ "@testing-library/jest-dom": "^6.6.3",
56
+ "@testing-library/react": "^16.3.0",
57
+ "@testing-library/user-event": "^14.6.1",
58
+ "@types/node": "^22.16.5",
59
+ "@types/react": "^19.1.10",
60
+ "@types/react-dom": "^19.1.7",
61
+ "@vitejs/plugin-react": "^5.1.0",
62
+ "@vitest/browser": "4.0.5",
63
+ "@vitest/browser-playwright": "^4.0.5",
64
+ "@vitest/coverage-v8": "4.0.5",
65
+ "@xyflow/react": "^12.8.6",
66
+ "downshift": "^9.0.10",
67
+ "eslint": "^9.32.0",
68
+ "eslint-config-prettier": "^10.1.8",
69
+ "eslint-plugin-prettier": "^5.5.3",
70
+ "eslint-plugin-react-hooks": "^7.0.1",
71
+ "eslint-plugin-react-refresh": "^0.4.20",
72
+ "eslint-plugin-storybook": "^10.0.1",
73
+ "globals": "^16.2.0",
74
+ "jsdom": "^27.0.1",
75
+ "playwright": "^1.54.1",
76
+ "prettier": "^3.6.2",
77
+ "prettier-plugin-tailwindcss": "^0.7.1",
78
+ "react": "^19.1.1",
79
+ "react-dom": "^19.1.1",
80
+ "react-router": "^7.8.2",
81
+ "storybook": "^10.0.1",
82
+ "tailwindcss": "^4.1.11",
83
+ "tailwind-merge": "^3.3.1",
84
+ "typescript": "^5.9.3",
85
+ "typescript-eslint": "^8.35.0",
86
+ "vite": "^7.0.6",
87
+ "vite-plugin-dts": "^4.5.4",
88
+ "vite-plugin-static-copy": "^3.1.1",
89
+ "vite-plugin-svgr": "^4.5.0",
90
+ "vitest": "^4.0.5",
91
+ "json-edit-react": "^1.29.0",
92
+ "nanoid": "^5.1.5"
93
+ }
94
+ }