@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
@@ -66,7 +66,7 @@ export type BentoProps = {
66
66
  * { id: '3', content: <SmallCard /> },
67
67
  * ]}
68
68
  * columns={{ mobile: 1, tablet: 2, desktop: 3, wide: 4 }}
69
- * gap="medium"
69
+ *
70
70
  * />
71
71
  * ```
72
72
  */
@@ -25,7 +25,7 @@ import { cn } from '../../utils/helpers';
25
25
  * { id: '3', content: <SmallCard /> },
26
26
  * ]}
27
27
  * columns={{ mobile: 1, tablet: 2, desktop: 3, wide: 4 }}
28
- * gap="medium"
28
+ *
29
29
  * />
30
30
  * ```
31
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CodeContent.d.ts","sourceRoot":"","sources":["../../../src/advanced/Code/CodeContent.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAS,IAAI,CAAC,EACZ,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,eAAsB,EACtB,SAAiB,EACjB,cAAqB,EACrB,MAAM,EACN,OAAe,GAChB,EAAE,SAAS,2CAsOX;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"CodeContent.d.ts","sourceRoot":"","sources":["../../../src/advanced/Code/CodeContent.tsx"],"names":[],"mappings":"AA6BA,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAS,IAAI,CAAC,EACZ,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,eAAsB,EACtB,SAAiB,EACjB,cAAqB,EACrB,MAAM,EACN,OAAe,GAChB,EAAE,SAAS,2CAwPX;AAED,eAAe,IAAI,CAAC"}
@@ -90,9 +90,11 @@ function Code({ children, language = 'tsx', className, showLineNumbers = true, w
90
90
  if (error instanceof Error &&
91
91
  (error.message.includes("Cannot find module 'shiki'") ||
92
92
  error.message.includes('Failed to fetch dynamically imported module'))) {
93
- console.info('[Code] Shiki not available. Using Text code variant fallback. To enable syntax highlighting: npm install shiki');
93
+ if (process.env.NODE_ENV === 'development') {
94
+ console.info('[Code] Shiki not available. Using Text code variant fallback. To enable syntax highlighting: npm install shiki');
95
+ }
94
96
  }
95
- else {
97
+ else if (process.env.NODE_ENV === 'development') {
96
98
  console.warn('[Code] Failed to initialize Shiki:', error);
97
99
  }
98
100
  if (mounted) {
@@ -117,17 +119,32 @@ function Code({ children, language = 'tsx', className, showLineNumbers = true, w
117
119
  const lang = language || 'text';
118
120
  // Check if language is supported
119
121
  if (!highlighter.getLoadedLanguages().includes(lang)) {
120
- console.warn(`[Code] Language '${language}' not supported by Shiki`);
122
+ if (process.env.NODE_ENV === 'development') {
123
+ console.warn(`[Code] Language '${language}' not supported by Shiki`);
124
+ }
121
125
  return null; // Use Text code variant fallback
122
126
  }
123
127
  const html = highlighter.codeToHtml(children, {
124
128
  lang,
125
129
  theme,
126
130
  });
127
- return html;
131
+ // Strip Shiki's outer <pre><code>...</code></pre> wrapper.
132
+ // We already render our own <pre> and <code> — nesting them
133
+ // creates conflicting line-height/font-size and breaks sync
134
+ // between line numbers and content.
135
+ // Also strip \n between </span> and <span — the .line spans
136
+ // are display:block, so newlines would create double line breaks
137
+ // under white-space:pre.
138
+ const inner = html
139
+ .replace(/^<pre[^>]*><code[^>]*>/, '')
140
+ .replace(/<\/code><\/pre>$/, '')
141
+ .replace(/\n/g, '');
142
+ return inner;
128
143
  }
129
144
  catch (error) {
130
- console.warn(`[Code] Failed to highlight code for language: ${language}`, error);
145
+ if (process.env.NODE_ENV === 'development') {
146
+ console.warn(`[Code] Failed to highlight code for language: ${language}`, error);
147
+ }
131
148
  return null; // Use Text code variant fallback
132
149
  }
133
150
  }, [
@@ -142,7 +159,7 @@ function Code({ children, language = 'tsx', className, showLineNumbers = true, w
142
159
  useEffect(() => {
143
160
  setIsClient(true);
144
161
  }, []);
145
- return (_jsxs(Stack, { gap: "none", className: "dndev-code dndev-surface", "data-glow": "blank", "data-compact": compact, children: [!compact && (_jsx("div", { className: "dndev-code-header", children: _jsxs(Stack, { direction: "row", align: "center", justify: "between", gap: "medium", children: [_jsxs(Stack, { direction: "row", align: "center", gap: "tight", children: [_jsxs("div", { className: "dndev-code-traffic-lights", children: [_jsx("div", { className: "dndev-code-traffic-light", "data-color": "red" }), _jsx("div", { className: "dndev-code-traffic-light", "data-color": "yellow" }), _jsx("div", { className: "dndev-code-traffic-light", "data-color": "green" })] }), _jsx(Text, { as: "span", className: "dndev-code-language", children: language }), _jsxs(Text, { as: "span", className: "dndev-code-line-count", children: [lines.length, " line", lines.length !== 1 ? 's' : ''] })] }), showCopyButton && isClient && (_jsx(CopyToClipboard, { text: children, onCopy: onCopy }))] }) })), _jsx(ScrollArea, { className: "dndev-code-content", showHorizontal: !wrapLines, showVertical: true, children: _jsx("pre", { className: "dndev-code-pre", "data-wrap": wrapLines, "data-compact": compact, children: showLineNumbers ? (_jsxs(Stack, { direction: "row", gap: "none", children: [_jsx("div", { className: "dndev-code-line-numbers", children: lines.map((_, index) => (_jsx("div", { className: "dndev-code-line-number", children: String(index + 1).padStart(2, ' ') }, index))) }), highlightedCode ? (_jsx("code", { className: "dndev-code-code", dangerouslySetInnerHTML: { __html: highlightedCode } })) : (_jsx("code", { className: "dndev-code-code", children: lines.map((line, index) => (_jsx(Text, { as: "code", variant: "code", style: {
162
+ return (_jsxs(Stack, { gap: "none", className: "dndev-code dndev-surface", "data-glow": "blank", "data-compact": compact, children: [!compact && (_jsx("div", { className: "dndev-code-header", children: _jsxs(Stack, { direction: "row", align: "center", justify: "between", children: [_jsxs(Stack, { direction: "row", align: "center", gap: "tight", children: [_jsxs("div", { className: "dndev-code-traffic-lights", children: [_jsx("div", { className: "dndev-code-traffic-light", "data-color": "red" }), _jsx("div", { className: "dndev-code-traffic-light", "data-color": "yellow" }), _jsx("div", { className: "dndev-code-traffic-light", "data-color": "green" })] }), _jsx(Text, { as: "span", className: "dndev-code-language", children: language }), _jsxs(Text, { as: "span", className: "dndev-code-line-count", children: [lines.length, " line", lines.length !== 1 ? 's' : ''] })] }), showCopyButton && isClient && (_jsx(CopyToClipboard, { text: children, onCopy: onCopy }))] }) })), _jsx(ScrollArea, { className: "dndev-code-content", showHorizontal: !wrapLines, showVertical: true, children: _jsx("pre", { className: "dndev-code-pre", "data-wrap": wrapLines, "data-compact": compact, children: showLineNumbers ? (_jsxs(Stack, { direction: "row", gap: "none", children: [_jsx("div", { className: "dndev-code-line-numbers", children: lines.map((_, index) => (_jsx("div", { className: "dndev-code-line-number", children: String(index + 1).padStart(2, ' ') }, index))) }), highlightedCode ? (_jsx("code", { className: "dndev-code-code", dangerouslySetInnerHTML: { __html: highlightedCode } })) : (_jsx("code", { className: "dndev-code-code", children: lines.map((line, index) => (_jsx(Text, { as: "code", variant: "code", style: {
146
163
  display: 'block',
147
164
  background: 'transparent',
148
165
  padding: 0,
@@ -17,10 +17,10 @@ function CodeSkeleton({ className, showLineNumbers = true, showCopyButton = true
17
17
  border: '1px solid var(--border)',
18
18
  backgroundColor: 'var(--muted)',
19
19
  }, role: "status", "aria-label": "Loading code", children: _jsxs(Stack, { direction: "row", children: [showLineNumbers && (_jsx("div", { className: "dndev-flex-shrink-0", style: {
20
- borderRight: '1px solid var(--border)',
20
+ borderInlineEnd: '1px solid var(--border)',
21
21
  backgroundColor: 'var(--muted)',
22
22
  padding: '1rem',
23
- textAlign: 'right',
23
+ textAlign: 'end',
24
24
  fontSize: 'var(--font-size-sm)',
25
25
  color: 'var(--muted-foreground)',
26
26
  opacity: 'var(--opacity-subtle)',
@@ -28,7 +28,7 @@ function CodeSkeleton({ className, showLineNumbers = true, showCopyButton = true
28
28
  userSelect: 'none',
29
29
  }, children: Array.from({ length: lineCount }).map((_, i) => (_jsx("div", { style: { height: '1.25rem', lineHeight: '1.25rem' }, children: i + 1 }, i))) })), _jsx("div", { className: "dndev-flex-1 dndev-min-w-0", children: _jsxs("div", { className: "dndev-relative", children: [showCopyButton && (_jsx("div", { className: "dndev-absolute dndev-z-breadcrumbs dndev-animate-pulse", style: {
30
30
  top: '0.5rem',
31
- right: '0.5rem',
31
+ insetInlineEnd: '0.5rem',
32
32
  width: '2rem',
33
33
  height: '2rem',
34
34
  backgroundColor: 'var(--muted)',
@@ -42,7 +42,7 @@ function CodeSkeleton({ className, showLineNumbers = true, showCopyButton = true
42
42
  marginBottom: '0.25rem',
43
43
  }, children: _jsx("span", { className: "dndev-inline dndev-animate-pulse", style: {
44
44
  display: 'inline-block',
45
- width: `${Math.random() * 40 + 20}%`,
45
+ width: `${((i * 37 + 13) % 40) + 20}%`,
46
46
  height: '1em',
47
47
  backgroundColor: 'var(--muted)',
48
48
  borderRadius: 'var(--radius)',
@@ -1 +1 @@
1
- {"version":3,"file":"ImageGallery.d.ts","sourceRoot":"","sources":["../../../src/advanced/ImageGallery/ImageGallery.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,MAAM,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAClC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAkBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,WAAoB,EACpB,SAAmB,EACnB,aAAa,GACd,EAAE,iBAAiB,GAAG,YAAY,CAqOlC;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ImageGallery.d.ts","sourceRoot":"","sources":["../../../src/advanced/ImageGallery/ImageGallery.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,MAAM,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAClC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAkBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,WAAoB,EACpB,SAAmB,EACnB,aAAa,GACd,EAAE,iBAAiB,GAAG,YAAY,CA2OlC;AAED,eAAe,YAAY,CAAC"}
@@ -48,10 +48,15 @@ export function ImageGallery({ images, aspectRatio = '16/9', altPrefix = 'Image'
48
48
  const [loadedFullUrls, setLoadedFullUrls] = useState(new Set());
49
49
  const containerRef = useRef(null);
50
50
  const thumbnailRefs = useRef([]);
51
+ // Track whether the index changed via user navigation (not initial mount)
52
+ const isUserNavigationRef = useRef(false);
51
53
  const normalizedImages = images.map(normalizeImage);
52
54
  const hasMultiple = normalizedImages.length > 1;
55
+ // Trim stale refs when the image list shrinks
56
+ thumbnailRefs.current = thumbnailRefs.current.slice(0, normalizedImages.length);
53
57
  const goToImage = useCallback((index) => {
54
58
  const newIndex = (index + normalizedImages.length) % normalizedImages.length;
59
+ isUserNavigationRef.current = true;
55
60
  setSelectedIndex(newIndex);
56
61
  onImageChange?.(newIndex);
57
62
  // Preload full image if not already loaded
@@ -91,8 +96,11 @@ export function ImageGallery({ images, aspectRatio = '16/9', altPrefix = 'Image'
91
96
  break;
92
97
  }
93
98
  }, [hasMultiple, goPrev, goNext, goToImage, normalizedImages.length]);
94
- // Focus thumbnail when selected
99
+ // Focus thumbnail only on user-driven navigation, not on initial mount (WCAG)
95
100
  useEffect(() => {
101
+ if (!isUserNavigationRef.current)
102
+ return;
103
+ isUserNavigationRef.current = false;
96
104
  thumbnailRefs.current[selectedIndex]?.focus();
97
105
  }, [selectedIndex]);
98
106
  if (normalizedImages.length === 0) {
@@ -102,8 +110,7 @@ export function ImageGallery({ images, aspectRatio = '16/9', altPrefix = 'Image'
102
110
  const currentImage = normalizedImages[selectedIndex];
103
111
  return (_jsxs("div", { ref: containerRef, className: "image-gallery", onKeyDown: handleKeyDown, tabIndex: 0, role: "region", "aria-label": "Image gallery", "aria-roledescription": "carousel", children: [_jsxs("div", { className: "image-gallery__main", style: { aspectRatio }, children: [currentImage.full !== currentImage.thumb && (_jsx("img", { src: currentImage.thumb, alt: "", className: "image-gallery__main-image", style: {
104
112
  position: 'absolute',
105
- top: 0,
106
- left: 0,
113
+ inset: 0,
107
114
  width: '100%',
108
115
  height: '100%',
109
116
  objectFit: 'cover',
@@ -114,8 +121,7 @@ export function ImageGallery({ images, aspectRatio = '16/9', altPrefix = 'Image'
114
121
  position: currentImage.full !== currentImage.thumb
115
122
  ? 'absolute'
116
123
  : 'relative',
117
- top: 0,
118
- left: 0,
124
+ inset: 0,
119
125
  width: '100%',
120
126
  height: '100%',
121
127
  objectFit: 'cover',
@@ -1,6 +1,6 @@
1
1
  export interface JsonViewerProps {
2
2
  /** JSON data to display */
3
- data: any;
3
+ data: unknown;
4
4
  /** Maximum depth to expand by default */
5
5
  defaultDepth?: number;
6
6
  /** Show copy button */
@@ -1 +1 @@
1
- {"version":3,"file":"JsonViewer.d.ts","sourceRoot":"","sources":["../../../src/advanced/JsonViewer/JsonViewer.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,IAAI,EAAE,GAAG,CAAC;IAEV,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,UAAU;oEAMb,eAAe;;CA0FjB,CAAC;AAIF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"JsonViewer.d.ts","sourceRoot":"","sources":["../../../src/advanced/JsonViewer/JsonViewer.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IAEd,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAwID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,UAAU;oEAMb,eAAe;;CA4FjB,CAAC;AAIF,eAAe,UAAU,CAAC"}
@@ -56,13 +56,17 @@ const JsonNode = ({ data, keyName, depth, defaultDepth, path, collapsed, onToggl
56
56
  if (isEmpty) {
57
57
  return (_jsxs("div", { className: "dndev-json-node", children: [keyName && _jsxs("span", { className: "dndev-json-key", children: [keyName, ":"] }), _jsx("span", { className: "dndev-json-value dndev-json-value-null", children: isArray ? '[]' : '{}' })] }));
58
58
  }
59
- const items = isArray ? data : Object.entries(data);
59
+ const items = isArray
60
+ ? data
61
+ : Object.entries(data);
60
62
  const bracketOpen = isArray ? '[' : '{';
61
63
  const bracketClose = isArray ? ']' : '}';
62
64
  return (_jsxs("div", { children: [_jsxs("div", { className: "dndev-json-toggle", onClick: handleToggle, children: [keyName && _jsxs("span", { className: "dndev-json-key", children: [keyName, ":"] }), _jsx("span", { className: "dndev-json-bracket", children: bracketOpen }), isExpanded ? (_jsx(ChevronDown, { className: "dndev-json-icon" })) : (_jsx(ChevronRight, { className: "dndev-json-icon" })), !isExpanded && (_jsx("span", { className: "dndev-json-count", children: isArray
63
65
  ? `${data.length} item${data.length !== 1 ? 's' : ''}`
64
66
  : `${Object.keys(data).length} key${Object.keys(data).length !== 1 ? 's' : ''}` })), !isExpanded && (_jsx("span", { className: "dndev-json-bracket", children: bracketClose }))] }), isExpanded && (_jsxs("div", { className: "dndev-json-children", children: [items.map((item, index) => {
65
- const [itemKey, itemValue] = isArray ? [index, item] : item;
67
+ const [itemKey, itemValue] = isArray
68
+ ? [index, item]
69
+ : item;
66
70
  const itemPath = `${path}.${itemKey}`;
67
71
  return (_jsx(JsonNode, { data: itemValue, keyName: isArray ? undefined : String(itemKey), depth: depth + 1, defaultDepth: defaultDepth, path: itemPath, collapsed: collapsed, onToggle: onToggle, expandedPaths: expandedPaths }, itemPath));
68
72
  }), _jsx("span", { className: "dndev-json-bracket", children: bracketClose })] }))] }));
@@ -125,7 +129,9 @@ const JsonViewer = ({ data, defaultDepth = 2, showCopyButton = true, className,
125
129
  await navigator.clipboard.writeText(jsonString);
126
130
  }
127
131
  catch (error) {
128
- console.error('Failed to copy JSON:', error);
132
+ if (process.env.NODE_ENV !== 'production') {
133
+ console.error('Failed to copy JSON:', error);
134
+ }
129
135
  }
130
136
  }, [data]);
131
137
  const jsonString = useMemo(() => {
@@ -1,3 +1,5 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
3
  // packages/components/src/atomic/ActionButton/index.tsx
2
4
  /**
3
5
  * @fileoverview ActionButton Component
@@ -7,8 +9,6 @@
7
9
  * @since 0.0.1
8
10
  * @author AMBROISE PARK Consulting
9
11
  */
10
- 'use client';
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  import { useState } from 'react';
13
13
  import AlertDialog from '../AlertDialog';
14
14
  import Button from '../Button';
@@ -1 +1 @@
1
- {"version":3,"file":"useAction.d.ts","sourceRoot":"","sources":["../../../src/atomic/ActionButton/useAction.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,kCAAkC;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,wCAAwC;IACxC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yBAAyB;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACtC,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAyB1C"}
1
+ {"version":3,"file":"useAction.d.ts","sourceRoot":"","sources":["../../../src/atomic/ActionButton/useAction.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,kCAAkC;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,wCAAwC;IACxC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yBAAyB;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACtC,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAuC1C"}
@@ -7,7 +7,7 @@
7
7
  * @since 0.0.1
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
10
- import { useState, useCallback } from 'react';
10
+ import { useState, useCallback, useRef, useEffect } from 'react';
11
11
  /**
12
12
  * Hook for wrapping async actions with loading/error state management.
13
13
  *
@@ -27,9 +27,17 @@ import { useState, useCallback } from 'react';
27
27
  export function useAction({ action, onSuccess, onError, }) {
28
28
  const [loading, setLoading] = useState(false);
29
29
  const [error, setError] = useState(null);
30
+ const loadingRef = useRef(false);
31
+ const mountedRef = useRef(true);
32
+ useEffect(() => {
33
+ return () => {
34
+ mountedRef.current = false;
35
+ };
36
+ }, []);
30
37
  const execute = useCallback(async () => {
31
- if (loading)
38
+ if (loadingRef.current)
32
39
  return undefined;
40
+ loadingRef.current = true;
33
41
  setLoading(true);
34
42
  setError(null);
35
43
  try {
@@ -39,13 +47,18 @@ export function useAction({ action, onSuccess, onError, }) {
39
47
  }
40
48
  catch (err) {
41
49
  const error = err instanceof Error ? err : new Error(String(err));
42
- setError(error);
50
+ if (mountedRef.current) {
51
+ setError(error);
52
+ }
43
53
  onError?.(error);
44
54
  return undefined;
45
55
  }
46
56
  finally {
47
- setLoading(false);
57
+ loadingRef.current = false;
58
+ if (mountedRef.current) {
59
+ setLoading(false);
60
+ }
48
61
  }
49
- }, [action, onSuccess, onError, loading]);
62
+ }, [action, onSuccess, onError]);
50
63
  return { execute, loading, error };
51
64
  }
@@ -20,7 +20,7 @@ export declare const ALERT_VARIANT: {
20
20
  readonly INFO: "info";
21
21
  };
22
22
  declare const alertVariants: (props?: ({
23
- variant?: "muted" | "success" | "warning" | "error" | "info" | null | undefined;
23
+ variant?: "error" | "warning" | "info" | "success" | "muted" | null | undefined;
24
24
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
25
25
  export type AlertVariant = (typeof ALERT_VARIANT)[keyof typeof ALERT_VARIANT];
26
26
  export interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof alertVariants> {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Alert/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,QAAA,MAAM,aAAa;;8EAajB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE9E,MAAM,WAAW,UACf,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,KAAK,GAAI,mFASZ,UAAU,4CAsDZ,CAAC;AAEF,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Alert/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,QAAA,MAAM,aAAa;;8EAajB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE9E,MAAM,WAAW,UACf,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,KAAK,GAAI,mFASZ,UAAU,4CAqDZ,CAAC;AAEF,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -72,7 +72,7 @@ const Alert = ({ className, variant = ALERT_VARIANT.DEFAULT, hideIcon = false, t
72
72
  const variantAttrs = getVariantDataAttrs({
73
73
  variant: getThemeVariant(variant),
74
74
  });
75
- return (_jsxs(Stack, { direction: "row", gap: "medium", role: "alert", className: cn(alertVariants({ variant }), className), ...variantAttrs, title: tooltip, ...props, children: [!hideIcon && (_jsx(Icon, { icon: IconComponent, className: "dndev-size-md dndev-flex-shrink-0", "aria-hidden": "true" })), _jsxs(Stack, { gap: "tight", flex: "1", className: "dndev-min-w-0", children: [title && (_jsx("div", { className: "dndev-alert-title dndev-text-h5", children: title })), description && (_jsx("div", { className: "dndev-text-base dndev-alert-description", children: description })), children] })] }));
75
+ return (_jsxs(Stack, { direction: "row", role: "alert", className: cn(alertVariants({ variant }), className), ...variantAttrs, title: tooltip, ...props, children: [!hideIcon && (_jsx(Icon, { icon: IconComponent, className: "dndev-size-md dndev-flex-shrink-0", "aria-hidden": "true" })), _jsxs(Stack, { gap: "tight", flex: "1", className: "dndev-min-w-0", children: [title && (_jsx("div", { className: "dndev-alert-title dndev-text-h5", children: title })), description && (_jsx("div", { className: "dndev-text-base dndev-alert-description", children: description })), children] })] }));
76
76
  };
77
77
  export default Alert;
78
78
  export { alertVariants };
@@ -24,7 +24,7 @@ export declare const BADGE_VARIANT: {
24
24
  readonly DESTRUCTIVE: "destructive";
25
25
  };
26
26
  declare const badgeVariants: (props?: ({
27
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | "outline" | null | undefined;
27
+ variant?: "default" | "outline" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
28
28
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
29
29
  export type BadgeVariant = VariantProps<typeof badgeVariants>['variant'];
30
30
  /**
@@ -21,7 +21,7 @@ export declare const BUTTON_VARIANT: {
21
21
  readonly DESTRUCTIVE: "destructive";
22
22
  };
23
23
  declare const buttonVariants: (props?: ({
24
- variant?: "default" | "muted" | "primary" | "secondary" | "accent" | "success" | "warning" | "destructive" | "ghost" | "outline" | "link" | null | undefined;
24
+ variant?: "default" | "outline" | "ghost" | "link" | "primary" | "destructive" | "warning" | "success" | "muted" | "secondary" | "accent" | null | undefined;
25
25
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
26
26
  /**
27
27
  * Button variant type - derived from buttonVariants to ensure type safety
@@ -50,7 +50,7 @@ export interface ButtonRenderProps {
50
50
  'data-full-width'?: string;
51
51
  role?: string;
52
52
  tabIndex?: number;
53
- [key: string]: any;
53
+ [key: string]: unknown;
54
54
  }
55
55
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
56
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Button/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAM1D,OAAO,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAKjB,CAAC;AAEX,QAAA,MAAM,cAAc;;8EAmBlB,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;AAE3E;;;;;;GAMG;AACH,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WACf,SACE,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;IACjD,yDAAyD;IACzD,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,MAAM,2GAiKX,CAAC;AAIF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Button/index.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAM1D,OAAO,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAKjB,CAAC;AAEX,QAAA,MAAM,cAAc;;8EAmBlB,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;AAE3E;;;;;;GAMG;AACH,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WACf,SACE,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;IACjD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;IACjD,yDAAyD;IACzD,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,MAAM,2GAiKX,CAAC;AAIF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -33,6 +33,7 @@
33
33
  * @author AMBROISE PARK Consulting
34
34
  */
35
35
  import { type ElementType, type ComponentPropsWithRef, type ReactNode } from 'react';
36
+ import { type Tone } from '../../utils/constants';
36
37
  import './CallToAction.css';
37
38
  /**
38
39
  * CallToAction-specific props (content directives)
@@ -63,7 +64,7 @@ interface CallToActionOwnProps {
63
64
  * Tone system for background colors (matches Section component)
64
65
  * @default 'ghost'
65
66
  */
66
- tone?: 'ghost' | 'base' | 'muted' | 'elevated' | 'contrast' | 'accent';
67
+ tone?: Tone;
67
68
  /** Additional children (for custom content) */
68
69
  children?: ReactNode;
69
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/CallToAction/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,OAAO,oBAAoB,CAAC;AAE5B;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;IAEjC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qEAAqE;IACrE,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,uEAAuE;IACvE,eAAe,CAAC,EAAE,SAAS,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAEvE,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAC7D,oBAAoB,GAClB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,oBAAoB,CAAC,CAAC;AAE/D,QAAA,MAAM,YAAY,mIAuDjB,CAAC;AAIF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/CallToAction/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIxD,OAAO,oBAAoB,CAAC;AAE5B;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;IAEjC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qEAAqE;IACrE,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,uEAAuE;IACvE,eAAe,CAAC,EAAE,SAAS,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAC7D,oBAAoB,GAClB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,oBAAoB,CAAC,CAAC;AAE/D,QAAA,MAAM,YAAY,mIAuDjB,CAAC;AAIF,eAAe,YAAY,CAAC"}
@@ -35,10 +35,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
35
35
  * @author AMBROISE PARK Consulting
36
36
  */
37
37
  import { createElement, forwardRef, } from 'react';
38
+ import { TONE } from '../../utils/constants';
38
39
  import { cn } from '../../utils/helpers';
39
40
  import Text, { TEXT_VARIANT } from '../Text';
40
41
  import './CallToAction.css';
41
- const CallToAction = forwardRef(function CallToAction({ as = 'section', title, subtitle, primaryAction, secondaryAction, align = 'center', tone = 'ghost', children, className, ...props }, ref) {
42
+ const CallToAction = forwardRef(function CallToAction({ as = 'section', title, subtitle, primaryAction, secondaryAction, align = 'center', tone = TONE.GHOST, children, className, ...props }, ref) {
42
43
  const Component = as;
43
44
  return createElement(Component, {
44
45
  ref,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Combobox/index.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM7E,OAAO,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,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,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,QAAQ,GAAI,yLAiBf,aAAa,4CA4Uf,CAAC;AAEF,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC;AAC/C,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Combobox/index.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM7E,OAAO,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,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,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,QAAQ,GAAI,yLAiBf,aAAa,4CAqVf,CAAC;AAEF,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC;AAC/C,YAAY,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC"}
@@ -170,7 +170,7 @@ const Combobox = ({ value, onValueChange, placeholder = 'Select...', emptyMessag
170
170
  setOpen(isOpen);
171
171
  onOpenChange?.(isOpen);
172
172
  };
173
- return (_jsxs("div", { ref: containerRef, className: cn('dndev-relative', open && 'dndev-combobox-open'), style: { width: '100%' }, children: [_jsxs("div", { className: "dndev-relative", children: [_jsx(Input, { ref: inputRef, id: id, label: label, value: displayValue, onChange: handleInputChange, onFocus: handleInputFocus, onClick: handleInputClick, onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled || isLoading, icon: isLoading ? _jsx(Spinner, {}) : ChevronDown, iconEnd: true, required: required, "data-variant": variant, style: {
173
+ return (_jsxs("div", { ref: containerRef, className: cn('dndev-relative', open && 'dndev-combobox-open'), style: { width: '100%' }, children: [_jsxs("div", { className: "dndev-relative", children: [_jsx(Input, { ref: inputRef, id: id, label: label, value: displayValue, onChange: handleInputChange, onFocus: handleInputFocus, onClick: handleInputClick, onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled || isLoading, icon: isLoading ? _jsx(Spinner, {}) : ChevronDown, iconEnd: true, required: required, role: "combobox", "aria-expanded": open, "aria-controls": `${id}-listbox`, "aria-autocomplete": "list", "data-variant": variant, style: {
174
174
  '--chevron-rotation': open ? '180deg' : '0deg',
175
175
  } }), clearable && hasSelection && !disabled && (_jsx("button", { type: "button", onClick: handleClear, className: "dndev-absolute", style: {
176
176
  insetInlineEnd: 'calc(var(--gap-md) + var(--icon-md) + var(--gap-sm))',
@@ -196,7 +196,7 @@ const Combobox = ({ value, onValueChange, placeholder = 'Select...', emptyMessag
196
196
  marginTop: 'var(--gap-tight)',
197
197
  padding: 'var(--gap-tight)',
198
198
  textAlign: 'start',
199
- }, "data-glow": "blank", children: _jsx(ScrollArea, { className: "dndev-menu-scroll-area", end: true, children: _jsx("div", { ref: listRef, style: {
199
+ }, "data-glow": "blank", children: _jsx(ScrollArea, { className: "dndev-menu-scroll-area", end: true, children: _jsx("div", { ref: listRef, id: `${id}-listbox`, role: "listbox", "aria-label": label || placeholder, style: {
200
200
  display: 'flex',
201
201
  flexDirection: 'column',
202
202
  gap: 'var(--gap-none)',
@@ -204,7 +204,7 @@ const Combobox = ({ value, onValueChange, placeholder = 'Select...', emptyMessag
204
204
  const isSelected = selectedValues.includes(option.value);
205
205
  const isHighlighted = index === highlightedIndex;
206
206
  const isCreateOption = option.isCreateOption;
207
- return (_jsx("button", { type: "button", onClick: () => !option.disabled && handleSelect(option.value), disabled: option.disabled, className: cn('dndev-interactive dndev-combobox-option', isHighlighted && 'dndev-combobox-option-highlighted', isSelected && 'dndev-combobox-option-selected', isCreateOption && 'dndev-combobox-option-create'), onMouseEnter: () => setHighlightedIndex(index), children: option.content ? (option.content) : (_jsxs(_Fragment, { children: [isCreateOption && (_jsx(Plus, { className: "dndev-combobox-option-create-icon" })), _jsxs("div", { className: "dndev-combobox-option-content", children: [_jsx("span", { className: "dndev-combobox-option-label", children: option.label }), option.description && (_jsx("span", { className: "dndev-combobox-option-description", children: option.description }))] }), isSelected && !isCreateOption && (_jsx(Check, { className: "dndev-combobox-option-check" }))] })) }, isCreateOption ? `create-${option.value}` : option.value));
207
+ return (_jsx("button", { type: "button", role: "option", "aria-selected": isSelected, onClick: () => !option.disabled && handleSelect(option.value), disabled: option.disabled, className: cn('dndev-interactive dndev-combobox-option', isHighlighted && 'dndev-combobox-option-highlighted', isSelected && 'dndev-combobox-option-selected', isCreateOption && 'dndev-combobox-option-create'), onMouseEnter: () => setHighlightedIndex(index), children: option.content ? (option.content) : (_jsxs(_Fragment, { children: [isCreateOption && (_jsx(Plus, { className: "dndev-combobox-option-create-icon" })), _jsxs("div", { className: "dndev-combobox-option-content", children: [_jsx("span", { className: "dndev-combobox-option-label", children: option.label }), option.description && (_jsx("span", { className: "dndev-combobox-option-description", children: option.description }))] }), isSelected && !isCreateOption && (_jsx(Check, { className: "dndev-combobox-option-check" }))] })) }, isCreateOption ? `create-${option.value}` : option.value));
208
208
  })) }) }) }))] }));
209
209
  };
210
210
  export default Combobox;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/CopyToClipboard/index.tsx"],"names":[],"mappings":"AAgBA,OAAe,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,WAAW,EACX,UAAU,GAAG,MAAM,GAAG,QAAQ,CAC/B;IACC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,oFAAoF;IACpF,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC3D,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAwDrE,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/CopyToClipboard/index.tsx"],"names":[],"mappings":"AAgBA,OAAe,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,WAAW,EACX,UAAU,GAAG,MAAM,GAAG,QAAQ,CAC/B;IACC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,oFAAoF;IACpF,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC3D,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CA4ErE,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -9,7 +9,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
9
9
  * @author AMBROISE PARK Consulting
10
10
  */
11
11
  import { Copy, Check } from 'lucide-react';
12
- import { useState, useCallback } from 'react';
12
+ import { useState, useCallback, useEffect, useRef } from 'react';
13
13
  import { DISPLAY } from '../../styles/componentConstants';
14
14
  import { cn } from '../../utils/helpers';
15
15
  import Button, {} from '../Button';
@@ -21,21 +21,37 @@ import './CopyToClipboard.css';
21
21
  */
22
22
  export const CopyToClipboard = ({ text, children, variant = 'ghost', className, onCopy, onClick, tooltipText = 'Copy to clipboard', copiedTooltipText = 'Copied!', showTooltip = true, ariaLabel, ...buttonProps }) => {
23
23
  const [copied, setCopied] = useState(false);
24
+ const resetTimerRef = useRef(null);
25
+ // Clear the reset timer on unmount to avoid setState on unmounted component
26
+ useEffect(() => {
27
+ return () => {
28
+ if (resetTimerRef.current !== null) {
29
+ clearTimeout(resetTimerRef.current);
30
+ }
31
+ };
32
+ }, []);
24
33
  const handleCopy = useCallback(async (e) => {
25
34
  try {
26
35
  if (typeof window === 'undefined' || !navigator?.clipboard) {
27
- console.warn('Clipboard API not available');
36
+ if (process.env.NODE_ENV === 'development') {
37
+ console.warn('Clipboard API not available');
38
+ }
28
39
  return;
29
40
  }
30
41
  await navigator.clipboard.writeText(text);
31
42
  setCopied(true);
32
43
  onCopy?.(text);
33
- setTimeout(() => setCopied(false), 2000);
44
+ if (resetTimerRef.current !== null) {
45
+ clearTimeout(resetTimerRef.current);
46
+ }
47
+ resetTimerRef.current = setTimeout(() => setCopied(false), 2000);
34
48
  // Call onClick handler if provided (e.g., for stopPropagation)
35
49
  onClick?.(e);
36
50
  }
37
51
  catch (error) {
38
- console.error('Failed to copy to clipboard:', error);
52
+ if (process.env.NODE_ENV === 'development') {
53
+ console.error('Failed to copy to clipboard:', error);
54
+ }
39
55
  // No fallback - modern browsers should support clipboard API
40
56
  }
41
57
  }, [text, onCopy, onClick]);
@@ -57,7 +57,7 @@ const Dialog = ({ trigger, title, description, children, footer, open, onOpenCha
57
57
  const variantAttrs = getVariantDataAttrs({
58
58
  variant: variant !== SURFACE_VARIANT.DEFAULT ? variant : undefined,
59
59
  });
60
- return (_jsxs(Root, { open: open, onOpenChange: onOpenChange, children: [trigger && _jsx(Trigger, { asChild: true, children: trigger }), _jsxs(DialogContent, { className: cn('dndev-surface dndev-modal-content', className), noSwipe: noSwipe, closeButtonRef: closeButtonRef, onOpenChange: onOpenChange, ...variantAttrs, ...contentProps, children: [title ? (_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { className: "dndev-sr-only", children: description || 'Dialog content' })] })) : (_jsxs(_Fragment, { children: [_jsx(DialogTitle, { className: "dndev-sr-only", children: "Dialog" }), _jsx(DialogDescription, { className: "dndev-sr-only", children: description || 'Dialog content' })] })), _jsx("div", { className: "dndev-modal-body", children: children }), (footer || actions) && (_jsxs(DialogFooter, { children: [footer, actions && (_jsxs(_Fragment, { children: [actions.cancel && (_jsx(Close, { asChild: true, children: _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, onClick: actions.cancel.onClick, children: actions.cancel.label }) })), actions.confirm && (_jsx(Button, { variant: actions.confirm.variant || BUTTON_VARIANT.PRIMARY, onClick: actions.confirm.onClick, children: actions.confirm.label }))] }))] })), showClose && (_jsx(Close, { ref: closeButtonRef, asChild: true, children: _jsx(Button, { variant: BUTTON_VARIANT.GHOST, icon: X, className: "dndev-modal-close", "aria-label": "Close" }) }))] })] }));
60
+ return (_jsxs(Root, { open: open, onOpenChange: onOpenChange, children: [trigger && _jsx(Trigger, { asChild: true, children: trigger }), _jsxs(DialogContent, { className: className, noSwipe: noSwipe, closeButtonRef: closeButtonRef, onOpenChange: onOpenChange, ...variantAttrs, ...contentProps, children: [title ? (_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { className: "dndev-sr-only", children: description || 'Dialog content' })] })) : (_jsxs(_Fragment, { children: [_jsx(DialogTitle, { className: "dndev-sr-only", children: "Dialog" }), _jsx(DialogDescription, { className: "dndev-sr-only", children: description || 'Dialog content' })] })), _jsx("div", { className: "dndev-modal-body", children: children }), (footer || actions) && (_jsxs(DialogFooter, { children: [footer, actions && (_jsxs(_Fragment, { children: [actions.cancel && (_jsx(Close, { asChild: true, children: _jsx(Button, { variant: BUTTON_VARIANT.OUTLINE, onClick: actions.cancel.onClick, children: actions.cancel.label }) })), actions.confirm && (_jsx(Button, { variant: actions.confirm.variant || BUTTON_VARIANT.PRIMARY, onClick: actions.confirm.onClick, children: actions.confirm.label }))] }))] })), showClose && (_jsx(Close, { ref: closeButtonRef, asChild: true, children: _jsx(Button, { variant: BUTTON_VARIANT.GHOST, icon: X, className: "dndev-modal-close", "aria-label": "Close" }) }))] })] }));
61
61
  };
62
62
  export default Dialog;
63
63
  export { SURFACE_VARIANT as DIALOG_VARIANT } from '../../utils/constants';
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenuPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/DropdownMenu/DropdownMenuPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,iBAAiB,MAAM,+BAA+B,CAAC;AAMnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,qBAAqB,yDAAyB,CAAC;AACrD,QAAA,MAAM,4BAA4B,0IAA4B,CAAC;AAC/D,QAAA,MAAM,0BAA0B,qIAA0B,CAAC;AAC3D,QAAA,MAAM,2BAA2B,+DAA2B,CAAC;AAC7D,QAAA,MAAM,wBAAwB,4DAAwB,CAAC;AACvD,QAAA,MAAM,+BAA+B,0IAA+B,CAAC;AAErE,QAAA,MAAM,+BAA+B,GAAI,0CAKtC,cAAc,CAAC,OAAO,iBAAiB,CAAC,UAAU,CAAC,GAAG;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CASA,CAAC;AAEF,QAAA,MAAM,+BAA+B,GAAI,yBAGtC,cAAc,CAAC,OAAO,iBAAiB,CAAC,UAAU,CAAC,4CAErD,CAAC;AAEF,QAAA,MAAM,4BAA4B,GAAI,8DAMnC,cAAc,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG;IACpD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C,4CAYA,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAAI,yCAKhC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CAUA,CAAC;AAEF,QAAA,MAAM,iCAAiC,GAAI,qDAMxC,cAAc,CAAC,OAAO,iBAAiB,CAAC,YAAY,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAgBA,CAAC;AAEF,QAAA,MAAM,8BAA8B,GAAI,4CAKrC,cAAc,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,GAAG;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAeA,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,yCAKjC,cAAc,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,GAAG;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CASA,CAAC;AAEF,QAAA,MAAM,8BAA8B,GAAI,kCAIrC,cAAc,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,GAAG;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAGA,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,yBAGpC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,4CAEvC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,GAChC,CAAC"}
1
+ {"version":3,"file":"DropdownMenuPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/DropdownMenu/DropdownMenuPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,iBAAiB,MAAM,+BAA+B,CAAC;AAKnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,qBAAqB,yDAAyB,CAAC;AACrD,QAAA,MAAM,4BAA4B,0IAA4B,CAAC;AAC/D,QAAA,MAAM,0BAA0B,qIAA0B,CAAC;AAC3D,QAAA,MAAM,2BAA2B,+DAA2B,CAAC;AAC7D,QAAA,MAAM,wBAAwB,4DAAwB,CAAC;AACvD,QAAA,MAAM,+BAA+B,0IAA+B,CAAC;AAErE,QAAA,MAAM,+BAA+B,GAAI,0CAKtC,cAAc,CAAC,OAAO,iBAAiB,CAAC,UAAU,CAAC,GAAG;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CASA,CAAC;AAEF,QAAA,MAAM,+BAA+B,GAAI,yBAGtC,cAAc,CAAC,OAAO,iBAAiB,CAAC,UAAU,CAAC,4CAErD,CAAC;AAEF,QAAA,MAAM,4BAA4B,GAAI,8DAMnC,cAAc,CAAC,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG;IACpD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C,4CAYA,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAAI,yCAKhC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CAQA,CAAC;AAEF,QAAA,MAAM,iCAAiC,GAAI,qDAMxC,cAAc,CAAC,OAAO,iBAAiB,CAAC,YAAY,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAcA,CAAC;AAEF,QAAA,MAAM,8BAA8B,GAAI,4CAKrC,cAAc,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,GAAG;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAaA,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,yCAKjC,cAAc,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,GAAG;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,4CAOA,CAAC;AAEF,QAAA,MAAM,8BAA8B,GAAI,kCAIrC,cAAc,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,GAAG;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,4CAMA,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,yBAGpC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,4CAEvC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,GAChC,CAAC"}
@@ -9,7 +9,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  * @author AMBROISE PARK Consulting
10
10
  */
11
11
  import * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';
12
- import { Slot } from '@radix-ui/react-slot';
13
12
  import { Check, ChevronRight, Circle } from 'lucide-react';
14
13
  import { cn } from '../../utils/helpers';
15
14
  const DropdownMenuPrimitive = RadixDropdownMenu.Root;
@@ -23,26 +22,11 @@ const DropdownMenuSubContentPrimitive = ({ className, ...props }) => (_jsx(Radix
23
22
  const DropdownMenuContentPrimitive = ({ className, sideOffset = 4, align = 'start', onCloseAutoFocus = (e) => e.preventDefault(), ...props }) => {
24
23
  return (_jsx(RadixDropdownMenu.Portal, { children: _jsx(RadixDropdownMenu.Content, { sideOffset: sideOffset, align: align, onCloseAutoFocus: onCloseAutoFocus, className: cn(className), ...props }) }));
25
24
  };
26
- const DropdownMenuItemPrimitive = ({ className, inset, asChild = false, ...props }) => {
27
- const Comp = asChild ? Slot : RadixDropdownMenu.Item;
28
- return (_jsx(Comp, { className: cn(className), "data-role": "menu-item", "data-inset": inset ? 'true' : undefined, ...props }));
29
- };
30
- const DropdownMenuCheckboxItemPrimitive = ({ className, children, checked, asChild = false, ...props }) => {
31
- const Comp = asChild ? Slot : RadixDropdownMenu.CheckboxItem;
32
- return (_jsxs(Comp, { className: cn(className), "data-role": "menu-item", "data-inset": "true", checked: checked, ...props, children: [_jsx(RadixDropdownMenu.ItemIndicator, { children: _jsx(Check, {}) }), children] }));
33
- };
34
- const DropdownMenuRadioItemPrimitive = ({ className, children, asChild = false, ...props }) => {
35
- const Comp = asChild ? Slot : RadixDropdownMenu.RadioItem;
36
- return (_jsxs(Comp, { className: cn(className), "data-role": "menu-item", "data-inset": "true", ...props, children: [_jsx(RadixDropdownMenu.ItemIndicator, { children: _jsx(Circle, {}) }), children] }));
37
- };
38
- const DropdownMenuLabelPrimitive = ({ className, inset, asChild = false, ...props }) => {
39
- const Comp = asChild ? Slot : RadixDropdownMenu.Label;
40
- return (_jsx(Comp, { className: cn(className), "data-inset": inset ? 'true' : undefined, ...props }));
41
- };
42
- const DropdownMenuSeparatorPrimitive = ({ className, asChild = false, ...props }) => {
43
- const Comp = asChild ? Slot : RadixDropdownMenu.Separator;
44
- return _jsx(Comp, { className: cn(className), ...props });
45
- };
25
+ const DropdownMenuItemPrimitive = ({ className, inset, asChild = false, ...props }) => (_jsx(RadixDropdownMenu.Item, { className: cn(className), "data-role": "menu-item", "data-inset": inset ? 'true' : undefined, asChild: asChild, ...props }));
26
+ const DropdownMenuCheckboxItemPrimitive = ({ className, children, checked, asChild = false, ...props }) => (_jsxs(RadixDropdownMenu.CheckboxItem, { className: cn(className), "data-role": "menu-item", "data-inset": "true", checked: checked, asChild: asChild, ...props, children: [_jsx(RadixDropdownMenu.ItemIndicator, { children: _jsx(Check, {}) }), children] }));
27
+ const DropdownMenuRadioItemPrimitive = ({ className, children, asChild = false, ...props }) => (_jsxs(RadixDropdownMenu.RadioItem, { className: cn(className), "data-role": "menu-item", "data-inset": "true", asChild: asChild, ...props, children: [_jsx(RadixDropdownMenu.ItemIndicator, { children: _jsx(Circle, {}) }), children] }));
28
+ const DropdownMenuLabelPrimitive = ({ className, inset, asChild = false, ...props }) => (_jsx(RadixDropdownMenu.Label, { className: cn(className), "data-inset": inset ? 'true' : undefined, asChild: asChild, ...props }));
29
+ const DropdownMenuSeparatorPrimitive = ({ className, asChild = false, ...props }) => (_jsx(RadixDropdownMenu.Separator, { className: cn(className), asChild: asChild, ...props }));
46
30
  const DropdownMenuShortcutPrimitive = ({ className, ...props }) => {
47
31
  return _jsx("span", { className: cn(className), ...props });
48
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/DropdownMenu/index.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErE,OAAO,oBAAoB,CAAC;AAc5B,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,sBAAsB,GAAG,oBAAoB,GAAG;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,uBAAuB,GAAG,oBAAoB,GAAG;IACpD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,sBAAsB,GACtB,qBAAqB,GACrB,yBAAyB,GACzB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,YAAY,GAAI,+EAQnB,iBAAiB,mDAyQnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/DropdownMenu/index.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErE,OAAO,oBAAoB,CAAC;AAc5B,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,sBAAsB,GAAG,oBAAoB,GAAG;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,uBAAuB,GAAG,oBAAoB,GAAG;IACpD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,sBAAsB,GACtB,qBAAqB,GACrB,yBAAyB,GACzB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,YAAY,GAAI,+EAQnB,iBAAiB,mDAsPnB,CAAC;AAEF,eAAe,YAAY,CAAC"}