@skalar-saas/design-system 0.1.160 → 0.2.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 (32) hide show
  1. package/README.md +83 -68
  2. package/dist/design-system.css +1 -1
  3. package/dist/{index-jPW4J51n.cjs → index-CvxKpepD.cjs} +2 -2
  4. package/dist/{index-jPW4J51n.cjs.map → index-CvxKpepD.cjs.map} +1 -1
  5. package/dist/{index-DpOd1Khq.js → index-D9aA2m7f.js} +2 -2
  6. package/dist/{index-DpOd1Khq.js.map → index-D9aA2m7f.js.map} +1 -1
  7. package/dist/{index-wbeGpWS7.js → index-DYdvRd97.js} +6343 -6105
  8. package/dist/index-DYdvRd97.js.map +1 -0
  9. package/dist/{index-CFw7Locn.cjs → index-Ymrs1TGO.cjs} +40 -40
  10. package/dist/index-Ymrs1TGO.cjs.map +1 -0
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.js +1 -1
  13. package/dist/index.mjs +300 -297
  14. package/dist/shared/ui/ActivityFeed/ActivityFeed.d.ts +44 -0
  15. package/dist/shared/ui/ActivityFeed/index.d.ts +2 -0
  16. package/dist/shared/ui/AlertCallout/AlertCallout.d.ts +37 -0
  17. package/dist/shared/ui/AlertCallout/index.d.ts +2 -0
  18. package/dist/shared/ui/DateRangePicker/DateRangePicker.d.ts +3 -1
  19. package/dist/shared/ui/DateRangePicker/DateRangePicker.stories.d.ts +1 -1
  20. package/dist/shared/ui/OptionsEditor/OptionsEditor.d.ts +32 -0
  21. package/dist/shared/ui/OptionsEditor/index.d.ts +1 -0
  22. package/dist/shared/ui/Planner/Planner.d.ts +11 -1
  23. package/dist/shared/ui/Planner/index.d.ts +1 -1
  24. package/dist/shared/ui/Stepper/Stepper.d.ts +25 -15
  25. package/dist/shared/ui/Switcher/Switcher.d.ts +5 -1
  26. package/package.json +116 -117
  27. package/src/styles/theme.css +536 -536
  28. package/tailwind.preset.js +278 -278
  29. package/dist/index-CFw7Locn.cjs.map +0 -1
  30. package/dist/index-wbeGpWS7.js.map +0 -1
  31. package/src/README.md +0 -110
  32. package/src/styles/README.md +0 -81
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ import type { StepperColorVariant } from '../Stepper/Stepper';
3
+ export type ActivityStatus = 'success' | 'warning' | 'error' | 'info';
4
+ export interface ActivityEntry {
5
+ id: string;
6
+ description: string;
7
+ timestamp: string;
8
+ status: ActivityStatus;
9
+ }
10
+ export interface ActivityFilterItem {
11
+ id: string;
12
+ label: string;
13
+ }
14
+ export interface ActivityFeedProps extends React.HTMLAttributes<HTMLDivElement> {
15
+ /** Entries to display, newest first. */
16
+ entries: ActivityEntry[];
17
+ /** Shows the top filter (Switcher). Default `true`. */
18
+ showSwitcher?: boolean;
19
+ /** Available filters. Defaults to All / Success / Warnings / Errors. */
20
+ filterItems?: ActivityFilterItem[];
21
+ /** Switcher size. Default `'sm'`. */
22
+ switcherSize?: 'xs' | 'sm' | 'md' | 'lg' | 'ai-chat';
23
+ /** Switcher visual variant. Default `'surface'`. */
24
+ switcherVariant?: 'default' | 'surface';
25
+ /** Override the gap between Switcher items. Tailwind `gap-x-*` class. */
26
+ switcherItemGap?: string;
27
+ /** Indicator shape of the feed. Default `'dot'`. */
28
+ variant?: 'numbered' | 'dot';
29
+ /** Connector line style. Default `'dashed'`. */
30
+ lineStyle?: 'solid' | 'dashed';
31
+ /** Color theme of the indicator and line. */
32
+ colorVariant?: StepperColorVariant;
33
+ /** Override the bottom spacing between steps. Tailwind `pb-*` class. */
34
+ stepGap?: string;
35
+ /** Override the gap between the indicator and the text. Tailwind `gap-*` class. */
36
+ indicatorGap?: string;
37
+ /** Override the vertical padding of each item. Tailwind `py-*` class. */
38
+ itemPadding?: string;
39
+ /** Index (0-based) of the highlighted step. Defaults to the last entry. */
40
+ current?: number;
41
+ /** Override the body padding. Tailwind `p-*` class. */
42
+ bodyPadding?: string;
43
+ }
44
+ export declare const ActivityFeed: React.ForwardRefExoticComponent<ActivityFeedProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,2 @@
1
+ export { ActivityFeed } from './ActivityFeed';
2
+ export type { ActivityFeedProps, ActivityEntry, ActivityFilterItem, ActivityStatus } from './ActivityFeed';
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import { type ButtonVariant, type ButtonHierarchy, type ButtonSize } from '../Button/Button';
3
+ export type AlertCalloutVariant = 'danger' | 'warning' | 'info' | 'success';
4
+ export type AlertCalloutSize = 'sm' | 'md' | 'lg';
5
+ export interface AlertCalloutProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ /** Main heading of the callout. */
7
+ alertTitle: string;
8
+ /** Bold lead-in shown before the description. */
9
+ descriptionHighlight?: string;
10
+ /** Supporting body text under the title. */
11
+ description?: string;
12
+ /** Semantic color of the icon box. Default `'danger'`. */
13
+ variant?: AlertCalloutVariant;
14
+ /** Overall size preset (icon, title and subtitle). Default `'md'`. */
15
+ size?: AlertCalloutSize;
16
+ /** Custom icon node — replaces the default Warning2. You control its size/color. */
17
+ icon?: React.ReactNode;
18
+ /** Override default icon size (only applies when using the default Warning2 icon). */
19
+ iconSize?: number;
20
+ /** Override icon container size class (e.g. 'size-16'). */
21
+ iconBoxSize?: string;
22
+ /** Override title text size (e.g. 'text-2xl'). Takes precedence over size config. */
23
+ titleSize?: string;
24
+ /** Override subtitle text size (e.g. 'text-sm'). Takes precedence over size config. */
25
+ subtitleSize?: string;
26
+ /** Text of the action button. When empty, the button is not rendered. */
27
+ actionLabel?: string;
28
+ /** Click handler for the action button. */
29
+ onAction?: () => void;
30
+ /** Visual variant of the action button. Default `'brand'`. */
31
+ buttonVariant?: ButtonVariant;
32
+ /** Hierarchy of the action button. Default `'primary'`. */
33
+ buttonHierarchy?: ButtonHierarchy;
34
+ /** Size of the action button. Default `'md'`. */
35
+ buttonSize?: ButtonSize;
36
+ }
37
+ export declare const AlertCallout: React.ForwardRefExoticComponent<AlertCalloutProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,2 @@
1
+ export { AlertCallout } from './AlertCallout';
2
+ export type { AlertCalloutProps, AlertCalloutVariant, AlertCalloutSize } from './AlertCallout';
@@ -27,6 +27,8 @@ export interface DateRangePickerProps {
27
27
  cancelLabel?: string;
28
28
  /** Label for the accept button */
29
29
  acceptLabel?: string;
30
+ /** If false, hides the Cancel/Accept footer row */
31
+ showFooter?: boolean;
30
32
  }
31
33
  /**
32
34
  * DateRangePicker - A simple calendar UI component for date selection
@@ -44,4 +46,4 @@ export interface DateRangePickerProps {
44
46
  * pickType="range"
45
47
  * />
46
48
  */
47
- export declare const DateRangePicker: ({ selected: selectedProp, onSelect, disabled, onCancel, onAccept, extraMonth, pickType, className, cancelLabel, acceptLabel, }: DateRangePickerProps) => import("react/jsx-runtime").JSX.Element;
49
+ export declare const DateRangePicker: ({ selected: selectedProp, onSelect, disabled, onCancel, onAccept, extraMonth, pickType, className, cancelLabel, acceptLabel, showFooter, }: DateRangePickerProps) => import("react/jsx-runtime").JSX.Element;
@@ -24,7 +24,7 @@ import { StoryObj } from '@storybook/nextjs-vite';
24
24
  *
25
25
  * The main **Interactive** story serves as a playground to test all prop combinations.
26
26
  */
27
- declare const meta: Meta<({ selected: selectedProp, onSelect, disabled, onCancel, onAccept, extraMonth, pickType, className, cancelLabel, acceptLabel, }: import('./DateRangePicker').DateRangePickerProps) => import("react/jsx-runtime").JSX.Element>;
27
+ declare const meta: Meta<({ selected: selectedProp, onSelect, disabled, onCancel, onAccept, extraMonth, pickType, className, cancelLabel, acceptLabel, showFooter, }: import('./DateRangePicker').DateRangePickerProps) => import("react/jsx-runtime").JSX.Element>;
28
28
  export default meta;
29
29
  type Story = StoryObj<typeof meta>;
30
30
  /**
@@ -0,0 +1,32 @@
1
+ /** Una opción editable: `value` es la clave almacenada, `label` el texto que se muestra. */
2
+ export interface OptionItem {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export interface OptionsEditorProps {
7
+ /** Lista actual de opciones. */
8
+ options: OptionItem[];
9
+ /** Se emite la lista completa actualizada en cualquier alta/baja/edición. */
10
+ onChange: (options: OptionItem[]) => void;
11
+ /** Encabezado opcional sobre la lista. */
12
+ label?: string;
13
+ /** Texto del botón de añadir. */
14
+ addLabel?: string;
15
+ labelPlaceholder?: string;
16
+ valuePlaceholder?: string;
17
+ /** Texto cuando no hay opciones. */
18
+ emptyHint?: string;
19
+ disabled?: boolean;
20
+ className?: string;
21
+ }
22
+ /**
23
+ * Editor de una lista de opciones (`value`/`label`): añadir, editar y quitar filas. Compone
24
+ * `InputField` + `Button` del propio DS. Pensado para campos de selección (enum/multi-enum):
25
+ * el `value` es lo que se persiste/valida y el `label` lo que ve el usuario. Al salir del
26
+ * campo de etiqueta, si el `value` quedó vacío se rellena con la etiqueta (preserva valores
27
+ * existentes que difieran de su label).
28
+ */
29
+ export declare const OptionsEditor: {
30
+ ({ options, onChange, label, addLabel, labelPlaceholder, valuePlaceholder, emptyHint, disabled, className, }: OptionsEditorProps): import("react/jsx-runtime").JSX.Element;
31
+ displayName: string;
32
+ };
@@ -0,0 +1 @@
1
+ export { OptionsEditor, type OptionsEditorProps, type OptionItem } from "./OptionsEditor";
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import { type AppointmentDetailProps } from "../AppointmentDetail";
3
+ import { type DateRange } from "../DateRangePicker";
3
4
  import type { AppointmentStatus } from "../AppointmentRow";
4
5
  export type { AppointmentStatus };
5
6
  export type { AppointmentDetailProps };
7
+ export type { DateRange };
6
8
  export interface PlannerAppointment {
7
9
  id: string;
8
10
  time: string;
@@ -16,8 +18,16 @@ export interface PlannerProps extends React.HTMLAttributes<HTMLDivElement> {
16
18
  detail?: AppointmentDetailProps;
17
19
  onSelectAppointment?: (id: string) => void;
18
20
  showDetail?: boolean;
21
+ /** Shows the date picker above the appointment list for filtering. Default `false`. */
22
+ showDatePicker?: boolean;
23
+ /** Currently selected date or range used to filter appointments (controlled). */
24
+ selectedDate?: DateRange;
25
+ /** Called when the user picks a date/range in the date picker. */
26
+ onDateChange?: (range: DateRange | undefined) => void;
27
+ /** Selection mode of the date picker: single day or a range. Default `'single'`. */
28
+ datePickerType?: 'single' | 'range';
19
29
  }
20
30
  export declare const Planner: {
21
- ({ appointments, selectedId, detail, onSelectAppointment, showDetail, className, ...props }: PlannerProps): import("react/jsx-runtime").JSX.Element;
31
+ ({ appointments, selectedId, detail, onSelectAppointment, showDetail, showDatePicker, selectedDate, onDateChange, datePickerType, className, ...props }: PlannerProps): import("react/jsx-runtime").JSX.Element;
22
32
  displayName: string;
23
33
  };
@@ -1,2 +1,2 @@
1
1
  export { Planner } from './Planner';
2
- export type { PlannerProps, PlannerAppointment, AppointmentStatus } from './Planner';
2
+ export type { PlannerProps, PlannerAppointment, AppointmentStatus, AppointmentDetailProps, DateRange } from './Planner';
@@ -1,28 +1,38 @@
1
1
  import React from 'react';
2
2
  export interface StepperStep {
3
- /** Título del paso. */
3
+ /** Step title. */
4
4
  title: string;
5
- /** Texto secundario opcional, bajo el título. */
5
+ /** Optional secondary text, shown under the title. */
6
6
  caption?: string;
7
+ /** Semantic status of the step; sets the dot color in the `dot` variant. */
8
+ status?: 'success' | 'warning' | 'error' | 'info';
7
9
  }
10
+ export type StepperColorVariant = 'brand' | 'success' | 'warning';
8
11
  export interface StepperProps {
9
- /** Pasos a mostrar, en orden. */
12
+ /** Steps to render, in order. */
10
13
  steps: StepperStep[];
11
- /** Índice (0-based) del paso actual. */
14
+ /** Index (0-based) of the current step. */
12
15
  current: number;
13
- /** Clases adicionales para el contenedor. */
16
+ /** Indicator shape: numbered circle or dot. Default `'numbered'`. */
17
+ variant?: 'numbered' | 'dot';
18
+ /** Connector line style. Default `'solid'`. */
19
+ lineStyle?: 'solid' | 'dashed';
20
+ /** Color theme of the indicator and line. */
21
+ colorVariant?: StepperColorVariant;
22
+ /** Override the gap between the indicator and the text. Tailwind `gap-*` class. */
23
+ indicatorGap?: string;
24
+ /** Override the bottom spacing between steps. Tailwind `pb-*` class. */
25
+ stepGap?: string;
26
+ /** Extra classes for each item (`<li>`). */
27
+ itemClassName?: string;
28
+ /** Additional classes for the container. */
14
29
  className?: string;
15
30
  }
16
31
  /**
17
- * @file Stepper vertical para flujos multi-paso (wizards).
18
- * @description Muestra una lista de pasos como círculos numerados ("01", "02"…)
19
- * unidos por una línea vertical, con título y caption opcional. Los pasos previos
20
- * a `current` aparecen como completados, el actual resaltado y los siguientes como
21
- * pendientes.
22
- *
23
- * @param {StepperStep[]} steps - Los pasos a mostrar, en orden.
24
- * @param {number} current - Índice (0-based) del paso actual.
25
- * @param {string} [className] - Clases adicionales para el contenedor.
26
- * @returns {JSX.Element} El stepper renderizado.
32
+ * @file Vertical stepper for multi-step flows and activity feeds.
33
+ * @description Renders a list of steps in two variants: `numbered` (circles
34
+ * "01", "02"… for wizards) or `dot` (status-colored dots for timelines). Steps
35
+ * before `current` show as completed, the current one is highlighted and the
36
+ * rest as pending. The connector line can be `solid` or `dashed`.
27
37
  */
28
38
  export declare const Stepper: React.FC<StepperProps>;
@@ -18,6 +18,10 @@ export interface SwitcherProps {
18
18
  onChange: (id: string | number) => void;
19
19
  /** The size of the switcher. */
20
20
  size?: SwitcherSize;
21
+ /** 'default': bg-surface-2 wrapper, bg-surface-bg active. 'surface': bg-surface-bg wrapper, bg-surface-2 active. */
22
+ variant?: 'default' | 'surface';
23
+ /** Override the gap between items. Tailwind gap-x-* class. */
24
+ itemGap?: string;
21
25
  /** If true, the switcher will have a border around its container. */
22
26
  withBorder?: boolean;
23
27
  /** Optional custom classes for the container. */
@@ -37,5 +41,5 @@ export interface SwitcherProps {
37
41
  * @param {boolean} [withBorder=false] - If true, adds a border to the component's container.
38
42
  * @returns {JSX.Element} The rendered Switcher element.
39
43
  */
40
- export declare const Switcher: ({ items, value, onChange, size, withBorder, className, }: SwitcherProps) => import("react/jsx-runtime").JSX.Element;
44
+ export declare const Switcher: ({ items, value, onChange, size, variant, itemGap, withBorder, className, }: SwitcherProps) => import("react/jsx-runtime").JSX.Element;
41
45
  export {};
package/package.json CHANGED
@@ -1,117 +1,116 @@
1
- {
2
- "name": "@skalar-saas/design-system",
3
- "version": "0.1.160",
4
- "type": "module",
5
- "description": "Skalar Design System - UI component library",
6
- "author": "Skalar Team",
7
- "license": "UNLICENSED",
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/skalar-saas/skalar-design-system.git"
11
- },
12
- "scripts": {
13
- "build": "vite build && tsc --project tsconfig.build.json --skipLibCheck && node scripts/fix-dts-imports.cjs",
14
- "lint": "eslint",
15
- "test:storybook": "vitest run --project=storybook",
16
- "storybook": "storybook dev -p 6006",
17
- "build-storybook": "storybook build",
18
- "chromatic": "npx chromatic --project-token=chpt_29fd0416e5da6c0"
19
- },
20
- "packageManager": "pnpm@10.20.0",
21
- "main": "./dist/index.js",
22
- "module": "./dist/index.mjs",
23
- "types": "./dist/index.d.ts",
24
- "exports": {
25
- ".": {
26
- "types": "./dist/index.d.ts",
27
- "import": "./dist/index.mjs",
28
- "require": "./dist/index.js"
29
- },
30
- "./styles": "./dist/design-system.css",
31
- "./theme": "./src/styles/theme.css",
32
- "./preset": "./tailwind.preset.js"
33
- },
34
- "files": [
35
- "dist",
36
- "src/styles/theme.css",
37
- "tailwind.preset.js",
38
- "README.md"
39
- ],
40
- "sideEffects": [
41
- "*.css"
42
- ],
43
- "peerDependencies": {
44
- "@dnd-kit/core": "^6.3.1",
45
- "@dnd-kit/sortable": "^10.0.0",
46
- "@dnd-kit/utilities": "^3.2.2",
47
- "@headlessui/react": "^2.2.8",
48
- "@radix-ui/react-toast": "^1.2.15",
49
- "@radix-ui/react-tooltip": "^1.2.8",
50
- "@tanstack/react-table": "^8.21.3",
51
- "@tanstack/react-virtual": "^3.13.12",
52
- "clsx": "^2.1.1",
53
- "framer-motion": "^12.23.22",
54
- "iconsax-react": "^0.0.8",
55
- "react": "^18.0.0 || ^19.0.0",
56
- "react-day-picker": "^9.11.1",
57
- "react-dom": "^18.0.0 || ^19.0.0",
58
- "recharts": "^2.15.4",
59
- "tailwind-merge": "^3.3.1"
60
- },
61
- "devDependencies": {
62
- "@chromatic-com/storybook": "^4.1.1",
63
- "@dnd-kit/core": "^6.3.1",
64
- "@dnd-kit/sortable": "^10.0.0",
65
- "@dnd-kit/utilities": "^3.2.2",
66
- "@eslint/eslintrc": "^3",
67
- "@eslint/js": "^9.39.1",
68
- "@headlessui/react": "^2.2.8",
69
- "@radix-ui/react-toast": "^1.2.15",
70
- "@radix-ui/react-tooltip": "^1.2.8",
71
- "@storybook/addon-a11y": "^9.1.15",
72
- "@storybook/addon-docs": "^9.1.15",
73
- "@storybook/addon-onboarding": "^9.1.15",
74
- "@storybook/addon-vitest": "^9.1.15",
75
- "@storybook/react-vite": "^9.1.15",
76
- "@tailwindcss/postcss": "^4",
77
- "@tanstack/react-table": "^8.21.3",
78
- "@tanstack/react-virtual": "^3.13.12",
79
- "@testing-library/jest-dom": "^6.9.1",
80
- "@testing-library/react": "^16.3.0",
81
- "@testing-library/user-event": "^14.6.1",
82
- "@types/jsdom": "^27.0.0",
83
- "@types/node": "^20",
84
- "@types/react": "^19",
85
- "@types/react-dom": "^19",
86
- "@vitejs/plugin-react": "^5.1.0",
87
- "@vitest/browser": "^3.2.4",
88
- "@vitest/coverage-v8": "^3.2.4",
89
- "chromatic": "^13.3.4",
90
- "clsx": "^2.1.1",
91
- "eslint": "^9",
92
- "eslint-plugin-react": "^7.37.5",
93
- "eslint-plugin-react-hooks": "^7.0.1",
94
- "eslint-plugin-storybook": "^9.1.15",
95
- "framer-motion": "^12.23.22",
96
- "glob": "^11.0.3",
97
- "iconsax-react": "^0.0.8",
98
- "jsdom": "^27.0.1",
99
- "playwright": "^1.55.1",
100
- "react": "19.1.0",
101
- "react-day-picker": "^9.11.1",
102
- "react-dom": "19.1.0",
103
- "recharts": "^2.15.4",
104
- "rollup-plugin-preserve-directives": "^0.4.0",
105
- "storybook": "^9.1.15",
106
- "tailwind-merge": "^3.3.1",
107
- "tailwindcss": "^4",
108
- "typescript": "^5",
109
- "typescript-eslint": "^8.46.3",
110
- "vite": "^7.2.1",
111
- "vite-plugin-dts": "^5.0.2",
112
- "vitest": "^3.2.4"
113
- },
114
- "dependencies": {
115
- "react-markdown": "^10.1.0"
116
- }
117
- }
1
+ {
2
+ "name": "@skalar-saas/design-system",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "description": "Skalar Design System - UI component library",
6
+ "author": "Skalar Team",
7
+ "license": "UNLICENSED",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/skalar-saas/skalar-design-system.git"
11
+ },
12
+ "main": "./dist/index.js",
13
+ "module": "./dist/index.mjs",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.mjs",
19
+ "require": "./dist/index.js"
20
+ },
21
+ "./styles": "./dist/design-system.css",
22
+ "./theme": "./src/styles/theme.css",
23
+ "./preset": "./tailwind.preset.js"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "src/styles/theme.css",
28
+ "tailwind.preset.js",
29
+ "README.md"
30
+ ],
31
+ "sideEffects": [
32
+ "*.css"
33
+ ],
34
+ "peerDependencies": {
35
+ "@dnd-kit/core": "^6.3.1",
36
+ "@dnd-kit/sortable": "^10.0.0",
37
+ "@dnd-kit/utilities": "^3.2.2",
38
+ "@headlessui/react": "^2.2.8",
39
+ "@radix-ui/react-toast": "^1.2.15",
40
+ "@radix-ui/react-tooltip": "^1.2.8",
41
+ "@tanstack/react-table": "^8.21.3",
42
+ "@tanstack/react-virtual": "^3.13.12",
43
+ "clsx": "^2.1.1",
44
+ "framer-motion": "^12.23.22",
45
+ "iconsax-react": "^0.0.8",
46
+ "react": "^18.0.0 || ^19.0.0",
47
+ "react-day-picker": "^9.11.1",
48
+ "react-dom": "^18.0.0 || ^19.0.0",
49
+ "recharts": "^2.15.4",
50
+ "tailwind-merge": "^3.3.1"
51
+ },
52
+ "devDependencies": {
53
+ "@chromatic-com/storybook": "^4.1.1",
54
+ "@dnd-kit/core": "^6.3.1",
55
+ "@dnd-kit/sortable": "^10.0.0",
56
+ "@dnd-kit/utilities": "^3.2.2",
57
+ "@eslint/eslintrc": "^3",
58
+ "@eslint/js": "^9.39.1",
59
+ "@headlessui/react": "^2.2.8",
60
+ "@radix-ui/react-toast": "^1.2.15",
61
+ "@radix-ui/react-tooltip": "^1.2.8",
62
+ "@storybook/addon-a11y": "^9.1.15",
63
+ "@storybook/addon-docs": "^9.1.15",
64
+ "@storybook/addon-onboarding": "^9.1.15",
65
+ "@storybook/addon-vitest": "^9.1.15",
66
+ "@storybook/react-vite": "^9.1.15",
67
+ "@tailwindcss/postcss": "^4",
68
+ "@tanstack/react-table": "^8.21.3",
69
+ "@tanstack/react-virtual": "^3.13.12",
70
+ "@testing-library/jest-dom": "^6.9.1",
71
+ "@testing-library/react": "^16.3.0",
72
+ "@testing-library/user-event": "^14.6.1",
73
+ "@types/jsdom": "^27.0.0",
74
+ "@types/node": "^20",
75
+ "@types/react": "^19",
76
+ "@types/react-dom": "^19",
77
+ "@vitejs/plugin-react": "^5.1.0",
78
+ "@vitest/browser": "^3.2.4",
79
+ "@vitest/coverage-v8": "^3.2.4",
80
+ "chromatic": "^13.3.4",
81
+ "clsx": "^2.1.1",
82
+ "eslint": "^9",
83
+ "eslint-plugin-react": "^7.37.5",
84
+ "eslint-plugin-react-hooks": "^7.0.1",
85
+ "eslint-plugin-storybook": "^9.1.15",
86
+ "framer-motion": "^12.23.22",
87
+ "glob": "^11.0.3",
88
+ "iconsax-react": "^0.0.8",
89
+ "jsdom": "^27.0.1",
90
+ "playwright": "^1.55.1",
91
+ "react": "19.1.0",
92
+ "react-day-picker": "^9.11.1",
93
+ "react-dom": "19.1.0",
94
+ "recharts": "^2.15.4",
95
+ "rollup-plugin-preserve-directives": "^0.4.0",
96
+ "storybook": "^9.1.15",
97
+ "tailwind-merge": "^3.3.1",
98
+ "tailwindcss": "^4",
99
+ "typescript": "^5",
100
+ "typescript-eslint": "^8.46.3",
101
+ "vite": "^7.2.1",
102
+ "vite-plugin-dts": "^5.0.2",
103
+ "vitest": "^3.2.4"
104
+ },
105
+ "dependencies": {
106
+ "react-markdown": "^10.1.0"
107
+ },
108
+ "scripts": {
109
+ "build": "vite build && tsc --project tsconfig.build.json --skipLibCheck && node scripts/fix-dts-imports.cjs",
110
+ "lint": "eslint",
111
+ "test:storybook": "vitest run --project=storybook",
112
+ "storybook": "storybook dev -p 6006",
113
+ "build-storybook": "storybook build",
114
+ "chromatic": "npx chromatic --project-token=chpt_29fd0416e5da6c0"
115
+ }
116
+ }