@donotdev/components 0.0.16 → 0.0.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 (97) hide show
  1. package/dist/advanced/Bento/Bento.d.ts +1 -1
  2. package/dist/advanced/Bento/Bento.js +1 -1
  3. package/dist/advanced/Code/CodeContent.d.ts.map +1 -1
  4. package/dist/advanced/Code/CodeContent.js +23 -6
  5. package/dist/advanced/Code/CodeSkeleton.js +4 -4
  6. package/dist/advanced/ImageGallery/ImageGallery.d.ts.map +1 -1
  7. package/dist/advanced/ImageGallery/ImageGallery.js +11 -5
  8. package/dist/advanced/JsonViewer/JsonViewer.d.ts +1 -1
  9. package/dist/advanced/JsonViewer/JsonViewer.d.ts.map +1 -1
  10. package/dist/advanced/JsonViewer/JsonViewer.js +9 -3
  11. package/dist/atomic/ActionButton/index.js +2 -2
  12. package/dist/atomic/ActionButton/useAction.d.ts.map +1 -1
  13. package/dist/atomic/ActionButton/useAction.js +18 -5
  14. package/dist/atomic/Alert/index.d.ts +1 -1
  15. package/dist/atomic/Alert/index.d.ts.map +1 -1
  16. package/dist/atomic/Alert/index.js +1 -1
  17. package/dist/atomic/Badge/index.d.ts +1 -1
  18. package/dist/atomic/Button/index.d.ts +2 -2
  19. package/dist/atomic/Button/index.d.ts.map +1 -1
  20. package/dist/atomic/CallToAction/index.d.ts +2 -1
  21. package/dist/atomic/CallToAction/index.d.ts.map +1 -1
  22. package/dist/atomic/CallToAction/index.js +2 -1
  23. package/dist/atomic/Combobox/index.d.ts.map +1 -1
  24. package/dist/atomic/Combobox/index.js +3 -3
  25. package/dist/atomic/CopyToClipboard/index.d.ts.map +1 -1
  26. package/dist/atomic/CopyToClipboard/index.js +20 -4
  27. package/dist/atomic/Dialog/index.js +1 -1
  28. package/dist/atomic/DropdownMenu/DropdownMenuPrimitive.d.ts.map +1 -1
  29. package/dist/atomic/DropdownMenu/DropdownMenuPrimitive.js +5 -21
  30. package/dist/atomic/DropdownMenu/index.d.ts.map +1 -1
  31. package/dist/atomic/DropdownMenu/index.js +7 -17
  32. package/dist/atomic/Grid/GridArea.d.ts +2 -2
  33. package/dist/atomic/Grid/GridArea.js +2 -2
  34. package/dist/atomic/Grid/index.d.ts +39 -22
  35. package/dist/atomic/Grid/index.d.ts.map +1 -1
  36. package/dist/atomic/Grid/index.js +56 -27
  37. package/dist/atomic/HeroSection/index.d.ts +3 -0
  38. package/dist/atomic/HeroSection/index.d.ts.map +1 -1
  39. package/dist/atomic/HeroSection/index.js +5 -2
  40. package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts.map +1 -1
  41. package/dist/atomic/HoverCard/HoverCardPrimitive.js +1 -1
  42. package/dist/atomic/HoverCard/index.d.ts +19 -4
  43. package/dist/atomic/HoverCard/index.d.ts.map +1 -1
  44. package/dist/atomic/HoverCard/index.js +24 -5
  45. package/dist/atomic/Icons/Icon.d.ts.map +1 -1
  46. package/dist/atomic/Icons/Icon.js +11 -10
  47. package/dist/atomic/InfiniteScroll/index.d.ts +4 -2
  48. package/dist/atomic/InfiniteScroll/index.d.ts.map +1 -1
  49. package/dist/atomic/InfiniteScroll/index.js +2 -2
  50. package/dist/atomic/Pagination/index.js +1 -1
  51. package/dist/atomic/Popover/PopoverPrimitive.d.ts +1 -1
  52. package/dist/atomic/Popover/PopoverPrimitive.d.ts.map +1 -1
  53. package/dist/atomic/Popover/PopoverPrimitive.js +2 -2
  54. package/dist/atomic/Popover/index.d.ts +2 -2
  55. package/dist/atomic/Popover/index.d.ts.map +1 -1
  56. package/dist/atomic/Rating/index.d.ts +1 -1
  57. package/dist/atomic/Rating/index.d.ts.map +1 -1
  58. package/dist/atomic/Section/index.d.ts +9 -6
  59. package/dist/atomic/Section/index.d.ts.map +1 -1
  60. package/dist/atomic/Section/index.js +3 -2
  61. package/dist/atomic/Select/index.d.ts.map +1 -1
  62. package/dist/atomic/Select/index.js +2 -3
  63. package/dist/atomic/Stack/index.d.ts +2 -2
  64. package/dist/atomic/Stack/index.js +2 -2
  65. package/dist/atomic/Stepper/index.d.ts +5 -1
  66. package/dist/atomic/Stepper/index.d.ts.map +1 -1
  67. package/dist/atomic/Stepper/index.js +9 -6
  68. package/dist/atomic/Table/index.d.ts +27 -5
  69. package/dist/atomic/Table/index.d.ts.map +1 -1
  70. package/dist/atomic/Table/index.js +55 -6
  71. package/dist/atomic/Tabs/index.d.ts +1 -1
  72. package/dist/atomic/Tag/index.d.ts +1 -1
  73. package/dist/atomic/Text/index.d.ts +2 -0
  74. package/dist/atomic/Text/index.d.ts.map +1 -1
  75. package/dist/atomic/Text/index.js +2 -1
  76. package/dist/atomic/Toaster/ToastPrimitive.d.ts +1 -1
  77. package/dist/atomic/Toaster/ToastPrimitive.d.ts.map +1 -1
  78. package/dist/atomic/Toaster/ToastPrimitive.js +1 -13
  79. package/dist/atomic/Toggle/index.d.ts +1 -1
  80. package/dist/atomic/index.d.ts +1 -1
  81. package/dist/atomic/index.d.ts.map +1 -1
  82. package/dist/hooks/useToast.d.ts.map +1 -1
  83. package/dist/hooks/useToast.js +18 -3
  84. package/dist/hooks/useViewportVisibility.d.ts.map +1 -1
  85. package/dist/hooks/useViewportVisibility.js +10 -12
  86. package/dist/index.d.ts +0 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +6 -4
  89. package/dist/styles/index.css +259 -96
  90. package/dist/types.d.ts +1 -1
  91. package/dist/utils/constants.d.ts +13 -0
  92. package/dist/utils/constants.d.ts.map +1 -1
  93. package/dist/utils/constants.js +12 -0
  94. package/dist/utils/intersectionObserver.d.ts.map +1 -1
  95. package/dist/utils/intersectionObserver.js +1 -11
  96. package/dist/utils/variants.d.ts +1 -1
  97. package/package.json +3 -3
@@ -10,7 +10,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
10
10
  import type { ComponentProps } from 'react';
11
11
  declare const Popover: import("react").FC<PopoverPrimitive.PopoverProps>;
12
12
  declare const PopoverTrigger: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
13
- declare const PopoverContent: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: ComponentProps<typeof PopoverPrimitive.Content> & {
13
+ declare const PopoverContent: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: ComponentProps<typeof PopoverPrimitive.Content> & {
14
14
  onCloseAutoFocus?: (event: Event) => void;
15
15
  onInteractOutside?: (event: Event) => void;
16
16
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/PopoverPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,OAAO,mDAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,oIAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc,GAAI,uFAQrB,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG;IACnD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C,4CA0BA,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"PopoverPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/PopoverPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,OAAO,mDAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,oIAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc,GAAI,yGASrB,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG;IACnD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C,4CA2BA,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -12,8 +12,8 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
12
12
  import { cn } from '../../utils/helpers';
13
13
  const Popover = PopoverPrimitive.Root;
14
14
  const PopoverTrigger = PopoverPrimitive.Trigger;
15
- const PopoverContent = ({ className, align = 'start', side = 'bottom', sideOffset = 4, onCloseAutoFocus, onInteractOutside, ...props }) => {
16
- return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { align: align, side: side, sideOffset: sideOffset, onCloseAutoFocus: onCloseAutoFocus, onInteractOutside: onInteractOutside
15
+ const PopoverContent = ({ className, align = 'start', side = 'bottom', sideOffset = 4, collisionPadding = 8, onCloseAutoFocus, onInteractOutside, ...props }) => {
16
+ return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { align: align, side: side, sideOffset: sideOffset, collisionPadding: collisionPadding, onCloseAutoFocus: onCloseAutoFocus, onInteractOutside: onInteractOutside
17
17
  ? (e) => {
18
18
  const target = e.target;
19
19
  const content = e.currentTarget;
@@ -4,7 +4,7 @@ import { type FloatingVariant } from '../../utils/constants';
4
4
  */
5
5
  declare const PopoverRoot: import("react").FC<import("@radix-ui/react-popover").PopoverProps>;
6
6
  declare const PopoverTriggerComponent: import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
7
- declare const PopoverContentComponent: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
7
+ declare const PopoverContentComponent: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
8
8
  onCloseAutoFocus?: (event: Event) => void;
9
9
  onInteractOutside?: (event: Event) => void;
10
10
  }) => import("react/jsx-runtime").JSX.Element;
@@ -66,7 +66,7 @@ declare const Popover: {
66
66
  ({ trigger, children, open, onOpenChange, align, side, sideOffset, variant, className, modal, onInteractOutside, }: PopoverProps): import("react/jsx-runtime").JSX.Element;
67
67
  Root: import("react").FC<import("@radix-ui/react-popover").PopoverProps>;
68
68
  Trigger: import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
69
- Content: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
69
+ Content: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
70
70
  onCloseAutoFocus?: (event: Event) => void;
71
71
  onInteractOutside?: (event: Event) => void;
72
72
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/E;;GAEG;AACH,QAAA,MAAM,WAAW,oEAAmB,CAAC;AACrC,QAAA,MAAM,uBAAuB,qJAAiB,CAAC;AAC/C,QAAA,MAAM,uBAAuB;oBAK5B,CAAA;qBAA6C,CAAC;6CALD,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAAmB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,OAAO;wHAYV,YAAY;;;;wBAzDd,CAAA;yBAA6C,CAAC;;CA2E9C,CAAC;wBAMwB,OAAO,OAAO,GAAG;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,uBAAuB,CAAC;IACxC,OAAO,EAAE,OAAO,uBAAuB,CAAC;CACzC;AAJD,wBAIE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/E;;GAEG;AACH,QAAA,MAAM,WAAW,oEAAmB,CAAC;AACrC,QAAA,MAAM,uBAAuB,qJAAiB,CAAC;AAC/C,QAAA,MAAM,uBAAuB;oBAKL,CAAC;qBAA6C,CAAC;6CALzB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAAmB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,OAAO;wHAYV,YAAY;;;;wBAzDS,CAAC;yBAA6C,CAAC;;CA2EtE,CAAC;wBAMwB,OAAO,OAAO,GAAG;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,uBAAuB,CAAC;IACxC,OAAO,EAAE,OAAO,uBAAuB,CAAC;CACzC;AAJD,wBAIE"}
@@ -3,7 +3,7 @@ import { CONTROL_VARIANT, type ControlVariant } from '../../utils/constants';
3
3
  import './Rating.css';
4
4
  import type { HTMLAttributes } from 'react';
5
5
  declare const ratingVariants: (props?: ({
6
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | null | undefined;
6
+ variant?: "default" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export interface RatingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>, VariantProps<typeof ratingVariants> {
9
9
  /** Current rating value (1-5, supports decimals for display) */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Rating/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,OAAO,CAAC;AAE3D,QAAA,MAAM,cAAc;;8EAgBlB,CAAC;AAEH,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACtD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiBD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,GAAI,gHAWb,WAAW,4CAoHb,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,eAAe,IAAI,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,cAAc,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Rating/index.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,OAAO,CAAC;AAE3D,QAAA,MAAM,cAAc;;8EAgBlB,CAAC;AAEH,MAAM,WAAW,WACf,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EAChD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiBD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,GAAI,gHAWb,WAAW,4CAkHb,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,eAAe,IAAI,cAAc,EAAE,CAAC;AAC7D,YAAY,EAAE,cAAc,IAAI,aAAa,EAAE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type ElementType, type ComponentPropsWithRef, type ReactNode } from 'react';
2
- import { type ResponsiveCols } from '../Grid';
2
+ import { type Tone } from '../../utils/constants';
3
+ import { type GridCols } from '../Grid';
3
4
  import './Section.css';
4
5
  /**
5
6
  * Section-specific props
@@ -17,19 +18,21 @@ interface SectionOwnProps {
17
18
  /** Show separator above section @default false */
18
19
  separator?: boolean;
19
20
  /** Tone system for visual rhythm */
20
- tone?: 'base' | 'muted' | 'elevated' | 'contrast' | 'accent';
21
+ tone?: Tone;
21
22
  /**
22
23
  * Content alignment (text alignment)
23
24
  * @default 'center'
24
25
  */
25
26
  align?: 'start' | 'center' | 'end';
26
27
  /**
27
- * Grid columns - fixed or responsive
28
+ * Grid columns - fixed, responsive, or custom template
28
29
  * When provided, wraps children in Grid
29
- * @example 3 - always 3 columns
30
- * @example [1, 1, 2, 3] - responsive: 1 mobile/tablet, 2 laptop, 3 desktop
30
+ * @example 3 - always 3 equal columns
31
+ * @example "1fr 3fr" - custom column template
32
+ * @example [1, 1, 2, 3] - responsive equal: 1 mobile/tablet, 2 laptop, 3 desktop
33
+ * @example ["1fr", "1fr", "1fr 3fr", "1fr 3fr"] - responsive template
31
34
  */
32
- gridCols?: number | ResponsiveCols;
35
+ gridCols?: GridCols;
33
36
  /**
34
37
  * Grid gap size
35
38
  * @default 'medium'
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Section/index.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAa,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAKpD,OAAO,eAAe,CAAC;AAEvB;;GAEG;AACH,UAAU,eAAe;IACvB;;;OAGG;IACH,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAEtD,sBAAsB;IACtB,QAAQ,EAAE,SAAS,CAAC;IAEpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAE7D;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAEnC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEhD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAAI,eAAe,GAC3E,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,eAAe,CAAC,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,OAAO,8HAmGZ,CAAC;AAIF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Section/index.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAOxD,OAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,OAAO,eAAe,CAAC;AAEvB;;GAEG;AACH,UAAU,eAAe;IACvB;;;OAGG;IACH,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAEtD,sBAAsB;IACtB,QAAQ,EAAE,SAAS,CAAC;IAEpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEhD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAAI,eAAe,GAC3E,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,eAAe,CAAC,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,OAAO,8HAmGZ,CAAC;AAIF,eAAe,OAAO,CAAC"}
@@ -8,7 +8,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
8
8
  * @example
9
9
  * ```tsx
10
10
  * // Fixed 3 columns
11
- * <Section title="Features" gridCols={3}>
11
+ * <Section title="Features" gridCols={[1,1,3,3]}>
12
12
  * <Card />
13
13
  * <Card />
14
14
  * <Card />
@@ -35,6 +35,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
35
35
  import { CirclePlus, CircleMinus } from 'lucide-react';
36
36
  import { createElement, forwardRef, useState, } from 'react';
37
37
  import { GAP_VARIANT } from '../../styles/componentConstants';
38
+ import { TONE } from '../../utils/constants';
38
39
  import { cn } from '../../utils/helpers';
39
40
  import { CollapsiblePrimitive, CollapsibleTrigger, CollapsibleContent, } from '../Collapsible/CollapsiblePrimitive';
40
41
  import Grid, {} from '../Grid';
@@ -55,7 +56,7 @@ import './Section.css';
55
56
  * </Section>
56
57
  * ```
57
58
  */
58
- const Section = forwardRef(function Section({ as = 'section', children, title, separator = false, tone = 'base', align: textAlign = 'center', gridCols, gridGap, collapsible = false, open, onOpenChange, defaultOpen = false, className, ...props }, ref) {
59
+ const Section = forwardRef(function Section({ as = 'section', children, title, separator = false, tone = TONE.GHOST, align: textAlign = 'center', gridCols, gridGap, collapsible = false, open, onOpenChange, defaultOpen = false, className, ...props }, ref) {
59
60
  const Component = as;
60
61
  const [internalOpen, setInternalOpen] = useState(() => collapsible ? defaultOpen : false);
61
62
  const isControlled = collapsible && open !== undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Select/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,eAAe,EAOhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,OAAO,eAAe,CAAC,EACtC,UAAU,CACX;IACC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,MAAM,GAAI,uHAYb,WAAW,4CAyHb,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Select/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,eAAe,EAOhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,OAAO,eAAe,CAAC,EACtC,UAAU,CACX;IACC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,MAAM,GAAI,uHAYb,WAAW,4CAuHb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  */
11
11
  import * as SelectRadix from '@radix-ui/react-select';
12
12
  import { Check, ChevronDown } from 'lucide-react';
13
- import { useState, useId } from 'react';
13
+ import { useId } from 'react';
14
14
  import { cn } from '../../utils/helpers';
15
15
  import { FloatingLabel } from '../Label';
16
16
  import ScrollArea from '../ScrollArea';
@@ -38,11 +38,10 @@ import './Select.css';
38
38
  */
39
39
  const Select = ({ value, onValueChange, placeholder = 'Select an option...', options = [], trigger, disabled, isLoading, defaultValue, label, required, ...props }) => {
40
40
  const id = useId();
41
- const [isOpen, setIsOpen] = useState(false);
42
41
  const hasLabel = !!label;
43
42
  const triggerElement = (_jsxs(SelectTriggerPrimitive, { id: id, className: "dndev-input dndev-select-trigger", disabled: disabled, "data-bare": hasLabel || undefined, children: [isLoading ? (_jsxs("div", { className: "dndev-select-loading-container", children: [_jsx("div", { className: "dndev-animate-spin dndev-select-loading-spinner" }), _jsx("span", { children: "Loading..." })] })) : (_jsx(SelectValuePrimitive, { placeholder: placeholder })), _jsx(SelectRadix.Icon, { asChild: true, children: _jsx(ChevronDown, {}) })] }));
44
43
  const customTrigger = trigger ? (_jsx(SelectTriggerPrimitive, { asChild: true, disabled: disabled, className: "dndev-input dndev-select-trigger", children: trigger })) : hasLabel ? (_jsx(FloatingLabel, { htmlFor: id, label: label, disabled: disabled, required: required, children: triggerElement })) : (triggerElement);
45
- return (_jsxs(SelectPrimitive, { value: value, onValueChange: onValueChange, defaultValue: defaultValue, disabled: disabled, onOpenChange: setIsOpen, ...props, children: [customTrigger, _jsx(SelectRadix.Portal, { children: _jsx(SelectContentPrimitive, { className: "dndev-floating dndev-menu-content dndev-z-tooltip dndev-select-content", position: "popper", side: "bottom", sideOffset: 4, align: "start", "data-glow": "blank", children: _jsx(SelectRadix.Viewport, { children: _jsx(ScrollArea, { className: "dndev-menu-scroll-area", end: true, children: options.map((option) => {
44
+ return (_jsxs(SelectPrimitive, { value: value, onValueChange: onValueChange, defaultValue: defaultValue, disabled: disabled, ...props, children: [customTrigger, _jsx(SelectRadix.Portal, { children: _jsx(SelectContentPrimitive, { className: "dndev-floating dndev-menu-content dndev-z-tooltip dndev-select-content", position: "popper", side: "bottom", sideOffset: 4, align: "start", "data-glow": "blank", children: _jsx(SelectRadix.Viewport, { children: _jsx(ScrollArea, { className: "dndev-menu-scroll-area", end: true, children: options.map((option) => {
46
45
  if (option.value === '__label__') {
47
46
  return (_jsx(SelectLabelPrimitive, { className: "dndev-menu-label", children: option.label }, option.label));
48
47
  }
@@ -6,7 +6,7 @@
6
6
  * @example
7
7
  * ```tsx
8
8
  * // Vertical stack (default div)
9
- * <Stack gap="medium">
9
+ * <Stack>
10
10
  * <Label>Email</Label>
11
11
  * <Input />
12
12
  * </Stack>
@@ -24,7 +24,7 @@
24
24
  * </Stack>
25
25
  *
26
26
  * // Centered, fit-content width with start-aligned items
27
- * <Stack gap="medium" align="start" width="fit" centered>
27
+ * <Stack align="start" width="fit" centered>
28
28
  * <Label>Item 1</Label>
29
29
  * <Label>Item 2</Label>
30
30
  * </Stack>
@@ -7,7 +7,7 @@
7
7
  * @example
8
8
  * ```tsx
9
9
  * // Vertical stack (default div)
10
- * <Stack gap="medium">
10
+ * <Stack>
11
11
  * <Label>Email</Label>
12
12
  * <Input />
13
13
  * </Stack>
@@ -25,7 +25,7 @@
25
25
  * </Stack>
26
26
  *
27
27
  * // Centered, fit-content width with start-aligned items
28
- * <Stack gap="medium" align="start" width="fit" centered>
28
+ * <Stack align="start" width="fit" centered>
29
29
  * <Label>Item 1</Label>
30
30
  * <Label>Item 2</Label>
31
31
  * </Stack>
@@ -20,7 +20,7 @@ export interface StepperStep {
20
20
  content: ReactNode;
21
21
  }
22
22
  declare const stepperVariants: (props?: ({
23
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | null | undefined;
23
+ variant?: "default" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
24
24
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
25
25
  export type StepperVariant = VariantProps<typeof stepperVariants>['variant'];
26
26
  export interface StepperProps extends VariantProps<typeof stepperVariants> {
@@ -44,6 +44,10 @@ export interface StepperProps extends VariantProps<typeof stepperVariants> {
44
44
  className?: string;
45
45
  /** Callback when step changes */
46
46
  onStepChange?: (stepIndex: number) => void;
47
+ /** Controlled active step (0-based). When set, Stepper is controlled. */
48
+ activeStep?: number;
49
+ /** Show primary Next / secondary Previous buttons below the card (default: false) */
50
+ showPrimaryNavigation?: boolean;
47
51
  }
48
52
  /**
49
53
  * Reusable stepper component for step-by-step workflows.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Stepper/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,QAAA,MAAM,eAAe;;8EAgBnB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAE7E,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,eAAe,CAAC;IACxE,gCAAgC;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CA+I/C,CAAC;AAEF,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Stepper/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,QAAA,MAAM,eAAe;;8EAgBnB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAE7E,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,eAAe,CAAC;IACxE,gCAAgC;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAyK/C,CAAC;AAEF,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -51,16 +51,19 @@ const stepperVariants = cva('', {
51
51
  * @param {StepperProps} props - The props for the stepper
52
52
  * @returns {JSX.Element | null} The rendered stepper
53
53
  */
54
- export const Stepper = ({ steps, defaultStep = 0, showStepNumbers = true, showNavigation = false, showStepInfo = false, previousLabel = 'Previous', nextLabel = 'Next', stepInfoTemplate = (current, total) => `Step ${current} of ${total}`, variant, className, onStepChange, }) => {
55
- const [activeStep, setActiveStep] = useState(defaultStep);
54
+ export const Stepper = ({ steps, defaultStep = 0, showStepNumbers = true, showNavigation = false, showStepInfo = false, previousLabel = 'Previous', nextLabel = 'Next', stepInfoTemplate = (current, total) => `Step ${current} of ${total}`, variant, className, onStepChange, activeStep: controlledStep, showPrimaryNavigation = false, }) => {
55
+ const [internalStep, setInternalStep] = useState(defaultStep);
56
56
  const containerRef = useRef(null);
57
57
  const variantAttrs = getVariantDataAttrs({ variant });
58
+ const isControlled = controlledStep !== undefined;
59
+ const activeStep = isControlled ? controlledStep : internalStep;
58
60
  const handleStepChange = useCallback((newStep) => {
59
61
  if (newStep >= 0 && newStep < steps.length) {
60
- setActiveStep(newStep);
62
+ if (!isControlled)
63
+ setInternalStep(newStep);
61
64
  onStepChange?.(newStep);
62
65
  }
63
- }, [steps.length, onStepChange]);
66
+ }, [steps.length, onStepChange, isControlled]);
64
67
  // Keyboard navigation - only when Stepper is focused (standard pattern)
65
68
  const handleKeyDown = useCallback((e) => {
66
69
  if (e.key === 'ArrowLeft') {
@@ -79,7 +82,7 @@ export const Stepper = ({ steps, defaultStep = 0, showStepNumbers = true, showNa
79
82
  if (!currentStep) {
80
83
  return null;
81
84
  }
82
- return (_jsxs(Stack, { ref: containerRef, gap: "medium", className: cn('dndev-stepper-container', className), onKeyDown: handleKeyDown, tabIndex: 0, role: "region", "aria-label": "Stepper navigation", children: [_jsxs("div", { className: "dndev-stepper-nav", children: [showNavigation && (_jsx("button", { onClick: () => handleStepChange(activeStep - 1), disabled: isFirstStep, className: "dndev-interactive", "data-role": "stepper-nav-arrow", "aria-label": previousLabel, ...variantAttrs, children: _jsx(ChevronLeft, {}) })), steps.map((step, index) => (_jsxs("div", { className: "dndev-stepper-nav-item", children: [_jsx("button", { onClick: () => handleStepChange(index), className: "dndev-interactive", "data-role": "stepper-button", "data-state": index === activeStep
85
+ return (_jsxs(Stack, { ref: containerRef, className: cn('dndev-stepper-container', className), onKeyDown: handleKeyDown, tabIndex: 0, role: "region", "aria-label": "Stepper navigation", children: [_jsxs("div", { className: "dndev-stepper-nav", children: [showNavigation && (_jsx("button", { onClick: () => handleStepChange(activeStep - 1), disabled: isFirstStep, className: "dndev-interactive", "data-role": "stepper-nav-arrow", "aria-label": previousLabel, ...variantAttrs, children: _jsx(ChevronLeft, {}) })), steps.map((step, index) => (_jsxs("div", { className: "dndev-stepper-nav-item", children: [_jsx("button", { onClick: () => handleStepChange(index), className: "dndev-interactive", "data-role": "stepper-button", "data-state": index === activeStep
83
86
  ? 'active'
84
87
  : index < activeStep
85
88
  ? 'completed'
@@ -91,7 +94,7 @@ export const Stepper = ({ steps, defaultStep = 0, showStepNumbers = true, showNa
91
94
  typeof currentStep.icon.props === 'object' &&
92
95
  'icon' in currentStep.icon.props
93
96
  ? currentStep.icon.props.icon
94
- : currentStep.icon, title: currentStep.title, content: currentStep.content }), showStepInfo && (_jsx("div", { className: "dndev-stepper-info", children: stepInfoTemplate(activeStep + 1, steps.length) }))] }));
97
+ : currentStep.icon, title: currentStep.title, content: currentStep.content }), showStepInfo && (_jsx("div", { className: "dndev-stepper-info", children: stepInfoTemplate(activeStep + 1, steps.length) })), showPrimaryNavigation && (_jsxs("div", { className: "dndev-stepper-actions", children: [_jsx(Button, { variant: BUTTON_VARIANT.SECONDARY, onClick: () => handleStepChange(activeStep - 1), disabled: isFirstStep, "aria-label": previousLabel, children: previousLabel }), _jsx(Button, { variant: BUTTON_VARIANT.PRIMARY, onClick: () => handleStepChange(activeStep + 1), disabled: isLastStep, "aria-label": nextLabel, children: nextLabel })] }))] }));
95
98
  };
96
99
  export default Stepper;
97
100
  export { stepperVariants };
@@ -12,7 +12,7 @@ import './Table.css';
12
12
  * @since 0.0.1
13
13
  * @author AMBROISE PARK Consulting
14
14
  */
15
- export interface TableColumn<T = any> {
15
+ export interface TableColumn<T = unknown> {
16
16
  key: string;
17
17
  /** Column header - can be a string or ReactNode (e.g., Button, icon) */
18
18
  title: string | ReactNode;
@@ -25,7 +25,7 @@ export interface TableColumn<T = any> {
25
25
  * Modern pattern for dynamic content generation. Preferred over nested component composition.
26
26
  * Allows rendering custom components (buttons, inputs, etc.) within table cells.
27
27
  */
28
- render?: (value: any, record: T, index: number) => ReactNode;
28
+ render?: (value: unknown, record: T, index: number) => ReactNode;
29
29
  /**
30
30
  * Column width - LAYOUT EXCEPTION
31
31
  * Controls structural data presentation, not styling.
@@ -46,7 +46,7 @@ export interface TableColumn<T = any> {
46
46
  * @since 0.0.1
47
47
  * @author AMBROISE PARK Consulting
48
48
  */
49
- export interface DataTableProps<T = any> {
49
+ export interface DataTableProps<T = unknown> {
50
50
  /** Data array */
51
51
  data: T[];
52
52
  /** Column definitions */
@@ -91,6 +91,26 @@ export interface DataTableProps<T = any> {
91
91
  onRowClick?: (row: T) => void;
92
92
  /** Additional CSS classes */
93
93
  className?: string;
94
+ /**
95
+ * Enable export functionality (CSV download button)
96
+ * @default false
97
+ */
98
+ exportable?: boolean;
99
+ /**
100
+ * Custom filename for export (without extension)
101
+ * @default 'export'
102
+ */
103
+ exportFilename?: string;
104
+ /**
105
+ * Callback when export is triggered. If provided, handles export externally.
106
+ * Receives the processed (filtered/sorted) data array.
107
+ */
108
+ onExport?: (data: T[]) => void;
109
+ /**
110
+ * Label for the export button
111
+ * @default 'Export'
112
+ */
113
+ exportLabel?: string;
94
114
  }
95
115
  /**
96
116
  * Basic Table wrapper component.
@@ -105,7 +125,7 @@ declare function TableHead({ className, ...props }: HTMLAttributes<HTMLTableCell
105
125
  declare function TableCell({ className, ...props }: HTMLAttributes<HTMLTableCellElement>): import("react/jsx-runtime").JSX.Element;
106
126
  declare function TableCaption({ className, ...props }: HTMLAttributes<HTMLTableCaptionElement>): import("react/jsx-runtime").JSX.Element;
107
127
  /**
108
- * High-level DataTable component with built-in sorting, filtering, search, and pagination.
128
+ * High-level DataTable component with built-in sorting, filtering, search, pagination, and export.
109
129
  *
110
130
  * @component
111
131
  * @example
@@ -118,12 +138,14 @@ declare function TableCaption({ className, ...props }: HTMLAttributes<HTMLTableC
118
138
  * ]}
119
139
  * searchable
120
140
  * pagination
141
+ * exportable
142
+ * exportFilename="users-export"
121
143
  * />
122
144
  * ```
123
145
  * @param {DataTableProps} props - The props for the data table
124
146
  * @returns {ReactNode} The rendered data table
125
147
  */
126
- declare const DataTable: <T = any>({ data, columns, sortable, selectable, searchable, pagination, currentPage: currentPageProp, pageSize: pageSizeProp, total: totalProp, onPageChange, onPageSizeChange, showingLabel, paginationPreviousLabel, paginationNextLabel, paginationItemsPerPagePlaceholder, loading, gridLines, onSort, onSelect, onSearch, onRowClick, className, }: DataTableProps<T>) => ReactNode;
148
+ declare const DataTable: <T = unknown>({ data, columns, sortable, selectable, searchable, pagination, currentPage: currentPageProp, pageSize: pageSizeProp, total: totalProp, onPageChange, onPageSizeChange, showingLabel, paginationPreviousLabel, paginationNextLabel, paginationItemsPerPagePlaceholder, loading, gridLines, onSort, onSelect, onSearch, onRowClick, className, exportable, exportFilename, onExport, exportLabel, }: DataTableProps<T>) => ReactNode;
127
149
  export default Table;
128
150
  export { TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, DataTable, };
129
151
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Table/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Table/index.tsx"],"names":[],"mappings":"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"}
@@ -2,13 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // packages/components/src/atomic/Table/index.tsx
3
3
  /**
4
4
  * @fileoverview Table component
5
- * @description Enhanced table with sorting, filtering, and selection
5
+ * @description Enhanced table with sorting, filtering, selection, and export
6
6
  *
7
- * @version 0.0.1
7
+ * @version 0.0.2
8
8
  * @since 0.0.1
9
9
  * @author AMBROISE PARK Consulting
10
10
  */
11
- import { ChevronUp, ChevronDown, Search } from 'lucide-react';
11
+ import { ChevronUp, ChevronDown, Search, Download } from 'lucide-react';
12
12
  import { useState, useMemo, } from 'react';
13
13
  import { cn } from '../../utils/helpers';
14
14
  import Button, { BUTTON_VARIANT } from '../Button';
@@ -49,7 +49,7 @@ function TableCaption({ className, ...props }) {
49
49
  }
50
50
  // Enhanced DataTable component
51
51
  /**
52
- * High-level DataTable component with built-in sorting, filtering, search, and pagination.
52
+ * High-level DataTable component with built-in sorting, filtering, search, pagination, and export.
53
53
  *
54
54
  * @component
55
55
  * @example
@@ -62,12 +62,14 @@ function TableCaption({ className, ...props }) {
62
62
  * ]}
63
63
  * searchable
64
64
  * pagination
65
+ * exportable
66
+ * exportFilename="users-export"
65
67
  * />
66
68
  * ```
67
69
  * @param {DataTableProps} props - The props for the data table
68
70
  * @returns {ReactNode} The rendered data table
69
71
  */
70
- const DataTable = ({ data, columns, sortable = true, selectable = false, searchable = true, pagination = true, currentPage: currentPageProp, pageSize: pageSizeProp, total: totalProp, onPageChange, onPageSizeChange, showingLabel, paginationPreviousLabel, paginationNextLabel, paginationItemsPerPagePlaceholder, loading = false, gridLines = false, onSort, onSelect, onSearch, onRowClick, className, }) => {
72
+ const DataTable = ({ data, columns, sortable = true, selectable = false, searchable = true, pagination = true, currentPage: currentPageProp, pageSize: pageSizeProp, total: totalProp, onPageChange, onPageSizeChange, showingLabel, paginationPreviousLabel, paginationNextLabel, paginationItemsPerPagePlaceholder, loading = false, gridLines = false, onSort, onSelect, onSearch, onRowClick, className, exportable = false, exportFilename = 'export', onExport, exportLabel = 'Export', }) => {
71
73
  const [sortColumn, setSortColumn] = useState('');
72
74
  const [sortDirection, setSortDirection] = useState('asc');
73
75
  const [searchQuery, setSearchQuery] = useState('');
@@ -162,11 +164,58 @@ const DataTable = ({ data, columns, sortable = true, selectable = false, searcha
162
164
  setSearchQuery(query);
163
165
  onSearch?.(query);
164
166
  };
167
+ /**
168
+ * Export processed data to CSV
169
+ * Uses the current filtered/sorted data, respecting column definitions
170
+ */
171
+ const handleExport = () => {
172
+ // If custom handler provided, delegate to it
173
+ if (onExport) {
174
+ onExport(processedData);
175
+ return;
176
+ }
177
+ // Get column headers (only data columns, not render-only columns)
178
+ const dataColumns = columns.filter((col) => col.dataIndex);
179
+ const headers = dataColumns
180
+ .map((col) => {
181
+ // Extract string title, handle ReactNode titles
182
+ const title = col.title;
183
+ return typeof title === 'string' ? title : col.key;
184
+ })
185
+ .join(',');
186
+ // Build CSV rows
187
+ const rows = processedData.map((row) => dataColumns
188
+ .map((col) => {
189
+ const value = col.dataIndex ? row[col.dataIndex] : '';
190
+ // Escape quotes and wrap in quotes if contains comma, quote, or newline
191
+ const stringValue = String(value ?? '');
192
+ if (stringValue.includes(',') ||
193
+ stringValue.includes('"') ||
194
+ stringValue.includes('\n')) {
195
+ return `"${stringValue.replace(/"/g, '""')}"`;
196
+ }
197
+ return stringValue;
198
+ })
199
+ .join(','));
200
+ // Combine headers and rows
201
+ const csv = [headers, ...rows].join('\n');
202
+ // Create and trigger download
203
+ const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
204
+ const url = URL.createObjectURL(blob);
205
+ const link = document.createElement('a');
206
+ link.setAttribute('href', url);
207
+ link.setAttribute('download', `${exportFilename}.csv`);
208
+ link.style.visibility = 'hidden';
209
+ document.body.appendChild(link);
210
+ link.click();
211
+ document.body.removeChild(link);
212
+ URL.revokeObjectURL(url);
213
+ };
165
214
  // Industry standard pattern: When loading, pass empty rows to render actual structure
166
215
  // Component will detect empty data and render skeleton bars in cells
167
216
  const skeletonRows = Array.from({ length: 3 }, () => ({}));
168
217
  const finalDisplayData = loading ? skeletonRows : displayData;
169
- return (_jsxs(Stack, { gap: "medium", children: [searchable && (_jsxs(Stack, { direction: "row", align: "center", className: "dndev-relative dndev-flex-1 dndev-table-search-container", children: [_jsx(Search, { className: "dndev-table-search-icon" }), _jsx(Input, { placeholder: "Search...", value: searchQuery, onChange: (e) => handleSearch(e.target.value), className: "dndev-table-search-input" })] })), _jsxs(Table, { className: cn(gridLines && 'dndev-table-grid'), children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [selectable && (_jsx(TableHead, { className: "dndev-w-touch", children: _jsx(Checkbox, { checked: selectedRows.length === displayData.length &&
218
+ return (_jsxs(Stack, { children: [(searchable || exportable) && (_jsxs(Stack, { direction: "row", align: "center", gap: "tight", children: [searchable && (_jsxs(Stack, { direction: "row", align: "center", className: "dndev-relative dndev-flex-1 dndev-table-search-container", children: [_jsx(Search, { className: "dndev-table-search-icon" }), _jsx(Input, { placeholder: "Search...", value: searchQuery, onChange: (e) => handleSearch(e.target.value), className: "dndev-table-search-input" })] })), exportable && (_jsx(Button, { variant: "outline", icon: Download, onClick: handleExport, disabled: loading || processedData.length === 0, display: "compact", "aria-label": exportLabel, children: exportLabel }))] })), _jsxs(Table, { className: cn(gridLines && 'dndev-table-grid'), children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [selectable && (_jsx(TableHead, { className: "dndev-w-touch", children: _jsx(Checkbox, { checked: selectedRows.length === displayData.length &&
170
219
  displayData.length > 0, onCheckedChange: handleSelectAll, "aria-label": "Select all rows" }) })), columns.map((column) => (_jsx(TableHead, { className: cn(column.sortable && 'dndev-cursor-pointer'), "data-sortable": column.sortable, "data-align": column.align, style: { width: column.width }, onClick: (e) => {
171
220
  // Only sort if clicking on header, not on interactive elements (buttons, inputs, etc.)
172
221
  if (column.sortable) {
@@ -25,7 +25,7 @@ export interface TabItem {
25
25
  forceMount?: boolean;
26
26
  }
27
27
  declare const tabsVariants: (props?: ({
28
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | null | undefined;
28
+ variant?: "default" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
29
29
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
30
30
  export type TabsVariant = VariantProps<typeof tabsVariants>['variant'];
31
31
  export interface TabsProps extends Omit<ComponentProps<typeof TabsPrimitive>, 'children'>, VariantProps<typeof tabsVariants> {
@@ -15,7 +15,7 @@ export declare const TAG_VARIANT: {
15
15
  readonly ACCENT: "accent";
16
16
  };
17
17
  declare const tagVariants: (props?: ({
18
- variant?: "default" | "accent" | "outline" | null | undefined;
18
+ variant?: "default" | "outline" | "accent" | null | undefined;
19
19
  size?: "sm" | "md" | "lg" | null | undefined;
20
20
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
21
  export interface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'onClick'>, VariantProps<typeof tagVariants> {
@@ -62,6 +62,8 @@ interface TextOwnProps {
62
62
  * @example 'normal' | 'medium' | 'semibold' | 'bold'
63
63
  */
64
64
  weight?: 'normal' | 'medium' | 'semibold' | 'bold';
65
+ /** Italic text */
66
+ italic?: boolean;
65
67
  }
66
68
  /**
67
69
  * Polymorphic Text props
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Text/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;CAGf,CAAC;AAEX;;GAEG;AACH,UAAU,YAAY;IACpB;;;;;;;;;;OAUG;IACH,EAAE,CAAC,EACC,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,MAAM,GACN,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,MAAM,GACN,QAAQ,GACR,IAAI,CAAC;IAET,wBAAwB;IACxB,QAAQ,EAAE,SAAS,CAAC;IAEpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;IAE3D;;;;;;;OAOG;IACH,KAAK,CAAC,EACF,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,OAAO,GACP,SAAS,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAAI,YAAY,GACjE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,YAAY,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,QAAA,MAAM,IAAI,uHAqDR,CAAC;AAIH,eAAe,IAAI,CAAC;AACpB,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Text/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;CAGf,CAAC;AAEX;;GAEG;AACH,UAAU,YAAY;IACpB;;;;;;;;;;OAUG;IACH,EAAE,CAAC,EACC,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,MAAM,GACN,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,MAAM,GACN,QAAQ,GACR,IAAI,CAAC;IAET,wBAAwB;IACxB,QAAQ,EAAE,SAAS,CAAC;IAEpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;IAE3D;;;;;;;OAOG;IACH,KAAK,CAAC,EACF,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,OAAO,GACP,SAAS,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IAEnD,kBAAkB;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAAI,YAAY,GACjE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,YAAY,CAAC,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,QAAA,MAAM,IAAI,uHAuDR,CAAC;AAIH,eAAe,IAAI,CAAC;AACpB,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC"}
@@ -79,7 +79,7 @@ export const TEXT_VARIANT = {
79
79
  * @param {TextProps} props - The props for the text
80
80
  * @returns {JSX.Element} The rendered text component
81
81
  */
82
- const Text = forwardRef(function Text({ as = 'div', children, variant = TEXT_VARIANT.DEFAULT, level, align, weight, className, ...props }, ref) {
82
+ const Text = forwardRef(function Text({ as = 'div', children, variant = TEXT_VARIANT.DEFAULT, level, align, weight, italic, className, ...props }, ref) {
83
83
  const Component = as;
84
84
  const variantAttrs = getVariantDataAttrs({ variant });
85
85
  // Auto-map as prop to level if level not explicitly provided
@@ -99,6 +99,7 @@ const Text = forwardRef(function Text({ as = 'div', children, variant = TEXT_VAR
99
99
  className: cn('dndev-text-base', className),
100
100
  'data-text-align': align || undefined,
101
101
  'data-font-weight': weight || undefined,
102
+ 'data-italic': italic || undefined,
102
103
  ...variantAttrs,
103
104
  ...levelAttrs,
104
105
  ...props,
@@ -13,7 +13,7 @@ import type { ComponentProps, ReactElement } from 'react';
13
13
  declare const ToastProvider: import("react").FC<ToastPrimitives.ToastProviderProps>;
14
14
  declare function ToastViewport({ className, ...props }: ComponentProps<typeof ToastPrimitives.Viewport>): import("react/jsx-runtime").JSX.Element;
15
15
  declare const toastVariants: (props?: ({
16
- variant?: "default" | "success" | "warning" | "error" | "info" | null | undefined;
16
+ variant?: "default" | "error" | "warning" | "info" | "success" | null | undefined;
17
17
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
18
18
  interface ToastProps extends ComponentProps<typeof ToastPrimitives.Root>, VariantProps<typeof toastVariants> {
19
19
  toastType?: ToastType;
@@ -1 +1 @@
1
- {"version":3,"file":"ToastPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Toaster/ToastPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1D,QAAA,MAAM,aAAa,wDAA2B,CAAC;AAE/C,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,QAAQ,CAAC,2CAOjD;AAED,QAAA,MAAM,aAAa;;8EAajB,CAAC;AAEH,UAAU,UACR,SACE,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,EAC3C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,KAAK,kBAAkB,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CA6BrE;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAQ/C;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAyB9C;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAO9C;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAOpD;AAED,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,CAAC;AACnC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"ToastPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Toaster/ToastPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1D,QAAA,MAAM,aAAa,wDAA2B,CAAC;AAE/C,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,QAAQ,CAAC,2CAOjD;AAED,QAAA,MAAM,aAAa;;8EAajB,CAAC;AAEH,UAAU,UACR,SACE,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,EAC3C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,KAAK,kBAAkB,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CA6BrE;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,2CAQ/C;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAU9C;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAO9C;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,2CAOpD;AAED,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,CAAC;AACnC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAC"}
@@ -56,19 +56,7 @@ function ToastAction({ className, ...props }) {
56
56
  return (_jsx(ToastPrimitives.Action, { className: cn(className), "data-role": "toast-action", ...props }));
57
57
  }
58
58
  function ToastClose({ className, ...props }) {
59
- return (_jsx(ToastPrimitives.Close, { className: cn('dndev-toast-close', className), "toast-close": "", onClick: (e) => {
60
- if (props.onClick) {
61
- props.onClick(e);
62
- }
63
- // Ensure onOpenChange gets triggered properly
64
- const toast = e.currentTarget.closest('[role="status"]');
65
- if (toast) {
66
- const rootComponent = toast;
67
- if (typeof rootComponent.onOpenChange === 'function') {
68
- rootComponent.onOpenChange(false);
69
- }
70
- }
71
- }, ...props, children: _jsx(X, { className: "dndev-size-md" }) }));
59
+ return (_jsx(ToastPrimitives.Close, { className: cn('dndev-toast-close', className), "toast-close": "", ...props, children: _jsx(X, { className: "dndev-size-md" }) }));
72
60
  }
73
61
  function ToastTitle({ className, ...props }) {
74
62
  return (_jsx(ToastPrimitives.Title, { className: cn('dndev-toast-title', className), ...props }));
@@ -10,7 +10,7 @@ import { type VariantProps } from 'class-variance-authority';
10
10
  import { TogglePrimitive } from './TogglePrimitive';
11
11
  import type { ComponentPropsWithoutRef } from 'react';
12
12
  declare const toggleVariants: (props?: ({
13
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | "outline" | null | undefined;
13
+ variant?: "default" | "outline" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
14
14
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
15
  export interface ToggleProps extends ComponentPropsWithoutRef<typeof TogglePrimitive>, VariantProps<typeof toggleVariants> {
16
16
  }