@01.software/ui 0.0.0-stage → 0.2.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +154 -2
  4. package/THIRD_PARTY_NOTICES.md +89 -0
  5. package/dist/accordion.d.ts +7 -0
  6. package/dist/accordion.js +16 -0
  7. package/dist/alert.d.ts +9 -0
  8. package/dist/alert.js +22 -0
  9. package/dist/badge.d.ts +9 -0
  10. package/dist/badge.js +21 -0
  11. package/dist/button.d.ts +8 -0
  12. package/dist/button.js +24 -0
  13. package/dist/checkbox.d.ts +4 -0
  14. package/dist/checkbox.js +9 -0
  15. package/dist/command-menu.d.ts +28 -0
  16. package/dist/command-menu.js +69 -0
  17. package/dist/dialog.d.ts +16 -0
  18. package/dist/dialog.js +28 -0
  19. package/dist/field.d.ts +24 -0
  20. package/dist/field.js +68 -0
  21. package/dist/input.d.ts +3 -0
  22. package/dist/input.js +6 -0
  23. package/dist/internal/cn.d.ts +2 -0
  24. package/dist/internal/cn.js +5 -0
  25. package/dist/internal/label.d.ts +1 -0
  26. package/dist/internal/label.js +2 -0
  27. package/dist/internal/menu-styles.d.ts +3 -0
  28. package/dist/internal/menu-styles.js +3 -0
  29. package/dist/label.d.ts +4 -0
  30. package/dist/label.js +8 -0
  31. package/dist/menubar.d.ts +29 -0
  32. package/dist/menubar.js +47 -0
  33. package/dist/popover.d.ts +11 -0
  34. package/dist/popover.js +21 -0
  35. package/dist/progress.d.ts +4 -0
  36. package/dist/progress.js +14 -0
  37. package/dist/radio-group.d.ts +5 -0
  38. package/dist/radio-group.js +11 -0
  39. package/dist/select.d.ts +15 -0
  40. package/dist/select.js +36 -0
  41. package/dist/separator.d.ts +4 -0
  42. package/dist/separator.js +8 -0
  43. package/dist/skeleton.d.ts +3 -0
  44. package/dist/skeleton.js +6 -0
  45. package/dist/slider.d.ts +6 -0
  46. package/dist/slider.js +17 -0
  47. package/dist/styles.css +2 -0
  48. package/dist/switch.d.ts +4 -0
  49. package/dist/switch.js +8 -0
  50. package/dist/tabs.d.ts +13 -0
  51. package/dist/tabs.js +31 -0
  52. package/dist/textarea.d.ts +3 -0
  53. package/dist/textarea.js +6 -0
  54. package/dist/tooltip.d.ts +7 -0
  55. package/dist/tooltip.js +13 -0
  56. package/package.json +192 -3
package/dist/field.js ADDED
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useMemo } from 'react';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from './internal/cn.js';
6
+ import { Label } from './internal/label.js';
7
+ function FieldSet({ className, ...props }) {
8
+ return (_jsx("fieldset", { "data-slot": "field-set", className: cn('block', className), ...props }));
9
+ }
10
+ function FieldLegend({ className, variant = 'legend', ...props }) {
11
+ return (_jsx("legend", { "data-slot": "field-legend", "data-variant": variant, className: cn('text-muted-foreground mb-2 text-xs', className), ...props }));
12
+ }
13
+ function FieldGroup({ className, ...props }) {
14
+ return (_jsx("div", { "data-slot": "field-group", className: cn('group/field-group block w-full space-y-3', className), ...props }));
15
+ }
16
+ const fieldVariants = cva('block w-full group/field', {
17
+ variants: {
18
+ orientation: {
19
+ vertical: '',
20
+ horizontal: 'flex items-start gap-3 [&>[data-slot=field-label]]:mb-0 [&>[data-slot=field-label]]:shrink-0 [&>[data-slot=field-label]]:pt-1.5 [&>[data-slot=field-content]]:min-w-0 [&>[data-slot=field-content]]:flex-1',
21
+ responsive: 'flex flex-col gap-1 sm:flex-row sm:items-start sm:gap-3 sm:[&>[data-slot=field-label]]:mb-0 sm:[&>[data-slot=field-label]]:shrink-0 sm:[&>[data-slot=field-label]]:pt-1.5 [&>[data-slot=field-content]]:min-w-0 sm:[&>[data-slot=field-content]]:flex-1',
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ orientation: 'vertical',
26
+ },
27
+ });
28
+ function Field({ className, orientation = 'vertical', ...props }) {
29
+ return (_jsx("div", { role: "group", "data-slot": "field", "data-orientation": orientation, className: cn(fieldVariants({ orientation }), className), ...props }));
30
+ }
31
+ function FieldContent({ className, ...props }) {
32
+ return (_jsx("div", { "data-slot": "field-content", className: cn('block', className), ...props }));
33
+ }
34
+ function FieldLabel({ className, ...props }) {
35
+ return (_jsx(Label, { "data-slot": "field-label", className: cn('mb-1 w-fit group-data-[disabled=true]/field:opacity-50', className), ...props }));
36
+ }
37
+ function FieldTitle({ className, ...props }) {
38
+ return (_jsx("div", { "data-slot": "field-label", className: cn('text-muted-foreground w-fit text-xs group-data-[disabled=true]/field:opacity-50', className), ...props }));
39
+ }
40
+ function FieldDescription({ className, ...props }) {
41
+ return (_jsx("p", { "data-slot": "field-description", className: cn('text-muted-foreground text-xs', className), ...props }));
42
+ }
43
+ function FieldSeparator({ children, className, ...props }) {
44
+ return (_jsx("div", { "data-slot": "field-separator", "data-content": !!children, className: cn('text-muted-foreground py-2 text-xs', className), ...props, children: children }));
45
+ }
46
+ function FieldError({ className, children, errors, ...props }) {
47
+ const content = useMemo(() => {
48
+ if (children) {
49
+ return children;
50
+ }
51
+ if (!errors?.length) {
52
+ return null;
53
+ }
54
+ const messages = [
55
+ ...new Set(errors.flatMap((error) => error?.message?.trim() ? [error.message] : [])),
56
+ ];
57
+ if (messages.length === 0)
58
+ return null;
59
+ if (messages.length === 1)
60
+ return messages[0];
61
+ return (_jsx("ul", { className: "ml-4 list-disc", children: messages.map((message) => (_jsx("li", { children: message }, message))) }));
62
+ }, [children, errors]);
63
+ if (!content) {
64
+ return null;
65
+ }
66
+ return (_jsx("div", { role: "alert", "data-slot": "field-error", className: cn('text-destructive text-xs', className), ...props, children: content }));
67
+ }
68
+ export { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldLegend, FieldSeparator, FieldSet, FieldContent, FieldTitle, };
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
3
+ export { Input };
package/dist/input.js ADDED
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from './internal/cn.js';
3
+ function Input({ className, type, ...props }) {
4
+ return (_jsx("input", { type: type, "data-slot": "input", className: cn('border-border placeholder:text-muted-foreground focus-visible:border-foreground aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive bg-foreground/[0.03] hover:bg-foreground/5 h-8 w-full min-w-0 rounded-sm border px-2 py-1 text-xs outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:outline-[var(--destructive)]', className), ...props }));
5
+ }
6
+ export { Input };
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,5 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
@@ -0,0 +1 @@
1
+ export { Label } from '../label.js';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export { Label } from '../label.js';
@@ -0,0 +1,3 @@
1
+ /** Shared neutral menu surfaces; geometry belongs to each Radix positioning primitive. `motion-*` hooks live in motion.css. */
2
+ export declare const menuItemClassName = "data-[highlighted]:bg-foreground/[0.08] relative flex min-h-7 cursor-default items-center gap-2 rounded-sm px-2 py-0.5 leading-relaxed no-underline outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
3
+ export declare const menuContentClassName = "motion-pop border-foreground/10 z-50 max-w-[min(20rem,calc(100vw-2rem))] min-w-48 overflow-y-auto rounded-md border bg-[var(--ui-surface,var(--paper))] p-0.5 text-xs shadow-lg outline-none";
@@ -0,0 +1,3 @@
1
+ /** Shared neutral menu surfaces; geometry belongs to each Radix positioning primitive. `motion-*` hooks live in motion.css. */
2
+ export const menuItemClassName = 'data-[highlighted]:bg-foreground/[0.08] relative flex min-h-7 cursor-default items-center gap-2 rounded-sm px-2 py-0.5 leading-relaxed no-underline outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50';
3
+ export const menuContentClassName = 'motion-pop border-foreground/10 z-50 max-w-[min(20rem,calc(100vw-2rem))] min-w-48 overflow-y-auto rounded-md border bg-[var(--ui-surface,var(--paper))] p-0.5 text-xs shadow-lg outline-none';
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { Label as LabelPrimitive } from 'radix-ui';
3
+ declare function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Label };
package/dist/label.js ADDED
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Label as LabelPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ function Label({ className, ...props }) {
6
+ return (_jsx(LabelPrimitive.Root, { "data-slot": "label", className: cn('text-muted-foreground block text-xs select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50', className), ...props }));
7
+ }
8
+ export { Label };
@@ -0,0 +1,29 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Menubar as MenubarPrimitive } from 'radix-ui';
3
+ declare const MenubarMenu: typeof MenubarPrimitive.Menu;
4
+ declare const MenubarGroup: import("react").ForwardRefExoticComponent<MenubarPrimitive.MenubarGroupProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ declare const MenubarRadioGroup: import("react").ForwardRefExoticComponent<MenubarPrimitive.MenubarRadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ declare const MenubarSub: import("react").FC<MenubarPrimitive.MenubarSubProps>;
7
+ declare function Menubar({ className, ...props }: ComponentProps<typeof MenubarPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
8
+ declare function MenubarTrigger({ className, ...props }: ComponentProps<typeof MenubarPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
9
+ declare function MenubarContent({ className, portalLabel, align, sideOffset, collisionPadding, ...props }: ComponentProps<typeof MenubarPrimitive.Content> & {
10
+ portalLabel?: string;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ declare function MenubarItem({ className, inset, variant, ...props }: ComponentProps<typeof MenubarPrimitive.Item> & {
13
+ inset?: boolean;
14
+ variant?: 'default' | 'destructive';
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ declare function MenubarCheckboxItem({ className, children, ...props }: ComponentProps<typeof MenubarPrimitive.CheckboxItem>): import("react/jsx-runtime").JSX.Element;
17
+ declare function MenubarSeparator({ className, ...props }: ComponentProps<typeof MenubarPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
18
+ declare function MenubarLabel({ className, inset, ...props }: ComponentProps<typeof MenubarPrimitive.Label> & {
19
+ inset?: boolean;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ declare function MenubarRadioItem({ className, children, ...props }: ComponentProps<typeof MenubarPrimitive.RadioItem>): import("react/jsx-runtime").JSX.Element;
22
+ declare function MenubarSubTrigger({ className, children, inset, ...props }: ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
23
+ inset?: boolean;
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ declare function MenubarSubContent({ className, portalLabel, sideOffset, collisionPadding, ...props }: ComponentProps<typeof MenubarPrimitive.SubContent> & {
26
+ portalLabel?: string;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ declare function MenubarShortcut({ className, ...props }: ComponentProps<'span'>): import("react/jsx-runtime").JSX.Element;
29
+ export { Menubar, MenubarMenu, MenubarGroup, MenubarLabel, MenubarRadioGroup, MenubarRadioItem, MenubarSub, MenubarSubTrigger, MenubarSubContent, MenubarShortcut, MenubarTrigger, MenubarContent, MenubarItem, MenubarCheckboxItem, MenubarSeparator, };
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Menubar as MenubarPrimitive } from 'radix-ui';
4
+ import { Check, ChevronRight } from 'lucide-react';
5
+ import { cn } from './internal/cn.js';
6
+ import { menuItemClassName, menuContentClassName, } from './internal/menu-styles.js';
7
+ const MenubarMenu = MenubarPrimitive.Menu;
8
+ const MenubarGroup = MenubarPrimitive.Group;
9
+ const MenubarRadioGroup = MenubarPrimitive.RadioGroup;
10
+ const MenubarSub = MenubarPrimitive.Sub;
11
+ function MenuContentPortal({ children, label, }) {
12
+ return (_jsx(MenubarPrimitive.Portal, { children: label ? _jsx("section", { "aria-label": label, children: children }) : children }));
13
+ }
14
+ function Menubar({ className, ...props }) {
15
+ return (_jsx(MenubarPrimitive.Root, { "data-slot": "menubar", className: cn('bg-foreground/[0.035] flex min-w-0 flex-wrap items-center gap-0.5 rounded-md px-2 py-1 text-xs outline-none', className), ...props }));
16
+ }
17
+ function MenubarTrigger({ className, ...props }) {
18
+ return (_jsx(MenubarPrimitive.Trigger, { "data-slot": "menubar-trigger", className: cn('data-[state=open]:bg-foreground/10 focus-visible:bg-foreground/10 min-h-6 cursor-default rounded-sm px-2 py-0.5 no-underline outline-none hover:no-underline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:opacity-40', className), ...props }));
19
+ }
20
+ function MenubarContent({ className, portalLabel, align = 'start', sideOffset = 4, collisionPadding = 16, ...props }) {
21
+ return (_jsx(MenuContentPortal, { label: portalLabel, children: _jsx(MenubarPrimitive.Content, { "data-slot": "menubar-content", align: align, sideOffset: sideOffset, collisionPadding: collisionPadding, className: cn(menuContentClassName, 'max-h-(--radix-menubar-content-available-height)', className), ...props }) }));
22
+ }
23
+ function MenubarItem({ className, inset = false, variant = 'default', ...props }) {
24
+ return (_jsx(MenubarPrimitive.Item, { "data-slot": "menubar-item", className: cn(menuItemClassName, inset && 'pl-7', variant === 'destructive' && 'text-destructive', className), ...props }));
25
+ }
26
+ function MenubarCheckboxItem({ className, children, ...props }) {
27
+ return (_jsxs(MenubarPrimitive.CheckboxItem, { "data-slot": "menubar-checkbox-item", className: cn(menuItemClassName, 'pl-7', className), ...props, children: [_jsx("span", { className: "absolute left-2 grid size-3.5 place-items-center", children: _jsx(MenubarPrimitive.ItemIndicator, { children: _jsx(Check, { "aria-hidden": "true", className: "size-3" }) }) }), children] }));
28
+ }
29
+ function MenubarSeparator({ className, ...props }) {
30
+ return (_jsx(MenubarPrimitive.Separator, { "data-slot": "menubar-separator", className: cn('bg-foreground/[0.06] mx-1 my-1 h-px', className), ...props }));
31
+ }
32
+ function MenubarLabel({ className, inset = false, ...props }) {
33
+ return (_jsx(MenubarPrimitive.Label, { "data-slot": "menubar-label", className: cn('text-muted-foreground px-2 py-1 text-xs', inset && 'pl-7', className), ...props }));
34
+ }
35
+ function MenubarRadioItem({ className, children, ...props }) {
36
+ return (_jsxs(MenubarPrimitive.RadioItem, { "data-slot": "menubar-radio-item", className: cn(menuItemClassName, 'pl-7', className), ...props, children: [_jsx("span", { className: "absolute left-2 grid size-3.5 place-items-center", children: _jsx(MenubarPrimitive.ItemIndicator, { children: _jsx(Check, { "aria-hidden": "true", className: "size-3" }) }) }), children] }));
37
+ }
38
+ function MenubarSubTrigger({ className, children, inset = false, ...props }) {
39
+ return (_jsxs(MenubarPrimitive.SubTrigger, { "data-slot": "menubar-sub-trigger", className: cn(menuItemClassName, 'data-[state=open]:bg-foreground/[0.08]', inset && 'pl-7', className), ...props, children: [children, _jsx(ChevronRight, { "aria-hidden": "true", className: "ml-auto size-3 shrink-0" })] }));
40
+ }
41
+ function MenubarSubContent({ className, portalLabel, sideOffset = 4, collisionPadding = 16, ...props }) {
42
+ return (_jsx(MenuContentPortal, { label: portalLabel, children: _jsx(MenubarPrimitive.SubContent, { "data-slot": "menubar-sub-content", sideOffset: sideOffset, collisionPadding: collisionPadding, className: cn(menuContentClassName, 'max-h-(--radix-menubar-content-available-height)', className), ...props }) }));
43
+ }
44
+ function MenubarShortcut({ className, ...props }) {
45
+ return (_jsx("span", { "data-slot": "menubar-shortcut", "aria-hidden": "true", className: cn('text-muted-foreground ml-auto shrink-0 pl-5 text-xs whitespace-nowrap tabular-nums', className), ...props }));
46
+ }
47
+ export { Menubar, MenubarMenu, MenubarGroup, MenubarLabel, MenubarRadioGroup, MenubarRadioItem, MenubarSub, MenubarSubTrigger, MenubarSubContent, MenubarShortcut, MenubarTrigger, MenubarContent, MenubarItem, MenubarCheckboxItem, MenubarSeparator, };
@@ -0,0 +1,11 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Popover as PopoverPrimitive } from 'radix-ui';
3
+ declare const Popover: import("react").FC<PopoverPrimitive.PopoverProps>;
4
+ declare const PopoverTrigger: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverAnchor: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ declare const PopoverClose: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverCloseProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ declare function PopoverContent({ className, align, sideOffset, collisionPadding, ...props }: ComponentProps<typeof PopoverPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
8
+ declare function PopoverHeader({ className, ...props }: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
9
+ declare function PopoverTitle({ className, ...props }: ComponentProps<'h3'>): import("react/jsx-runtime").JSX.Element;
10
+ declare function PopoverDescription({ className, ...props }: ComponentProps<'p'>): import("react/jsx-runtime").JSX.Element;
11
+ export { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent, PopoverHeader, PopoverTitle, PopoverDescription, };
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Popover as PopoverPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ const Popover = PopoverPrimitive.Root;
6
+ const PopoverTrigger = PopoverPrimitive.Trigger;
7
+ const PopoverAnchor = PopoverPrimitive.Anchor;
8
+ const PopoverClose = PopoverPrimitive.Close;
9
+ function PopoverContent({ className, align = 'start', sideOffset = 6, collisionPadding = 16, ...props }) {
10
+ return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, collisionPadding: collisionPadding, className: cn('motion-pop border-foreground/10 z-50 grid max-h-(--radix-popover-content-available-height) w-64 max-w-[calc(100vw-2rem)] gap-3 overflow-y-auto rounded-md border bg-[var(--ui-surface,var(--paper))] p-3 text-xs [overflow-wrap:anywhere] shadow-lg outline-none', className), ...props }) }));
11
+ }
12
+ function PopoverHeader({ className, ...props }) {
13
+ return (_jsx("div", { "data-slot": "popover-header", className: cn('grid gap-1', className), ...props }));
14
+ }
15
+ function PopoverTitle({ className, ...props }) {
16
+ return (_jsx("h3", { "data-slot": "popover-title", className: cn('font-medium', className), ...props }));
17
+ }
18
+ function PopoverDescription({ className, ...props }) {
19
+ return (_jsx("p", { "data-slot": "popover-description", className: cn('text-muted-foreground leading-relaxed', className), ...props }));
20
+ }
21
+ export { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, PopoverContent, PopoverHeader, PopoverTitle, PopoverDescription, };
@@ -0,0 +1,4 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Progress as ProgressPrimitive } from 'radix-ui';
3
+ declare function Progress({ className, value, max, ...props }: ComponentProps<typeof ProgressPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Progress };
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Progress as ProgressPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ function Progress({ className, value = null, max = 100, ...props }) {
6
+ const limit = Number.isFinite(max) && max > 0 ? max : 100;
7
+ const current = typeof value === 'number' && Number.isFinite(value)
8
+ ? Math.min(limit, Math.max(0, value))
9
+ : null;
10
+ return (_jsx(ProgressPrimitive.Root, { "data-slot": "progress", className: cn('bg-foreground/10 relative h-1.5 w-full overflow-hidden rounded-full', className), value: current, max: limit, ...props, children: _jsx(ProgressPrimitive.Indicator, { "data-slot": "progress-indicator", className: cn('bg-foreground/65 h-full rounded-full transition-[width] motion-reduce:transition-none', current === null && 'w-1/2 motion-safe:animate-pulse'), style: current === null
11
+ ? undefined
12
+ : { width: `${(current / limit) * 100}%` } }) }));
13
+ }
14
+ export { Progress };
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { RadioGroup as RadioGroupPrimitive } from 'radix-ui';
3
+ declare function RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function RadioGroupItem({ className, children, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
5
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { RadioGroup as RadioGroupPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ function RadioGroup({ className, ...props }) {
6
+ return (_jsx(RadioGroupPrimitive.Root, { "data-slot": "radio-group", className: cn('grid gap-3', className), ...props }));
7
+ }
8
+ function RadioGroupItem({ className, children, ...props }) {
9
+ return (_jsx(RadioGroupPrimitive.Item, { "data-slot": "radio-group-item", className: cn('text-foreground data-[state=checked]:border-foreground grid size-4 shrink-0 place-items-center rounded-full border border-[var(--ink-muted)] bg-transparent transition-colors outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:cursor-not-allowed disabled:opacity-50', className), ...props, children: children ?? (_jsx(RadioGroupPrimitive.Indicator, { "data-slot": "radio-group-indicator", className: "size-2 rounded-full bg-current" })) }));
10
+ }
11
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { Select as SelectPrimitive } from 'radix-ui';
3
+ declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function SelectGroup({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
5
+ declare function SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>): import("react/jsx-runtime").JSX.Element;
6
+ declare function SelectTrigger({ className, size, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
7
+ size?: 'sm' | 'default';
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ declare function SelectContent({ className, children, position, align, sideOffset, ...props }: React.ComponentProps<typeof SelectPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
10
+ declare function SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>): import("react/jsx-runtime").JSX.Element;
11
+ declare function SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
12
+ declare function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
13
+ declare function SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): import("react/jsx-runtime").JSX.Element;
14
+ declare function SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): import("react/jsx-runtime").JSX.Element;
15
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
package/dist/select.js ADDED
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Select as SelectPrimitive } from 'radix-ui';
4
+ import { Check, ChevronDown, ChevronUp } from 'lucide-react';
5
+ import { cn } from './internal/cn.js';
6
+ function Select({ ...props }) {
7
+ return _jsx(SelectPrimitive.Root, { "data-slot": "select", ...props });
8
+ }
9
+ function SelectGroup({ className, ...props }) {
10
+ return (_jsx(SelectPrimitive.Group, { "data-slot": "select-group", className: cn('', className), ...props }));
11
+ }
12
+ function SelectValue({ ...props }) {
13
+ return _jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
14
+ }
15
+ function SelectTrigger({ className, size = 'default', children, ...props }) {
16
+ return (_jsxs(SelectPrimitive.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn('border-border aria-invalid:border-destructive data-placeholder:text-muted-foreground hover:bg-foreground/5 bg-foreground/[0.03] flex w-full items-center justify-between gap-2 rounded-sm border px-2 py-1 text-xs whitespace-nowrap outline-none hover:no-underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:outline-[var(--destructive)] data-[size=default]:h-8 data-[size=sm]:h-7', className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { "aria-hidden": "true", className: "text-muted-foreground size-3.5 shrink-0" }) })] }));
17
+ }
18
+ function SelectContent({ className, children, position = 'popper', align = 'start', sideOffset = 4, ...props }) {
19
+ return (_jsx(SelectPrimitive.Portal, { children: _jsx(SelectPrimitive.Content, { "data-slot": "select-content", className: cn('motion-pop border-border text-foreground border-foreground/10 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 overflow-x-hidden overflow-y-auto rounded-md border bg-[var(--ui-surface,var(--paper))] shadow-lg', position === 'popper' && 'min-w-(--radix-select-trigger-width)', className), position: position, align: align, sideOffset: sideOffset, ...props, children: _jsx(SelectPrimitive.Viewport, { className: "p-0.5", children: children }) }) }));
20
+ }
21
+ function SelectLabel({ className, ...props }) {
22
+ return (_jsx(SelectPrimitive.Label, { "data-slot": "select-label", className: cn('text-muted-foreground px-1.5 py-1 text-xs', className), ...props }));
23
+ }
24
+ function SelectItem({ className, children, ...props }) {
25
+ return (_jsxs(SelectPrimitive.Item, { "data-slot": "select-item", className: cn('data-[highlighted]:bg-foreground/10 data-[highlighted]:text-foreground hover:text-foreground relative flex min-h-7 w-full cursor-default items-center rounded-sm py-1 pr-2 pl-6 text-xs outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[state=checked]:font-semibold', className), ...props, children: [_jsx(SelectPrimitive.ItemIndicator, { className: "absolute left-1.5 inline-flex items-center", children: _jsx(Check, { "aria-hidden": "true", className: "size-3" }) }), _jsx(SelectPrimitive.ItemText, { children: children })] }));
26
+ }
27
+ function SelectSeparator({ className, ...props }) {
28
+ return (_jsx(SelectPrimitive.Separator, { "data-slot": "select-separator", className: cn('bg-border h-px', className), ...props }));
29
+ }
30
+ function SelectScrollUpButton({ className, ...props }) {
31
+ return (_jsx(SelectPrimitive.ScrollUpButton, { "data-slot": "select-scroll-up-button", className: cn('flex cursor-default items-center justify-center py-1 text-xs', className), ...props, children: _jsx(ChevronUp, { "aria-hidden": "true", className: "size-3.5" }) }));
32
+ }
33
+ function SelectScrollDownButton({ className, ...props }) {
34
+ return (_jsx(SelectPrimitive.ScrollDownButton, { "data-slot": "select-scroll-down-button", className: cn('flex cursor-default items-center justify-center py-1 text-xs', className), ...props, children: _jsx(ChevronDown, { "aria-hidden": "true", className: "size-3.5" }) }));
35
+ }
36
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
@@ -0,0 +1,4 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Separator as SeparatorPrimitive } from 'radix-ui';
3
+ declare function Separator({ className, orientation, decorative, ...props }: ComponentProps<typeof SeparatorPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Separator };
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Separator as SeparatorPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ function Separator({ className, orientation = 'horizontal', decorative = true, ...props }) {
6
+ return (_jsx(SeparatorPrimitive.Root, { "data-slot": "separator", orientation: orientation, decorative: decorative, className: cn('bg-foreground/10 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px', className), ...props }));
7
+ }
8
+ export { Separator };
@@ -0,0 +1,3 @@
1
+ import type { ComponentProps } from 'react';
2
+ declare function Skeleton({ className, ...props }: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
3
+ export { Skeleton };
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from './internal/cn.js';
3
+ function Skeleton({ className, ...props }) {
4
+ return (_jsx("div", { "data-slot": "skeleton", ...props, "aria-hidden": "true", className: cn('bg-foreground/10 rounded-sm motion-safe:animate-pulse motion-reduce:animate-none', className) }));
5
+ }
6
+ export { Skeleton };
@@ -0,0 +1,6 @@
1
+ import { type ComponentProps } from 'react';
2
+ import { Slider as SliderPrimitive } from 'radix-ui';
3
+ declare function Slider({ className, defaultValue, value, min, max, disabled, thumbLabels, 'aria-label': label, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, ...props }: ComponentProps<typeof SliderPrimitive.Root> & {
4
+ thumbLabels?: readonly string[];
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ export { Slider };
package/dist/slider.js ADDED
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Fragment, useId } from 'react';
4
+ import { Slider as SliderPrimitive } from 'radix-ui';
5
+ import { cn } from './internal/cn.js';
6
+ function Slider({ className, defaultValue, value, min = 0, max = 100, disabled = false, thumbLabels, 'aria-label': label, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, ...props }) {
7
+ const id = useId();
8
+ const initial = defaultValue ?? [min];
9
+ const values = value ?? initial;
10
+ return (_jsxs(SliderPrimitive.Root, { "data-slot": "slider", className: cn('relative flex min-h-6 w-full touch-none items-center select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[orientation=vertical]:h-32 data-[orientation=vertical]:min-h-0 data-[orientation=vertical]:w-6 data-[orientation=vertical]:flex-col', className), defaultValue: initial, value: value, min: min, max: max, disabled: disabled, ...props, children: [_jsx(SliderPrimitive.Track, { "data-slot": "slider-track", className: "bg-foreground/10 relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1", children: _jsx(SliderPrimitive.Range, { "data-slot": "slider-range", className: "bg-foreground/65 absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full" }) }), values.map((_, index) => (_jsxs(Fragment, { children: [values.length > 1 && labelledBy && !thumbLabels?.[index] && (_jsxs("span", { id: `${id}-thumb-${index}`, className: "sr-only", children: ["Value ", index + 1] })), _jsx(SliderPrimitive.Thumb, { "data-slot": "slider-thumb", "aria-disabled": disabled || undefined, "aria-describedby": describedBy, "aria-label": thumbLabels?.[index] ??
11
+ (values.length > 1 ? `${label ?? 'Value'} ${index + 1}` : label), "aria-labelledby": thumbLabels?.[index]
12
+ ? undefined
13
+ : labelledBy && values.length > 1
14
+ ? `${labelledBy} ${id}-thumb-${index}`
15
+ : labelledBy, className: "border-foreground/40 block size-3.5 shrink-0 rounded-full border bg-[var(--paper)] shadow-xs focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid" })] }, index)))] }));
16
+ }
17
+ export { Slider };
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:""}}}@layer theme{:root,:host{--color-black:#000;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{:where([data-slot=button],[data-slot=input],[data-slot^=field],[data-slot^=select-],[data-slot^=radio-group],[data-slot^=tabs],[data-slot=label],[data-slot^=accordion-],[data-slot^=alert],[data-slot=badge],[data-slot^=checkbox],[data-slot^=dialog-],[data-slot^=popover-],[data-slot^=progress],[data-slot=separator],[data-slot=skeleton],[data-slot^=slider],[data-slot^=switch],[data-slot=textarea],[data-slot=tooltip-content],[data-slot^=menubar],[data-slot^=command-menu-],[data-slot=dropdown-menu-content],[data-slot=context-menu-content]){box-sizing:border-box;border:0 solid var(--border)}:where([data-slot=button],[data-slot=select-trigger],[data-slot=select-scroll-up-button],[data-slot=select-scroll-down-button],[data-slot=radio-group-item],[data-slot=tabs-trigger],[data-slot=input],[data-slot=textarea],[data-slot=accordion-trigger],[data-slot=checkbox],[data-slot=dialog-close],[data-slot=slider-thumb],[data-slot=switch],[data-slot=menubar-trigger],[data-slot=command-menu-trigger]){font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;text-transform:none;background-color:#0000;border-radius:0;margin:0;padding:0}button:where([data-slot=button],[data-slot=select-trigger],[data-slot=select-scroll-up-button],[data-slot=select-scroll-down-button],[data-slot=radio-group-item],[data-slot=tabs-trigger],[data-slot=accordion-trigger],[data-slot=checkbox],[data-slot=dialog-close],[data-slot=slider-thumb],[data-slot=switch],[data-slot=menubar-trigger],[data-slot=command-menu-trigger]){appearance:button}:where([data-slot=field-set]){min-width:0;margin:0;padding:0}:where([data-slot=field-legend]){padding:0}:where([data-slot=field-description],[data-slot=field-error] ul){margin:0;padding:0}:where([data-slot=accordion-header],[data-slot=alert-title],[data-slot=dialog-title],[data-slot=popover-title]){font-size:inherit;font-weight:inherit;margin:0}:where([data-slot=dialog-description],[data-slot=popover-description],[data-slot=alert-description] p){margin:0}:where([data-slot=select-trigger],[data-slot=select-content],[data-slot=accordion-trigger],[data-slot=alert],[data-slot=badge],[data-slot=checkbox],[data-slot=dialog-content],[data-slot^=menubar],[data-slot^=command-menu-]) svg{vertical-align:middle;display:block}}@layer components{:root{--motion-ease-out:cubic-bezier(.22, 1, .36, 1);--motion-duration-enter:.16s;--motion-duration-exit:.11s;--motion-duration-modal-enter:.2s;--motion-duration-modal-exit:.14s;--motion-duration-collapse:.2s;--motion-pop-scale:.97;--motion-pop-exit-scale:.99;--motion-modal-scale:.96;--motion-modal-exit-scale:.98}@keyframes motion-fade-in{0%{opacity:0}}@keyframes motion-fade-out{to{opacity:0}}@keyframes motion-pop-in{0%{opacity:0;scale:var(--motion-pop-scale)}}@keyframes motion-pop-out{to{opacity:0;scale:var(--motion-pop-exit-scale)}}@keyframes motion-modal-in{0%{opacity:0;scale:var(--motion-modal-scale)}}@keyframes motion-modal-out{to{opacity:0;scale:var(--motion-modal-exit-scale)}}@keyframes motion-collapse-open{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes motion-collapse-close{0%{height:var(--radix-accordion-content-height)}to{height:0}}.motion-pop{transform-origin:var(--radix-popover-content-transform-origin,var(--radix-tooltip-content-transform-origin,var(--radix-menubar-content-transform-origin,var(--radix-dropdown-menu-content-transform-origin,var(--radix-context-menu-content-transform-origin,center)))))}.motion-pop:is([data-state=open],[data-state=delayed-open]){animation:motion-pop-in var(--motion-duration-enter) var(--motion-ease-out)}.motion-pop[data-state=closed]{animation:motion-pop-out var(--motion-duration-exit) var(--motion-ease-out) forwards}.motion-fade[data-state=open]{animation:motion-fade-in var(--motion-duration-modal-enter) var(--motion-ease-out)}.motion-fade[data-state=closed]{animation:motion-fade-out var(--motion-duration-modal-exit) var(--motion-ease-out) forwards}.motion-modal[data-state=open]{animation:motion-modal-in var(--motion-duration-modal-enter) var(--motion-ease-out)}.motion-modal[data-state=closed]{animation:motion-modal-out var(--motion-duration-modal-exit) var(--motion-ease-out) forwards}.motion-collapse{overflow:hidden}.motion-collapse[data-state=open]{animation:motion-collapse-open var(--motion-duration-collapse) var(--motion-ease-out)}.motion-collapse[data-state=closed]{animation:motion-collapse-close var(--motion-duration-collapse) var(--motion-ease-out)}@media (prefers-reduced-motion:reduce){:root{--motion-pop-scale:1;--motion-pop-exit-scale:1;--motion-modal-scale:1;--motion-modal-exit-scale:1}.motion-collapse{animation:none!important}}}@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.right-3{right:calc(var(--spacing) * 3)}.left-1\.5{left:calc(var(--spacing) * 1.5)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.z-50{z-index:50}.mx-1{margin-inline:calc(var(--spacing) * 1)}.my-1{margin-block:calc(var(--spacing) * 1)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-11{height:calc(var(--spacing) * 11)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-menubar-content-available-height\){max-height:var(--radix-menubar-content-available-height)}.max-h-\(--radix-popover-content-available-height\){max-height:var(--radix-popover-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-20{min-height:calc(var(--spacing) * 20)}.w-1\/2{width:50%}.w-8{width:calc(var(--spacing) * 8)}.w-64{width:calc(var(--spacing) * 64)}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-\[min\(16rem\,calc\(100vw-2rem\)\)\]{max-width:min(16rem,100vw - 2rem)}.max-w-\[min\(20rem\,calc\(100vw-2rem\)\)\]{max-width:min(20rem,100vw - 2rem)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-\(--radix-select-trigger-width\){min-width:var(--radix-select-trigger-width)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-48{min-width:calc(var(--spacing) * 48)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.cursor-default{cursor:default}.touch-none{touch-action:none}.resize-y{resize:vertical}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--ink-muted\)\]{border-color:var(--ink-muted)}.border-border{border-color:var(--border)}.border-foreground\/10{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\/10{border-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.border-foreground\/40{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\/40{border-color:color-mix(in oklab, var(--foreground) 40%, transparent)}}.border-foreground\/50{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\/50{border-color:color-mix(in oklab, var(--foreground) 50%, transparent)}}.bg-\[color-mix\(in_oklab\,var\(--ink\)_8\%\,transparent\)\]{background-color:var(--ink)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--ink\)_8\%\,transparent\)\]{background-color:color-mix(in oklab,var(--ink) 8%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--ink\)_14\%\,transparent\)\]{background-color:var(--ink)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--ink\)_14\%\,transparent\)\]{background-color:color-mix(in oklab,var(--ink) 14%,transparent)}}.bg-\[var\(--paper\)\]{background-color:var(--paper)}.bg-\[var\(--ui-surface\,var\(--paper\)\)\]{background-color:var(--ui-surface,var(--paper))}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-border{background-color:var(--border)}.bg-current{background-color:currentColor}.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-foreground\/5{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/5{background-color:color-mix(in oklab, var(--foreground) 5%, transparent)}}.bg-foreground\/10{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/10{background-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.bg-foreground\/60{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/60{background-color:color-mix(in oklab, var(--foreground) 60%, transparent)}}.bg-foreground\/65{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/65{background-color:color-mix(in oklab, var(--foreground) 65%, transparent)}}.bg-foreground\/\[0\.03\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/\[0\.03\]{background-color:color-mix(in oklab, var(--foreground) 3%, transparent)}}.bg-foreground\/\[0\.06\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/\[0\.06\]{background-color:color-mix(in oklab, var(--foreground) 6%, transparent)}}.bg-foreground\/\[0\.07\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/\[0\.07\]{background-color:color-mix(in oklab, var(--foreground) 7.0%, transparent)}}.bg-foreground\/\[0\.035\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/\[0\.035\]{background-color:color-mix(in oklab, var(--foreground) 3.5%, transparent)}}.bg-transparent{background-color:#0000}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-3{padding:calc(var(--spacing) * 3)}.p-5{padding:calc(var(--spacing) * 5)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-px{padding-inline:1px}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-7{padding-left:calc(var(--spacing) * 7)}.text-left{text-align:left}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6875rem\]{font-size:.6875rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--ink\)\]{color:var(--ink)}.text-background{color:var(--background)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *),.group-data-\[disabled\=true\]\/field\:opacity-50:is(:where(.group\/field)[data-disabled=true] *){opacity:.5}.group-data-\[orientation\=vertical\]\/tabs\:flex-col:is(:where(.group\/tabs)[data-orientation=vertical] *){flex-direction:column}.group-data-\[orientation\=vertical\]\/tabs\:items-stretch:is(:where(.group\/tabs)[data-orientation=vertical] *){align-items:stretch}.group-data-\[orientation\=vertical\]\/tabs\:border-r:is(:where(.group\/tabs)[data-orientation=vertical] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[orientation\=vertical\]\/tabs\:border-b-0:is(:where(.group\/tabs)[data-orientation=vertical] *){border-bottom-style:var(--tw-border-style);border-bottom-width:0}.group-data-\[state\=active\]\:bg-foreground\/10:is(:where(.group)[data-state=active] *){background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.group-data-\[state\=active\]\:bg-foreground\/10:is(:where(.group)[data-state=active] *){background-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.group-data-\[state\=active\]\:font-medium:is(:where(.group)[data-state=active] *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.group-data-\[state\=active\]\:text-foreground:is(:where(.group)[data-state=active] *){color:var(--foreground)}.group-data-\[state\=checked\]\/indicator\:hidden:is(:where(.group\/indicator)[data-state=checked] *),.group-data-\[state\=indeterminate\]\/indicator\:hidden:is(:where(.group\/indicator)[data-state=indeterminate] *){display:none}.group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state=open] *){rotate:180deg}.group-data-\[variant\=line\]\/tabs-list\:rounded-none:is(:where(.group\/tabs-list)[data-variant=line] *){border-radius:0}.group-data-\[variant\=line\]\/tabs-list\:border-b-2:is(:where(.group\/tabs-list)[data-variant=line] *){border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.group-data-\[variant\=line\]\/tabs-list\:border-transparent:is(:where(.group\/tabs-list)[data-variant=line] *){border-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:px-2:is(:where(.group\/tabs-list)[data-variant=line] *){padding-inline:calc(var(--spacing) * 2)}.group-data-\[variant\=line\]\/tabs-list\:py-2:is(:where(.group\/tabs-list)[data-variant=line] *){padding-block:calc(var(--spacing) * 2)}.group-data-\[variant\=line\]\/tabs-list\:group-data-\[orientation\=vertical\]\/tabs\:border-r-2:is(:where(.group\/tabs-list)[data-variant=line] *):is(:where(.group\/tabs)[data-orientation=vertical] *){border-right-style:var(--tw-border-style);border-right-width:2px}.group-data-\[variant\=line\]\/tabs-list\:group-data-\[orientation\=vertical\]\/tabs\:border-b-0:is(:where(.group\/tabs-list)[data-variant=line] *):is(:where(.group\/tabs)[data-orientation=vertical] *){border-bottom-style:var(--tw-border-style);border-bottom-width:0}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:-inset-1:before{content:var(--tw-content);inset:calc(var(--spacing) * -1)}.before\:inset-x-0:before{content:var(--tw-content);inset-inline:calc(var(--spacing) * 0)}.before\:-inset-y-0\.5:before{content:var(--tw-content);inset-block:calc(var(--spacing) * -.5)}.before\:hidden:before{content:var(--tw-content);display:none}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.group-data-\[variant\=line\]\/tabs-list\:before\:hidden:is(:where(.group\/tabs-list)[data-variant=line] *):before,.after\:hidden:after,.group-data-\[variant\=line\]\/tabs-list\:after\:hidden:is(:where(.group\/tabs-list)[data-variant=line] *):after{content:var(--tw-content);display:none}@media (hover:hover){.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_8\%\,transparent\)\]:hover{background-color:var(--ink)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_8\%\,transparent\)\]:hover{background-color:color-mix(in oklab,var(--ink) 8%,transparent)}}.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_11\%\,transparent\)\]:hover{background-color:var(--ink)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_11\%\,transparent\)\]:hover{background-color:color-mix(in oklab,var(--ink) 11%,transparent)}}.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_18\%\,transparent\)\]:hover{background-color:var(--ink)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_oklab\,var\(--ink\)_18\%\,transparent\)\]:hover{background-color:color-mix(in oklab,var(--ink) 18%,transparent)}}.hover\:bg-foreground\/5:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-foreground\/5:hover{background-color:color-mix(in oklab, var(--foreground) 5%, transparent)}}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:no-underline:hover{text-decoration-line:none}}.focus-visible\:border-foreground:focus-visible{border-color:var(--foreground)}.focus-visible\:bg-foreground\/10:focus-visible{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:bg-foreground\/10:focus-visible{background-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--ink\)\]:focus-visible{outline-color:var(--ink)}.focus-visible\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.active\:opacity-100:active{opacity:1}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\[data-visual\=compact\]\]\:rounded-none:has([data-visual=compact]){border-radius:0}.has-\[\[data-visual\=compact\]\]\:bg-transparent:has([data-visual=compact]){background-color:#0000}.has-\[\[data-visual\=compact\]\]\:p-0:has([data-visual=compact]){padding:calc(var(--spacing) * 0)}.aria-invalid\:border-destructive[aria-invalid=true],.aria-invalid\:focus-visible\:border-destructive[aria-invalid=true]:focus-visible{border-color:var(--destructive)}.aria-invalid\:focus-visible\:outline-\[var\(--destructive\)\][aria-invalid=true]:focus-visible{outline-color:var(--destructive)}.data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.data-disabled\:opacity-50[data-disabled]{opacity:.5}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-foreground\/10[data-highlighted]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.data-\[highlighted\]\:bg-foreground\/10[data-highlighted]{background-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.data-\[highlighted\]\:bg-foreground\/\[0\.08\][data-highlighted]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.data-\[highlighted\]\:bg-foreground\/\[0\.08\][data-highlighted]{background-color:color-mix(in oklab, var(--foreground) 8%, transparent)}}.data-\[highlighted\]\:text-foreground[data-highlighted]{color:var(--foreground)}.data-\[orientation\=horizontal\]\:h-1[data-orientation=horizontal]{height:calc(var(--spacing) * 1)}.data-\[orientation\=horizontal\]\:h-full[data-orientation=horizontal]{height:100%}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:flex[data-orientation=vertical]{display:flex}.data-\[orientation\=vertical\]\:h-32[data-orientation=vertical]{height:calc(var(--spacing) * 32)}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:min-h-0[data-orientation=vertical]{min-height:calc(var(--spacing) * 0)}.data-\[orientation\=vertical\]\:w-1[data-orientation=vertical]{width:calc(var(--spacing) * 1)}.data-\[orientation\=vertical\]\:w-6[data-orientation=vertical]{width:calc(var(--spacing) * 6)}.data-\[orientation\=vertical\]\:w-full[data-orientation=vertical]{width:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[orientation\=vertical\]\:flex-col[data-orientation=vertical]{flex-direction:column}.data-\[orientation\=vertical\]\:items-start[data-orientation=vertical]{align-items:flex-start}.data-\[orientation\=vertical\]\:gap-4[data-orientation=vertical]{gap:calc(var(--spacing) * 4)}.data-\[size\=default\]\:h-8[data-size=default]{height:calc(var(--spacing) * 8)}.data-\[size\=sm\]\:h-7[data-size=sm]{height:calc(var(--spacing) * 7)}.data-\[state\=active\]\:bg-\[var\(--ui-surface\,var\(--paper\)\)\][data-state=active]{background-color:var(--ui-surface,var(--paper))}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:font-medium[data-state=active]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=active\]\:font-normal[data-state=active]{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:border-foreground:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{border-color:var(--foreground)}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{background-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *)[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-3[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-foreground[data-state=checked]{border-color:var(--foreground)}.data-\[state\=checked\]\:bg-\[var\(--paper\)\][data-state=checked]{background-color:var(--paper)}.data-\[state\=checked\]\:bg-foreground[data-state=checked]{background-color:var(--foreground)}.data-\[state\=checked\]\:font-semibold[data-state=checked]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.aria-invalid\:data-\[state\=checked\]\:border-destructive[aria-invalid=true][data-state=checked]{border-color:var(--destructive)}.data-\[state\=inactive\]\:text-muted-foreground[data-state=inactive]{color:var(--muted-foreground)}.data-\[state\=indeterminate\]\:border-foreground[data-state=indeterminate]{border-color:var(--foreground)}.data-\[state\=indeterminate\]\:bg-foreground[data-state=indeterminate]{background-color:var(--foreground)}.aria-invalid\:data-\[state\=indeterminate\]\:border-destructive[aria-invalid=true][data-state=indeterminate]{border-color:var(--destructive)}.data-\[state\=open\]\:bg-foreground\/10[data-state=open]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.data-\[state\=open\]\:bg-foreground\/10[data-state=open]{background-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.data-\[state\=open\]\:bg-foreground\/\[0\.08\][data-state=open]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.data-\[state\=open\]\:bg-foreground\/\[0\.08\][data-state=open]{background-color:color-mix(in oklab, var(--foreground) 8%, transparent)}}@media (prefers-reduced-motion:no-preference){.motion-safe\:animate-pulse{animation:var(--animate-pulse)}}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:gap-3{gap:calc(var(--spacing) * 3)}}.\[\&_p\]\:not-last\:mb-2 p:not(:last-child){margin-bottom:calc(var(--spacing) * 2)}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\:has\(\>svg\)\]\:pl-10:has(>svg){padding-left:calc(var(--spacing) * 10)}.\[\&\>\[data-slot\=field-content\]\]\:min-w-0>[data-slot=field-content]{min-width:calc(var(--spacing) * 0)}.\[\&\>\[data-slot\=field-content\]\]\:flex-1>[data-slot=field-content]{flex:1}@media (min-width:40rem){.sm\:\[\&\>\[data-slot\=field-content\]\]\:flex-1>[data-slot=field-content]{flex:1}}.\[\&\>\[data-slot\=field-label\]\]\:mb-0>[data-slot=field-label]{margin-bottom:calc(var(--spacing) * 0)}.\[\&\>\[data-slot\=field-label\]\]\:shrink-0>[data-slot=field-label]{flex-shrink:0}.\[\&\>\[data-slot\=field-label\]\]\:pt-1\.5>[data-slot=field-label]{padding-top:calc(var(--spacing) * 1.5)}@media (min-width:40rem){.sm\:\[\&\>\[data-slot\=field-label\]\]\:mb-0>[data-slot=field-label]{margin-bottom:calc(var(--spacing) * 0)}.sm\:\[\&\>\[data-slot\=field-label\]\]\:shrink-0>[data-slot=field-label]{flex-shrink:0}.sm\:\[\&\>\[data-slot\=field-label\]\]\:pt-1\.5>[data-slot=field-label]{padding-top:calc(var(--spacing) * 1.5)}}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-3>svg{top:calc(var(--spacing) * 3)}.\[\&\>svg\]\:left-3>svg{left:calc(var(--spacing) * 3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}:root,[data-theme=light]{--foreground:#121212;--background:#efefef;--muted-foreground:#646464;--border:#12121224;--destructive:#7b2626;--paper:#fafafa;--ui-surface:#fafafa;--ink:#1a1a1a;--ink-muted:#6f6f6f}[data-theme=dark]{--foreground:#ececec;--background:#0d0d0d;--muted-foreground:#969696;--border:#ececec24;--destructive:#d47a7a;--paper:#0d0d0d;--ui-surface:#1a1a1a;--ink:#ececec;--ink-muted:#9a9a9a}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
@@ -0,0 +1,4 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Switch as SwitchPrimitive } from 'radix-ui';
3
+ declare function Switch({ className, ...props }: ComponentProps<typeof SwitchPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Switch };
package/dist/switch.js ADDED
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Switch as SwitchPrimitive } from 'radix-ui';
4
+ import { cn } from './internal/cn.js';
5
+ function Switch({ className, ...props }) {
6
+ return (_jsx(SwitchPrimitive.Root, { "data-slot": "switch", className: cn("peer border-border bg-foreground/10 aria-invalid:border-destructive aria-invalid:data-[state=checked]:border-destructive data-[state=checked]:border-foreground data-[state=checked]:bg-foreground relative inline-flex h-5 w-8 shrink-0 items-center rounded-full border px-px transition-colors outline-none before:absolute before:inset-x-0 before:-inset-y-0.5 before:content-[''] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:outline-[var(--destructive)] motion-reduce:transition-none", className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: "bg-foreground/60 pointer-events-none block size-4 rounded-full shadow-xs transition-transform data-[state=checked]:translate-x-3 data-[state=checked]:bg-[var(--paper)] motion-reduce:transition-none" }) }));
7
+ }
8
+ export { Switch };
package/dist/tabs.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { Tabs as TabsPrimitive } from 'radix-ui';
4
+ declare function Tabs({ className, orientation, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
5
+ declare const tabsListVariants: (props?: ({
6
+ variant?: "line" | "default" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare function TabsList({ className, variant, ...props }: React.ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants>): import("react/jsx-runtime").JSX.Element;
9
+ declare function TabsTrigger({ className, visual, children, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger> & {
10
+ visual?: 'default' | 'compact';
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
13
+ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };
package/dist/tabs.js ADDED
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cva } from 'class-variance-authority';
4
+ import { Tabs as TabsPrimitive } from 'radix-ui';
5
+ import { cn } from './internal/cn.js';
6
+ function Tabs({ className, orientation = 'horizontal', ...props }) {
7
+ return (_jsx(TabsPrimitive.Root, { orientation: orientation, "data-slot": "tabs", "data-orientation": orientation, className: cn('group/tabs data-[orientation=vertical]:flex data-[orientation=vertical]:items-start data-[orientation=vertical]:gap-4', className), ...props }));
8
+ }
9
+ const tabsListVariants = cva('group/tabs-list inline-flex h-fit max-w-full w-fit flex-wrap gap-0.5 text-muted-foreground group-data-[orientation=vertical]/tabs:flex-col group-data-[orientation=vertical]/tabs:items-stretch', {
10
+ variants: {
11
+ variant: {
12
+ default: 'rounded-md bg-foreground/[0.07] p-0.5 has-[[data-visual=compact]]:rounded-none has-[[data-visual=compact]]:bg-transparent has-[[data-visual=compact]]:p-0',
13
+ line: 'gap-1 border-b border-border bg-transparent group-data-[orientation=vertical]/tabs:border-b-0 group-data-[orientation=vertical]/tabs:border-r',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: 'default',
18
+ },
19
+ });
20
+ function TabsList({ className, variant = 'default', ...props }) {
21
+ return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", "data-variant": variant, className: cn(tabsListVariants({ variant }), className), ...props }));
22
+ }
23
+ function TabsTrigger({ className, visual = 'default', children, ...props }) {
24
+ return (_jsx(TabsPrimitive.Trigger, { "data-slot": "tabs-trigger", "data-visual": visual, className: cn('inline-flex items-center justify-center px-0 py-0 text-xs transition-colors focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:pointer-events-none disabled:opacity-50', visual === 'compact'
25
+ ? 'group h-11 flex-none before:hidden after:hidden data-[state=active]:bg-transparent data-[state=active]:font-normal'
26
+ : 'data-[state=active]:text-foreground min-h-7 rounded-sm px-2.5 py-1 data-[state=active]:bg-[var(--ui-surface,var(--paper))] data-[state=active]:font-medium data-[state=active]:shadow-sm', 'data-[state=inactive]:text-muted-foreground hover:text-foreground', 'group-data-[variant=line]/tabs-list:data-[state=active]:border-foreground group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:border-b-2 group-data-[variant=line]/tabs-list:border-transparent group-data-[variant=line]/tabs-list:px-2 group-data-[variant=line]/tabs-list:py-2 group-data-[variant=line]/tabs-list:group-data-[orientation=vertical]/tabs:border-r-2 group-data-[variant=line]/tabs-list:group-data-[orientation=vertical]/tabs:border-b-0 group-data-[variant=line]/tabs-list:before:hidden group-data-[variant=line]/tabs-list:after:hidden group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none', className), ...props, children: visual === 'compact' ? (_jsx("span", { className: "group-data-[state=active]:bg-foreground/10 group-data-[state=active]:text-foreground rounded-sm px-2 py-1.5 group-data-[state=active]:font-medium", children: children })) : (children) }));
27
+ }
28
+ function TabsContent({ className, ...props }) {
29
+ return (_jsx(TabsPrimitive.Content, { "data-slot": "tabs-content", className: cn('text-xs outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid', className), ...props }));
30
+ }
31
+ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };
@@ -0,0 +1,3 @@
1
+ import type { ComponentProps } from 'react';
2
+ declare function Textarea({ className, ...props }: ComponentProps<'textarea'>): import("react/jsx-runtime").JSX.Element;
3
+ export { Textarea };
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from './internal/cn.js';
3
+ function Textarea({ className, ...props }) {
4
+ return (_jsx("textarea", { "data-slot": "textarea", className: cn('border-border placeholder:text-muted-foreground aria-invalid:border-destructive bg-foreground/[0.03] min-h-20 w-full min-w-0 resize-y rounded-sm border px-2 py-1.5 text-xs leading-relaxed outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ink)] focus-visible:outline-solid disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:focus-visible:outline-[var(--destructive)]', className), ...props }));
5
+ }
6
+ export { Textarea };
@@ -0,0 +1,7 @@
1
+ import type { ComponentProps } from 'react';
2
+ import { Tooltip as TooltipPrimitive } from 'radix-ui';
3
+ declare function TooltipProvider({ delayDuration, ...props }: ComponentProps<typeof TooltipPrimitive.Provider>): import("react/jsx-runtime").JSX.Element;
4
+ declare const Tooltip: import("react").FC<TooltipPrimitive.TooltipProps>;
5
+ declare const TooltipTrigger: import("react").ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
6
+ declare function TooltipContent({ className, sideOffset, collisionPadding, ...props }: ComponentProps<typeof TooltipPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
7
+ export { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent };