@veevarts/design-system 0.1.16 → 0.1.18
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.
- package/dist/components/Button/Button.d.ts +3 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/index.cjs +106 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +17316 -48
- package/dist/patterns/RichText/RichText.d.ts +33 -0
- package/dist/patterns/RichText/RichText.test.d.ts +1 -0
- package/dist/patterns/RichText/TipTapArea/TipTapArea.d.ts +60 -0
- package/dist/patterns/RichText/commands/index.d.ts +5 -0
- package/dist/patterns/RichText/commands/registry.d.ts +14 -0
- package/dist/patterns/RichText/config/colors.d.ts +39 -0
- package/dist/patterns/RichText/config/defaults.d.ts +34 -0
- package/dist/patterns/RichText/config/icons.d.ts +26 -0
- package/dist/patterns/RichText/config/index.d.ts +7 -0
- package/dist/patterns/RichText/core/TipTapEditor.d.ts +7 -0
- package/dist/patterns/RichText/core/TipTapEditor.test.d.ts +1 -0
- package/dist/patterns/RichText/examples/ControlledExample.d.ts +1 -0
- package/dist/patterns/RichText/examples/FormWithValidationExample.d.ts +1 -0
- package/dist/patterns/RichText/extensions/index.d.ts +22 -0
- package/dist/patterns/RichText/extensions/registry.d.ts +19 -0
- package/dist/patterns/RichText/index.d.ts +11 -0
- package/dist/patterns/RichText/presets.d.ts +36 -0
- package/dist/patterns/RichText/toolbar/Toolbar.d.ts +34 -0
- package/dist/patterns/RichText/toolbar/ToolbarDivider.d.ts +15 -0
- package/dist/patterns/RichText/toolbar/ToolbarSection.d.ts +29 -0
- package/dist/patterns/RichText/toolbar/components/ColorPalette.d.ts +28 -0
- package/dist/patterns/RichText/toolbar/components/ColorPicker.d.ts +29 -0
- package/dist/patterns/RichText/toolbar/components/CustomColorInput.d.ts +28 -0
- package/dist/patterns/RichText/toolbar/components/HeadingDropdown.d.ts +21 -0
- package/dist/patterns/RichText/toolbar/components/ListDropdown.d.ts +20 -0
- package/dist/patterns/RichText/toolbar/components/ToolbarButton.d.ts +40 -0
- package/dist/patterns/RichText/toolbar/components/ZoomControls.d.ts +35 -0
- package/dist/patterns/RichText/toolbar/components/index.d.ts +17 -0
- package/dist/patterns/RichText/toolbar/hooks/index.d.ts +6 -0
- package/dist/patterns/RichText/toolbar/hooks/useToolbarCommands.d.ts +14 -0
- package/dist/patterns/RichText/toolbar/hooks/useToolbarState.d.ts +14 -0
- package/dist/patterns/RichText/toolbar/hooks/useZoomState.d.ts +21 -0
- package/dist/patterns/RichText/toolbar/index.d.ts +12 -0
- package/dist/patterns/RichText/toolbar/sections/TextFormattingSection.d.ts +7 -0
- package/dist/patterns/RichText/types/commands.d.ts +68 -0
- package/dist/patterns/RichText/types/extensions.d.ts +71 -0
- package/dist/patterns/RichText/types/index.d.ts +14 -0
- package/dist/patterns/RichText/types/marks.d.ts +86 -0
- package/dist/patterns/RichText/types/modifiers.d.ts +125 -0
- package/dist/patterns/RichText/types/nodes.d.ts +80 -0
- package/dist/patterns/RichText/types/props.d.ts +157 -0
- package/dist/patterns/RichText/types/toolbar.d.ts +88 -0
- package/dist/patterns/Stepper/Stepper.d.ts +206 -25
- package/dist/patterns/Stepper/Stepper.test.d.ts +4 -0
- package/dist/patterns/Stepper/examples/FormExampleStepper.d.ts +1 -0
- package/dist/patterns/Stepper/examples/InteractiveStepper.d.ts +2 -0
- package/dist/patterns/Stepper/examples/ValidationStepper.d.ts +1 -0
- package/dist/patterns/Stepper/examples/index.d.ts +3 -0
- package/dist/patterns/Stepper/index.d.ts +1 -1
- package/dist/patterns/index.d.ts +3 -1
- package/package.json +29 -7
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ModifierIdentifier, ModifierType } from './modifiers';
|
|
2
|
+
/**
|
|
3
|
+
* Toolbar section configuration
|
|
4
|
+
* Groups related modifiers together in the toolbar
|
|
5
|
+
*/
|
|
6
|
+
export interface ToolbarSectionConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Unique section identifier
|
|
9
|
+
*/
|
|
10
|
+
id: string;
|
|
11
|
+
/**
|
|
12
|
+
* Modifiers to display in this section
|
|
13
|
+
*/
|
|
14
|
+
modifiers: ModifierIdentifier[];
|
|
15
|
+
/**
|
|
16
|
+
* Whether to show a divider after this section
|
|
17
|
+
* @default true
|
|
18
|
+
*/
|
|
19
|
+
showDivider?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Optional section label (for accessibility)
|
|
22
|
+
*/
|
|
23
|
+
label?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Complete toolbar configuration
|
|
27
|
+
*/
|
|
28
|
+
export interface ToolbarConfig {
|
|
29
|
+
/**
|
|
30
|
+
* Toolbar sections in order
|
|
31
|
+
*/
|
|
32
|
+
sections: ToolbarSectionConfig[];
|
|
33
|
+
/**
|
|
34
|
+
* Whether to show zoom controls
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
showZoom?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether toolbar should stick to top on scroll
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
42
|
+
stickyPosition?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Custom toolbar class names
|
|
45
|
+
*/
|
|
46
|
+
className?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Individual toolbar button state
|
|
50
|
+
*/
|
|
51
|
+
export interface ToolbarButtonState {
|
|
52
|
+
/**
|
|
53
|
+
* Whether the button represents an active state
|
|
54
|
+
* (e.g., bold is active when cursor is in bold text)
|
|
55
|
+
*/
|
|
56
|
+
isActive: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the button is disabled
|
|
59
|
+
*/
|
|
60
|
+
isDisabled: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Whether the command can be executed
|
|
63
|
+
*/
|
|
64
|
+
canExecute: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Complete toolbar state for all modifiers
|
|
68
|
+
*/
|
|
69
|
+
export type ToolbarState = Record<ModifierType, ToolbarButtonState>;
|
|
70
|
+
/**
|
|
71
|
+
* Toolbar layout preset names
|
|
72
|
+
*/
|
|
73
|
+
export type ToolbarPreset = 'simple' | 'blog' | 'documentation' | 'comment' | 'full';
|
|
74
|
+
/**
|
|
75
|
+
* Default toolbar section IDs
|
|
76
|
+
*/
|
|
77
|
+
export declare const TOOLBAR_SECTION_IDS: {
|
|
78
|
+
readonly TEXT_FORMATTING: "text-formatting";
|
|
79
|
+
readonly COLOR: "color";
|
|
80
|
+
readonly BLOCK_TYPE: "block-type";
|
|
81
|
+
readonly HEADING: "heading";
|
|
82
|
+
readonly ALIGNMENT: "alignment";
|
|
83
|
+
readonly LIST: "list";
|
|
84
|
+
readonly INSERT: "insert";
|
|
85
|
+
readonly HISTORY: "history";
|
|
86
|
+
readonly VIEW: "view";
|
|
87
|
+
};
|
|
88
|
+
export type ToolbarSectionId = (typeof TOOLBAR_SECTION_IDS)[keyof typeof TOOLBAR_SECTION_IDS];
|
|
@@ -1,28 +1,209 @@
|
|
|
1
|
+
import { ButtonProps } from '@heroui/react';
|
|
2
|
+
import { default as React } from 'react';
|
|
1
3
|
/**
|
|
2
|
-
* Stepper
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - Visual step indicators (completed, current, upcoming)
|
|
7
|
-
* - Horizontal and vertical orientation
|
|
8
|
-
* - Connecting lines between steps
|
|
9
|
-
* - Clickable steps (optional)
|
|
10
|
-
* - States: completed (green), current (blue), upcoming (gray)
|
|
11
|
-
* - Show number or checkmark based on state
|
|
12
|
-
* - Externally controlled state via props
|
|
13
|
-
* - No business logic
|
|
14
|
-
* - Strict TypeScript
|
|
4
|
+
* Props for the Stepper component
|
|
5
|
+
*
|
|
6
|
+
* @interface StepperProps
|
|
7
|
+
* @extends {React.HTMLAttributes<HTMLButtonElement>}
|
|
15
8
|
*/
|
|
16
|
-
export interface
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
9
|
+
export interface StepperProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
10
|
+
/**
|
|
11
|
+
* Optional label displayed before the stepper to provide context.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Stepper label="Step 2 of 4" stepsCount={4} />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
label?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Total number of steps in the sequence.
|
|
21
|
+
*
|
|
22
|
+
* @default 3
|
|
23
|
+
* @minimum 1
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <Stepper stepsCount={5} /> // Creates 5 steps
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
stepsCount?: number;
|
|
31
|
+
/**
|
|
32
|
+
* The color theme for the stepper.
|
|
33
|
+
* Applies to active and completed steps.
|
|
34
|
+
*
|
|
35
|
+
* @default "primary"
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <Stepper color="success" stepsCount={3} />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
color?: ButtonProps['color'];
|
|
43
|
+
/**
|
|
44
|
+
* The current active step index (zero-based).
|
|
45
|
+
* Use this prop for controlled mode.
|
|
46
|
+
*
|
|
47
|
+
* @controlled
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const [step, setStep] = useState(0);
|
|
52
|
+
* <Stepper currentStep={step} onStepChange={setStep} />
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
currentStep?: number;
|
|
56
|
+
/**
|
|
57
|
+
* The initial step index for uncontrolled mode.
|
|
58
|
+
*
|
|
59
|
+
* @default 0
|
|
60
|
+
* @uncontrolled
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* <Stepper defaultStep={2} stepsCount={5} />
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
defaultStep?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Whether to hide the connecting lines between steps.
|
|
70
|
+
*
|
|
71
|
+
* @default false
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <Stepper hideProgressBars stepsCount={4} /> // No progress bars
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
hideProgressBars?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Custom CSS class for the stepper wrapper (ol element).
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```tsx
|
|
84
|
+
* <Stepper className="gap-x-6" stepsCount={3} />
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
className?: string;
|
|
88
|
+
/**
|
|
89
|
+
* Custom CSS class applied to each individual step button.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```tsx
|
|
93
|
+
* <Stepper
|
|
94
|
+
* stepClassName="hover:bg-gray-100"
|
|
95
|
+
* stepsCount={3}
|
|
96
|
+
* />
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
stepClassName?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Callback fired when the active step changes.
|
|
102
|
+
* Used in controlled mode.
|
|
103
|
+
*
|
|
104
|
+
* @param stepIndex - The new step index (zero-based)
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```tsx
|
|
108
|
+
* <Stepper
|
|
109
|
+
* onStepChange={(index) => console.log('Step:', index)}
|
|
110
|
+
* stepsCount={4}
|
|
111
|
+
* />
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
onStepChange?: (stepIndex: number) => void;
|
|
27
115
|
}
|
|
28
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Stepper - A horizontal progress indicator for multi-step processes.
|
|
118
|
+
*
|
|
119
|
+
* @description
|
|
120
|
+
* The Stepper component displays a sequence of numbered steps that indicate progress
|
|
121
|
+
* through a multi-step workflow. Each step can be clicked to navigate between steps,
|
|
122
|
+
* and completed steps are marked with a checkmark.
|
|
123
|
+
*
|
|
124
|
+
* @component
|
|
125
|
+
*
|
|
126
|
+
* @features
|
|
127
|
+
* - **Three step states**: inactive (upcoming), active (current), complete (finished)
|
|
128
|
+
* - **Interactive navigation**: Click any step to jump to it
|
|
129
|
+
* - **Animated transitions**: Smooth color and checkmark animations
|
|
130
|
+
* - **Progress indicators**: Optional connecting lines show completion progress
|
|
131
|
+
* - **Controlled & uncontrolled**: Works in both modes
|
|
132
|
+
* - **Customizable colors**: Supports all HeroUI color variants
|
|
133
|
+
* - **Accessible**: Full ARIA support and keyboard navigation
|
|
134
|
+
*
|
|
135
|
+
* @accessibility
|
|
136
|
+
* - Uses semantic HTML (`<nav>`, `<ol>`, `<li>`)
|
|
137
|
+
* - Includes `aria-label="Progress"` on navigation
|
|
138
|
+
* - Active step marked with `aria-current="step"`
|
|
139
|
+
* - All steps are keyboard accessible via tab navigation
|
|
140
|
+
*
|
|
141
|
+
* @performance
|
|
142
|
+
* - Lazy loads Framer Motion animations
|
|
143
|
+
* - Memoizes color calculations
|
|
144
|
+
* - Uses CSS variables for theming
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* **Basic uncontrolled stepper**
|
|
148
|
+
* ```tsx
|
|
149
|
+
* <Stepper stepsCount={4} defaultStep={0} />
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* **Controlled stepper with callback**
|
|
154
|
+
* ```tsx
|
|
155
|
+
* function MyForm() {
|
|
156
|
+
* const [currentStep, setCurrentStep] = useState(0);
|
|
157
|
+
*
|
|
158
|
+
* return (
|
|
159
|
+
* <Stepper
|
|
160
|
+
* currentStep={currentStep}
|
|
161
|
+
* onStepChange={setCurrentStep}
|
|
162
|
+
* stepsCount={4}
|
|
163
|
+
* color="primary"
|
|
164
|
+
* label={`Step ${currentStep + 1} of 4`}
|
|
165
|
+
* />
|
|
166
|
+
* );
|
|
167
|
+
* }
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* **With validation (prevent forward navigation)**
|
|
172
|
+
* ```tsx
|
|
173
|
+
* function ValidatedStepper() {
|
|
174
|
+
* const [step, setStep] = useState(0);
|
|
175
|
+
* const [completed, setCompleted] = useState<number[]>([]);
|
|
176
|
+
*
|
|
177
|
+
* const handleStepChange = (newStep: number) => {
|
|
178
|
+
* // Only allow navigation to completed steps or current step
|
|
179
|
+
* if (newStep <= step || completed.includes(newStep)) {
|
|
180
|
+
* setStep(newStep);
|
|
181
|
+
* }
|
|
182
|
+
* };
|
|
183
|
+
*
|
|
184
|
+
* return (
|
|
185
|
+
* <Stepper
|
|
186
|
+
* currentStep={step}
|
|
187
|
+
* onStepChange={handleStepChange}
|
|
188
|
+
* stepsCount={5}
|
|
189
|
+
* />
|
|
190
|
+
* );
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* **Custom styling**
|
|
196
|
+
* ```tsx
|
|
197
|
+
* <Stepper
|
|
198
|
+
* stepsCount={3}
|
|
199
|
+
* color="success"
|
|
200
|
+
* className="gap-x-8"
|
|
201
|
+
* stepClassName="hover:bg-gray-50 rounded-xl"
|
|
202
|
+
* hideProgressBars
|
|
203
|
+
* />
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @see {@link StepperProps} for all available props
|
|
207
|
+
* @see {@link https://storybook.heroui.com Storybook} for interactive examples
|
|
208
|
+
*/
|
|
209
|
+
export declare const Stepper: React.ForwardRefExoticComponent<StepperProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function FormExampleStepper(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ValidationStepper(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Stepper } from './Stepper';
|
|
2
|
-
export type { StepperProps
|
|
2
|
+
export type { StepperProps } from './Stepper';
|
package/dist/patterns/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { Navbar } from './Navbar';
|
|
2
2
|
export { Stepper } from './Stepper';
|
|
3
3
|
export { Footer } from './Footer';
|
|
4
|
+
export { RichTextArea, RICH_TEXT_PRESETS } from './RichText';
|
|
4
5
|
export type { NavbarProps, NavbarLink, NavbarLanguage } from './Navbar';
|
|
5
|
-
export type { StepperProps
|
|
6
|
+
export type { StepperProps } from './Stepper';
|
|
6
7
|
export type { FooterProps, FooterSection, FooterLink, SocialLink } from './Footer';
|
|
8
|
+
export type { RichTextAreaProps } from './RichText';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veevarts/design-system",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.18",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
"build": "vite build",
|
|
15
15
|
"lint": "eslint .",
|
|
16
16
|
"preview": "vite preview",
|
|
17
|
+
"test": "vitest --run",
|
|
18
|
+
"test:watch": "vitest",
|
|
19
|
+
"test:unit": "vitest --project unit --run",
|
|
20
|
+
"test:unit:watch": "vitest --project unit",
|
|
21
|
+
"test:ui": "vitest --ui",
|
|
22
|
+
"test:coverage": "vitest --coverage --run",
|
|
17
23
|
"storybook": "storybook dev -p 6006",
|
|
18
24
|
"build-storybook": "storybook build",
|
|
19
25
|
"deploy-storybook": "npm run build-storybook && npx vercel storybook-static --prod"
|
|
@@ -25,21 +31,33 @@
|
|
|
25
31
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
26
32
|
},
|
|
27
33
|
"dependencies": {
|
|
28
|
-
"
|
|
29
|
-
"
|
|
34
|
+
"@tiptap/extension-color": "^2.12.0",
|
|
35
|
+
"@tiptap/extension-highlight": "^2.27.2",
|
|
36
|
+
"@tiptap/extension-link": "^2.27.2",
|
|
37
|
+
"@tiptap/extension-placeholder": "^2.27.2",
|
|
38
|
+
"@tiptap/extension-task-item": "^2.27.2",
|
|
39
|
+
"@tiptap/extension-task-list": "^2.27.2",
|
|
40
|
+
"@tiptap/extension-text-align": "^2.27.2",
|
|
41
|
+
"@tiptap/extension-underline": "^2.27.2",
|
|
42
|
+
"@tiptap/pm": "^2.12.0",
|
|
43
|
+
"@tiptap/react": "^2.12.0",
|
|
44
|
+
"@tiptap/starter-kit": "^2.12.0",
|
|
45
|
+
"lucide-react": "^0.562.0",
|
|
46
|
+
"vite-plugin-css-injected-by-js": "latest",
|
|
47
|
+
"vite-plugin-dts": "latest"
|
|
30
48
|
},
|
|
31
49
|
"devDependencies": {
|
|
32
|
-
"@heroui/react": "^2.8.7",
|
|
33
|
-
"framer-motion": "^11.15.0",
|
|
34
|
-
"react": "19.2.3",
|
|
35
|
-
"react-dom": "19.2.3",
|
|
36
50
|
"@chromatic-com/storybook": "^4.1.3",
|
|
37
51
|
"@eslint/js": "^9.39.1",
|
|
52
|
+
"@heroui/react": "^2.8.7",
|
|
38
53
|
"@storybook/addon-a11y": "^10.0.8",
|
|
39
54
|
"@storybook/addon-docs": "^10.0.8",
|
|
40
55
|
"@storybook/addon-onboarding": "^10.0.8",
|
|
41
56
|
"@storybook/addon-vitest": "^10.0.8",
|
|
42
57
|
"@storybook/react-vite": "^10.0.8",
|
|
58
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
59
|
+
"@testing-library/react": "^16.3.1",
|
|
60
|
+
"@testing-library/user-event": "^14.6.1",
|
|
43
61
|
"@types/node": "^24.10.1",
|
|
44
62
|
"@types/react": "^19.2.5",
|
|
45
63
|
"@types/react-dom": "^19.2.3",
|
|
@@ -51,9 +69,13 @@
|
|
|
51
69
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
52
70
|
"eslint-plugin-react-refresh": "^0.4.24",
|
|
53
71
|
"eslint-plugin-storybook": "^10.0.8",
|
|
72
|
+
"framer-motion": "^11.15.0",
|
|
54
73
|
"globals": "^16.5.0",
|
|
74
|
+
"jsdom": "^27.4.0",
|
|
55
75
|
"playwright": "^1.56.1",
|
|
56
76
|
"postcss": "^8.5.6",
|
|
77
|
+
"react": "19.2.3",
|
|
78
|
+
"react-dom": "19.2.3",
|
|
57
79
|
"storybook": "^10.0.8",
|
|
58
80
|
"tailwindcss": "^3.4.19",
|
|
59
81
|
"typescript": "~5.9.3",
|