@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.
- package/dist/advanced/Code/CodeContent.d.ts.map +1 -1
- package/dist/advanced/Code/CodeContent.js +22 -5
- package/dist/advanced/Code/CodeSkeleton.js +4 -4
- package/dist/advanced/ImageGallery/ImageGallery.d.ts.map +1 -1
- package/dist/advanced/ImageGallery/ImageGallery.js +11 -5
- package/dist/advanced/JsonViewer/JsonViewer.d.ts +1 -1
- package/dist/advanced/JsonViewer/JsonViewer.d.ts.map +1 -1
- package/dist/advanced/JsonViewer/JsonViewer.js +9 -3
- package/dist/atomic/ActionButton/index.js +2 -2
- package/dist/atomic/ActionButton/useAction.d.ts.map +1 -1
- package/dist/atomic/ActionButton/useAction.js +18 -5
- package/dist/atomic/Alert/index.d.ts.map +1 -1
- package/dist/atomic/Button/index.d.ts +1 -1
- package/dist/atomic/Button/index.d.ts.map +1 -1
- package/dist/atomic/CallToAction/index.d.ts +2 -1
- package/dist/atomic/CallToAction/index.d.ts.map +1 -1
- package/dist/atomic/CallToAction/index.js +2 -1
- package/dist/atomic/Combobox/index.d.ts.map +1 -1
- package/dist/atomic/Combobox/index.js +3 -3
- package/dist/atomic/CopyToClipboard/index.d.ts.map +1 -1
- package/dist/atomic/CopyToClipboard/index.js +20 -4
- package/dist/atomic/Dialog/index.js +1 -1
- package/dist/atomic/DropdownMenu/index.js +1 -1
- package/dist/atomic/Grid/GridArea.d.ts +2 -2
- package/dist/atomic/Grid/GridArea.js +2 -2
- package/dist/atomic/Grid/index.d.ts +37 -20
- package/dist/atomic/Grid/index.d.ts.map +1 -1
- package/dist/atomic/Grid/index.js +54 -25
- package/dist/atomic/HeroSection/index.d.ts +3 -0
- package/dist/atomic/HeroSection/index.d.ts.map +1 -1
- package/dist/atomic/HeroSection/index.js +4 -1
- package/dist/atomic/HoverCard/HoverCardPrimitive.d.ts.map +1 -1
- package/dist/atomic/HoverCard/HoverCardPrimitive.js +1 -1
- package/dist/atomic/HoverCard/index.d.ts +19 -4
- package/dist/atomic/HoverCard/index.d.ts.map +1 -1
- package/dist/atomic/HoverCard/index.js +24 -5
- package/dist/atomic/Icons/Icon.d.ts.map +1 -1
- package/dist/atomic/Icons/Icon.js +11 -10
- package/dist/atomic/InfiniteScroll/index.d.ts +4 -2
- package/dist/atomic/InfiniteScroll/index.d.ts.map +1 -1
- package/dist/atomic/InfiniteScroll/index.js +2 -2
- package/dist/atomic/Pagination/index.js +1 -1
- package/dist/atomic/Popover/PopoverPrimitive.d.ts +1 -1
- package/dist/atomic/Popover/PopoverPrimitive.d.ts.map +1 -1
- package/dist/atomic/Popover/PopoverPrimitive.js +2 -2
- package/dist/atomic/Popover/index.d.ts +2 -2
- package/dist/atomic/Popover/index.d.ts.map +1 -1
- package/dist/atomic/Section/index.d.ts +9 -6
- package/dist/atomic/Section/index.d.ts.map +1 -1
- package/dist/atomic/Section/index.js +2 -1
- package/dist/atomic/Select/index.d.ts.map +1 -1
- package/dist/atomic/Select/index.js +2 -3
- package/dist/atomic/Stepper/index.d.ts +4 -0
- package/dist/atomic/Stepper/index.d.ts.map +1 -1
- package/dist/atomic/Stepper/index.js +8 -5
- package/dist/atomic/Table/index.d.ts +4 -4
- package/dist/atomic/Table/index.d.ts.map +1 -1
- package/dist/atomic/Toaster/ToastPrimitive.d.ts.map +1 -1
- package/dist/atomic/Toaster/ToastPrimitive.js +1 -13
- package/dist/atomic/index.d.ts +1 -1
- package/dist/atomic/index.d.ts.map +1 -1
- package/dist/hooks/useToast.d.ts.map +1 -1
- package/dist/hooks/useToast.js +18 -3
- package/dist/hooks/useViewportVisibility.d.ts.map +1 -1
- package/dist/hooks/useViewportVisibility.js +10 -12
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/styles/index.css +234 -75
- package/dist/types.d.ts +1 -1
- package/dist/utils/constants.d.ts +13 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +12 -0
- package/dist/utils/intersectionObserver.d.ts.map +1 -1
- package/dist/utils/intersectionObserver.js +1 -11
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeContent.d.ts","sourceRoot":"","sources":["../../../src/advanced/Code/CodeContent.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}, [
|
|
@@ -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
|
-
|
|
20
|
+
borderInlineEnd: '1px solid var(--border)',
|
|
21
21
|
backgroundColor: 'var(--muted)',
|
|
22
22
|
padding: '1rem',
|
|
23
|
-
textAlign: '
|
|
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
|
-
|
|
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: `${
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
118
|
-
left: 0,
|
|
124
|
+
inset: 0,
|
|
119
125
|
width: '100%',
|
|
120
126
|
height: '100%',
|
|
121
127
|
objectFit: 'cover',
|
|
@@ -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,
|
|
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
|
|
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
|
|
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
|
-
|
|
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,
|
|
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 (
|
|
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
|
-
|
|
50
|
+
if (mountedRef.current) {
|
|
51
|
+
setError(error);
|
|
52
|
+
}
|
|
43
53
|
onError?.(error);
|
|
44
54
|
return undefined;
|
|
45
55
|
}
|
|
46
56
|
finally {
|
|
47
|
-
|
|
57
|
+
loadingRef.current = false;
|
|
58
|
+
if (mountedRef.current) {
|
|
59
|
+
setLoading(false);
|
|
60
|
+
}
|
|
48
61
|
}
|
|
49
|
-
}, [action, onSuccess, onError
|
|
62
|
+
}, [action, onSuccess, onError]);
|
|
50
63
|
return { execute, loading, error };
|
|
51
64
|
}
|
|
@@ -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,
|
|
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"}
|
|
@@ -50,7 +50,7 @@ export interface ButtonRenderProps {
|
|
|
50
50
|
'data-full-width'?: string;
|
|
51
51
|
role?: string;
|
|
52
52
|
tabIndex?: number;
|
|
53
|
-
[key: string]:
|
|
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,
|
|
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?:
|
|
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;
|
|
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 =
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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';
|
|
@@ -74,7 +74,7 @@ const DropdownMenu = ({ trigger, items = [], children, contentWidth, contentAlig
|
|
|
74
74
|
!hasSubLabel && { 'data-display': 'compact' }), children: [Icon && _jsx(Icon, {}), _jsx("span", { children: submenuItem.label }), _jsx(ChevronRight, { className: "dndev-dropdown-menu-trailing" })] }), _jsx(DropdownMenuPortalPrimitive, { children: _jsx(DropdownMenuSubContentPrimitive, { className: cn('dndev-floating dndev-z-tooltip', submenuItem.subContent
|
|
75
75
|
? 'dndev-dropdown-sub-content-custom'
|
|
76
76
|
: ''), children: submenuItem.subContent ||
|
|
77
|
-
submenuItem.subItems
|
|
77
|
+
submenuItem.subItems?.map((subItem, subIndex) => {
|
|
78
78
|
// Handle label/separator in submenu
|
|
79
79
|
if (subItem.type === 'label') {
|
|
80
80
|
return (_jsx(DropdownMenuLabelPrimitive, { className: cn('dndev-menu-label', subItem.className), children: subItem.label }, subIndex));
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @example
|
|
10
10
|
* ```tsx
|
|
11
11
|
* // Generic grid areas (default)
|
|
12
|
-
* <Grid areas="left center right"
|
|
12
|
+
* <Grid areas="left center right" cols=fr">
|
|
13
13
|
* <GridArea name="left">{leftContent}</GridArea>
|
|
14
14
|
* <GridArea name="center">{centerContent}</GridArea>
|
|
15
15
|
* <GridArea name="right">{rightContent}</GridArea>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* @example
|
|
20
20
|
* ```tsx
|
|
21
21
|
* // Semantic grid layout
|
|
22
|
-
* <Grid areas="header main sidebar footer"
|
|
22
|
+
* <Grid areas="header main sidebar footer" cols=r">
|
|
23
23
|
* <GridArea as="header" name="header">Header</GridArea>
|
|
24
24
|
* <GridArea as="main" name="main">Main Content</GridArea>
|
|
25
25
|
* <GridArea as="aside" name="sidebar">Sidebar</GridArea>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @example
|
|
11
11
|
* ```tsx
|
|
12
12
|
* // Generic grid areas (default)
|
|
13
|
-
* <Grid areas="left center right"
|
|
13
|
+
* <Grid areas="left center right" cols=fr">
|
|
14
14
|
* <GridArea name="left">{leftContent}</GridArea>
|
|
15
15
|
* <GridArea name="center">{centerContent}</GridArea>
|
|
16
16
|
* <GridArea name="right">{rightContent}</GridArea>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* @example
|
|
21
21
|
* ```tsx
|
|
22
22
|
* // Semantic grid layout
|
|
23
|
-
* <Grid areas="header main sidebar footer"
|
|
23
|
+
* <Grid areas="header main sidebar footer" cols=r">
|
|
24
24
|
* <GridArea as="header" name="header">Header</GridArea>
|
|
25
25
|
* <GridArea as="main" name="main">Main Content</GridArea>
|
|
26
26
|
* <GridArea as="aside" name="sidebar">Sidebar</GridArea>
|
|
@@ -11,23 +11,31 @@
|
|
|
11
11
|
* <Card />
|
|
12
12
|
* </Grid>
|
|
13
13
|
*
|
|
14
|
-
* // Responsive
|
|
15
|
-
* // 1 col on mobile/tablet, 2 on laptop, 3 on desktop
|
|
14
|
+
* // Responsive equal columns: [mobile, tablet, laptop, desktop]
|
|
16
15
|
* <Grid cols={[1, 1, 2, 3]}>
|
|
17
16
|
* <Card />
|
|
18
17
|
* <Card />
|
|
19
18
|
* <Card />
|
|
20
19
|
* </Grid>
|
|
21
20
|
*
|
|
22
|
-
* //
|
|
23
|
-
* <Grid
|
|
21
|
+
* // Custom column template (static)
|
|
22
|
+
* <Grid cols="1fr auto 1fr" areas="left center right">
|
|
24
23
|
* <GridArea name="left">{left}</GridArea>
|
|
25
24
|
* <GridArea name="center">{center}</GridArea>
|
|
26
25
|
* <GridArea name="right">{right}</GridArea>
|
|
27
26
|
* </Grid>
|
|
27
|
+
*
|
|
28
|
+
* // Custom column template (responsive) + responsive areas
|
|
29
|
+
* <Grid
|
|
30
|
+
* cols={["1fr", "1fr", "1fr 3fr", "1fr 3fr"]}
|
|
31
|
+
* areas={['"a" "b"', '"a" "b"', '"a b"', '"a b"']}
|
|
32
|
+
* >
|
|
33
|
+
* <GridArea name="a">{left}</GridArea>
|
|
34
|
+
* <GridArea name="b">{right}</GridArea>
|
|
35
|
+
* </Grid>
|
|
28
36
|
* ```
|
|
29
37
|
*
|
|
30
|
-
* @version 0.0.
|
|
38
|
+
* @version 0.0.5
|
|
31
39
|
* @since 0.0.1
|
|
32
40
|
* @author AMBROISE PARK Consulting
|
|
33
41
|
*/
|
|
@@ -38,6 +46,15 @@ import './Grid.css';
|
|
|
38
46
|
* @example [1, 1, 2, 3] - 1 col on mobile/tablet, 2 on laptop, 3 on desktop
|
|
39
47
|
*/
|
|
40
48
|
export type ResponsiveCols = [number, number, number, number];
|
|
49
|
+
/**
|
|
50
|
+
* Responsive template array: [mobile, tablet, laptop, desktop]
|
|
51
|
+
* @example ["1fr", "1fr", "1fr 3fr", "1fr 3fr"] - stacked on mobile/tablet, 1:3 ratio on laptop/desktop
|
|
52
|
+
*/
|
|
53
|
+
export type ResponsiveTemplate = [string, string, string, string];
|
|
54
|
+
/**
|
|
55
|
+
* Unified column type: equal columns (number) or custom template (string), static or responsive
|
|
56
|
+
*/
|
|
57
|
+
export type GridCols = number | string | ResponsiveCols | ResponsiveTemplate;
|
|
41
58
|
/**
|
|
42
59
|
* Grid-specific props (layout directives)
|
|
43
60
|
*/
|
|
@@ -49,15 +66,18 @@ interface GridOwnProps {
|
|
|
49
66
|
*/
|
|
50
67
|
as?: ElementType;
|
|
51
68
|
/**
|
|
52
|
-
*
|
|
53
|
-
* - number: fixed columns (
|
|
54
|
-
* -
|
|
69
|
+
* Column layout — unified prop for all column patterns:
|
|
70
|
+
* - number: fixed equal columns → repeat(N, 1fr)
|
|
71
|
+
* - string: custom template → raw grid-template-columns value
|
|
72
|
+
* - [number x4]: responsive equal columns per breakpoint
|
|
73
|
+
* - [string x4]: responsive custom template per breakpoint
|
|
55
74
|
* @default 1
|
|
56
|
-
* @example 3 - always 3 columns
|
|
57
|
-
* @example
|
|
58
|
-
* @example [1,
|
|
75
|
+
* @example 3 - always 3 equal columns
|
|
76
|
+
* @example "1fr 3fr" - custom ratio
|
|
77
|
+
* @example [1, 1, 2, 3] - responsive equal: 1 mobile/tablet, 2 laptop, 3 desktop
|
|
78
|
+
* @example ["1fr", "1fr", "1fr 3fr", "1fr 3fr"] - responsive template: stacked mobile, 1:3 desktop
|
|
59
79
|
*/
|
|
60
|
-
cols?:
|
|
80
|
+
cols?: GridCols;
|
|
61
81
|
/**
|
|
62
82
|
* Spacing between items
|
|
63
83
|
* @default 'medium'
|
|
@@ -76,15 +96,12 @@ interface GridOwnProps {
|
|
|
76
96
|
/**
|
|
77
97
|
* Named grid areas (CSS grid-template-areas)
|
|
78
98
|
* Use with GridArea component for semantic grid layouts
|
|
79
|
-
*
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
* Grid template columns (CSS grid-template-columns)
|
|
84
|
-
* Required when using `areas` prop
|
|
85
|
-
* @example "1fr auto 1fr", "1fr auto", "200px 1fr"
|
|
99
|
+
* - string: static areas (same on all breakpoints)
|
|
100
|
+
* - [mobile, tablet, laptop, desktop]: responsive areas per breakpoint
|
|
101
|
+
* @example "left center right"
|
|
102
|
+
* @example ['"a" "b"', '"a" "b"', '"a b"', '"a b"'] - stacked mobile, side-by-side desktop
|
|
86
103
|
*/
|
|
87
|
-
|
|
104
|
+
areas?: string | ResponsiveTemplate;
|
|
88
105
|
/** Content */
|
|
89
106
|
children: ReactNode;
|
|
90
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Grid/index.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Grid/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAIf,OAAO,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAE7E;;GAEG;AACH,UAAU,YAAY;IACpB;;;;OAIG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAE5C;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAE/C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAEjD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC;IAEpC,cAAc;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,IAAI,YAAY,GACjE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,YAAY,CAAC,CAAC;AAErD;;;;;GAKG;AACH,QAAA,MAAM,IAAI,uHA8ET,CAAC;AAIF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAe,IAAI,CAAC"}
|