@donotdev/components 0.0.17 → 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 (76) hide show
  1. package/dist/advanced/Code/CodeContent.d.ts.map +1 -1
  2. package/dist/advanced/Code/CodeContent.js +22 -5
  3. package/dist/advanced/Code/CodeSkeleton.js +4 -4
  4. package/dist/advanced/ImageGallery/ImageGallery.d.ts.map +1 -1
  5. package/dist/advanced/ImageGallery/ImageGallery.js +11 -5
  6. package/dist/advanced/JsonViewer/JsonViewer.d.ts +1 -1
  7. package/dist/advanced/JsonViewer/JsonViewer.d.ts.map +1 -1
  8. package/dist/advanced/JsonViewer/JsonViewer.js +9 -3
  9. package/dist/atomic/ActionButton/index.js +2 -2
  10. package/dist/atomic/ActionButton/useAction.d.ts.map +1 -1
  11. package/dist/atomic/ActionButton/useAction.js +18 -5
  12. package/dist/atomic/Alert/index.d.ts.map +1 -1
  13. package/dist/atomic/Button/index.d.ts +1 -1
  14. package/dist/atomic/Button/index.d.ts.map +1 -1
  15. package/dist/atomic/CallToAction/index.d.ts +2 -1
  16. package/dist/atomic/CallToAction/index.d.ts.map +1 -1
  17. package/dist/atomic/CallToAction/index.js +2 -1
  18. package/dist/atomic/Combobox/index.d.ts.map +1 -1
  19. package/dist/atomic/Combobox/index.js +3 -3
  20. package/dist/atomic/CopyToClipboard/index.d.ts.map +1 -1
  21. package/dist/atomic/CopyToClipboard/index.js +20 -4
  22. package/dist/atomic/Dialog/index.js +1 -1
  23. package/dist/atomic/DropdownMenu/index.js +1 -1
  24. package/dist/atomic/Grid/GridArea.d.ts +2 -2
  25. package/dist/atomic/Grid/GridArea.js +2 -2
  26. package/dist/atomic/Grid/index.d.ts +37 -20
  27. package/dist/atomic/Grid/index.d.ts.map +1 -1
  28. package/dist/atomic/Grid/index.js +54 -25
  29. package/dist/atomic/HeroSection/index.d.ts +3 -0
  30. package/dist/atomic/HeroSection/index.d.ts.map +1 -1
  31. package/dist/atomic/HeroSection/index.js +4 -1
  32. package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts.map +1 -1
  33. package/dist/atomic/HoverCard/HoverCardPrimitive.js +1 -1
  34. package/dist/atomic/HoverCard/index.d.ts +19 -4
  35. package/dist/atomic/HoverCard/index.d.ts.map +1 -1
  36. package/dist/atomic/HoverCard/index.js +24 -5
  37. package/dist/atomic/Icons/Icon.d.ts.map +1 -1
  38. package/dist/atomic/Icons/Icon.js +11 -10
  39. package/dist/atomic/InfiniteScroll/index.d.ts +4 -2
  40. package/dist/atomic/InfiniteScroll/index.d.ts.map +1 -1
  41. package/dist/atomic/InfiniteScroll/index.js +2 -2
  42. package/dist/atomic/Pagination/index.js +1 -1
  43. package/dist/atomic/Popover/PopoverPrimitive.d.ts +1 -1
  44. package/dist/atomic/Popover/PopoverPrimitive.d.ts.map +1 -1
  45. package/dist/atomic/Popover/PopoverPrimitive.js +2 -2
  46. package/dist/atomic/Popover/index.d.ts +2 -2
  47. package/dist/atomic/Popover/index.d.ts.map +1 -1
  48. package/dist/atomic/Section/index.d.ts +9 -6
  49. package/dist/atomic/Section/index.d.ts.map +1 -1
  50. package/dist/atomic/Section/index.js +2 -1
  51. package/dist/atomic/Select/index.d.ts.map +1 -1
  52. package/dist/atomic/Select/index.js +2 -3
  53. package/dist/atomic/Stepper/index.d.ts +4 -0
  54. package/dist/atomic/Stepper/index.d.ts.map +1 -1
  55. package/dist/atomic/Stepper/index.js +8 -5
  56. package/dist/atomic/Table/index.d.ts +4 -4
  57. package/dist/atomic/Table/index.d.ts.map +1 -1
  58. package/dist/atomic/Toaster/ToastPrimitive.d.ts.map +1 -1
  59. package/dist/atomic/Toaster/ToastPrimitive.js +1 -13
  60. package/dist/atomic/index.d.ts +1 -1
  61. package/dist/atomic/index.d.ts.map +1 -1
  62. package/dist/hooks/useToast.d.ts.map +1 -1
  63. package/dist/hooks/useToast.js +18 -3
  64. package/dist/hooks/useViewportVisibility.d.ts.map +1 -1
  65. package/dist/hooks/useViewportVisibility.js +10 -12
  66. package/dist/index.d.ts +0 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +6 -6
  69. package/dist/styles/index.css +234 -75
  70. package/dist/types.d.ts +1 -1
  71. package/dist/utils/constants.d.ts +13 -0
  72. package/dist/utils/constants.d.ts.map +1 -1
  73. package/dist/utils/constants.js +12 -0
  74. package/dist/utils/intersectionObserver.d.ts.map +1 -1
  75. package/dist/utils/intersectionObserver.js +1 -11
  76. package/package.json +3 -3
@@ -12,23 +12,31 @@
12
12
  * <Card />
13
13
  * </Grid>
14
14
  *
15
- * // Responsive grid: [mobile, tablet, laptop, desktop]
16
- * // 1 col on mobile/tablet, 2 on laptop, 3 on desktop
15
+ * // Responsive equal columns: [mobile, tablet, laptop, desktop]
17
16
  * <Grid cols={[1, 1, 2, 3]}>
18
17
  * <Card />
19
18
  * <Card />
20
19
  * <Card />
21
20
  * </Grid>
22
21
  *
23
- * // Named grid areas
24
- * <Grid areas="left center right" templateColumns="1fr auto 1fr">
22
+ * // Custom column template (static)
23
+ * <Grid cols="1fr auto 1fr" areas="left center right">
25
24
  * <GridArea name="left">{left}</GridArea>
26
25
  * <GridArea name="center">{center}</GridArea>
27
26
  * <GridArea name="right">{right}</GridArea>
28
27
  * </Grid>
28
+ *
29
+ * // Custom column template (responsive) + responsive areas
30
+ * <Grid
31
+ * cols={["1fr", "1fr", "1fr 3fr", "1fr 3fr"]}
32
+ * areas={['"a" "b"', '"a" "b"', '"a b"', '"a b"']}
33
+ * >
34
+ * <GridArea name="a">{left}</GridArea>
35
+ * <GridArea name="b">{right}</GridArea>
36
+ * </Grid>
29
37
  * ```
30
38
  *
31
- * @version 0.0.4
39
+ * @version 0.0.5
32
40
  * @since 0.0.1
33
41
  * @author AMBROISE PARK Consulting
34
42
  */
@@ -42,38 +50,59 @@ import './Grid.css';
42
50
  * Polymorphic CSS Grid layout primitive.
43
51
  * Can render as any HTML element while maintaining grid layout.
44
52
  */
45
- const Grid = forwardRef(({ as = 'div', cols = 1, gap = GAP_VARIANT.MEDIUM, align = 'stretch', justify = 'stretch', areas, templateColumns, className, style, children, ...props }, ref) => {
53
+ const Grid = forwardRef(({ as = 'div', cols = 1, gap = GAP_VARIANT.MEDIUM, align = 'stretch', justify = 'stretch', areas, className, style, children, ...props }, ref) => {
46
54
  const Component = as;
47
- // Parse cols into responsive values
48
- const isResponsive = Array.isArray(cols);
49
- const [colsMobile, colsTablet, colsLaptop, colsDesktop] = isResponsive
50
- ? cols
51
- : [cols, cols, cols, cols];
55
+ // Detect which cols variant we're dealing with
56
+ const isArray = Array.isArray(cols);
57
+ const isResponsiveEqual = isArray && typeof cols[0] === 'number';
58
+ const isResponsiveTpl = isArray && typeof cols[0] === 'string';
59
+ const isStaticTpl = typeof cols === 'string';
60
+ const isResponsiveAreas = Array.isArray(areas);
52
61
  const customStyle = {
53
62
  display: 'grid',
54
63
  width: '100%',
55
- // Set CSS custom properties for responsive columns
56
- '--grid-cols-mobile': colsMobile,
57
- '--grid-cols-tablet': colsTablet,
58
- '--grid-cols-laptop': colsLaptop,
59
- '--grid-cols-desktop': colsDesktop,
60
64
  ...style,
61
- ...(areas
62
- ? {
63
- gridTemplateAreas: areas.trim().startsWith('"')
64
- ? areas
65
- : `"${areas}"`,
66
- }
67
- : {}),
68
- ...(templateColumns && { gridTemplateColumns: templateColumns }),
69
65
  };
66
+ if (isResponsiveTpl) {
67
+ const tpl = cols;
68
+ customStyle['--grid-tpl-mobile'] = tpl[0];
69
+ customStyle['--grid-tpl-tablet'] = tpl[1];
70
+ customStyle['--grid-tpl-laptop'] = tpl[2];
71
+ customStyle['--grid-tpl-desktop'] = tpl[3];
72
+ }
73
+ else if (isStaticTpl) {
74
+ customStyle.gridTemplateColumns = cols;
75
+ }
76
+ else {
77
+ const [m, t, l, d] = isResponsiveEqual
78
+ ? cols
79
+ : [cols, cols, cols, cols];
80
+ customStyle['--grid-cols-mobile'] = m;
81
+ customStyle['--grid-cols-tablet'] = t;
82
+ customStyle['--grid-cols-laptop'] = l;
83
+ customStyle['--grid-cols-desktop'] = d;
84
+ }
85
+ if (isResponsiveAreas) {
86
+ const fmt = (v) => (v.trim().startsWith('"') ? v : `"${v}"`);
87
+ customStyle['--grid-areas-mobile'] = fmt(areas[0]);
88
+ customStyle['--grid-areas-tablet'] = fmt(areas[1]);
89
+ customStyle['--grid-areas-laptop'] = fmt(areas[2]);
90
+ customStyle['--grid-areas-desktop'] = fmt(areas[3]);
91
+ }
92
+ else if (typeof areas === 'string') {
93
+ customStyle.gridTemplateAreas = areas.trim().startsWith('"')
94
+ ? areas
95
+ : `"${areas}"`;
96
+ }
70
97
  return createElement(Component, {
71
98
  ref,
72
99
  className: cn('dndev-grid-component', className),
73
100
  'data-gap': gap,
74
101
  'data-align': align,
75
102
  'data-justify': justify,
76
- 'data-responsive': isResponsive ? 'true' : undefined,
103
+ 'data-responsive': isResponsiveEqual ? 'true' : undefined,
104
+ 'data-responsive-tpl': isResponsiveTpl ? 'true' : undefined,
105
+ 'data-responsive-areas': isResponsiveAreas ? 'true' : undefined,
77
106
  style: customStyle,
78
107
  ...props,
79
108
  }, children);
@@ -22,6 +22,7 @@
22
22
  */
23
23
  import { type VariantProps } from 'class-variance-authority';
24
24
  import { type ElementType, type ComponentPropsWithRef, type ReactNode } from 'react';
25
+ import { type Tone } from '../../utils/constants';
25
26
  import './HeroSection.css';
26
27
  declare const heroSectionVariants: (props?: ({
27
28
  variant?: "primary" | "accent" | "subtle" | null | undefined;
@@ -39,6 +40,8 @@ interface HeroSectionOwnProps extends VariantProps<typeof heroSectionVariants> {
39
40
  fullHeight?: boolean;
40
41
  /** Content alignment @default 'center' */
41
42
  align?: 'start' | 'center' | 'end';
43
+ /** Tone system for background colors (matches Section/CallToAction) */
44
+ tone?: Tone;
42
45
  /** Content */
43
46
  children?: ReactNode;
44
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HeroSection/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAOf,OAAO,mBAAmB,CAAC;AAE3B,QAAA,MAAM,mBAAmB;;8EAWvB,CAAC;AAEH,UAAU,mBAAoB,SAAQ,YAAY,CAAC,OAAO,mBAAmB,CAAC;IAC5E,mDAAmD;IACnD,EAAE,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAC5D,mBAAmB,GACjB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,mBAAmB,CAAC,CAAC;AAE9D,QAAA,MAAM,WAAW,kIA6DhB,CAAC;AAIF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HeroSection/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAMxD,OAAO,mBAAmB,CAAC;AAE3B,QAAA,MAAM,mBAAmB;;8EAWvB,CAAC;AAEH,UAAU,mBAAoB,SAAQ,YAAY,CAAC,OAAO,mBAAmB,CAAC;IAC5E,mDAAmD;IACnD,EAAE,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,uEAAuE;IACvE,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAC5D,mBAAmB,GACjB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,mBAAmB,CAAC,CAAC;AAE9D,QAAA,MAAM,WAAW,kIAgEhB,CAAC;AAIF,eAAe,WAAW,CAAC"}
@@ -24,6 +24,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
24
  */
25
25
  import { cva } from 'class-variance-authority';
26
26
  import { createElement, forwardRef, } from 'react';
27
+ import { TONE } from '../../utils/constants';
27
28
  import { cn } from '../../utils/helpers';
28
29
  import Badge, { BADGE_VARIANT } from '../Badge';
29
30
  import Stack from '../Stack';
@@ -41,11 +42,13 @@ const heroSectionVariants = cva('', {
41
42
  variant: 'primary',
42
43
  },
43
44
  });
44
- const HeroSection = forwardRef(function HeroSection({ as = 'section', badge, title, subtitle, variant, fullHeight = false, align = 'center', children, className, ...props }, ref) {
45
+ const HeroSection = forwardRef(function HeroSection({ as = 'section', badge, title, subtitle, variant, fullHeight = false, align = 'center', tone = TONE.GHOST, children, className, ...props }, ref) {
45
46
  return createElement(as, {
46
47
  ref,
47
48
  className: cn('dndev-hero-section', className),
48
49
  'data-text-align': align,
50
+ 'data-variant': variant || undefined,
51
+ 'data-tone': tone,
49
52
  style: {
50
53
  ...(fullHeight
51
54
  ? {
@@ -1 +1 @@
1
- {"version":3,"file":"HoverCardPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/HoverCardPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAI7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,kBAAkB,GAAI,yBAGzB,cAAc,CAAC,cAAc,4CAE/B,CAAC;AAEF,QAAA,MAAM,gBAAgB,oIAAyB,CAAC;AAEhD,QAAA,MAAM,gBAAgB,GAAI,4CAKvB,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,4CAS/C,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"HoverCardPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/HoverCardPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAI7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,kBAAkB,GAAI,yBAGzB,cAAc,CAAC,cAAc,4CAE/B,CAAC;AAEF,QAAA,MAAM,gBAAgB,oIAAyB,CAAC;AAEhD,QAAA,MAAM,gBAAgB,GAAI,4CAKvB,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,4CAW/C,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -13,7 +13,7 @@ import { cn } from '../../utils/helpers';
13
13
  const HoverCardPrimitive = ({ openDelay = 0, ...props }) => (_jsx(RadixHoverCard.Root, { openDelay: openDelay, ...props }));
14
14
  const HoverCardTrigger = RadixHoverCard.Trigger;
15
15
  const HoverCardContent = ({ className, align = 'center', sideOffset = 4, ...props }) => {
16
- return (_jsx(RadixHoverCard.Content, { align: align, sideOffset: sideOffset, className: cn(className), ...props }));
16
+ return (_jsx(RadixHoverCard.Portal, { children: _jsx(RadixHoverCard.Content, { align: align, sideOffset: sideOffset, className: cn(className), ...props }) }));
17
17
  };
18
18
  export { HoverCardPrimitive };
19
19
  export { HoverCardTrigger, HoverCardContent };
@@ -1,8 +1,9 @@
1
+ import { type CardProps } from '../Card';
1
2
  import type { ReactNode } from 'react';
2
- export interface HoverCardProps {
3
+ export interface HoverCardProps extends Pick<CardProps, 'title' | 'subtitle' | 'content' | 'footer' | 'icon' | 'variant'> {
3
4
  /** Trigger element (button, text, avatar, etc.) */
4
5
  trigger?: ReactNode;
5
- /** HoverCard content */
6
+ /** HoverCard content (alternative to content prop, for full control) */
6
7
  children?: ReactNode;
7
8
  /** Controlled open state */
8
9
  open?: boolean;
@@ -23,11 +24,25 @@ export interface HoverCardProps {
23
24
  }
24
25
  /**
25
26
  * Accessible hover card component.
26
- * Shows rich content on hover with smooth animations.
27
+ * Shows rich content on hover using Radix HoverCard primitive.
28
+ *
29
+ * ⚠️ **Desktop only**: This component uses hover events and does not support touch/click interactions.
30
+ * For mobile/click support, use {@link Popover} instead.
31
+ *
32
+ * Accepts Card props (title, subtitle, content, footer, variant, icon) and renders a Card internally.
27
33
  *
28
34
  * @component
29
35
  * @example
30
36
  * ```tsx
37
+ * // Using Card props
38
+ * <HoverCard
39
+ * trigger={<Avatar src="..." />}
40
+ * title="John Doe"
41
+ * subtitle="Software Engineer"
42
+ * content="Building amazing products"
43
+ * />
44
+ *
45
+ * // Using children for full control
31
46
  * <HoverCard trigger={<Avatar src="..." />}>
32
47
  * <Stack gap="tight">
33
48
  * <Text>John Doe</Text>
@@ -38,6 +53,6 @@ export interface HoverCardProps {
38
53
  * @param {HoverCardProps} props - The props for the hover card
39
54
  * @returns {JSX.Element} The rendered hover card
40
55
  */
41
- declare function HoverCard({ trigger, children, open, onOpenChange, openDelay, closeDelay, align, side, sideOffset, className, }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
56
+ declare function HoverCard({ trigger, title, subtitle, content, footer, icon, variant, children, open, onOpenChange, openDelay, closeDelay, align, side, sideOffset, className, }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
42
57
  export default HoverCard;
43
58
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wBAAwB;IACxB,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,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,iBAAS,SAAS,CAAC,EACjB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,SAAa,EACb,UAAc,EACd,KAAgB,EAChB,IAAe,EACf,UAAc,EACd,SAAS,GACV,EAAE,cAAc,2CAsBhB;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/index.tsx"],"names":[],"mappings":"AAmBA,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,EACT,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CACjE;IACC,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,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,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,iBAAS,SAAS,CAAC,EACjB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,SAAa,EACb,UAAc,EACd,KAAgB,EAChB,IAAe,EACf,UAAc,EACd,SAAS,GACV,EAAE,cAAc,2CAqChB;AAED,eAAe,SAAS,CAAC"}
@@ -2,21 +2,38 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // packages/components/src/atomic/HoverCard/index.tsx
3
3
  /**
4
4
  * @fileoverview HoverCard component
5
- * @description Accessible hover card component built on Radix UI primitives
5
+ * @description Accessible hover card component built on Radix UI primitives.
6
+ * Accepts Card props and renders a Card internally.
6
7
  *
7
- * @version 0.0.1
8
+ * @version 0.0.2
8
9
  * @since 0.0.1
9
10
  * @author AMBROISE PARK Consulting
10
11
  */
12
+ import { useState } from 'react';
11
13
  import { HoverCardPrimitive, HoverCardTrigger, HoverCardContent, } from './HoverCardPrimitive';
14
+ import Card, {} from '../Card';
12
15
  import { cn } from '../../utils/helpers';
13
16
  /**
14
17
  * Accessible hover card component.
15
- * Shows rich content on hover with smooth animations.
18
+ * Shows rich content on hover using Radix HoverCard primitive.
19
+ *
20
+ * ⚠️ **Desktop only**: This component uses hover events and does not support touch/click interactions.
21
+ * For mobile/click support, use {@link Popover} instead.
22
+ *
23
+ * Accepts Card props (title, subtitle, content, footer, variant, icon) and renders a Card internally.
16
24
  *
17
25
  * @component
18
26
  * @example
19
27
  * ```tsx
28
+ * // Using Card props
29
+ * <HoverCard
30
+ * trigger={<Avatar src="..." />}
31
+ * title="John Doe"
32
+ * subtitle="Software Engineer"
33
+ * content="Building amazing products"
34
+ * />
35
+ *
36
+ * // Using children for full control
20
37
  * <HoverCard trigger={<Avatar src="..." />}>
21
38
  * <Stack gap="tight">
22
39
  * <Text>John Doe</Text>
@@ -27,7 +44,9 @@ import { cn } from '../../utils/helpers';
27
44
  * @param {HoverCardProps} props - The props for the hover card
28
45
  * @returns {JSX.Element} The rendered hover card
29
46
  */
30
- function HoverCard({ trigger, children, open, onOpenChange, openDelay = 0, closeDelay = 0, align = 'center', side = 'bottom', sideOffset = 4, className, }) {
31
- return (_jsxs(HoverCardPrimitive, { open: open, onOpenChange: onOpenChange, openDelay: openDelay, closeDelay: closeDelay, children: [trigger && _jsx(HoverCardTrigger, { asChild: true, children: trigger }), _jsx(HoverCardContent, { align: align, side: side, sideOffset: sideOffset, className: cn('dndev-surface dndev-z-tooltip dndev-hovercard-content', className), children: children })] }));
47
+ function HoverCard({ trigger, title, subtitle, content, footer, icon, variant, children, open, onOpenChange, openDelay = 0, closeDelay = 0, align = 'center', side = 'bottom', sideOffset = 4, className, }) {
48
+ const hasCardProps = !!(title || subtitle || content || footer || icon || variant);
49
+ const cardContent = hasCardProps ? (_jsx(Card, { title: title, subtitle: subtitle, content: content, footer: footer, icon: icon, variant: variant })) : (children);
50
+ return (_jsxs(HoverCardPrimitive, { open: open, onOpenChange: onOpenChange, openDelay: openDelay, closeDelay: closeDelay, children: [trigger && _jsx(HoverCardTrigger, { asChild: true, children: trigger }), _jsx(HoverCardContent, { align: align, side: side, sideOffset: sideOffset, className: cn('dndev-z-tooltip dndev-hovercard-content', !hasCardProps && 'dndev-surface', className), children: cardContent })] }));
32
51
  }
33
52
  export default HoverCard;
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/atomic/Icons/Icon.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,IAAI,EAAE,aAAa,CAAC,SAAS,CA2FlC,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/atomic/Icons/Icon.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,IAAI,EAAE,aAAa,CAAC,SAAS,CA4FlC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -12,6 +12,14 @@ import { cn } from '../../utils/helpers';
12
12
  const Icon = ({ icon, fallback, className, ariaHidden = false, }) => {
13
13
  // Memoize icon resolution to avoid recalculation
14
14
  const iconToRender = useMemo(() => icon || fallback, [icon, fallback]);
15
+ // Memoize emoji check — must be unconditional (Rules of Hooks)
16
+ const isEmoji = useMemo(() => {
17
+ if (typeof iconToRender !== 'string')
18
+ return false;
19
+ // If it's a valid identifier pattern, it's NOT an emoji (it's a Lucide icon name)
20
+ const isValidIdentifier = /^[a-zA-Z0-9_-]+$/.test(iconToRender);
21
+ return !isValidIdentifier;
22
+ }, [iconToRender]);
15
23
  if (!iconToRender)
16
24
  return null;
17
25
  const sizeClass = 'dndev-size-md';
@@ -25,21 +33,14 @@ const Icon = ({ icon, fallback, className, ariaHidden = false, }) => {
25
33
  }
26
34
  // Type 2: String (emoji only - no dynamic icon name lookup for tree-shaking)
27
35
  if (typeof iconToRender === 'string') {
28
- // Check if string is an emoji (not a valid identifier)
29
- // Valid identifiers: alphanumeric, underscore, hyphen (Lucide icon names)
30
- // Emojis: anything else (Unicode symbols, emojis, etc.)
31
- // eslint-disable-next-line react-hooks/rules-of-hooks
32
- const isEmoji = useMemo(() => {
33
- // If it's a valid identifier pattern, it's NOT an emoji (it's a Lucide icon name)
34
- const isValidIdentifier = /^[a-zA-Z0-9_-]+$/.test(iconToRender);
35
- return !isValidIdentifier;
36
- }, [iconToRender]);
37
36
  if (isEmoji) {
38
37
  return (_jsx("span", { className: cn('dndev-inline-flex dndev-items-center dndev-justify-center', sizeClass, className), "aria-hidden": ariaHidden, children: iconToRender }));
39
38
  }
40
39
  // Non-emoji string: Not supported (would require full lucide-react import)
41
40
  // Use Icon from @donotdev/ui for dynamic string icon resolution
42
- console.warn(`Icon component from @donotdev/components does not support Lucide icon name strings. Use Icon from @donotdev/ui for dynamic string resolution, or import the icon component directly. Received: "${iconToRender}"`);
41
+ if (process.env.NODE_ENV === 'development') {
42
+ console.warn(`Icon component from @donotdev/components does not support Lucide icon name strings. Use Icon from @donotdev/ui for dynamic string resolution, or import the icon component directly. Received: "${iconToRender}"`);
43
+ }
43
44
  return null;
44
45
  }
45
46
  // Type 3: ReactNode (custom content)
@@ -11,7 +11,9 @@ import './InfiniteScroll.css';
11
11
  export interface InfiniteScrollProps<T> {
12
12
  items: T[];
13
13
  renderItem: (item: T, index: number) => ReactNode;
14
- loadMore: () => void;
14
+ /** Extract a stable key for each item. Falls back to index when not provided. */
15
+ keyExtractor?: (item: T, index: number) => string | number;
16
+ loadMore: () => void | Promise<void>;
15
17
  hasMore: boolean;
16
18
  loading?: boolean;
17
19
  loadingComponent?: ReactNode;
@@ -23,6 +25,6 @@ export interface InfiniteScrollProps<T> {
23
25
  gridCols?: 1 | 2 | 3 | 4 | 5 | 6;
24
26
  gap?: 'none' | 'tight' | 'medium' | 'large';
25
27
  }
26
- declare const InfiniteScroll: <T>({ items, renderItem, loadMore, hasMore, loading, loadingComponent, endMessage, threshold, rootMargin, className, itemClassName, gridCols, gap, }: InfiniteScrollProps<T>) => import("react/jsx-runtime").JSX.Element;
28
+ declare const InfiniteScroll: <T>({ items, renderItem, keyExtractor, loadMore, hasMore, loading, loadingComponent, endMessage, threshold, rootMargin, className, itemClassName, gridCols, gap, }: InfiniteScrollProps<T>) => import("react/jsx-runtime").JSX.Element;
27
29
  export default InfiniteScroll;
28
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/InfiniteScroll/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7C;AAED,QAAA,MAAM,cAAc,GAAI,CAAC,EAAG,kJAczB,mBAAmB,CAAC,CAAC,CAAC,4CAuGxB,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/InfiniteScroll/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAClD,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IAC3D,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7C;AAED,QAAA,MAAM,cAAc,GAAI,CAAC,EAAG,gKAezB,mBAAmB,CAAC,CAAC,CAAC,4CAuGxB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -14,7 +14,7 @@ import { cn, observeElement } from '../../utils';
14
14
  import Spinner from '../Spinner';
15
15
  import Stack from '../Stack';
16
16
  import './InfiniteScroll.css';
17
- const InfiniteScroll = ({ items, renderItem, loadMore, hasMore, loading = false, loadingComponent, endMessage, threshold = 0.1, rootMargin = '100px', className, itemClassName, gridCols = 3, gap = GAP_VARIANT.MEDIUM, }) => {
17
+ const InfiniteScroll = ({ items, renderItem, keyExtractor, loadMore, hasMore, loading = false, loadingComponent, endMessage, threshold = 0.1, rootMargin = '100px', className, itemClassName, gridCols = 3, gap = GAP_VARIANT.MEDIUM, }) => {
18
18
  const [isLoading, setIsLoading] = useState(false);
19
19
  const loadMoreRef = useRef(null);
20
20
  const handleLoadMore = useCallback(async () => {
@@ -48,6 +48,6 @@ const InfiniteScroll = ({ items, renderItem, loadMore, hasMore, loading = false,
48
48
  }[gap];
49
49
  const defaultLoadingComponent = (_jsx(Stack, { align: "center", justify: "center", className: "dndev-py-lg", children: _jsxs(Stack, { direction: "row", align: "center", gap: "tight", className: "dndev-infinite-scroll-loading-container", children: [_jsx(Spinner, {}), _jsx("span", { children: "Loading more..." })] }) }));
50
50
  const defaultEndMessage = (_jsx(Stack, { align: "center", justify: "center", className: "dndev-py-lg", children: _jsxs("div", { className: "dndev-text-center dndev-infinite-scroll-end-title", children: [_jsx("p", { className: "dndev-text-lg dndev-font-medium", children: "\uD83C\uDF89 You've seen it all!" }), _jsx("p", { className: "dndev-text-sm dndev-infinite-scroll-end-text", children: "That's everything we have to showcase." })] }) }));
51
- return (_jsxs("div", { className: cn('dndev-grid dndev-gap-md', className), children: [_jsx("div", { className: "dndev-infinite-scroll-grid", "data-cols": gridCols, style: gapStyle, children: items.map((item, index) => (_jsx("div", { className: itemClassName, children: renderItem(item, index) }, index))) }), hasMore && (_jsx(Stack, { ref: loadMoreRef, justify: "center", className: "dndev-py-md", children: loading || isLoading ? (loadingComponent || defaultLoadingComponent) : (_jsx("div", { className: "dndev-text-sm dndev-infinite-scroll-more-text", children: "Scroll down to load more..." })) })), !hasMore && items.length > 0 && (_jsx(Stack, { justify: "center", className: "dndev-infinite-scroll-end-container", children: endMessage || defaultEndMessage }))] }));
51
+ return (_jsxs("div", { className: cn('dndev-grid dndev-gap-md', className), children: [_jsx("div", { className: "dndev-infinite-scroll-grid", "data-cols": gridCols, style: gapStyle, children: items.map((item, index) => (_jsx("div", { className: itemClassName, children: renderItem(item, index) }, keyExtractor ? keyExtractor(item, index) : index))) }), hasMore && (_jsx(Stack, { ref: loadMoreRef, justify: "center", className: "dndev-py-md", children: loading || isLoading ? (loadingComponent || defaultLoadingComponent) : (_jsx("div", { className: "dndev-text-sm dndev-infinite-scroll-more-text", children: "Scroll down to load more..." })) })), !hasMore && items.length > 0 && (_jsx(Stack, { justify: "center", className: "dndev-infinite-scroll-end-container", children: endMessage || defaultEndMessage }))] }));
52
52
  };
53
53
  export default InfiniteScroll;
@@ -44,7 +44,7 @@ showNavigation = true, previousLabel = 'Previous', nextLabel = 'Next', itemsPerP
44
44
  pageSizeOptions = [
45
45
  { value: '12', label: '12' },
46
46
  { value: '36', label: '36' },
47
- { value: 'ALL', label: String(total) },
47
+ { value: 'all', label: String(total) },
48
48
  ];
49
49
  }
50
50
  else {
@@ -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"}
@@ -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"}
@@ -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
  }
@@ -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"}