@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
|
@@ -12,23 +12,31 @@
|
|
|
12
12
|
* <Card />
|
|
13
13
|
* </Grid>
|
|
14
14
|
*
|
|
15
|
-
* // Responsive
|
|
16
|
-
* // 1 col on mobile/tablet, 2 on laptop, 3 on desktop
|
|
15
|
+
* // Responsive equal columns: [mobile, tablet, laptop, desktop]
|
|
17
16
|
* <Grid cols={[1, 1, 2, 3]}>
|
|
18
17
|
* <Card />
|
|
19
18
|
* <Card />
|
|
20
19
|
* <Card />
|
|
21
20
|
* </Grid>
|
|
22
21
|
*
|
|
23
|
-
* //
|
|
24
|
-
* <Grid
|
|
22
|
+
* // Custom column template (static)
|
|
23
|
+
* <Grid cols="1fr auto 1fr" areas="left center right">
|
|
25
24
|
* <GridArea name="left">{left}</GridArea>
|
|
26
25
|
* <GridArea name="center">{center}</GridArea>
|
|
27
26
|
* <GridArea name="right">{right}</GridArea>
|
|
28
27
|
* </Grid>
|
|
28
|
+
*
|
|
29
|
+
* // Custom column template (responsive) + responsive areas
|
|
30
|
+
* <Grid
|
|
31
|
+
* cols={["1fr", "1fr", "1fr 3fr", "1fr 3fr"]}
|
|
32
|
+
* areas={['"a" "b"', '"a" "b"', '"a b"', '"a b"']}
|
|
33
|
+
* >
|
|
34
|
+
* <GridArea name="a">{left}</GridArea>
|
|
35
|
+
* <GridArea name="b">{right}</GridArea>
|
|
36
|
+
* </Grid>
|
|
29
37
|
* ```
|
|
30
38
|
*
|
|
31
|
-
* @version 0.0.
|
|
39
|
+
* @version 0.0.5
|
|
32
40
|
* @since 0.0.1
|
|
33
41
|
* @author AMBROISE PARK Consulting
|
|
34
42
|
*/
|
|
@@ -42,38 +50,59 @@ import './Grid.css';
|
|
|
42
50
|
* Polymorphic CSS Grid layout primitive.
|
|
43
51
|
* Can render as any HTML element while maintaining grid layout.
|
|
44
52
|
*/
|
|
45
|
-
const Grid = forwardRef(({ as = 'div', cols = 1, gap = GAP_VARIANT.MEDIUM, align = 'stretch', justify = 'stretch', areas,
|
|
53
|
+
const Grid = forwardRef(({ as = 'div', cols = 1, gap = GAP_VARIANT.MEDIUM, align = 'stretch', justify = 'stretch', areas, className, style, children, ...props }, ref) => {
|
|
46
54
|
const Component = as;
|
|
47
|
-
//
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
// Detect which cols variant we're dealing with
|
|
56
|
+
const isArray = Array.isArray(cols);
|
|
57
|
+
const isResponsiveEqual = isArray && typeof cols[0] === 'number';
|
|
58
|
+
const isResponsiveTpl = isArray && typeof cols[0] === 'string';
|
|
59
|
+
const isStaticTpl = typeof cols === 'string';
|
|
60
|
+
const isResponsiveAreas = Array.isArray(areas);
|
|
52
61
|
const customStyle = {
|
|
53
62
|
display: 'grid',
|
|
54
63
|
width: '100%',
|
|
55
|
-
// Set CSS custom properties for responsive columns
|
|
56
|
-
'--grid-cols-mobile': colsMobile,
|
|
57
|
-
'--grid-cols-tablet': colsTablet,
|
|
58
|
-
'--grid-cols-laptop': colsLaptop,
|
|
59
|
-
'--grid-cols-desktop': colsDesktop,
|
|
60
64
|
...style,
|
|
61
|
-
...(areas
|
|
62
|
-
? {
|
|
63
|
-
gridTemplateAreas: areas.trim().startsWith('"')
|
|
64
|
-
? areas
|
|
65
|
-
: `"${areas}"`,
|
|
66
|
-
}
|
|
67
|
-
: {}),
|
|
68
|
-
...(templateColumns && { gridTemplateColumns: templateColumns }),
|
|
69
65
|
};
|
|
66
|
+
if (isResponsiveTpl) {
|
|
67
|
+
const tpl = cols;
|
|
68
|
+
customStyle['--grid-tpl-mobile'] = tpl[0];
|
|
69
|
+
customStyle['--grid-tpl-tablet'] = tpl[1];
|
|
70
|
+
customStyle['--grid-tpl-laptop'] = tpl[2];
|
|
71
|
+
customStyle['--grid-tpl-desktop'] = tpl[3];
|
|
72
|
+
}
|
|
73
|
+
else if (isStaticTpl) {
|
|
74
|
+
customStyle.gridTemplateColumns = cols;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const [m, t, l, d] = isResponsiveEqual
|
|
78
|
+
? cols
|
|
79
|
+
: [cols, cols, cols, cols];
|
|
80
|
+
customStyle['--grid-cols-mobile'] = m;
|
|
81
|
+
customStyle['--grid-cols-tablet'] = t;
|
|
82
|
+
customStyle['--grid-cols-laptop'] = l;
|
|
83
|
+
customStyle['--grid-cols-desktop'] = d;
|
|
84
|
+
}
|
|
85
|
+
if (isResponsiveAreas) {
|
|
86
|
+
const fmt = (v) => (v.trim().startsWith('"') ? v : `"${v}"`);
|
|
87
|
+
customStyle['--grid-areas-mobile'] = fmt(areas[0]);
|
|
88
|
+
customStyle['--grid-areas-tablet'] = fmt(areas[1]);
|
|
89
|
+
customStyle['--grid-areas-laptop'] = fmt(areas[2]);
|
|
90
|
+
customStyle['--grid-areas-desktop'] = fmt(areas[3]);
|
|
91
|
+
}
|
|
92
|
+
else if (typeof areas === 'string') {
|
|
93
|
+
customStyle.gridTemplateAreas = areas.trim().startsWith('"')
|
|
94
|
+
? areas
|
|
95
|
+
: `"${areas}"`;
|
|
96
|
+
}
|
|
70
97
|
return createElement(Component, {
|
|
71
98
|
ref,
|
|
72
99
|
className: cn('dndev-grid-component', className),
|
|
73
100
|
'data-gap': gap,
|
|
74
101
|
'data-align': align,
|
|
75
102
|
'data-justify': justify,
|
|
76
|
-
'data-responsive':
|
|
103
|
+
'data-responsive': isResponsiveEqual ? 'true' : undefined,
|
|
104
|
+
'data-responsive-tpl': isResponsiveTpl ? 'true' : undefined,
|
|
105
|
+
'data-responsive-areas': isResponsiveAreas ? 'true' : undefined,
|
|
77
106
|
style: customStyle,
|
|
78
107
|
...props,
|
|
79
108
|
}, children);
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import { type VariantProps } from 'class-variance-authority';
|
|
24
24
|
import { type ElementType, type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
25
|
+
import { type Tone } from '../../utils/constants';
|
|
25
26
|
import './HeroSection.css';
|
|
26
27
|
declare const heroSectionVariants: (props?: ({
|
|
27
28
|
variant?: "primary" | "accent" | "subtle" | null | undefined;
|
|
@@ -39,6 +40,8 @@ interface HeroSectionOwnProps extends VariantProps<typeof heroSectionVariants> {
|
|
|
39
40
|
fullHeight?: boolean;
|
|
40
41
|
/** Content alignment @default 'center' */
|
|
41
42
|
align?: 'start' | 'center' | 'end';
|
|
43
|
+
/** Tone system for background colors (matches Section/CallToAction) */
|
|
44
|
+
tone?: Tone;
|
|
42
45
|
/** Content */
|
|
43
46
|
children?: ReactNode;
|
|
44
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HeroSection/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HeroSection/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAMxD,OAAO,mBAAmB,CAAC;AAE3B,QAAA,MAAM,mBAAmB;;8EAWvB,CAAC;AAEH,UAAU,mBAAoB,SAAQ,YAAY,CAAC,OAAO,mBAAmB,CAAC;IAC5E,mDAAmD;IACnD,EAAE,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,uEAAuE;IACvE,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAC5D,mBAAmB,GACjB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,mBAAmB,CAAC,CAAC;AAE9D,QAAA,MAAM,WAAW,kIAgEhB,CAAC;AAIF,eAAe,WAAW,CAAC"}
|
|
@@ -24,6 +24,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
24
24
|
*/
|
|
25
25
|
import { cva } from 'class-variance-authority';
|
|
26
26
|
import { createElement, forwardRef, } from 'react';
|
|
27
|
+
import { TONE } from '../../utils/constants';
|
|
27
28
|
import { cn } from '../../utils/helpers';
|
|
28
29
|
import Badge, { BADGE_VARIANT } from '../Badge';
|
|
29
30
|
import Stack from '../Stack';
|
|
@@ -41,11 +42,13 @@ const heroSectionVariants = cva('', {
|
|
|
41
42
|
variant: 'primary',
|
|
42
43
|
},
|
|
43
44
|
});
|
|
44
|
-
const HeroSection = forwardRef(function HeroSection({ as = 'section', badge, title, subtitle, variant, fullHeight = false, align = 'center', children, className, ...props }, ref) {
|
|
45
|
+
const HeroSection = forwardRef(function HeroSection({ as = 'section', badge, title, subtitle, variant, fullHeight = false, align = 'center', tone = TONE.GHOST, children, className, ...props }, ref) {
|
|
45
46
|
return createElement(as, {
|
|
46
47
|
ref,
|
|
47
48
|
className: cn('dndev-hero-section', className),
|
|
48
49
|
'data-text-align': align,
|
|
50
|
+
'data-variant': variant || undefined,
|
|
51
|
+
'data-tone': tone,
|
|
49
52
|
style: {
|
|
50
53
|
...(fullHeight
|
|
51
54
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HoverCardPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/HoverCardPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAI7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,kBAAkB,GAAI,yBAGzB,cAAc,CAAC,cAAc,4CAE/B,CAAC;AAEF,QAAA,MAAM,gBAAgB,oIAAyB,CAAC;AAEhD,QAAA,MAAM,gBAAgB,GAAI,4CAKvB,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"HoverCardPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/HoverCardPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAI7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,kBAAkB,GAAI,yBAGzB,cAAc,CAAC,cAAc,4CAE/B,CAAC;AAEF,QAAA,MAAM,gBAAgB,oIAAyB,CAAC;AAEhD,QAAA,MAAM,gBAAgB,GAAI,4CAKvB,cAAc,CAAC,OAAO,cAAc,CAAC,OAAO,CAAC,4CAW/C,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -13,7 +13,7 @@ import { cn } from '../../utils/helpers';
|
|
|
13
13
|
const HoverCardPrimitive = ({ openDelay = 0, ...props }) => (_jsx(RadixHoverCard.Root, { openDelay: openDelay, ...props }));
|
|
14
14
|
const HoverCardTrigger = RadixHoverCard.Trigger;
|
|
15
15
|
const HoverCardContent = ({ className, align = 'center', sideOffset = 4, ...props }) => {
|
|
16
|
-
return (_jsx(RadixHoverCard.Content, { align: align, sideOffset: sideOffset, className: cn(className), ...props }));
|
|
16
|
+
return (_jsx(RadixHoverCard.Portal, { children: _jsx(RadixHoverCard.Content, { align: align, sideOffset: sideOffset, className: cn(className), ...props }) }));
|
|
17
17
|
};
|
|
18
18
|
export { HoverCardPrimitive };
|
|
19
19
|
export { HoverCardTrigger, HoverCardContent };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { type CardProps } from '../Card';
|
|
1
2
|
import type { ReactNode } from 'react';
|
|
2
|
-
export interface HoverCardProps {
|
|
3
|
+
export interface HoverCardProps extends Pick<CardProps, 'title' | 'subtitle' | 'content' | 'footer' | 'icon' | 'variant'> {
|
|
3
4
|
/** Trigger element (button, text, avatar, etc.) */
|
|
4
5
|
trigger?: ReactNode;
|
|
5
|
-
/** HoverCard content */
|
|
6
|
+
/** HoverCard content (alternative to content prop, for full control) */
|
|
6
7
|
children?: ReactNode;
|
|
7
8
|
/** Controlled open state */
|
|
8
9
|
open?: boolean;
|
|
@@ -23,11 +24,25 @@ export interface HoverCardProps {
|
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* Accessible hover card component.
|
|
26
|
-
* Shows rich content on hover
|
|
27
|
+
* Shows rich content on hover using Radix HoverCard primitive.
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ **Desktop only**: This component uses hover events and does not support touch/click interactions.
|
|
30
|
+
* For mobile/click support, use {@link Popover} instead.
|
|
31
|
+
*
|
|
32
|
+
* Accepts Card props (title, subtitle, content, footer, variant, icon) and renders a Card internally.
|
|
27
33
|
*
|
|
28
34
|
* @component
|
|
29
35
|
* @example
|
|
30
36
|
* ```tsx
|
|
37
|
+
* // Using Card props
|
|
38
|
+
* <HoverCard
|
|
39
|
+
* trigger={<Avatar src="..." />}
|
|
40
|
+
* title="John Doe"
|
|
41
|
+
* subtitle="Software Engineer"
|
|
42
|
+
* content="Building amazing products"
|
|
43
|
+
* />
|
|
44
|
+
*
|
|
45
|
+
* // Using children for full control
|
|
31
46
|
* <HoverCard trigger={<Avatar src="..." />}>
|
|
32
47
|
* <Stack gap="tight">
|
|
33
48
|
* <Text>John Doe</Text>
|
|
@@ -38,6 +53,6 @@ export interface HoverCardProps {
|
|
|
38
53
|
* @param {HoverCardProps} props - The props for the hover card
|
|
39
54
|
* @returns {JSX.Element} The rendered hover card
|
|
40
55
|
*/
|
|
41
|
-
declare function HoverCard({ trigger, children, open, onOpenChange, openDelay, closeDelay, align, side, sideOffset, className, }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
declare function HoverCard({ trigger, title, subtitle, content, footer, icon, variant, children, open, onOpenChange, openDelay, closeDelay, align, side, sideOffset, className, }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
|
|
42
57
|
export default HoverCard;
|
|
43
58
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/HoverCard/index.tsx"],"names":[],"mappings":"AAmBA,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,EACT,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CACjE;IACC,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,iBAAS,SAAS,CAAC,EACjB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,SAAa,EACb,UAAc,EACd,KAAgB,EAChB,IAAe,EACf,UAAc,EACd,SAAS,GACV,EAAE,cAAc,2CAqChB;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -2,21 +2,38 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
// packages/components/src/atomic/HoverCard/index.tsx
|
|
3
3
|
/**
|
|
4
4
|
* @fileoverview HoverCard component
|
|
5
|
-
* @description Accessible hover card component built on Radix UI primitives
|
|
5
|
+
* @description Accessible hover card component built on Radix UI primitives.
|
|
6
|
+
* Accepts Card props and renders a Card internally.
|
|
6
7
|
*
|
|
7
|
-
* @version 0.0.
|
|
8
|
+
* @version 0.0.2
|
|
8
9
|
* @since 0.0.1
|
|
9
10
|
* @author AMBROISE PARK Consulting
|
|
10
11
|
*/
|
|
12
|
+
import { useState } from 'react';
|
|
11
13
|
import { HoverCardPrimitive, HoverCardTrigger, HoverCardContent, } from './HoverCardPrimitive';
|
|
14
|
+
import Card, {} from '../Card';
|
|
12
15
|
import { cn } from '../../utils/helpers';
|
|
13
16
|
/**
|
|
14
17
|
* Accessible hover card component.
|
|
15
|
-
* Shows rich content on hover
|
|
18
|
+
* Shows rich content on hover using Radix HoverCard primitive.
|
|
19
|
+
*
|
|
20
|
+
* ⚠️ **Desktop only**: This component uses hover events and does not support touch/click interactions.
|
|
21
|
+
* For mobile/click support, use {@link Popover} instead.
|
|
22
|
+
*
|
|
23
|
+
* Accepts Card props (title, subtitle, content, footer, variant, icon) and renders a Card internally.
|
|
16
24
|
*
|
|
17
25
|
* @component
|
|
18
26
|
* @example
|
|
19
27
|
* ```tsx
|
|
28
|
+
* // Using Card props
|
|
29
|
+
* <HoverCard
|
|
30
|
+
* trigger={<Avatar src="..." />}
|
|
31
|
+
* title="John Doe"
|
|
32
|
+
* subtitle="Software Engineer"
|
|
33
|
+
* content="Building amazing products"
|
|
34
|
+
* />
|
|
35
|
+
*
|
|
36
|
+
* // Using children for full control
|
|
20
37
|
* <HoverCard trigger={<Avatar src="..." />}>
|
|
21
38
|
* <Stack gap="tight">
|
|
22
39
|
* <Text>John Doe</Text>
|
|
@@ -27,7 +44,9 @@ import { cn } from '../../utils/helpers';
|
|
|
27
44
|
* @param {HoverCardProps} props - The props for the hover card
|
|
28
45
|
* @returns {JSX.Element} The rendered hover card
|
|
29
46
|
*/
|
|
30
|
-
function HoverCard({ trigger, children, open, onOpenChange, openDelay = 0, closeDelay = 0, align = 'center', side = 'bottom', sideOffset = 4, className, }) {
|
|
31
|
-
|
|
47
|
+
function HoverCard({ trigger, title, subtitle, content, footer, icon, variant, children, open, onOpenChange, openDelay = 0, closeDelay = 0, align = 'center', side = 'bottom', sideOffset = 4, className, }) {
|
|
48
|
+
const hasCardProps = !!(title || subtitle || content || footer || icon || variant);
|
|
49
|
+
const cardContent = hasCardProps ? (_jsx(Card, { title: title, subtitle: subtitle, content: content, footer: footer, icon: icon, variant: variant })) : (children);
|
|
50
|
+
return (_jsxs(HoverCardPrimitive, { open: open, onOpenChange: onOpenChange, openDelay: openDelay, closeDelay: closeDelay, children: [trigger && _jsx(HoverCardTrigger, { asChild: true, children: trigger }), _jsx(HoverCardContent, { align: align, side: side, sideOffset: sideOffset, className: cn('dndev-z-tooltip dndev-hovercard-content', !hasCardProps && 'dndev-surface', className), children: cardContent })] }));
|
|
32
51
|
}
|
|
33
52
|
export default HoverCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/atomic/Icons/Icon.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,IAAI,EAAE,aAAa,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/atomic/Icons/Icon.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,QAAA,MAAM,IAAI,EAAE,aAAa,CAAC,SAAS,CA4FlC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -12,6 +12,14 @@ import { cn } from '../../utils/helpers';
|
|
|
12
12
|
const Icon = ({ icon, fallback, className, ariaHidden = false, }) => {
|
|
13
13
|
// Memoize icon resolution to avoid recalculation
|
|
14
14
|
const iconToRender = useMemo(() => icon || fallback, [icon, fallback]);
|
|
15
|
+
// Memoize emoji check — must be unconditional (Rules of Hooks)
|
|
16
|
+
const isEmoji = useMemo(() => {
|
|
17
|
+
if (typeof iconToRender !== 'string')
|
|
18
|
+
return false;
|
|
19
|
+
// If it's a valid identifier pattern, it's NOT an emoji (it's a Lucide icon name)
|
|
20
|
+
const isValidIdentifier = /^[a-zA-Z0-9_-]+$/.test(iconToRender);
|
|
21
|
+
return !isValidIdentifier;
|
|
22
|
+
}, [iconToRender]);
|
|
15
23
|
if (!iconToRender)
|
|
16
24
|
return null;
|
|
17
25
|
const sizeClass = 'dndev-size-md';
|
|
@@ -25,21 +33,14 @@ const Icon = ({ icon, fallback, className, ariaHidden = false, }) => {
|
|
|
25
33
|
}
|
|
26
34
|
// Type 2: String (emoji only - no dynamic icon name lookup for tree-shaking)
|
|
27
35
|
if (typeof iconToRender === 'string') {
|
|
28
|
-
// Check if string is an emoji (not a valid identifier)
|
|
29
|
-
// Valid identifiers: alphanumeric, underscore, hyphen (Lucide icon names)
|
|
30
|
-
// Emojis: anything else (Unicode symbols, emojis, etc.)
|
|
31
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
32
|
-
const isEmoji = useMemo(() => {
|
|
33
|
-
// If it's a valid identifier pattern, it's NOT an emoji (it's a Lucide icon name)
|
|
34
|
-
const isValidIdentifier = /^[a-zA-Z0-9_-]+$/.test(iconToRender);
|
|
35
|
-
return !isValidIdentifier;
|
|
36
|
-
}, [iconToRender]);
|
|
37
36
|
if (isEmoji) {
|
|
38
37
|
return (_jsx("span", { className: cn('dndev-inline-flex dndev-items-center dndev-justify-center', sizeClass, className), "aria-hidden": ariaHidden, children: iconToRender }));
|
|
39
38
|
}
|
|
40
39
|
// Non-emoji string: Not supported (would require full lucide-react import)
|
|
41
40
|
// Use Icon from @donotdev/ui for dynamic string icon resolution
|
|
42
|
-
|
|
41
|
+
if (process.env.NODE_ENV === 'development') {
|
|
42
|
+
console.warn(`Icon component from @donotdev/components does not support Lucide icon name strings. Use Icon from @donotdev/ui for dynamic string resolution, or import the icon component directly. Received: "${iconToRender}"`);
|
|
43
|
+
}
|
|
43
44
|
return null;
|
|
44
45
|
}
|
|
45
46
|
// Type 3: ReactNode (custom content)
|
|
@@ -11,7 +11,9 @@ import './InfiniteScroll.css';
|
|
|
11
11
|
export interface InfiniteScrollProps<T> {
|
|
12
12
|
items: T[];
|
|
13
13
|
renderItem: (item: T, index: number) => ReactNode;
|
|
14
|
-
|
|
14
|
+
/** Extract a stable key for each item. Falls back to index when not provided. */
|
|
15
|
+
keyExtractor?: (item: T, index: number) => string | number;
|
|
16
|
+
loadMore: () => void | Promise<void>;
|
|
15
17
|
hasMore: boolean;
|
|
16
18
|
loading?: boolean;
|
|
17
19
|
loadingComponent?: ReactNode;
|
|
@@ -23,6 +25,6 @@ export interface InfiniteScrollProps<T> {
|
|
|
23
25
|
gridCols?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
24
26
|
gap?: 'none' | 'tight' | 'medium' | 'large';
|
|
25
27
|
}
|
|
26
|
-
declare const InfiniteScroll: <T>({ items, renderItem, loadMore, hasMore, loading, loadingComponent, endMessage, threshold, rootMargin, className, itemClassName, gridCols, gap, }: InfiniteScrollProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
declare const InfiniteScroll: <T>({ items, renderItem, keyExtractor, loadMore, hasMore, loading, loadingComponent, endMessage, threshold, rootMargin, className, itemClassName, gridCols, gap, }: InfiniteScrollProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
27
29
|
export default InfiniteScroll;
|
|
28
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/InfiniteScroll/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/InfiniteScroll/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAClD,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IAC3D,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC7C;AAED,QAAA,MAAM,cAAc,GAAI,CAAC,EAAG,gKAezB,mBAAmB,CAAC,CAAC,CAAC,4CAuGxB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -14,7 +14,7 @@ import { cn, observeElement } from '../../utils';
|
|
|
14
14
|
import Spinner from '../Spinner';
|
|
15
15
|
import Stack from '../Stack';
|
|
16
16
|
import './InfiniteScroll.css';
|
|
17
|
-
const InfiniteScroll = ({ items, renderItem, loadMore, hasMore, loading = false, loadingComponent, endMessage, threshold = 0.1, rootMargin = '100px', className, itemClassName, gridCols = 3, gap = GAP_VARIANT.MEDIUM, }) => {
|
|
17
|
+
const InfiniteScroll = ({ items, renderItem, keyExtractor, loadMore, hasMore, loading = false, loadingComponent, endMessage, threshold = 0.1, rootMargin = '100px', className, itemClassName, gridCols = 3, gap = GAP_VARIANT.MEDIUM, }) => {
|
|
18
18
|
const [isLoading, setIsLoading] = useState(false);
|
|
19
19
|
const loadMoreRef = useRef(null);
|
|
20
20
|
const handleLoadMore = useCallback(async () => {
|
|
@@ -48,6 +48,6 @@ const InfiniteScroll = ({ items, renderItem, loadMore, hasMore, loading = false,
|
|
|
48
48
|
}[gap];
|
|
49
49
|
const defaultLoadingComponent = (_jsx(Stack, { align: "center", justify: "center", className: "dndev-py-lg", children: _jsxs(Stack, { direction: "row", align: "center", gap: "tight", className: "dndev-infinite-scroll-loading-container", children: [_jsx(Spinner, {}), _jsx("span", { children: "Loading more..." })] }) }));
|
|
50
50
|
const defaultEndMessage = (_jsx(Stack, { align: "center", justify: "center", className: "dndev-py-lg", children: _jsxs("div", { className: "dndev-text-center dndev-infinite-scroll-end-title", children: [_jsx("p", { className: "dndev-text-lg dndev-font-medium", children: "\uD83C\uDF89 You've seen it all!" }), _jsx("p", { className: "dndev-text-sm dndev-infinite-scroll-end-text", children: "That's everything we have to showcase." })] }) }));
|
|
51
|
-
return (_jsxs("div", { className: cn('dndev-grid dndev-gap-md', className), children: [_jsx("div", { className: "dndev-infinite-scroll-grid", "data-cols": gridCols, style: gapStyle, children: items.map((item, index) => (_jsx("div", { className: itemClassName, children: renderItem(item, index) }, index))) }), hasMore && (_jsx(Stack, { ref: loadMoreRef, justify: "center", className: "dndev-py-md", children: loading || isLoading ? (loadingComponent || defaultLoadingComponent) : (_jsx("div", { className: "dndev-text-sm dndev-infinite-scroll-more-text", children: "Scroll down to load more..." })) })), !hasMore && items.length > 0 && (_jsx(Stack, { justify: "center", className: "dndev-infinite-scroll-end-container", children: endMessage || defaultEndMessage }))] }));
|
|
51
|
+
return (_jsxs("div", { className: cn('dndev-grid dndev-gap-md', className), children: [_jsx("div", { className: "dndev-infinite-scroll-grid", "data-cols": gridCols, style: gapStyle, children: items.map((item, index) => (_jsx("div", { className: itemClassName, children: renderItem(item, index) }, keyExtractor ? keyExtractor(item, index) : index))) }), hasMore && (_jsx(Stack, { ref: loadMoreRef, justify: "center", className: "dndev-py-md", children: loading || isLoading ? (loadingComponent || defaultLoadingComponent) : (_jsx("div", { className: "dndev-text-sm dndev-infinite-scroll-more-text", children: "Scroll down to load more..." })) })), !hasMore && items.length > 0 && (_jsx(Stack, { justify: "center", className: "dndev-infinite-scroll-end-container", children: endMessage || defaultEndMessage }))] }));
|
|
52
52
|
};
|
|
53
53
|
export default InfiniteScroll;
|
|
@@ -44,7 +44,7 @@ showNavigation = true, previousLabel = 'Previous', nextLabel = 'Next', itemsPerP
|
|
|
44
44
|
pageSizeOptions = [
|
|
45
45
|
{ value: '12', label: '12' },
|
|
46
46
|
{ value: '36', label: '36' },
|
|
47
|
-
{ value: '
|
|
47
|
+
{ value: 'all', label: String(total) },
|
|
48
48
|
];
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
@@ -10,7 +10,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
|
10
10
|
import type { ComponentProps } from 'react';
|
|
11
11
|
declare const Popover: import("react").FC<PopoverPrimitive.PopoverProps>;
|
|
12
12
|
declare const PopoverTrigger: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
13
|
-
declare const PopoverContent: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: ComponentProps<typeof PopoverPrimitive.Content> & {
|
|
13
|
+
declare const PopoverContent: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: ComponentProps<typeof PopoverPrimitive.Content> & {
|
|
14
14
|
onCloseAutoFocus?: (event: Event) => void;
|
|
15
15
|
onInteractOutside?: (event: Event) => void;
|
|
16
16
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/PopoverPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,OAAO,mDAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,oIAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc,GAAI,
|
|
1
|
+
{"version":3,"file":"PopoverPrimitive.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/PopoverPrimitive.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,OAAO,mDAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,oIAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc,GAAI,yGASrB,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG;IACnD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C,4CA2BA,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -12,8 +12,8 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
|
12
12
|
import { cn } from '../../utils/helpers';
|
|
13
13
|
const Popover = PopoverPrimitive.Root;
|
|
14
14
|
const PopoverTrigger = PopoverPrimitive.Trigger;
|
|
15
|
-
const PopoverContent = ({ className, align = 'start', side = 'bottom', sideOffset = 4, onCloseAutoFocus, onInteractOutside, ...props }) => {
|
|
16
|
-
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { align: align, side: side, sideOffset: sideOffset, onCloseAutoFocus: onCloseAutoFocus, onInteractOutside: onInteractOutside
|
|
15
|
+
const PopoverContent = ({ className, align = 'start', side = 'bottom', sideOffset = 4, collisionPadding = 8, onCloseAutoFocus, onInteractOutside, ...props }) => {
|
|
16
|
+
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { align: align, side: side, sideOffset: sideOffset, collisionPadding: collisionPadding, onCloseAutoFocus: onCloseAutoFocus, onInteractOutside: onInteractOutside
|
|
17
17
|
? (e) => {
|
|
18
18
|
const target = e.target;
|
|
19
19
|
const content = e.currentTarget;
|
|
@@ -4,7 +4,7 @@ import { type FloatingVariant } from '../../utils/constants';
|
|
|
4
4
|
*/
|
|
5
5
|
declare const PopoverRoot: import("react").FC<import("@radix-ui/react-popover").PopoverProps>;
|
|
6
6
|
declare const PopoverTriggerComponent: import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
7
|
-
declare const PopoverContentComponent: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
|
|
7
|
+
declare const PopoverContentComponent: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
|
|
8
8
|
onCloseAutoFocus?: (event: Event) => void;
|
|
9
9
|
onInteractOutside?: (event: Event) => void;
|
|
10
10
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -66,7 +66,7 @@ declare const Popover: {
|
|
|
66
66
|
({ trigger, children, open, onOpenChange, align, side, sideOffset, variant, className, modal, onInteractOutside, }: PopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
67
67
|
Root: import("react").FC<import("@radix-ui/react-popover").PopoverProps>;
|
|
68
68
|
Trigger: import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
69
|
-
Content: ({ className, align, side, sideOffset, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
|
|
69
|
+
Content: ({ className, align, side, sideOffset, collisionPadding, onCloseAutoFocus, onInteractOutside, ...props }: import("react").ComponentProps<import("react").ForwardRefExoticComponent<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>>> & {
|
|
70
70
|
onCloseAutoFocus?: (event: Event) => void;
|
|
71
71
|
onInteractOutside?: (event: Event) => void;
|
|
72
72
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/E;;GAEG;AACH,QAAA,MAAM,WAAW,oEAAmB,CAAC;AACrC,QAAA,MAAM,uBAAuB,qJAAiB,CAAC;AAC/C,QAAA,MAAM,uBAAuB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Popover/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/E;;GAEG;AACH,QAAA,MAAM,WAAW,oEAAmB,CAAC;AACrC,QAAA,MAAM,uBAAuB,qJAAiB,CAAC;AAC/C,QAAA,MAAM,uBAAuB;oBAKL,CAAC;qBAA6C,CAAC;6CALzB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAAmB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,OAAO;wHAYV,YAAY;;;;wBAzDS,CAAC;yBAA6C,CAAC;;CA2EtE,CAAC;wBAMwB,OAAO,OAAO,GAAG;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,uBAAuB,CAAC;IACxC,OAAO,EAAE,OAAO,uBAAuB,CAAC;CACzC;AAJD,wBAIE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ElementType, type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
-
import { type
|
|
2
|
+
import { type Tone } from '../../utils/constants';
|
|
3
|
+
import { type GridCols } from '../Grid';
|
|
3
4
|
import './Section.css';
|
|
4
5
|
/**
|
|
5
6
|
* Section-specific props
|
|
@@ -17,19 +18,21 @@ interface SectionOwnProps {
|
|
|
17
18
|
/** Show separator above section @default false */
|
|
18
19
|
separator?: boolean;
|
|
19
20
|
/** Tone system for visual rhythm */
|
|
20
|
-
tone?:
|
|
21
|
+
tone?: Tone;
|
|
21
22
|
/**
|
|
22
23
|
* Content alignment (text alignment)
|
|
23
24
|
* @default 'center'
|
|
24
25
|
*/
|
|
25
26
|
align?: 'start' | 'center' | 'end';
|
|
26
27
|
/**
|
|
27
|
-
* Grid columns - fixed or
|
|
28
|
+
* Grid columns - fixed, responsive, or custom template
|
|
28
29
|
* When provided, wraps children in Grid
|
|
29
|
-
* @example 3 - always 3 columns
|
|
30
|
-
* @example
|
|
30
|
+
* @example 3 - always 3 equal columns
|
|
31
|
+
* @example "1fr 3fr" - custom column template
|
|
32
|
+
* @example [1, 1, 2, 3] - responsive equal: 1 mobile/tablet, 2 laptop, 3 desktop
|
|
33
|
+
* @example ["1fr", "1fr", "1fr 3fr", "1fr 3fr"] - responsive template
|
|
31
34
|
*/
|
|
32
|
-
gridCols?:
|
|
35
|
+
gridCols?: GridCols;
|
|
33
36
|
/**
|
|
34
37
|
* Grid gap size
|
|
35
38
|
* @default 'medium'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Section/index.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Section/index.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAOxD,OAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,OAAO,eAAe,CAAC;AAEvB;;GAEG;AACH,UAAU,eAAe;IACvB;;;OAGG;IACH,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAEtD,sBAAsB;IACtB,QAAQ,EAAE,SAAS,CAAC;IAEpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAEnC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEhD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,IAAI,eAAe,GAC3E,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,eAAe,CAAC,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,OAAO,8HAmGZ,CAAC;AAIF,eAAe,OAAO,CAAC"}
|
|
@@ -35,6 +35,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
35
35
|
import { CirclePlus, CircleMinus } from 'lucide-react';
|
|
36
36
|
import { createElement, forwardRef, useState, } from 'react';
|
|
37
37
|
import { GAP_VARIANT } from '../../styles/componentConstants';
|
|
38
|
+
import { TONE } from '../../utils/constants';
|
|
38
39
|
import { cn } from '../../utils/helpers';
|
|
39
40
|
import { CollapsiblePrimitive, CollapsibleTrigger, CollapsibleContent, } from '../Collapsible/CollapsiblePrimitive';
|
|
40
41
|
import Grid, {} from '../Grid';
|
|
@@ -55,7 +56,7 @@ import './Section.css';
|
|
|
55
56
|
* </Section>
|
|
56
57
|
* ```
|
|
57
58
|
*/
|
|
58
|
-
const Section = forwardRef(function Section({ as = 'section', children, title, separator = false, tone =
|
|
59
|
+
const Section = forwardRef(function Section({ as = 'section', children, title, separator = false, tone = TONE.GHOST, align: textAlign = 'center', gridCols, gridGap, collapsible = false, open, onOpenChange, defaultOpen = false, className, ...props }, ref) {
|
|
59
60
|
const Component = as;
|
|
60
61
|
const [internalOpen, setInternalOpen] = useState(() => collapsible ? defaultOpen : false);
|
|
61
62
|
const isControlled = collapsible && open !== undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Select/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,eAAe,EAOhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,OAAO,eAAe,CAAC,EACtC,UAAU,CACX;IACC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,MAAM,GAAI,uHAYb,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Select/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACL,eAAe,EAOhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,OAAO,eAAe,CAAC,EACtC,UAAU,CACX;IACC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,MAAM,GAAI,uHAYb,WAAW,4CAuHb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
10
10
|
*/
|
|
11
11
|
import * as SelectRadix from '@radix-ui/react-select';
|
|
12
12
|
import { Check, ChevronDown } from 'lucide-react';
|
|
13
|
-
import {
|
|
13
|
+
import { useId } from 'react';
|
|
14
14
|
import { cn } from '../../utils/helpers';
|
|
15
15
|
import { FloatingLabel } from '../Label';
|
|
16
16
|
import ScrollArea from '../ScrollArea';
|
|
@@ -38,11 +38,10 @@ import './Select.css';
|
|
|
38
38
|
*/
|
|
39
39
|
const Select = ({ value, onValueChange, placeholder = 'Select an option...', options = [], trigger, disabled, isLoading, defaultValue, label, required, ...props }) => {
|
|
40
40
|
const id = useId();
|
|
41
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
42
41
|
const hasLabel = !!label;
|
|
43
42
|
const triggerElement = (_jsxs(SelectTriggerPrimitive, { id: id, className: "dndev-input dndev-select-trigger", disabled: disabled, "data-bare": hasLabel || undefined, children: [isLoading ? (_jsxs("div", { className: "dndev-select-loading-container", children: [_jsx("div", { className: "dndev-animate-spin dndev-select-loading-spinner" }), _jsx("span", { children: "Loading..." })] })) : (_jsx(SelectValuePrimitive, { placeholder: placeholder })), _jsx(SelectRadix.Icon, { asChild: true, children: _jsx(ChevronDown, {}) })] }));
|
|
44
43
|
const customTrigger = trigger ? (_jsx(SelectTriggerPrimitive, { asChild: true, disabled: disabled, className: "dndev-input dndev-select-trigger", children: trigger })) : hasLabel ? (_jsx(FloatingLabel, { htmlFor: id, label: label, disabled: disabled, required: required, children: triggerElement })) : (triggerElement);
|
|
45
|
-
return (_jsxs(SelectPrimitive, { value: value, onValueChange: onValueChange, defaultValue: defaultValue, disabled: disabled,
|
|
44
|
+
return (_jsxs(SelectPrimitive, { value: value, onValueChange: onValueChange, defaultValue: defaultValue, disabled: disabled, ...props, children: [customTrigger, _jsx(SelectRadix.Portal, { children: _jsx(SelectContentPrimitive, { className: "dndev-floating dndev-menu-content dndev-z-tooltip dndev-select-content", position: "popper", side: "bottom", sideOffset: 4, align: "start", "data-glow": "blank", children: _jsx(SelectRadix.Viewport, { children: _jsx(ScrollArea, { className: "dndev-menu-scroll-area", end: true, children: options.map((option) => {
|
|
46
45
|
if (option.value === '__label__') {
|
|
47
46
|
return (_jsx(SelectLabelPrimitive, { className: "dndev-menu-label", children: option.label }, option.label));
|
|
48
47
|
}
|
|
@@ -44,6 +44,10 @@ export interface StepperProps extends VariantProps<typeof stepperVariants> {
|
|
|
44
44
|
className?: string;
|
|
45
45
|
/** Callback when step changes */
|
|
46
46
|
onStepChange?: (stepIndex: number) => void;
|
|
47
|
+
/** Controlled active step (0-based). When set, Stepper is controlled. */
|
|
48
|
+
activeStep?: number;
|
|
49
|
+
/** Show primary Next / secondary Previous buttons below the card (default: false) */
|
|
50
|
+
showPrimaryNavigation?: boolean;
|
|
47
51
|
}
|
|
48
52
|
/**
|
|
49
53
|
* Reusable stepper component for step-by-step workflows.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Stepper/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,QAAA,MAAM,eAAe;;8EAgBnB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAE7E,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,eAAe,CAAC;IACxE,gCAAgC;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atomic/Stepper/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,QAAA,MAAM,eAAe;;8EAgBnB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAE7E,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,eAAe,CAAC;IACxE,gCAAgC;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,YAAY,CAyK/C,CAAC;AAEF,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,CAAC"}
|