@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.
Files changed (57) hide show
  1. package/dist/components/Button/Button.d.ts +3 -0
  2. package/dist/components/Button/index.d.ts +2 -0
  3. package/dist/components/index.d.ts +2 -0
  4. package/dist/index.cjs +106 -1
  5. package/dist/index.d.ts +4 -2
  6. package/dist/index.js +17316 -48
  7. package/dist/patterns/RichText/RichText.d.ts +33 -0
  8. package/dist/patterns/RichText/RichText.test.d.ts +1 -0
  9. package/dist/patterns/RichText/TipTapArea/TipTapArea.d.ts +60 -0
  10. package/dist/patterns/RichText/commands/index.d.ts +5 -0
  11. package/dist/patterns/RichText/commands/registry.d.ts +14 -0
  12. package/dist/patterns/RichText/config/colors.d.ts +39 -0
  13. package/dist/patterns/RichText/config/defaults.d.ts +34 -0
  14. package/dist/patterns/RichText/config/icons.d.ts +26 -0
  15. package/dist/patterns/RichText/config/index.d.ts +7 -0
  16. package/dist/patterns/RichText/core/TipTapEditor.d.ts +7 -0
  17. package/dist/patterns/RichText/core/TipTapEditor.test.d.ts +1 -0
  18. package/dist/patterns/RichText/examples/ControlledExample.d.ts +1 -0
  19. package/dist/patterns/RichText/examples/FormWithValidationExample.d.ts +1 -0
  20. package/dist/patterns/RichText/extensions/index.d.ts +22 -0
  21. package/dist/patterns/RichText/extensions/registry.d.ts +19 -0
  22. package/dist/patterns/RichText/index.d.ts +11 -0
  23. package/dist/patterns/RichText/presets.d.ts +36 -0
  24. package/dist/patterns/RichText/toolbar/Toolbar.d.ts +34 -0
  25. package/dist/patterns/RichText/toolbar/ToolbarDivider.d.ts +15 -0
  26. package/dist/patterns/RichText/toolbar/ToolbarSection.d.ts +29 -0
  27. package/dist/patterns/RichText/toolbar/components/ColorPalette.d.ts +28 -0
  28. package/dist/patterns/RichText/toolbar/components/ColorPicker.d.ts +29 -0
  29. package/dist/patterns/RichText/toolbar/components/CustomColorInput.d.ts +28 -0
  30. package/dist/patterns/RichText/toolbar/components/HeadingDropdown.d.ts +21 -0
  31. package/dist/patterns/RichText/toolbar/components/ListDropdown.d.ts +20 -0
  32. package/dist/patterns/RichText/toolbar/components/ToolbarButton.d.ts +40 -0
  33. package/dist/patterns/RichText/toolbar/components/ZoomControls.d.ts +35 -0
  34. package/dist/patterns/RichText/toolbar/components/index.d.ts +17 -0
  35. package/dist/patterns/RichText/toolbar/hooks/index.d.ts +6 -0
  36. package/dist/patterns/RichText/toolbar/hooks/useToolbarCommands.d.ts +14 -0
  37. package/dist/patterns/RichText/toolbar/hooks/useToolbarState.d.ts +14 -0
  38. package/dist/patterns/RichText/toolbar/hooks/useZoomState.d.ts +21 -0
  39. package/dist/patterns/RichText/toolbar/index.d.ts +12 -0
  40. package/dist/patterns/RichText/toolbar/sections/TextFormattingSection.d.ts +7 -0
  41. package/dist/patterns/RichText/types/commands.d.ts +68 -0
  42. package/dist/patterns/RichText/types/extensions.d.ts +71 -0
  43. package/dist/patterns/RichText/types/index.d.ts +14 -0
  44. package/dist/patterns/RichText/types/marks.d.ts +86 -0
  45. package/dist/patterns/RichText/types/modifiers.d.ts +125 -0
  46. package/dist/patterns/RichText/types/nodes.d.ts +80 -0
  47. package/dist/patterns/RichText/types/props.d.ts +157 -0
  48. package/dist/patterns/RichText/types/toolbar.d.ts +88 -0
  49. package/dist/patterns/Stepper/Stepper.d.ts +206 -25
  50. package/dist/patterns/Stepper/Stepper.test.d.ts +4 -0
  51. package/dist/patterns/Stepper/examples/FormExampleStepper.d.ts +1 -0
  52. package/dist/patterns/Stepper/examples/InteractiveStepper.d.ts +2 -0
  53. package/dist/patterns/Stepper/examples/ValidationStepper.d.ts +1 -0
  54. package/dist/patterns/Stepper/examples/index.d.ts +3 -0
  55. package/dist/patterns/Stepper/index.d.ts +1 -1
  56. package/dist/patterns/index.d.ts +3 -1
  57. 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 Pattern
3
- * TODO: Implement visual composition for step-by-step processes
4
- *
5
- * Requirements:
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 Step {
17
- id: string;
18
- label: string;
19
- description?: string;
20
- }
21
- export interface StepperProps {
22
- steps: Step[];
23
- currentStep: number;
24
- orientation?: 'horizontal' | 'vertical';
25
- onStepClick?: (stepIndex: number) => void;
26
- allowStepClick?: boolean;
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
- export declare function Stepper(_props: StepperProps): import("react/jsx-runtime").JSX.Element;
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,4 @@
1
+ /**
2
+ * Stepper Component Tests
3
+ */
4
+ export {};
@@ -0,0 +1 @@
1
+ export declare function FormExampleStepper(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { StepperProps } from '../Stepper';
2
+ export declare function InteractiveStepper(args: StepperProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function ValidationStepper(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export { InteractiveStepper } from './InteractiveStepper';
2
+ export { FormExampleStepper } from './FormExampleStepper';
3
+ export { ValidationStepper } from './ValidationStepper';
@@ -1,2 +1,2 @@
1
1
  export { Stepper } from './Stepper';
2
- export type { StepperProps, Step } from './Stepper';
2
+ export type { StepperProps } from './Stepper';
@@ -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, Step } from './Stepper';
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.16",
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
- "vite-plugin-dts": "latest",
29
- "vite-plugin-css-injected-by-js": "latest"
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",