@brokenrubik/ui 0.0.0-stage → 0.1.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.
- package/README.md +264 -2
- package/dist/components/accordion.d.ts +13 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +25 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +21 -0
- package/dist/components/alert-dialog.d.ts.map +1 -0
- package/dist/components/alert-dialog.js +46 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +24 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +42 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.d.ts +27 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +53 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +21 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +40 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +18 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +39 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +13 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +68 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +15 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +31 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.d.ts +6 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +12 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/command.d.ts +24 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +41 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/date-picker.d.ts +24 -0
- package/dist/components/date-picker.d.ts.map +1 -0
- package/dist/components/date-picker.js +18 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +23 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +45 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +34 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +61 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty-state.d.ts +13 -0
- package/dist/components/empty-state.d.ts.map +1 -0
- package/dist/components/empty-state.js +25 -0
- package/dist/components/empty-state.js.map +1 -0
- package/dist/components/field.d.ts +24 -0
- package/dist/components/field.d.ts.map +1 -0
- package/dist/components/field.js +34 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/input.d.ts +17 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +18 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/kbd.d.ts +14 -0
- package/dist/components/kbd.d.ts.map +1 -0
- package/dist/components/kbd.js +31 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +11 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/pagination.d.ts +18 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +33 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +12 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +29 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +17 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +26 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +7 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +14 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/select.d.ts +20 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +46 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/separator.js +11 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +19 -0
- package/dist/components/sheet.d.ts.map +1 -0
- package/dist/components/sheet.js +47 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +9 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/sonner.d.ts +13 -0
- package/dist/components/sonner.d.ts.map +1 -0
- package/dist/components/sonner.js +40 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/switch.d.ts +6 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +11 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +13 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +24 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +10 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.d.ts +11 -0
- package/dist/components/toggle-group.d.ts.map +1 -0
- package/dist/components/toggle-group.js +18 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/tooltip.d.ts +13 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +24 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/tone.d.ts +8 -0
- package/dist/lib/tone.d.ts.map +1 -0
- package/dist/lib/tone.js +14 -0
- package/dist/lib/tone.js.map +1 -0
- package/dist/lib/utils.d.ts +20 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +40 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles/base.css +37 -0
- package/dist/styles/fonts.css +16 -0
- package/dist/styles/styles.css +14 -0
- package/dist/styles/theme.css +170 -0
- package/dist/styles/tokens.css +228 -0
- package/docs/design-handoff.md +112 -0
- package/docs/figma-vs-tailwind.md +135 -0
- package/docs/visual-testing.md +156 -0
- package/package.json +96 -4
- package/src/components/accordion.tsx +66 -0
- package/src/components/alert-dialog.tsx +139 -0
- package/src/components/alert.tsx +87 -0
- package/src/components/avatar.tsx +105 -0
- package/src/components/badge.tsx +63 -0
- package/src/components/button.tsx +70 -0
- package/src/components/calendar.tsx +131 -0
- package/src/components/card.tsx +72 -0
- package/src/components/checkbox.tsx +31 -0
- package/src/components/command.tsx +149 -0
- package/src/components/date-picker.tsx +86 -0
- package/src/components/dialog.tsx +126 -0
- package/src/components/dropdown-menu.tsx +225 -0
- package/src/components/empty-state.tsx +63 -0
- package/src/components/field.tsx +79 -0
- package/src/components/input.tsx +49 -0
- package/src/components/kbd.tsx +48 -0
- package/src/components/label.tsx +22 -0
- package/src/components/pagination.tsx +94 -0
- package/src/components/popover.tsx +65 -0
- package/src/components/progress.tsx +52 -0
- package/src/components/radio-group.tsx +42 -0
- package/src/components/select.tsx +167 -0
- package/src/components/separator.tsx +29 -0
- package/src/components/sheet.tsx +112 -0
- package/src/components/skeleton.tsx +16 -0
- package/src/components/sonner.tsx +58 -0
- package/src/components/switch.tsx +27 -0
- package/src/components/tabs.tsx +56 -0
- package/src/components/textarea.tsx +17 -0
- package/src/components/toggle-group.tsx +42 -0
- package/src/components/tooltip.tsx +55 -0
- package/src/index.ts +35 -0
- package/src/lib/tone.ts +16 -0
- package/src/lib/utils.ts +46 -0
- package/src/styles/base.css +37 -0
- package/src/styles/fonts.css +16 -0
- package/src/styles/styles.css +14 -0
- package/src/styles/theme.css +170 -0
- package/src/styles/tokens.css +228 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { Slot } from 'radix-ui';
|
|
5
|
+
import { resolveTone } from '../lib/tone.js';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Figma: Components · Base › Badge (2006:37). 20 px high, 6 px radius, Label/Caption
|
|
9
|
+
* Medium. Every tone is a soft tint with the -strong text shade ("one color, one job").
|
|
10
|
+
* Only status fields get a tone: categorical tags (country, owner…) stay neutral.
|
|
11
|
+
*/
|
|
12
|
+
const badgeVariants = cva('inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-md px-2 py-0.5 text-caption font-medium [&>svg]:pointer-events-none [&>svg]:size-3', {
|
|
13
|
+
variants: {
|
|
14
|
+
tone: {
|
|
15
|
+
neutral: 'bg-muted text-muted-foreground',
|
|
16
|
+
primary: 'bg-primary-tint text-primary-strong',
|
|
17
|
+
success: 'bg-success-tint text-success-strong',
|
|
18
|
+
warning: 'bg-warning-tint text-warning-strong',
|
|
19
|
+
destructive: 'bg-destructive-tint text-destructive-strong',
|
|
20
|
+
highlight: 'bg-highlight text-highlight-foreground',
|
|
21
|
+
info: 'bg-info-tint text-info-strong',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
tone: 'neutral',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
/** shadcn Badge variants that have no BR tone of the same name. */
|
|
29
|
+
const badgeVariantAliases = {
|
|
30
|
+
default: 'neutral',
|
|
31
|
+
secondary: 'neutral',
|
|
32
|
+
outline: 'neutral',
|
|
33
|
+
};
|
|
34
|
+
function Badge({ className, tone, variant, asChild = false, ...props }) {
|
|
35
|
+
const Comp = asChild ? Slot.Root : 'span';
|
|
36
|
+
const resolved = resolveTone(tone, variant, badgeVariantAliases, 'neutral');
|
|
37
|
+
return (_jsx(Comp, { "data-slot": "badge", "data-tone": resolved, className: cn(badgeVariants({ tone: resolved }), className), ...props }));
|
|
38
|
+
}
|
|
39
|
+
export { Badge, badgeVariants };
|
|
40
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,aAAa,GAAG,GAAG,CACvB,+LAA+L,EAC/L;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,qCAAqC;YAC9C,OAAO,EAAE,qCAAqC;YAC9C,OAAO,EAAE,qCAAqC;YAC9C,WAAW,EAAE,6CAA6C;YAC1D,SAAS,EAAE,wCAAwC;YACnD,IAAI,EAAE,+BAA+B;SACtC;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAIF,mEAAmE;AACnE,MAAM,mBAAmB,GAA8B;IACrD,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;CACnB,CAAC;AAUF,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAc;IAChF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAC5E,OAAO,CACL,KAAC,IAAI,iBACO,OAAO,eACN,QAAQ,EACnB,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,KACvD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAmC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
/**
|
|
4
|
+
* Figma: Components · Base › Button (2005:49) and Icon Button (2006:24).
|
|
5
|
+
* md 32 px / sm 28 px high, 8 px radius (radius/lg), Body/Default Medium (md) or
|
|
6
|
+
* Body/Small Medium (sm). Icon buttons are 28 / 24 px with 6 px radius (radius/md).
|
|
7
|
+
*/
|
|
8
|
+
declare const buttonVariants: (props?: ({
|
|
9
|
+
variant?: "default" | "destructive" | "ghost" | "link" | "outline" | "secondary" | null | undefined;
|
|
10
|
+
size?: "default" | "icon" | "icon-sm" | "sm" | null | undefined;
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
|
+
type ButtonProps = React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
|
|
13
|
+
/** Render the child element (a link, for example) with the button styles. */
|
|
14
|
+
asChild?: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare function Button({ className, variant, size, asChild, type, ...props }: ButtonProps): React.JSX.Element;
|
|
17
|
+
export { Button, buttonVariants, type ButtonProps };
|
|
18
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE;;;;GAIG;AACH,QAAA,MAAM,cAAc;;;8EA2BnB,CAAC;AAEF,KAAK,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/C,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,WAAW,qBAYb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { Slot } from 'radix-ui';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Figma: Components · Base › Button (2005:49) and Icon Button (2006:24).
|
|
9
|
+
* md 32 px / sm 28 px high, 8 px radius (radius/lg), Body/Default Medium (md) or
|
|
10
|
+
* Body/Small Medium (sm). Icon buttons are 28 / 24 px with 6 px radius (radius/md).
|
|
11
|
+
*/
|
|
12
|
+
const buttonVariants = cva("inline-flex shrink-0 items-center justify-center whitespace-nowrap rounded-lg font-medium transition-[color,background-color,border-color,box-shadow] outline-none select-none focus-visible:ring-3 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50 aria-invalid:ring-3 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
13
|
+
variants: {
|
|
14
|
+
variant: {
|
|
15
|
+
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
|
|
16
|
+
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
17
|
+
outline: 'border border-border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground aria-expanded:bg-accent',
|
|
18
|
+
ghost: 'text-foreground hover:bg-accent hover:text-accent-foreground aria-expanded:bg-accent',
|
|
19
|
+
destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/30',
|
|
20
|
+
link: 'text-primary-strong underline-offset-4 hover:underline',
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
default: 'h-8 gap-1.5 px-3 text-body',
|
|
24
|
+
sm: "h-7 gap-1 px-2.5 text-body-sm [&_svg:not([class*='size-'])]:size-3.5",
|
|
25
|
+
icon: 'size-7 rounded-md',
|
|
26
|
+
'icon-sm': "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3.5",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
variant: 'default',
|
|
31
|
+
size: 'default',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
function Button({ className, variant = 'default', size = 'default', asChild = false, type, ...props }) {
|
|
35
|
+
const Comp = asChild ? Slot.Root : 'button';
|
|
36
|
+
return (_jsx(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, type: asChild ? type : (type ?? 'button'), className: cn(buttonVariants({ variant, size, className })), ...props }));
|
|
37
|
+
}
|
|
38
|
+
export { Button, buttonVariants };
|
|
39
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,cAAc,GAAG,GAAG,CACxB,wZAAwZ,EACxZ;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,wDAAwD;YACjE,SAAS,EAAE,8DAA8D;YACzE,OAAO,EACL,mIAAmI;YACrI,KAAK,EACH,sFAAsF;YACxF,WAAW,EACT,sGAAsG;YACxG,IAAI,EAAE,wDAAwD;SAC/D;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,4BAA4B;YACrC,EAAE,EAAE,sEAAsE;YAC1E,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,0DAA0D;SACtE;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAQF,SAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,SAAS,EAChB,OAAO,GAAG,KAAK,EACf,IAAI,EACJ,GAAG,KAAK,EACI;IACZ,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5C,OAAO,CACL,KAAC,IAAI,iBACO,QAAQ,kBACJ,OAAO,eACV,IAAI,EACf,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,EACzC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KACvD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DayPicker, type DayButton } from 'react-day-picker';
|
|
3
|
+
/**
|
|
4
|
+
* Figma: Components · Base › Calendar (2083:95) and Calendar Day (2083:94).
|
|
5
|
+
* 12 px padding; header 28 px with bordered 28 px prev/next (6 px radius) and the month
|
|
6
|
+
* in Body/Default Medium; weekdays Label/Caption muted; days 32 px, 6 px radius:
|
|
7
|
+
* today = muted + Medium, selected = primary + Medium, outside = muted text, disabled = 50 %.
|
|
8
|
+
* No border or shadow of its own: inside a Popover (DatePicker) or a Card it gets them.
|
|
9
|
+
*/
|
|
10
|
+
declare function Calendar({ className, classNames, showOutsideDays, captionLayout, components, ...props }: React.ComponentProps<typeof DayPicker>): React.JSX.Element;
|
|
11
|
+
declare function CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>): React.JSX.Element;
|
|
12
|
+
export { Calendar, CalendarDayButton };
|
|
13
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/components/calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAwB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMnF;;;;;;GAMG;AACH,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,UAAU,EACV,eAAsB,EACtB,aAAuB,EACvB,UAAU,EACV,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,qBAmExC;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,EACH,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,qBA+BxC;AAED,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { DayPicker, getDefaultClassNames } from 'react-day-picker';
|
|
5
|
+
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
import { buttonVariants } from './button.js';
|
|
8
|
+
/**
|
|
9
|
+
* Figma: Components · Base › Calendar (2083:95) and Calendar Day (2083:94).
|
|
10
|
+
* 12 px padding; header 28 px with bordered 28 px prev/next (6 px radius) and the month
|
|
11
|
+
* in Body/Default Medium; weekdays Label/Caption muted; days 32 px, 6 px radius:
|
|
12
|
+
* today = muted + Medium, selected = primary + Medium, outside = muted text, disabled = 50 %.
|
|
13
|
+
* No border or shadow of its own: inside a Popover (DatePicker) or a Card it gets them.
|
|
14
|
+
*/
|
|
15
|
+
function Calendar({ className, classNames, showOutsideDays = true, captionLayout = 'label', components, ...props }) {
|
|
16
|
+
const d = getDefaultClassNames();
|
|
17
|
+
return (_jsx(DayPicker, { showOutsideDays: showOutsideDays, captionLayout: captionLayout, className: cn('group/calendar bg-transparent p-3 [--cell-size:32px]', className), classNames: {
|
|
18
|
+
root: cn('w-fit', d.root),
|
|
19
|
+
months: cn('relative flex flex-col gap-4 sm:flex-row', d.months),
|
|
20
|
+
month: cn('flex w-full flex-col gap-2', d.month),
|
|
21
|
+
nav: cn('absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1', d.nav),
|
|
22
|
+
button_previous: cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'size-7 select-none shadow-none aria-disabled:opacity-50', d.button_previous),
|
|
23
|
+
button_next: cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'size-7 select-none shadow-none aria-disabled:opacity-50', d.button_next),
|
|
24
|
+
month_caption: cn('flex h-7 w-full items-center justify-center px-8', d.month_caption),
|
|
25
|
+
dropdowns: cn('flex h-7 w-full items-center justify-center gap-1.5 text-body font-medium', d.dropdowns),
|
|
26
|
+
dropdown_root: cn('relative rounded-md border border-input shadow-xs has-focus:border-ring', d.dropdown_root),
|
|
27
|
+
dropdown: cn('absolute inset-0 bg-popover opacity-0', d.dropdown),
|
|
28
|
+
caption_label: cn('select-none text-body font-medium', captionLayout !== 'label' &&
|
|
29
|
+
'flex h-7 items-center gap-1 rounded-md pr-1 pl-2 [&>svg]:size-3.5 [&>svg]:text-muted-foreground', d.caption_label),
|
|
30
|
+
month_grid: 'w-full border-collapse',
|
|
31
|
+
weekdays: cn('flex pb-1.5', d.weekdays),
|
|
32
|
+
weekday: cn('flex h-6 w-(--cell-size) items-center justify-center text-caption font-normal text-muted-foreground select-none', d.weekday),
|
|
33
|
+
week: cn('flex w-full pt-0.5', d.week),
|
|
34
|
+
week_number_header: cn('w-(--cell-size) select-none', d.week_number_header),
|
|
35
|
+
week_number: cn('text-caption text-muted-foreground select-none', d.week_number),
|
|
36
|
+
day: cn('relative size-(--cell-size) p-0 text-center select-none', d.day),
|
|
37
|
+
range_start: cn('rounded-l-md bg-muted', d.range_start),
|
|
38
|
+
range_middle: cn('rounded-none', d.range_middle),
|
|
39
|
+
range_end: cn('rounded-r-md bg-muted', d.range_end),
|
|
40
|
+
today: cn(d.today),
|
|
41
|
+
outside: cn('text-muted-foreground', d.outside),
|
|
42
|
+
disabled: cn('text-muted-foreground opacity-50', d.disabled),
|
|
43
|
+
hidden: cn('invisible', d.hidden),
|
|
44
|
+
...classNames,
|
|
45
|
+
}, components: {
|
|
46
|
+
Chevron: ({ className: chevronClassName, orientation, ...chevronProps }) => {
|
|
47
|
+
const Icon = orientation === 'left'
|
|
48
|
+
? ChevronLeftIcon
|
|
49
|
+
: orientation === 'right'
|
|
50
|
+
? ChevronRightIcon
|
|
51
|
+
: ChevronDownIcon;
|
|
52
|
+
return _jsx(Icon, { className: cn('size-4', chevronClassName), ...chevronProps });
|
|
53
|
+
},
|
|
54
|
+
DayButton: CalendarDayButton,
|
|
55
|
+
...components,
|
|
56
|
+
}, ...props }));
|
|
57
|
+
}
|
|
58
|
+
function CalendarDayButton({ className, day, modifiers, ...props }) {
|
|
59
|
+
const ref = React.useRef(null);
|
|
60
|
+
React.useEffect(() => {
|
|
61
|
+
if (modifiers.focused)
|
|
62
|
+
ref.current?.focus();
|
|
63
|
+
}, [modifiers.focused]);
|
|
64
|
+
const selectedSingle = modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle;
|
|
65
|
+
return (_jsx("button", { ref: ref, type: "button", "data-day": day.date.toLocaleDateString(), "data-today": modifiers.today || undefined, "data-selected-single": selectedSingle || undefined, "data-range-start": modifiers.range_start || undefined, "data-range-end": modifiers.range_end || undefined, "data-range-middle": modifiers.range_middle || undefined, className: cn('inline-flex size-(--cell-size) items-center justify-center rounded-md text-body text-inherit transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/40 disabled:pointer-events-none', 'data-[today=true]:bg-muted data-[today=true]:font-medium', 'data-[selected-single=true]:bg-primary data-[selected-single=true]:font-medium data-[selected-single=true]:text-primary-foreground', 'data-[range-start=true]:bg-primary data-[range-start=true]:font-medium data-[range-start=true]:text-primary-foreground', 'data-[range-end=true]:bg-primary data-[range-end=true]:font-medium data-[range-end=true]:text-primary-foreground', 'data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground', className), ...props }));
|
|
66
|
+
}
|
|
67
|
+
export { Calendar, CalendarDayButton };
|
|
68
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/components/calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Figma: Components · Base › Card (2008:30). "Cards are flat: 8px radius, slate-200
|
|
4
|
+
* border, no shadow." 16 px padding; title (Heading/Card) and description (Body/Default,
|
|
5
|
+
* muted) 4 px apart.
|
|
6
|
+
*/
|
|
7
|
+
declare function Card({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
8
|
+
declare function CardHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
9
|
+
declare function CardTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
10
|
+
declare function CardDescription({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
11
|
+
declare function CardAction({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
12
|
+
declare function CardContent({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
13
|
+
declare function CardFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
14
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardAction, CardContent, CardFooter };
|
|
15
|
+
//# sourceMappingURL=card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;GAIG;AACH,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAItE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAExE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAIvE;AAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Figma: Components · Base › Card (2008:30). "Cards are flat: 8px radius, slate-200
|
|
6
|
+
* border, no shadow." 16 px padding; title (Heading/Card) and description (Body/Default,
|
|
7
|
+
* muted) 4 px apart.
|
|
8
|
+
*/
|
|
9
|
+
function Card({ className, ...props }) {
|
|
10
|
+
return (_jsx("div", { "data-slot": "card", className: cn('flex flex-col gap-4 rounded-lg border border-border bg-card p-4 text-card-foreground', className), ...props }));
|
|
11
|
+
}
|
|
12
|
+
function CardHeader({ className, ...props }) {
|
|
13
|
+
return (_jsx("div", { "data-slot": "card-header", className: cn('grid auto-rows-min grid-rows-[auto_auto] items-start gap-1 has-data-[slot=card-action]:grid-cols-[1fr_auto]', className), ...props }));
|
|
14
|
+
}
|
|
15
|
+
function CardTitle({ className, ...props }) {
|
|
16
|
+
return (_jsx("div", { "data-slot": "card-title", className: cn('text-card-title text-foreground', className), ...props }));
|
|
17
|
+
}
|
|
18
|
+
function CardDescription({ className, ...props }) {
|
|
19
|
+
return (_jsx("div", { "data-slot": "card-description", className: cn('text-body text-muted-foreground', className), ...props }));
|
|
20
|
+
}
|
|
21
|
+
function CardAction({ className, ...props }) {
|
|
22
|
+
return (_jsx("div", { "data-slot": "card-action", className: cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className), ...props }));
|
|
23
|
+
}
|
|
24
|
+
function CardContent({ className, ...props }) {
|
|
25
|
+
return _jsx("div", { "data-slot": "card-content", className: cn(className), ...props });
|
|
26
|
+
}
|
|
27
|
+
function CardFooter({ className, ...props }) {
|
|
28
|
+
return (_jsx("div", { "data-slot": "card-footer", className: cn('flex items-center gap-2', className), ...props }));
|
|
29
|
+
}
|
|
30
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardAction, CardContent, CardFooter };
|
|
31
|
+
//# sourceMappingURL=card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,SAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IAChE,OAAO,CACL,2BACY,MAAM,EAChB,SAAS,EAAE,EAAE,CACX,sFAAsF,EACtF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACtE,OAAO,CACL,2BACY,aAAa,EACvB,SAAS,EAAE,EAAE,CACX,6GAA6G,EAC7G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACrE,OAAO,CACL,2BAAe,YAAY,EAAC,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CACvG,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IAC3E,OAAO,CACL,2BACY,kBAAkB,EAC5B,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,SAAS,CAAC,KACvD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACtE,OAAO,CACL,2BACY,aAAa,EACvB,SAAS,EAAE,EAAE,CAAC,gEAAgE,EAAE,SAAS,CAAC,KACtF,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACvE,OAAO,2BAAe,cAAc,EAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACtE,OAAO,CACL,2BAAe,aAAa,EAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAChG,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Checkbox as CheckboxPrimitive } from 'radix-ui';
|
|
3
|
+
/** Figma: Components · Base › Checkbox (2008:29). 16 px, 4 px radius, `input` border. */
|
|
4
|
+
declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): React.JSX.Element;
|
|
5
|
+
export { Checkbox };
|
|
6
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAKzD,yFAAyF;AACzF,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,qBAmB7F;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Checkbox as CheckboxPrimitive } from 'radix-ui';
|
|
5
|
+
import { CheckIcon, MinusIcon } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
/** Figma: Components · Base › Checkbox (2008:29). 16 px, 4 px radius, `input` border. */
|
|
8
|
+
function Checkbox({ className, ...props }) {
|
|
9
|
+
return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn('peer size-4 shrink-0 rounded-xs border border-input bg-background shadow-xs transition-[background-color,border-color,box-shadow] outline-none focus-visible:ring-3 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground', className), ...props, children: _jsxs(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "group/indicator flex items-center justify-center text-current", children: [_jsx(CheckIcon, { className: "size-3 group-data-[state=indeterminate]/indicator:hidden", strokeWidth: 3 }), _jsx(MinusIcon, { className: "hidden size-3 group-data-[state=indeterminate]/indicator:block", strokeWidth: 3 })] }) }));
|
|
10
|
+
}
|
|
11
|
+
export { Checkbox };
|
|
12
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,yFAAyF;AACzF,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAuD;IAC5F,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,iBACX,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,ogBAAogB,EACpgB,SAAS,CACV,KACG,KAAK,YAET,MAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAC,+DAA+D,aAEzE,KAAC,SAAS,IAAC,SAAS,EAAC,0DAA0D,EAAC,WAAW,EAAE,CAAC,GAAI,EAClG,KAAC,SAAS,IAAC,SAAS,EAAC,gEAAgE,EAAC,WAAW,EAAE,CAAC,GAAI,IAC5E,GACP,CAC1B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Command as CommandPrimitive } from 'cmdk';
|
|
3
|
+
import { Dialog } from './dialog.js';
|
|
4
|
+
/**
|
|
5
|
+
* Figma: Components · Base › Command (2084:180). 560 px popover, 8 px radius, Shadow/lg.
|
|
6
|
+
* Search row: 12 px padding, 16 px muted icon, bottom border. List: 4 px padding, group
|
|
7
|
+
* heading Label/Caption Medium muted, items as Menu Item (32 px, selected = accent).
|
|
8
|
+
*/
|
|
9
|
+
declare function Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>): React.JSX.Element;
|
|
10
|
+
declare function CommandDialog({ title, description, children, className, showCloseButton, ...props }: React.ComponentProps<typeof Dialog> & {
|
|
11
|
+
title?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
showCloseButton?: boolean;
|
|
15
|
+
}): React.JSX.Element;
|
|
16
|
+
declare function CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>): React.JSX.Element;
|
|
17
|
+
declare function CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>): React.JSX.Element;
|
|
18
|
+
declare function CommandEmpty({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>): React.JSX.Element;
|
|
19
|
+
declare function CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>): React.JSX.Element;
|
|
20
|
+
declare function CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>): React.JSX.Element;
|
|
21
|
+
declare function CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>): React.JSX.Element;
|
|
22
|
+
declare function CommandShortcut({ className, ...props }: React.ComponentProps<'span'>): React.JSX.Element;
|
|
23
|
+
export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
|
|
24
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAInD,OAAO,EAAE,MAAM,EAA+D,MAAM,aAAa,CAAC;AAElG;;;;GAIG;AACH,iBAAS,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,qBAWtF;AAED,iBAAS,aAAa,CAAC,EACrB,KAAyB,EACzB,WAA4C,EAC5C,QAAQ,EACR,SAAS,EACT,eAAuB,EACvB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,qBAeA;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,qBAcjG;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,qBAQ/F;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,qBAQjG;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,qBAWjG;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,qBAQzG;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,qBAW/F;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAQ7E;AAED,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Command as CommandPrimitive } from 'cmdk';
|
|
5
|
+
import { SearchIcon } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog.js';
|
|
8
|
+
/**
|
|
9
|
+
* Figma: Components · Base › Command (2084:180). 560 px popover, 8 px radius, Shadow/lg.
|
|
10
|
+
* Search row: 12 px padding, 16 px muted icon, bottom border. List: 4 px padding, group
|
|
11
|
+
* heading Label/Caption Medium muted, items as Menu Item (32 px, selected = accent).
|
|
12
|
+
*/
|
|
13
|
+
function Command({ className, ...props }) {
|
|
14
|
+
return (_jsx(CommandPrimitive, { "data-slot": "command", className: cn('flex size-full flex-col overflow-hidden rounded-lg bg-popover text-body text-popover-foreground', className), ...props }));
|
|
15
|
+
}
|
|
16
|
+
function CommandDialog({ title = 'Command palette', description = 'Search for a command to run…', children, className, showCloseButton = false, ...props }) {
|
|
17
|
+
return (_jsxs(Dialog, { ...props, children: [_jsxs(DialogHeader, { className: "sr-only", children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsx(DialogContent, { className: cn('top-[20%] max-w-[560px] translate-y-0 gap-0 overflow-hidden rounded-lg bg-popover p-0', className), showCloseButton: showCloseButton, children: _jsx(Command, { children: children }) })] }));
|
|
18
|
+
}
|
|
19
|
+
function CommandInput({ className, ...props }) {
|
|
20
|
+
return (_jsxs("div", { "data-slot": "command-input-wrapper", className: "flex items-center gap-2 border-b border-border p-3", children: [_jsx(SearchIcon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }), _jsx(CommandPrimitive.Input, { "data-slot": "command-input", className: cn('flex h-5 w-full bg-transparent text-body outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50', className), ...props })] }));
|
|
21
|
+
}
|
|
22
|
+
function CommandList({ className, ...props }) {
|
|
23
|
+
return (_jsx(CommandPrimitive.List, { "data-slot": "command-list", className: cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto p-1', className), ...props }));
|
|
24
|
+
}
|
|
25
|
+
function CommandEmpty({ className, ...props }) {
|
|
26
|
+
return (_jsx(CommandPrimitive.Empty, { "data-slot": "command-empty", className: cn('py-6 text-center text-body text-muted-foreground', className), ...props }));
|
|
27
|
+
}
|
|
28
|
+
function CommandGroup({ className, ...props }) {
|
|
29
|
+
return (_jsx(CommandPrimitive.Group, { "data-slot": "command-group", className: cn('overflow-hidden text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-caption **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground', className), ...props }));
|
|
30
|
+
}
|
|
31
|
+
function CommandSeparator({ className, ...props }) {
|
|
32
|
+
return (_jsx(CommandPrimitive.Separator, { "data-slot": "command-separator", className: cn('-mx-1 my-1 h-px bg-border', className), ...props }));
|
|
33
|
+
}
|
|
34
|
+
function CommandItem({ className, ...props }) {
|
|
35
|
+
return (_jsx(CommandPrimitive.Item, { "data-slot": "command-item", className: cn("relative flex h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 text-body outline-hidden data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props }));
|
|
36
|
+
}
|
|
37
|
+
function CommandShortcut({ className, ...props }) {
|
|
38
|
+
return (_jsx("span", { "data-slot": "command-shortcut", className: cn('ml-auto text-caption text-muted-foreground', className), ...props }));
|
|
39
|
+
}
|
|
40
|
+
export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, };
|
|
41
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/components/command.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Calendar } from './calendar.js';
|
|
3
|
+
/**
|
|
4
|
+
* Figma: Components · Base › Date Picker (2083:69), code `<Popover> + <Calendar>`.
|
|
5
|
+
* The trigger looks like Input (calendar icon, muted placeholder "Pick a date").
|
|
6
|
+
*/
|
|
7
|
+
type DatePickerProps = {
|
|
8
|
+
value?: Date;
|
|
9
|
+
onChange?: (date: Date | undefined) => void;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** How the chosen date reads in the trigger. Default: Intl, medium date style. */
|
|
13
|
+
formatDate?: (date: Date) => string;
|
|
14
|
+
/** Locale for the default formatter (an Intl locale tag). */
|
|
15
|
+
locale?: string;
|
|
16
|
+
id?: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
'aria-invalid'?: boolean;
|
|
19
|
+
/** Extra props for the calendar (disabled days, start month, locale…). */
|
|
20
|
+
calendarProps?: Omit<React.ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;
|
|
21
|
+
};
|
|
22
|
+
declare function DatePicker({ value, onChange, placeholder, disabled, formatDate, locale, id, className, calendarProps, ...aria }: DatePickerProps): React.JSX.Element;
|
|
23
|
+
export { DatePicker, type DatePickerProps };
|
|
24
|
+
//# sourceMappingURL=date-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/components/date-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC;;;GAGG;AACH,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACpC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;CAC/F,CAAC;AAEF,iBAAS,UAAU,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,WAA2B,EAC3B,QAAQ,EACR,UAAU,EACV,MAAM,EACN,EAAE,EACF,SAAS,EACT,aAAa,EACb,GAAG,IAAI,EACR,EAAE,eAAe,qBA0CjB;AAED,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { CalendarIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../lib/utils.js';
|
|
6
|
+
import { Calendar } from './calendar.js';
|
|
7
|
+
import { controlClassName } from './input.js';
|
|
8
|
+
import { Popover, PopoverContent, PopoverTrigger } from './popover.js';
|
|
9
|
+
function DatePicker({ value, onChange, placeholder = 'Pick a date', disabled, formatDate, locale, id, className, calendarProps, ...aria }) {
|
|
10
|
+
const [open, setOpen] = React.useState(false);
|
|
11
|
+
const format = React.useCallback((date) => formatDate ? formatDate(date) : new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date), [formatDate, locale]);
|
|
12
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { id: id, type: "button", disabled: disabled, "data-slot": "date-picker-trigger", "data-empty": !value || undefined, "aria-invalid": aria['aria-invalid'], className: cn(controlClassName, 'flex h-8 items-center gap-2 px-2.5 text-left data-[empty=true]:text-muted-foreground', className), children: [_jsx(CalendarIcon, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }), _jsx("span", { className: "truncate", children: value ? format(value) : placeholder })] }) }), _jsx(PopoverContent, { className: "w-auto gap-0 p-0", align: "start", children: _jsx(Calendar, { mode: "single", selected: value, defaultMonth: value, ...calendarProps, onSelect: (date) => {
|
|
13
|
+
onChange?.(date);
|
|
14
|
+
setOpen(false);
|
|
15
|
+
} }) })] }));
|
|
16
|
+
}
|
|
17
|
+
export { DatePicker };
|
|
18
|
+
//# sourceMappingURL=date-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/components/date-picker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAsBvE,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,aAAa,EAC3B,QAAQ,EACR,UAAU,EACV,MAAM,EACN,EAAE,EACF,SAAS,EACT,aAAa,EACb,GAAG,IAAI,EACS;IAChB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,IAAU,EAAE,EAAE,CACb,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EACvG,CAAC,UAAU,EAAE,MAAM,CAAC,CACrB,CAAC;IAEF,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,kBACE,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,eACR,qBAAqB,gBACnB,CAAC,KAAK,IAAI,SAAS,kBACjB,IAAI,CAAC,cAAc,CAAC,EAClC,SAAS,EAAE,EAAE,CACX,gBAAgB,EAChB,sFAAsF,EACtF,SAAS,CACV,aAED,KAAC,YAAY,IAAC,SAAS,EAAC,uCAAuC,wBAAe,EAC9E,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAQ,IAChE,GACM,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAC,OAAO,YACxD,KAAC,QAAQ,IACP,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,KAAK,EACf,YAAY,EAAE,KAAK,KACf,aAAa,EACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;wBACjB,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;wBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,GACD,GACa,IACT,CACX,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAwB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Dialog as DialogPrimitive } from 'radix-ui';
|
|
3
|
+
/**
|
|
4
|
+
* Figma: Components · Base › Dialog (2084:160). 480 px, 12 px radius (radius/xl), 24 px
|
|
5
|
+
* padding, 16 px gap, Shadow/lg. Title Heading/Page title, description Body/Default muted,
|
|
6
|
+
* 24 px close button (5 px radius), footer buttons right-aligned 8 px apart.
|
|
7
|
+
*/
|
|
8
|
+
declare const overlayClassName = "fixed inset-0 z-50 bg-overlay data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0";
|
|
9
|
+
declare const closeButtonClassName = "inline-flex size-6 items-center justify-center rounded-sm text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/40 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";
|
|
10
|
+
declare function Dialog(props: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
|
|
11
|
+
declare function DialogTrigger(props: React.ComponentProps<typeof DialogPrimitive.Trigger>): React.JSX.Element;
|
|
12
|
+
declare function DialogPortal(props: React.ComponentProps<typeof DialogPrimitive.Portal>): React.JSX.Element;
|
|
13
|
+
declare function DialogClose(props: React.ComponentProps<typeof DialogPrimitive.Close>): React.JSX.Element;
|
|
14
|
+
declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.JSX.Element;
|
|
15
|
+
declare function DialogContent({ className, children, showCloseButton, ...props }: React.ComponentProps<typeof DialogPrimitive.Content> & {
|
|
16
|
+
showCloseButton?: boolean;
|
|
17
|
+
}): React.JSX.Element;
|
|
18
|
+
declare function DialogHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
19
|
+
declare function DialogFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
20
|
+
declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.JSX.Element;
|
|
21
|
+
declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.JSX.Element;
|
|
22
|
+
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, overlayClassName, closeButtonClassName, };
|
|
23
|
+
//# sourceMappingURL=dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAKrD;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,0JACmI,CAAC;AAE1J,QAAA,MAAM,oBAAoB,+TACoS,CAAC;AAE/T,iBAAS,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAEvE;AAED,iBAAS,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAEjF;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,qBAE/E;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAE7E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAInG;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,eAAsB,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,qBAyBtF;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQzE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAI/F;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,qBAQ1D;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,oBAAoB,GACrB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Dialog as DialogPrimitive } from 'radix-ui';
|
|
5
|
+
import { XIcon } from 'lucide-react';
|
|
6
|
+
import { cn } from '../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Figma: Components · Base › Dialog (2084:160). 480 px, 12 px radius (radius/xl), 24 px
|
|
9
|
+
* padding, 16 px gap, Shadow/lg. Title Heading/Page title, description Body/Default muted,
|
|
10
|
+
* 24 px close button (5 px radius), footer buttons right-aligned 8 px apart.
|
|
11
|
+
*/
|
|
12
|
+
const overlayClassName = 'fixed inset-0 z-50 bg-overlay data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0';
|
|
13
|
+
const closeButtonClassName = "inline-flex size-6 items-center justify-center rounded-sm text-muted-foreground transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/40 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";
|
|
14
|
+
function Dialog(props) {
|
|
15
|
+
return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
|
|
16
|
+
}
|
|
17
|
+
function DialogTrigger(props) {
|
|
18
|
+
return _jsx(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
|
|
19
|
+
}
|
|
20
|
+
function DialogPortal(props) {
|
|
21
|
+
return _jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
|
|
22
|
+
}
|
|
23
|
+
function DialogClose(props) {
|
|
24
|
+
return _jsx(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
|
|
25
|
+
}
|
|
26
|
+
function DialogOverlay({ className, ...props }) {
|
|
27
|
+
return (_jsx(DialogPrimitive.Overlay, { "data-slot": "dialog-overlay", className: cn(overlayClassName, className), ...props }));
|
|
28
|
+
}
|
|
29
|
+
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
30
|
+
return (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { "data-slot": "dialog-content", className: cn('fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-[calc(100%-2rem)] max-w-[480px] -translate-x-1/2 -translate-y-1/2 flex-col gap-4 overflow-y-auto rounded-xl border border-border bg-background p-6 text-body text-foreground shadow-lg outline-none data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95', className), ...props, children: [children, showCloseButton && (_jsxs(DialogPrimitive.Close, { "data-slot": "dialog-close", className: cn(closeButtonClassName, 'absolute top-6 right-6'), children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: "Close" })] }))] })] }));
|
|
31
|
+
}
|
|
32
|
+
function DialogHeader({ className, ...props }) {
|
|
33
|
+
return (_jsx("div", { "data-slot": "dialog-header", className: cn('flex flex-col gap-1.5 pr-9 text-left', className), ...props }));
|
|
34
|
+
}
|
|
35
|
+
function DialogFooter({ className, ...props }) {
|
|
36
|
+
return (_jsx("div", { "data-slot": "dialog-footer", className: cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className), ...props }));
|
|
37
|
+
}
|
|
38
|
+
function DialogTitle({ className, ...props }) {
|
|
39
|
+
return (_jsx(DialogPrimitive.Title, { "data-slot": "dialog-title", className: cn('text-page-title', className), ...props }));
|
|
40
|
+
}
|
|
41
|
+
function DialogDescription({ className, ...props }) {
|
|
42
|
+
return (_jsx(DialogPrimitive.Description, { "data-slot": "dialog-description", className: cn('text-body text-muted-foreground', className), ...props }));
|
|
43
|
+
}
|
|
44
|
+
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, overlayClassName, closeButtonClassName, };
|
|
45
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';
|
|
3
|
+
/**
|
|
4
|
+
* Figma: Components · Base › Dropdown Menu (2084:92) and Menu Item (2007:58).
|
|
5
|
+
* Panel: popover, 6 px radius, 4 px padding, Shadow/md. Item: 32 px, 8 px padding,
|
|
6
|
+
* 5 px radius, Body/Default; hover = accent. Label: Body/Small Medium, muted.
|
|
7
|
+
* Shortcut: Label/Caption, muted. Separator: 1 px border with 4 px around it.
|
|
8
|
+
*/
|
|
9
|
+
declare const menuItemClassName = "relative flex h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 text-body text-foreground outline-hidden focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground";
|
|
10
|
+
declare const menuContentClassName = "z-50 min-w-[220px] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2";
|
|
11
|
+
declare function DropdownMenu(props: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): React.JSX.Element;
|
|
12
|
+
declare function DropdownMenuPortal(props: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): React.JSX.Element;
|
|
13
|
+
declare function DropdownMenuTrigger(props: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): React.JSX.Element;
|
|
14
|
+
declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): React.JSX.Element;
|
|
15
|
+
declare function DropdownMenuGroup(props: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): React.JSX.Element;
|
|
16
|
+
declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
17
|
+
inset?: boolean;
|
|
18
|
+
variant?: 'default' | 'destructive';
|
|
19
|
+
}): React.JSX.Element;
|
|
20
|
+
declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): React.JSX.Element;
|
|
21
|
+
declare function DropdownMenuRadioGroup(props: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): React.JSX.Element;
|
|
22
|
+
declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): React.JSX.Element;
|
|
23
|
+
declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
24
|
+
inset?: boolean;
|
|
25
|
+
}): React.JSX.Element;
|
|
26
|
+
declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): React.JSX.Element;
|
|
27
|
+
declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>): React.JSX.Element;
|
|
28
|
+
declare function DropdownMenuSub(props: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.JSX.Element;
|
|
29
|
+
declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
30
|
+
inset?: boolean;
|
|
31
|
+
}): React.JSX.Element;
|
|
32
|
+
declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): React.JSX.Element;
|
|
33
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, menuItemClassName, menuContentClassName, };
|
|
34
|
+
//# sourceMappingURL=dropdown-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
|