@duckcodeailabs/dql-ui 0.10.0

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.
@@ -0,0 +1,7 @@
1
+ export { palette, space, radius, fontSize, fontWeight, lineHeight, font, z, darkTokens, lightTokens, themes, tokenToCssVar, themeToCssVars, cssVar, type ThemeTokens, type ThemeName, } from './tokens/index.js';
2
+ export { ThemeProvider, useTheme, type ThemeProviderProps } from './theme/ThemeProvider.js';
3
+ export { Tooltip, TooltipProvider, type TooltipProps } from './primitives/Tooltip.js';
4
+ export { Dialog, DialogClose, type DialogProps } from './primitives/Dialog.js';
5
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuGroup, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, type DropdownMenuContentProps, } from './primitives/DropdownMenu.js';
6
+ export { Popover, PopoverTrigger, PopoverAnchor, PopoverContent, PopoverClose, type PopoverContentProps, } from './primitives/Popover.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EACP,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,EACJ,CAAC,EACD,UAAU,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,cAAc,EACd,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG5F,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ // Public entry for @duckcodeailabs/dql-ui
2
+ // tokens
3
+ export { palette, space, radius, fontSize, fontWeight, lineHeight, font, z, darkTokens, lightTokens, themes, tokenToCssVar, themeToCssVars, cssVar, } from './tokens/index.js';
4
+ // theme
5
+ export { ThemeProvider, useTheme } from './theme/ThemeProvider.js';
6
+ // primitives
7
+ export { Tooltip, TooltipProvider } from './primitives/Tooltip.js';
8
+ export { Dialog, DialogClose } from './primitives/Dialog.js';
9
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuGroup, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, } from './primitives/DropdownMenu.js';
10
+ export { Popover, PopoverTrigger, PopoverAnchor, PopoverContent, PopoverClose, } from './primitives/Popover.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,SAAS;AACT,OAAO,EACL,OAAO,EACP,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,EACJ,CAAC,EACD,UAAU,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,cAAc,EACd,MAAM,GAGP,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA2B,MAAM,0BAA0B,CAAC;AAE5F,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,eAAe,EAAqB,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAElB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EACd,YAAY,GAEb,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Dialog — modal dialog primitive.
3
+ *
4
+ * Opinionated defaults: centered, max 560 px wide, token-styled overlay and
5
+ * chrome, escape + click-outside to close (Radix defaults). For wider
6
+ * layouts, pass `maxWidth`; for fullscreen takeovers use a distinct shell.
7
+ *
8
+ * <Dialog open={open} onOpenChange={setOpen} title="New block">
9
+ * <p>...form body...</p>
10
+ * </Dialog>
11
+ */
12
+ import * as React from 'react';
13
+ import * as RDialog from '@radix-ui/react-dialog';
14
+ export interface DialogProps {
15
+ open: boolean;
16
+ onOpenChange: (open: boolean) => void;
17
+ title?: React.ReactNode;
18
+ description?: React.ReactNode;
19
+ children: React.ReactNode;
20
+ /** Footer actions (buttons). Rendered right-aligned. */
21
+ footer?: React.ReactNode;
22
+ maxWidth?: number | string;
23
+ container?: HTMLElement;
24
+ }
25
+ export declare function Dialog({ open, onOpenChange, title, description, children, footer, maxWidth, container, }: DialogProps): React.ReactElement;
26
+ export declare const DialogClose: React.ForwardRefExoticComponent<RDialog.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
27
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/primitives/Dialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAGlD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wDAAwD;IACxD,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAc,EACd,SAAS,GACV,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAyElC;AAED,eAAO,MAAM,WAAW,oGAAgB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as RDialog from '@radix-ui/react-dialog';
3
+ import { cssVar, fontSize, fontWeight, radius, space, z } from '../tokens/index.js';
4
+ export function Dialog({ open, onOpenChange, title, description, children, footer, maxWidth = 560, container, }) {
5
+ return (_jsx(RDialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsxs(RDialog.Portal, { container: container, children: [_jsx(RDialog.Overlay, { style: {
6
+ position: 'fixed',
7
+ inset: 0,
8
+ background: cssVar('surfaceOverlay'),
9
+ zIndex: z.overlay,
10
+ } }), _jsxs(RDialog.Content, { style: {
11
+ position: 'fixed',
12
+ top: '50%',
13
+ left: '50%',
14
+ transform: 'translate(-50%, -50%)',
15
+ background: cssVar('surfaceRaised'),
16
+ color: cssVar('textPrimary'),
17
+ border: `1px solid ${cssVar('borderDefault')}`,
18
+ borderRadius: radius.lg,
19
+ boxShadow: cssVar('shadowLg'),
20
+ padding: space[6],
21
+ width: '92vw',
22
+ maxWidth,
23
+ maxHeight: '85vh',
24
+ overflow: 'auto',
25
+ zIndex: z.modal,
26
+ display: 'flex',
27
+ flexDirection: 'column',
28
+ gap: space[4],
29
+ }, children: [title && (_jsx(RDialog.Title, { style: {
30
+ margin: 0,
31
+ fontSize: fontSize.lg,
32
+ fontWeight: fontWeight.semibold,
33
+ }, children: title })), description && (_jsx(RDialog.Description, { style: {
34
+ margin: 0,
35
+ fontSize: fontSize.sm,
36
+ color: cssVar('textSecondary'),
37
+ }, children: description })), _jsx("div", { children: children }), footer && (_jsx("div", { style: {
38
+ display: 'flex',
39
+ justifyContent: 'flex-end',
40
+ gap: space[2],
41
+ marginTop: space[2],
42
+ }, children: footer }))] })] }) }));
43
+ }
44
+ export const DialogClose = RDialog.Close;
45
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../src/primitives/Dialog.tsx"],"names":[],"mappings":";AAYA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAcpF,MAAM,UAAU,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,GAAG,EACd,SAAS,GACG;IACZ,OAAO,CACL,KAAC,OAAO,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YAClD,MAAC,OAAO,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,aAClC,KAAC,OAAO,CAAC,OAAO,IACd,KAAK,EAAE;wBACL,QAAQ,EAAE,OAAO;wBACjB,KAAK,EAAE,CAAC;wBACR,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC;wBACpC,MAAM,EAAE,CAAC,CAAC,OAAO;qBAClB,GACD,EACF,MAAC,OAAO,CAAC,OAAO,IACd,KAAK,EAAE;wBACL,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE,KAAK;wBACX,SAAS,EAAE,uBAAuB;wBAClC,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC;wBACnC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;wBAC5B,MAAM,EAAE,aAAa,MAAM,CAAC,eAAe,CAAC,EAAE;wBAC9C,YAAY,EAAE,MAAM,CAAC,EAAE;wBACvB,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;wBAC7B,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;wBACjB,KAAK,EAAE,MAAM;wBACb,QAAQ;wBACR,SAAS,EAAE,MAAM;wBACjB,QAAQ,EAAE,MAAM;wBAChB,MAAM,EAAE,CAAC,CAAC,KAAK;wBACf,OAAO,EAAE,MAAM;wBACf,aAAa,EAAE,QAAQ;wBACvB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;qBACd,aAEA,KAAK,IAAI,CACR,KAAC,OAAO,CAAC,KAAK,IACZ,KAAK,EAAE;gCACL,MAAM,EAAE,CAAC;gCACT,QAAQ,EAAE,QAAQ,CAAC,EAAE;gCACrB,UAAU,EAAE,UAAU,CAAC,QAAQ;6BAChC,YAEA,KAAK,GACQ,CACjB,EACA,WAAW,IAAI,CACd,KAAC,OAAO,CAAC,WAAW,IAClB,KAAK,EAAE;gCACL,MAAM,EAAE,CAAC;gCACT,QAAQ,EAAE,QAAQ,CAAC,EAAE;gCACrB,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC;6BAC/B,YAEA,WAAW,GACQ,CACvB,EACD,wBAAM,QAAQ,GAAO,EACpB,MAAM,IAAI,CACT,cACE,KAAK,EAAE;gCACL,OAAO,EAAE,MAAM;gCACf,cAAc,EAAE,UAAU;gCAC1B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gCACb,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;6BACpB,YAEA,MAAM,GACH,CACP,IACe,IACH,GACJ,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DropdownMenu — action menu triggered by a button/icon.
3
+ *
4
+ * Thin wrapper over Radix with token styling. Exposes the composition pieces
5
+ * so call sites can build arbitrary menu structures:
6
+ *
7
+ * <DropdownMenu>
8
+ * <DropdownMenuTrigger asChild><button>Actions</button></DropdownMenuTrigger>
9
+ * <DropdownMenuContent>
10
+ * <DropdownMenuItem onSelect={...}>Run</DropdownMenuItem>
11
+ * <DropdownMenuSeparator />
12
+ * <DropdownMenuItem>Duplicate</DropdownMenuItem>
13
+ * </DropdownMenuContent>
14
+ * </DropdownMenu>
15
+ */
16
+ import * as React from 'react';
17
+ import * as RMenu from '@radix-ui/react-dropdown-menu';
18
+ export declare const DropdownMenu: React.FC<RMenu.DropdownMenuProps>;
19
+ export declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<RMenu.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
20
+ export declare const DropdownMenuGroup: React.ForwardRefExoticComponent<RMenu.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
21
+ export interface DropdownMenuContentProps extends React.ComponentPropsWithoutRef<typeof RMenu.Content> {
22
+ container?: HTMLElement;
23
+ }
24
+ export declare const DropdownMenuContent: React.ForwardRefExoticComponent<DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>>;
25
+ export declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<RMenu.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
26
+ export declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<RMenu.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
27
+ export declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<RMenu.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
28
+ //# sourceMappingURL=DropdownMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../src/primitives/DropdownMenu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAGvD,eAAO,MAAM,YAAY,mCAAa,CAAC;AACvC,eAAO,MAAM,mBAAmB,0GAAgB,CAAC;AACjD,eAAO,MAAM,iBAAiB,qGAAc,CAAC;AAE7C,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC;IAC5D,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,iGAsB9B,CAAC;AAGH,eAAO,MAAM,gBAAgB,uJAoB3B,CAAC;AAGH,eAAO,MAAM,qBAAqB,4JAchC,CAAC;AAGH,eAAO,MAAM,iBAAiB,wJAgB5B,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * DropdownMenu — action menu triggered by a button/icon.
4
+ *
5
+ * Thin wrapper over Radix with token styling. Exposes the composition pieces
6
+ * so call sites can build arbitrary menu structures:
7
+ *
8
+ * <DropdownMenu>
9
+ * <DropdownMenuTrigger asChild><button>Actions</button></DropdownMenuTrigger>
10
+ * <DropdownMenuContent>
11
+ * <DropdownMenuItem onSelect={...}>Run</DropdownMenuItem>
12
+ * <DropdownMenuSeparator />
13
+ * <DropdownMenuItem>Duplicate</DropdownMenuItem>
14
+ * </DropdownMenuContent>
15
+ * </DropdownMenu>
16
+ */
17
+ import * as React from 'react';
18
+ import * as RMenu from '@radix-ui/react-dropdown-menu';
19
+ import { cssVar, fontSize, radius, space, z } from '../tokens/index.js';
20
+ export const DropdownMenu = RMenu.Root;
21
+ export const DropdownMenuTrigger = RMenu.Trigger;
22
+ export const DropdownMenuGroup = RMenu.Group;
23
+ export const DropdownMenuContent = React.forwardRef(({ container, style, sideOffset = 4, ...rest }, ref) => (_jsx(RMenu.Portal, { container: container, children: _jsx(RMenu.Content, { ref: ref, sideOffset: sideOffset, style: {
24
+ minWidth: 180,
25
+ background: cssVar('surfaceElevated'),
26
+ color: cssVar('textPrimary'),
27
+ border: `1px solid ${cssVar('borderDefault')}`,
28
+ borderRadius: radius.md,
29
+ boxShadow: cssVar('shadowMd'),
30
+ padding: space[1],
31
+ zIndex: z.popover,
32
+ ...style,
33
+ }, ...rest }) })));
34
+ DropdownMenuContent.displayName = 'DropdownMenuContent';
35
+ export const DropdownMenuItem = React.forwardRef(({ style, ...rest }, ref) => (_jsx(RMenu.Item, { ref: ref, style: {
36
+ display: 'flex',
37
+ alignItems: 'center',
38
+ gap: space[2],
39
+ padding: `${space[1]} ${space[2]}`,
40
+ fontSize: fontSize.sm,
41
+ borderRadius: radius.sm,
42
+ cursor: 'default',
43
+ outline: 'none',
44
+ userSelect: 'none',
45
+ ...style,
46
+ }, ...rest })));
47
+ DropdownMenuItem.displayName = 'DropdownMenuItem';
48
+ export const DropdownMenuSeparator = React.forwardRef(({ style, ...rest }, ref) => (_jsx(RMenu.Separator, { ref: ref, style: {
49
+ height: 1,
50
+ background: cssVar('borderSubtle'),
51
+ margin: `${space[1]} 0`,
52
+ ...style,
53
+ }, ...rest })));
54
+ DropdownMenuSeparator.displayName = 'DropdownMenuSeparator';
55
+ export const DropdownMenuLabel = React.forwardRef(({ style, ...rest }, ref) => (_jsx(RMenu.Label, { ref: ref, style: {
56
+ padding: `${space[1]} ${space[2]}`,
57
+ fontSize: fontSize.xs,
58
+ color: cssVar('textMuted'),
59
+ textTransform: 'uppercase',
60
+ letterSpacing: '0.04em',
61
+ ...style,
62
+ }, ...rest })));
63
+ DropdownMenuLabel.displayName = 'DropdownMenuLabel';
64
+ //# sourceMappingURL=DropdownMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../src/primitives/DropdownMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Popover — inline panel anchored to a trigger. Unlike Dialog, does not
3
+ * block the page and does not own focus aggressively. Used for hover cards,
4
+ * contextual inspectors, and quick-edit panels.
5
+ *
6
+ * <Popover>
7
+ * <PopoverTrigger asChild><button>Details</button></PopoverTrigger>
8
+ * <PopoverContent>...</PopoverContent>
9
+ * </Popover>
10
+ */
11
+ import * as React from 'react';
12
+ import * as RPopover from '@radix-ui/react-popover';
13
+ export declare const Popover: React.FC<RPopover.PopoverProps>;
14
+ export declare const PopoverTrigger: React.ForwardRefExoticComponent<RPopover.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
15
+ export declare const PopoverAnchor: React.ForwardRefExoticComponent<RPopover.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
16
+ export declare const PopoverClose: React.ForwardRefExoticComponent<RPopover.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
17
+ export interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof RPopover.Content> {
18
+ container?: HTMLElement;
19
+ }
20
+ export declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
21
+ //# sourceMappingURL=Popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGpD,eAAO,MAAM,OAAO,iCAAgB,CAAC;AACrC,eAAO,MAAM,cAAc,wGAAmB,CAAC;AAC/C,eAAO,MAAM,aAAa,oGAAkB,CAAC;AAC7C,eAAO,MAAM,YAAY,sGAAiB,CAAC;AAE3C,MAAM,WAAW,mBACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC/D,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,4FAsBzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Popover — inline panel anchored to a trigger. Unlike Dialog, does not
4
+ * block the page and does not own focus aggressively. Used for hover cards,
5
+ * contextual inspectors, and quick-edit panels.
6
+ *
7
+ * <Popover>
8
+ * <PopoverTrigger asChild><button>Details</button></PopoverTrigger>
9
+ * <PopoverContent>...</PopoverContent>
10
+ * </Popover>
11
+ */
12
+ import * as React from 'react';
13
+ import * as RPopover from '@radix-ui/react-popover';
14
+ import { cssVar, radius, space, z } from '../tokens/index.js';
15
+ export const Popover = RPopover.Root;
16
+ export const PopoverTrigger = RPopover.Trigger;
17
+ export const PopoverAnchor = RPopover.Anchor;
18
+ export const PopoverClose = RPopover.Close;
19
+ export const PopoverContent = React.forwardRef(({ container, style, sideOffset = 6, ...rest }, ref) => (_jsx(RPopover.Portal, { container: container, children: _jsx(RPopover.Content, { ref: ref, sideOffset: sideOffset, style: {
20
+ background: cssVar('surfaceElevated'),
21
+ color: cssVar('textPrimary'),
22
+ border: `1px solid ${cssVar('borderDefault')}`,
23
+ borderRadius: radius.md,
24
+ boxShadow: cssVar('shadowMd'),
25
+ padding: space[3],
26
+ zIndex: z.popover,
27
+ minWidth: 220,
28
+ ...style,
29
+ }, ...rest }) })));
30
+ PopoverContent.displayName = 'PopoverContent';
31
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAO3C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAG5C,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACxD,KAAC,QAAQ,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACnC,KAAC,QAAQ,CAAC,OAAO,IACf,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE;YACL,UAAU,EAAE,MAAM,CAAC,iBAAiB,CAAC;YACrC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;YAC5B,MAAM,EAAE,aAAa,MAAM,CAAC,eAAe,CAAC,EAAE;YAC9C,YAAY,EAAE,MAAM,CAAC,EAAE;YACvB,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;YAC7B,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,QAAQ,EAAE,GAAG;YACb,GAAG,KAAK;SACT,KACG,IAAI,GACR,GACc,CACnB,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Tooltip — Radix wrapper with DQL token styling.
3
+ *
4
+ * Replaces native `title=` usage: faster show delay, proper positioning, and
5
+ * keyboard/screen-reader behavior via Radix. Default delay matches hex.tech
6
+ * (200 ms) — fast enough to feel reactive, slow enough not to spam.
7
+ *
8
+ * <Tooltip content="Files">
9
+ * <button>...</button>
10
+ * </Tooltip>
11
+ *
12
+ * Wrap your app (once) in `<TooltipProvider>` — or rely on the default
13
+ * provider this exports for single-use.
14
+ */
15
+ import * as React from 'react';
16
+ import * as RTooltip from '@radix-ui/react-tooltip';
17
+ export interface TooltipProps {
18
+ content: React.ReactNode;
19
+ children: React.ReactElement;
20
+ side?: 'top' | 'right' | 'bottom' | 'left';
21
+ align?: 'start' | 'center' | 'end';
22
+ sideOffset?: number;
23
+ /** Hover delay in ms. Default 200. */
24
+ delayMs?: number;
25
+ /** Render into a specific container (defaults to document.body). */
26
+ container?: HTMLElement;
27
+ }
28
+ export declare function Tooltip({ content, children, side, align, sideOffset, delayMs, container, }: TooltipProps): React.ReactElement;
29
+ /** App-level tooltip provider. Wrap the app root once. */
30
+ export declare const TooltipProvider: React.FC<RTooltip.TooltipProviderProps>;
31
+ //# sourceMappingURL=Tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/primitives/Tooltip.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGpD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,IAAc,EACd,KAAgB,EAChB,UAAc,EACd,OAAa,EACb,SAAS,GACV,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CA0BnC;AAED,0DAA0D;AAC1D,eAAO,MAAM,eAAe,yCAAoB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as RTooltip from '@radix-ui/react-tooltip';
3
+ import { cssVar, fontSize, radius, space, z } from '../tokens/index.js';
4
+ export function Tooltip({ content, children, side = 'right', align = 'center', sideOffset = 6, delayMs = 200, container, }) {
5
+ return (_jsxs(RTooltip.Root, { delayDuration: delayMs, children: [_jsx(RTooltip.Trigger, { asChild: true, children: children }), _jsx(RTooltip.Portal, { container: container, children: _jsx(RTooltip.Content, { side: side, align: align, sideOffset: sideOffset, style: {
6
+ background: cssVar('surfaceElevated'),
7
+ color: cssVar('textPrimary'),
8
+ border: `1px solid ${cssVar('borderDefault')}`,
9
+ borderRadius: radius.sm,
10
+ padding: `${space[1]} ${space[2]}`,
11
+ fontSize: fontSize.sm,
12
+ boxShadow: cssVar('shadowMd'),
13
+ zIndex: z.tooltip,
14
+ userSelect: 'none',
15
+ }, children: content }) })] }));
16
+ }
17
+ /** App-level tooltip provider. Wrap the app root once. */
18
+ export const TooltipProvider = RTooltip.Provider;
19
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/primitives/Tooltip.tsx"],"names":[],"mappings":";AAeA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAcxE,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,OAAO,EACd,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,GAAG,EACb,SAAS,GACI;IACb,OAAO,CACL,MAAC,QAAQ,CAAC,IAAI,IAAC,aAAa,EAAE,OAAO,aACnC,KAAC,QAAQ,CAAC,OAAO,IAAC,OAAO,kBAAE,QAAQ,GAAoB,EACvD,KAAC,QAAQ,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACnC,KAAC,QAAQ,CAAC,OAAO,IACf,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE;wBACL,UAAU,EAAE,MAAM,CAAC,iBAAiB,CAAC;wBACrC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;wBAC5B,MAAM,EAAE,aAAa,MAAM,CAAC,eAAe,CAAC,EAAE;wBAC9C,YAAY,EAAE,MAAM,CAAC,EAAE;wBACvB,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;wBAClC,QAAQ,EAAE,QAAQ,CAAC,EAAE;wBACrB,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;wBAC7B,MAAM,EAAE,CAAC,CAAC,OAAO;wBACjB,UAAU,EAAE,MAAM;qBACnB,YAEA,OAAO,GACS,GACH,IACJ,CACjB,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ThemeProvider — applies the active DQL theme to its subtree by writing CSS
3
+ * custom properties onto a wrapper element.
4
+ *
5
+ * Usage
6
+ *
7
+ * <ThemeProvider theme="dark">
8
+ * <App />
9
+ * </ThemeProvider>
10
+ *
11
+ * The wrapper sets `data-theme="dark"` so tooling, Radix portals, and plain
12
+ * CSS rules can target it. Components in the subtree read tokens via
13
+ * `cssVar('surfaceBase')` — no context subscription needed, so theme
14
+ * changes don't trigger re-renders.
15
+ */
16
+ import * as React from 'react';
17
+ import { type ThemeName, type ThemeTokens } from '../tokens/index.js';
18
+ interface ThemeContextValue {
19
+ theme: ThemeName;
20
+ tokens: ThemeTokens;
21
+ setTheme: (t: ThemeName) => void;
22
+ }
23
+ export interface ThemeProviderProps {
24
+ /** Controlled theme name. If omitted, provider manages its own state starting at `defaultTheme`. */
25
+ theme?: ThemeName;
26
+ /** Initial theme when uncontrolled. Default: 'dark'. */
27
+ defaultTheme?: ThemeName;
28
+ /** Called when theme changes (for persistence). */
29
+ onThemeChange?: (theme: ThemeName) => void;
30
+ /** Apply tokens at :root instead of a wrapper div. Useful for full-app theming. */
31
+ applyGlobal?: boolean;
32
+ children: React.ReactNode;
33
+ }
34
+ export declare function ThemeProvider({ theme: controlled, defaultTheme, onThemeChange, applyGlobal, children, }: ThemeProviderProps): React.ReactElement;
35
+ /** Access the active theme. Only needed for toggling; styles should use `cssVar()` directly. */
36
+ export declare function useTheme(): ThemeContextValue;
37
+ export {};
38
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA0B,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9F,UAAU,iBAAiB;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CAClC;AAID,MAAM,WAAW,kBAAkB;IACjC,oGAAoG;IACpG,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wDAAwD;IACxD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,mDAAmD;IACnD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3C,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EAAE,UAAU,EACjB,YAAqB,EACrB,aAAa,EACb,WAAmB,EACnB,QAAQ,GACT,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAyCzC;AAED,gGAAgG;AAChG,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * ThemeProvider — applies the active DQL theme to its subtree by writing CSS
4
+ * custom properties onto a wrapper element.
5
+ *
6
+ * Usage
7
+ *
8
+ * <ThemeProvider theme="dark">
9
+ * <App />
10
+ * </ThemeProvider>
11
+ *
12
+ * The wrapper sets `data-theme="dark"` so tooling, Radix portals, and plain
13
+ * CSS rules can target it. Components in the subtree read tokens via
14
+ * `cssVar('surfaceBase')` — no context subscription needed, so theme
15
+ * changes don't trigger re-renders.
16
+ */
17
+ import * as React from 'react';
18
+ import { themes, themeToCssVars } from '../tokens/index.js';
19
+ const ThemeContext = React.createContext(null);
20
+ export function ThemeProvider({ theme: controlled, defaultTheme = 'dark', onThemeChange, applyGlobal = false, children, }) {
21
+ const [internal, setInternal] = React.useState(defaultTheme);
22
+ const active = controlled ?? internal;
23
+ const tokens = themes[active];
24
+ const setTheme = React.useCallback((t) => {
25
+ if (controlled === undefined)
26
+ setInternal(t);
27
+ onThemeChange?.(t);
28
+ }, [controlled, onThemeChange]);
29
+ // Apply to :root when requested — Radix portals escape our wrapper, so
30
+ // global mode ensures popovers/dialogs pick up the same tokens.
31
+ React.useEffect(() => {
32
+ if (!applyGlobal)
33
+ return;
34
+ const vars = themeToCssVars(tokens);
35
+ const root = document.documentElement;
36
+ for (const [k, v] of Object.entries(vars))
37
+ root.style.setProperty(k, v);
38
+ root.setAttribute('data-theme', active);
39
+ return () => {
40
+ for (const k of Object.keys(vars))
41
+ root.style.removeProperty(k);
42
+ root.removeAttribute('data-theme');
43
+ };
44
+ }, [applyGlobal, active, tokens]);
45
+ const value = React.useMemo(() => ({ theme: active, tokens, setTheme }), [active, tokens, setTheme]);
46
+ const inlineStyle = applyGlobal ? undefined : themeToCssVars(tokens);
47
+ return (_jsx(ThemeContext.Provider, { value: value, children: _jsx("div", { "data-theme": active, style: inlineStyle, children: children }) }));
48
+ }
49
+ /** Access the active theme. Only needed for toggling; styles should use `cssVar()` directly. */
50
+ export function useTheme() {
51
+ const ctx = React.useContext(ThemeContext);
52
+ if (!ctx) {
53
+ throw new Error('useTheme must be used inside a <ThemeProvider>');
54
+ }
55
+ return ctx;
56
+ }
57
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAoC,MAAM,oBAAoB,CAAC;AAQ9F,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAA2B,IAAI,CAAC,CAAC;AAczE,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EAAE,UAAU,EACjB,YAAY,GAAG,MAAM,EACrB,aAAa,EACb,WAAW,GAAG,KAAK,EACnB,QAAQ,GACW;IACnB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAY,YAAY,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,UAAU,IAAI,QAAQ,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAChC,CAAC,CAAY,EAAE,EAAE;QACf,IAAI,UAAU,KAAK,SAAS;YAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7C,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,UAAU,EAAE,aAAa,CAAC,CAC5B,CAAC;IAEF,uEAAuE;IACvE,gEAAgE;IAChE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAC3B,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,cAAc,CAAC,MAAM,CAAyB,CAAC;IAE9F,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACjC,4BAAiB,MAAM,EAAE,KAAK,EAAE,WAAW,YACxC,QAAQ,GACL,GACgB,CACzB,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,QAAQ;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Design tokens — the single source of visual truth for the DQL UI.
3
+ *
4
+ * Philosophy
5
+ * - Tokens are abstract (role-based: `surface-raised`, not `gray-700`). A
6
+ * component asks for `surface-raised` and gets whatever the active theme
7
+ * decides it should be. This is what lets a theme pass change a color
8
+ * once and have it propagate everywhere.
9
+ * - Dark first. Light is a mirror, not an afterthought.
10
+ * - Emitted as CSS custom properties by ThemeProvider so DOM nodes inherit
11
+ * them without React re-rendering on theme change.
12
+ *
13
+ * Scales
14
+ * - `space`: 4-pt grid (0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64)
15
+ * - `radius`: sharp → pill (0, 2, 4, 6, 8, 12, 999)
16
+ * - `fontSize`: 11–24 px modular scale
17
+ * - `shadow`: 3 elevation stops; dark theme uses deeper alpha, light uses softer
18
+ * - `z`: named layers so stacking doesn't turn into a lottery
19
+ */
20
+ export declare const palette: {
21
+ readonly gray0: "#ffffff";
22
+ readonly gray50: "#f6f8fa";
23
+ readonly gray100: "#eaeef2";
24
+ readonly gray200: "#d0d7de";
25
+ readonly gray300: "#afb8c1";
26
+ readonly gray400: "#8c959f";
27
+ readonly gray500: "#6e7781";
28
+ readonly gray600: "#57606a";
29
+ readonly gray700: "#424a53";
30
+ readonly gray800: "#32383f";
31
+ readonly gray900: "#24292f";
32
+ readonly gray950: "#1c2128";
33
+ readonly gray975: "#161b22";
34
+ readonly gray1000: "#0d1117";
35
+ readonly blue300: "#79c0ff";
36
+ readonly blue400: "#58a6ff";
37
+ readonly blue500: "#388bfd";
38
+ readonly blue600: "#0969da";
39
+ readonly blue700: "#0550ae";
40
+ readonly green500: "#56d364";
41
+ readonly green600: "#1f883d";
42
+ readonly red500: "#f85149";
43
+ readonly red600: "#cf222e";
44
+ readonly yellow500: "#e3b341";
45
+ readonly yellow600: "#9a6700";
46
+ };
47
+ export declare const space: {
48
+ readonly 0: "0";
49
+ readonly 1: "4px";
50
+ readonly 2: "8px";
51
+ readonly 3: "12px";
52
+ readonly 4: "16px";
53
+ readonly 5: "20px";
54
+ readonly 6: "24px";
55
+ readonly 7: "32px";
56
+ readonly 8: "40px";
57
+ readonly 9: "48px";
58
+ readonly 10: "64px";
59
+ };
60
+ export declare const radius: {
61
+ readonly none: "0";
62
+ readonly xs: "2px";
63
+ readonly sm: "4px";
64
+ readonly md: "6px";
65
+ readonly lg: "8px";
66
+ readonly xl: "12px";
67
+ readonly pill: "999px";
68
+ };
69
+ export declare const fontSize: {
70
+ readonly xs: "11px";
71
+ readonly sm: "12px";
72
+ readonly base: "13px";
73
+ readonly md: "14px";
74
+ readonly lg: "16px";
75
+ readonly xl: "18px";
76
+ readonly '2xl': "20px";
77
+ readonly '3xl': "24px";
78
+ };
79
+ export declare const fontWeight: {
80
+ readonly regular: "400";
81
+ readonly medium: "500";
82
+ readonly semibold: "600";
83
+ readonly bold: "700";
84
+ };
85
+ export declare const lineHeight: {
86
+ readonly tight: "1.2";
87
+ readonly snug: "1.35";
88
+ readonly normal: "1.5";
89
+ readonly relaxed: "1.65";
90
+ };
91
+ export declare const font: {
92
+ readonly sans: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif";
93
+ readonly mono: "'JetBrains Mono', 'Fira Code', Consolas, monospace";
94
+ readonly serif: "Georgia, 'Times New Roman', serif";
95
+ };
96
+ export declare const z: {
97
+ readonly base: 0;
98
+ readonly dropdown: 100;
99
+ readonly sticky: 200;
100
+ readonly overlay: 1000;
101
+ readonly modal: 1100;
102
+ readonly popover: 1200;
103
+ readonly tooltip: 1300;
104
+ readonly toast: 1400;
105
+ };
106
+ export interface ThemeTokens {
107
+ surfaceBase: string;
108
+ surfaceRaised: string;
109
+ surfaceElevated: string;
110
+ surfaceOverlay: string;
111
+ surfaceHover: string;
112
+ surfaceActive: string;
113
+ surfaceSunken: string;
114
+ borderSubtle: string;
115
+ borderDefault: string;
116
+ borderStrong: string;
117
+ borderFocus: string;
118
+ textPrimary: string;
119
+ textSecondary: string;
120
+ textMuted: string;
121
+ textDisabled: string;
122
+ textInverse: string;
123
+ accent: string;
124
+ accentHover: string;
125
+ accentMuted: string;
126
+ accentContrast: string;
127
+ success: string;
128
+ warning: string;
129
+ danger: string;
130
+ info: string;
131
+ shadowSm: string;
132
+ shadowMd: string;
133
+ shadowLg: string;
134
+ }
135
+ export declare const darkTokens: ThemeTokens;
136
+ export declare const lightTokens: ThemeTokens;
137
+ export declare const themes: {
138
+ readonly dark: ThemeTokens;
139
+ readonly light: ThemeTokens;
140
+ };
141
+ export type ThemeName = keyof typeof themes;
142
+ /** camelCase token key → CSS custom property name (`--dql-surface-base`) */
143
+ export declare function tokenToCssVar(key: string): string;
144
+ /** Emit a { [cssVar]: value } map for a given theme. Used by ThemeProvider. */
145
+ export declare function themeToCssVars(theme: ThemeTokens): Record<string, string>;
146
+ /** `cssVar('surfaceBase')` → `'var(--dql-surface-base)'` — use in style props */
147
+ export declare function cssVar(key: keyof ThemeTokens): string;
148
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BV,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;;;;;;CAYR,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,eAAO,MAAM,IAAI;;;;CAIP,CAAC;AAEX,eAAO,MAAM,CAAC;;;;;;;;;CASJ,CAAC;AAGX,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IAGtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAGpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IAGb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,EAAE,WAiCxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,WAiCzB,CAAC;AAEF,eAAO,MAAM,MAAM;;;CAAoD,CAAC;AACxE,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAE5C,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzE;AAED,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,WAAW,GAAG,MAAM,CAErD"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Design tokens — the single source of visual truth for the DQL UI.
3
+ *
4
+ * Philosophy
5
+ * - Tokens are abstract (role-based: `surface-raised`, not `gray-700`). A
6
+ * component asks for `surface-raised` and gets whatever the active theme
7
+ * decides it should be. This is what lets a theme pass change a color
8
+ * once and have it propagate everywhere.
9
+ * - Dark first. Light is a mirror, not an afterthought.
10
+ * - Emitted as CSS custom properties by ThemeProvider so DOM nodes inherit
11
+ * them without React re-rendering on theme change.
12
+ *
13
+ * Scales
14
+ * - `space`: 4-pt grid (0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64)
15
+ * - `radius`: sharp → pill (0, 2, 4, 6, 8, 12, 999)
16
+ * - `fontSize`: 11–24 px modular scale
17
+ * - `shadow`: 3 elevation stops; dark theme uses deeper alpha, light uses softer
18
+ * - `z`: named layers so stacking doesn't turn into a lottery
19
+ */
20
+ // --- primitives (do not consume these directly in components) ---
21
+ export const palette = {
22
+ // neutrals — used as backgrounds and borders per theme
23
+ gray0: '#ffffff',
24
+ gray50: '#f6f8fa',
25
+ gray100: '#eaeef2',
26
+ gray200: '#d0d7de',
27
+ gray300: '#afb8c1',
28
+ gray400: '#8c959f',
29
+ gray500: '#6e7781',
30
+ gray600: '#57606a',
31
+ gray700: '#424a53',
32
+ gray800: '#32383f',
33
+ gray900: '#24292f',
34
+ gray950: '#1c2128',
35
+ gray975: '#161b22',
36
+ gray1000: '#0d1117',
37
+ // accents — primary brand blue
38
+ blue300: '#79c0ff',
39
+ blue400: '#58a6ff',
40
+ blue500: '#388bfd',
41
+ blue600: '#0969da',
42
+ blue700: '#0550ae',
43
+ // semantic
44
+ green500: '#56d364',
45
+ green600: '#1f883d',
46
+ red500: '#f85149',
47
+ red600: '#cf222e',
48
+ yellow500: '#e3b341',
49
+ yellow600: '#9a6700',
50
+ };
51
+ // --- scales (theme-independent) ---
52
+ export const space = {
53
+ 0: '0',
54
+ 1: '4px',
55
+ 2: '8px',
56
+ 3: '12px',
57
+ 4: '16px',
58
+ 5: '20px',
59
+ 6: '24px',
60
+ 7: '32px',
61
+ 8: '40px',
62
+ 9: '48px',
63
+ 10: '64px',
64
+ };
65
+ export const radius = {
66
+ none: '0',
67
+ xs: '2px',
68
+ sm: '4px',
69
+ md: '6px',
70
+ lg: '8px',
71
+ xl: '12px',
72
+ pill: '999px',
73
+ };
74
+ export const fontSize = {
75
+ xs: '11px',
76
+ sm: '12px',
77
+ base: '13px',
78
+ md: '14px',
79
+ lg: '16px',
80
+ xl: '18px',
81
+ '2xl': '20px',
82
+ '3xl': '24px',
83
+ };
84
+ export const fontWeight = {
85
+ regular: '400',
86
+ medium: '500',
87
+ semibold: '600',
88
+ bold: '700',
89
+ };
90
+ export const lineHeight = {
91
+ tight: '1.2',
92
+ snug: '1.35',
93
+ normal: '1.5',
94
+ relaxed: '1.65',
95
+ };
96
+ export const font = {
97
+ sans: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
98
+ mono: "'JetBrains Mono', 'Fira Code', Consolas, monospace",
99
+ serif: "Georgia, 'Times New Roman', serif",
100
+ };
101
+ export const z = {
102
+ base: 0,
103
+ dropdown: 100,
104
+ sticky: 200,
105
+ overlay: 1000,
106
+ modal: 1100,
107
+ popover: 1200,
108
+ tooltip: 1300,
109
+ toast: 1400,
110
+ };
111
+ export const darkTokens = {
112
+ surfaceBase: palette.gray1000,
113
+ surfaceRaised: palette.gray975,
114
+ surfaceElevated: palette.gray950,
115
+ surfaceOverlay: 'rgba(0,0,0,0.7)',
116
+ surfaceHover: palette.gray900,
117
+ surfaceActive: '#1f2d3d',
118
+ surfaceSunken: palette.gray1000,
119
+ borderSubtle: '#21262d',
120
+ borderDefault: '#30363d',
121
+ borderStrong: '#484f58',
122
+ borderFocus: palette.blue500,
123
+ textPrimary: '#e6edf3',
124
+ textSecondary: '#8b949e',
125
+ textMuted: '#484f58',
126
+ textDisabled: '#32383f',
127
+ textInverse: palette.gray1000,
128
+ accent: palette.blue500,
129
+ accentHover: palette.blue400,
130
+ accentMuted: 'rgba(56,139,253,0.15)',
131
+ accentContrast: '#ffffff',
132
+ success: palette.green500,
133
+ warning: palette.yellow500,
134
+ danger: palette.red500,
135
+ info: palette.blue400,
136
+ shadowSm: '0 1px 2px rgba(0,0,0,0.4)',
137
+ shadowMd: '0 4px 10px rgba(0,0,0,0.45)',
138
+ shadowLg: '0 12px 28px rgba(0,0,0,0.55)',
139
+ };
140
+ export const lightTokens = {
141
+ surfaceBase: palette.gray0,
142
+ surfaceRaised: palette.gray50,
143
+ surfaceElevated: palette.gray0,
144
+ surfaceOverlay: 'rgba(0,0,0,0.4)',
145
+ surfaceHover: palette.gray100,
146
+ surfaceActive: '#dbeafe',
147
+ surfaceSunken: palette.gray50,
148
+ borderSubtle: palette.gray100,
149
+ borderDefault: palette.gray200,
150
+ borderStrong: palette.gray300,
151
+ borderFocus: palette.blue600,
152
+ textPrimary: '#1f2328',
153
+ textSecondary: palette.gray600,
154
+ textMuted: palette.gray400,
155
+ textDisabled: palette.gray300,
156
+ textInverse: palette.gray0,
157
+ accent: palette.blue600,
158
+ accentHover: palette.blue700,
159
+ accentMuted: 'rgba(9,105,218,0.12)',
160
+ accentContrast: '#ffffff',
161
+ success: palette.green600,
162
+ warning: palette.yellow600,
163
+ danger: palette.red600,
164
+ info: palette.blue600,
165
+ shadowSm: '0 1px 2px rgba(31,35,40,0.08)',
166
+ shadowMd: '0 4px 10px rgba(31,35,40,0.1)',
167
+ shadowLg: '0 12px 28px rgba(31,35,40,0.15)',
168
+ };
169
+ export const themes = { dark: darkTokens, light: lightTokens };
170
+ /** camelCase token key → CSS custom property name (`--dql-surface-base`) */
171
+ export function tokenToCssVar(key) {
172
+ return `--dql-${key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}`;
173
+ }
174
+ /** Emit a { [cssVar]: value } map for a given theme. Used by ThemeProvider. */
175
+ export function themeToCssVars(theme) {
176
+ const out = {};
177
+ for (const [key, value] of Object.entries(theme)) {
178
+ out[tokenToCssVar(key)] = value;
179
+ }
180
+ return out;
181
+ }
182
+ /** `cssVar('surfaceBase')` → `'var(--dql-surface-base)'` — use in style props */
183
+ export function cssVar(key) {
184
+ return `var(${tokenToCssVar(key)})`;
185
+ }
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@duckcodeailabs/dql-ui",
3
+ "version": "0.10.0",
4
+ "description": "Design tokens, theme provider, and headless primitives for the DQL notebook + dashboard shell",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./tokens": {
15
+ "types": "./dist/tokens/index.d.ts",
16
+ "import": "./dist/tokens/index.js"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "build": "rm -rf dist tsconfig.tsbuildinfo && tsc",
21
+ "test": "vitest run --passWithNoTests",
22
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/duckcode-ai/dql.git",
30
+ "directory": "packages/dql-ui"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "peerDependencies": {
36
+ "react": "^18.0.0",
37
+ "react-dom": "^18.0.0"
38
+ },
39
+ "dependencies": {
40
+ "@radix-ui/react-dialog": "^1.1.2",
41
+ "@radix-ui/react-dropdown-menu": "^2.1.2",
42
+ "@radix-ui/react-popover": "^1.1.2",
43
+ "@radix-ui/react-tooltip": "^1.1.4"
44
+ },
45
+ "devDependencies": {
46
+ "@types/react": "^18.3.0",
47
+ "@types/react-dom": "^18.3.0",
48
+ "react": "^18.3.0",
49
+ "react-dom": "^18.3.0",
50
+ "typescript": "^5.7.0",
51
+ "vitest": "^3.0.0"
52
+ }
53
+ }