@nadicodeai/ui 12.1.82 → 12.1.83

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 (133) hide show
  1. package/dist/components/accordion.js +1 -1
  2. package/dist/components/account-menu.js +1 -1
  3. package/dist/components/agent-card.js +1 -1
  4. package/dist/components/agent-profile.js +1 -1
  5. package/dist/components/alert-dialog.js +3 -3
  6. package/dist/components/alert.js +1 -1
  7. package/dist/components/automation-section.js +2 -2
  8. package/dist/components/avatar.d.ts +9 -1
  9. package/dist/components/avatar.d.ts.map +1 -1
  10. package/dist/components/avatar.js +8 -2
  11. package/dist/components/badge.d.ts +1 -1
  12. package/dist/components/badge.d.ts.map +1 -1
  13. package/dist/components/badge.js +5 -6
  14. package/dist/components/button-group.js +4 -4
  15. package/dist/components/button.d.ts.map +1 -1
  16. package/dist/components/button.js +9 -9
  17. package/dist/components/calendar.js +3 -3
  18. package/dist/components/card.d.ts.map +1 -1
  19. package/dist/components/card.js +6 -11
  20. package/dist/components/catalog-tile.d.ts +2 -4
  21. package/dist/components/catalog-tile.d.ts.map +1 -1
  22. package/dist/components/catalog-tile.js +2 -2
  23. package/dist/components/channel-view.d.ts.map +1 -1
  24. package/dist/components/channel-view.js +8 -8
  25. package/dist/components/chart-card.js +1 -1
  26. package/dist/components/chart.js +1 -1
  27. package/dist/components/checkbox.d.ts.map +1 -1
  28. package/dist/components/checkbox.js +2 -2
  29. package/dist/components/code-block.d.ts +8 -0
  30. package/dist/components/code-block.d.ts.map +1 -0
  31. package/dist/components/code-block.js +7 -0
  32. package/dist/components/collection-filters.d.ts.map +1 -1
  33. package/dist/components/collection-filters.js +3 -3
  34. package/dist/components/collection-toolbar.js +1 -1
  35. package/dist/components/combobox.js +3 -3
  36. package/dist/components/command.js +3 -3
  37. package/dist/components/copy-button.d.ts +9 -0
  38. package/dist/components/copy-button.d.ts.map +1 -0
  39. package/dist/components/copy-button.js +25 -0
  40. package/dist/components/data-table.d.ts +7 -7
  41. package/dist/components/data-table.d.ts.map +1 -1
  42. package/dist/components/data-table.js +21 -51
  43. package/dist/components/dialog.js +3 -3
  44. package/dist/components/drawer.js +4 -4
  45. package/dist/components/dropdown-menu.js +6 -6
  46. package/dist/components/empty-state.d.ts +10 -16
  47. package/dist/components/empty-state.d.ts.map +1 -1
  48. package/dist/components/empty-state.js +1 -1
  49. package/dist/components/field.js +3 -3
  50. package/dist/components/file-diff.js +1 -1
  51. package/dist/components/footer.d.ts.map +1 -1
  52. package/dist/components/footer.js +3 -3
  53. package/dist/components/form-dialog.d.ts +4 -0
  54. package/dist/components/form-dialog.d.ts.map +1 -0
  55. package/dist/components/form-dialog.js +13 -0
  56. package/dist/components/form-drawer.d.ts +1 -8
  57. package/dist/components/form-drawer.d.ts.map +1 -1
  58. package/dist/components/form-drawer.js +1 -8
  59. package/dist/components/glass-control.js +1 -1
  60. package/dist/components/input-group.js +3 -3
  61. package/dist/components/input-otp.js +2 -2
  62. package/dist/components/input.js +1 -1
  63. package/dist/components/item.js +2 -2
  64. package/dist/components/kbd.js +1 -1
  65. package/dist/components/kpi-card.d.ts +3 -3
  66. package/dist/components/kpi-card.d.ts.map +1 -1
  67. package/dist/components/kpi-card.js +5 -6
  68. package/dist/components/label-system.js +2 -2
  69. package/dist/components/label.js +1 -1
  70. package/dist/components/menubar.js +6 -6
  71. package/dist/components/native-select.js +1 -1
  72. package/dist/components/navigation-menu.js +4 -4
  73. package/dist/components/object-workspace.d.ts +2 -1
  74. package/dist/components/object-workspace.d.ts.map +1 -1
  75. package/dist/components/object-workspace.js +12 -6
  76. package/dist/components/page-actions.d.ts +3 -3
  77. package/dist/components/page-actions.d.ts.map +1 -1
  78. package/dist/components/page-actions.js +6 -3
  79. package/dist/components/page-header.js +1 -1
  80. package/dist/components/picture-label.d.ts.map +1 -1
  81. package/dist/components/picture-label.js +1 -1
  82. package/dist/components/plugin-slot-boundary.js +1 -1
  83. package/dist/components/popover.js +1 -1
  84. package/dist/components/reading-column.d.ts +1 -7
  85. package/dist/components/reading-column.d.ts.map +1 -1
  86. package/dist/components/reading-column.js +1 -7
  87. package/dist/components/record-identity.d.ts +8 -0
  88. package/dist/components/record-identity.d.ts.map +1 -0
  89. package/dist/components/record-identity.js +5 -0
  90. package/dist/components/select.js +2 -2
  91. package/dist/components/settings-facts.d.ts +2 -1
  92. package/dist/components/settings-facts.d.ts.map +1 -1
  93. package/dist/components/settings-facts.js +5 -3
  94. package/dist/components/settings-form.d.ts +9 -0
  95. package/dist/components/settings-form.d.ts.map +1 -0
  96. package/dist/components/settings-form.js +85 -0
  97. package/dist/components/settings-section.d.ts +5 -2
  98. package/dist/components/settings-section.d.ts.map +1 -1
  99. package/dist/components/settings-section.js +13 -6
  100. package/dist/components/sheet.d.ts.map +1 -1
  101. package/dist/components/sheet.js +3 -3
  102. package/dist/components/sidebar.js +9 -9
  103. package/dist/components/skeleton.d.ts +3 -5
  104. package/dist/components/skeleton.d.ts.map +1 -1
  105. package/dist/components/skeleton.js +2 -6
  106. package/dist/components/sonner.js +4 -4
  107. package/dist/components/status-row.js +1 -1
  108. package/dist/components/switch.js +1 -1
  109. package/dist/components/table.d.ts +4 -1
  110. package/dist/components/table.d.ts.map +1 -1
  111. package/dist/components/table.js +9 -9
  112. package/dist/components/tabs.d.ts +1 -1
  113. package/dist/components/tabs.d.ts.map +1 -1
  114. package/dist/components/tabs.js +7 -7
  115. package/dist/components/tag.d.ts +5 -3
  116. package/dist/components/tag.d.ts.map +1 -1
  117. package/dist/components/tag.js +10 -5
  118. package/dist/components/text-link.js +1 -1
  119. package/dist/components/textarea.js +1 -1
  120. package/dist/components/toggle-group.js +2 -2
  121. package/dist/components/toggle.js +3 -3
  122. package/dist/components/tooltip.js +1 -1
  123. package/dist/index.d.ts +5 -0
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +5 -0
  126. package/dist/internal/empty.d.ts +2 -6
  127. package/dist/internal/empty.d.ts.map +1 -1
  128. package/dist/internal/empty.js +5 -10
  129. package/dist/internal/footer-strip.js +1 -1
  130. package/dist/lib/merge-tokens.generated.js +2 -2
  131. package/dist/standalone/index.js +1 -1
  132. package/dist/styles/components.css +27 -4
  133. package/package.json +2 -2
@@ -9,7 +9,7 @@ function AccordionItem({ className, ...props }) {
9
9
  return (_jsx(AccordionPrimitive.Item, { "data-slot": "accordion-item", className: cn("not-last:border-b", className), ...props }));
10
10
  }
11
11
  function AccordionTrigger({ className, children, ...props }) {
12
- return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("nc-transition-paint group/accordion-trigger relative flex min-h-touch-target flex-1 items-start justify-between rounded-md border border-transparent py-2.5 text-left text-sm font-medium hover:underline aria-disabled:pointer-events-none aria-disabled:opacity-50 [@media(hover:hover)_and_(pointer:fine)]:min-h-0 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className), ...props, children: [children, _jsx(ChevronDownIcon, { "data-slot": "accordion-trigger-icon", className: "nc-transition-transform pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:rotate-180" })] }) }));
12
+ return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("nc-transition-paint group/accordion-trigger relative flex min-h-touch-target flex-1 items-start justify-between rounded-sm border border-transparent py-2.5 text-left text-sm font-medium hover:underline aria-disabled:pointer-events-none aria-disabled:opacity-50 [@media(hover:hover)_and_(pointer:fine)]:min-h-0 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className), ...props, children: [children, _jsx(ChevronDownIcon, { "data-slot": "accordion-trigger-icon", className: "nc-transition-transform pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:rotate-180" })] }) }));
13
13
  }
14
14
  function AccordionContent({ className, children, ...props }) {
15
15
  return (_jsx(AccordionPrimitive.Panel, { "data-slot": "accordion-content", className: "overflow-hidden text-sm", ...props, children: _jsx("div", { className: cn("h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className), children: children }) }));
@@ -18,5 +18,5 @@ export function AccountMenuIdentity({ className, identity, pictureOnly = false,
18
18
  * One composition, so the Portal and the desktop read the same.
19
19
  */
20
20
  export function AccountMenu({ align = "start", children, className, disabled, headerAction, identity, label, onOpenChange, pictureOnly = false, side = "top", triggerRender, }) {
21
- return (_jsxs(DropdownMenu, { onOpenChange: onOpenChange, children: [_jsxs(DropdownMenuTrigger, { "aria-label": `${label}: ${identity.name}`, disabled: disabled, render: triggerRender ?? (_jsx("button", { className: "flex w-full min-w-0 items-center gap-2 rounded-md p-1.5 text-left outline-none hover:bg-accent focus-visible:nc-focus-outline focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 data-[popup-open]:bg-accent", type: "button" })), children: [_jsx(AccountMenuIdentity, { className: pictureOnly ? undefined : "flex-1", identity: identity, pictureOnly: pictureOnly }), pictureOnly ? null : (_jsx(ChevronsUpDown, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 text-muted-foreground" }))] }), _jsxs(DropdownMenuContent, { align: align, "aria-label": `${label}: ${identity.name}`, className: cn("w-72 max-w-[calc(100vw-2rem)]", className), density: "comfortable", side: side, sideOffset: 8, children: [_jsxs(DropdownMenuGroup, { className: "flex min-w-0 items-center gap-1 pr-1.5", children: [_jsx(AccountMenuIdentity, { className: "min-w-0 flex-1 px-2 py-2", identity: identity, size: "lg" }), headerAction] }), _jsx(DropdownMenuSeparator, {}), children] })] }));
21
+ return (_jsxs(DropdownMenu, { onOpenChange: onOpenChange, children: [_jsxs(DropdownMenuTrigger, { "aria-label": `${label}: ${identity.name}`, disabled: disabled, render: triggerRender ?? (_jsx("button", { className: "flex w-full min-w-0 items-center gap-2 rounded-sm p-1.5 text-left outline-none hover:bg-accent focus-visible:nc-focus-outline focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 data-[popup-open]:bg-accent", type: "button" })), children: [_jsx(AccountMenuIdentity, { className: pictureOnly ? undefined : "flex-1", identity: identity, pictureOnly: pictureOnly }), pictureOnly ? null : (_jsx(ChevronsUpDown, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 text-muted-foreground" }))] }), _jsxs(DropdownMenuContent, { align: align, "aria-label": `${label}: ${identity.name}`, className: cn("w-72 max-w-[calc(100vw-2rem)]", className), density: "comfortable", side: side, sideOffset: 8, children: [_jsxs(DropdownMenuGroup, { className: "flex min-w-0 items-center gap-1 pr-1.5", children: [_jsx(AccountMenuIdentity, { className: "min-w-0 flex-1 px-2 py-2", identity: identity, size: "lg" }), headerAction] }), _jsx(DropdownMenuSeparator, {}), children] })] }));
22
22
  }
@@ -9,6 +9,6 @@ function AgentCard({ action, className, job, meta, name, status, visual, ...prop
9
9
  const hasMeta = hasSlotContent(meta);
10
10
  const hasAction = hasSlotContent(action);
11
11
  const hasVisual = hasSlotContent(visual);
12
- return (_jsxs(Card, { className: cn("h-full", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-(--card-spacing) px-(--card-spacing)", hasVisual && "grid-cols-[auto_minmax(0,1fr)]"), children: [hasVisual ? (_jsx("div", { className: "grid size-24 place-items-center overflow-hidden", "data-slot": "agent-card-visual", children: visual })) : null, _jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xs", children: [_jsx(CardTitle, { className: "leading-tight font-semibold break-words", children: name }), _jsx(CardDescription, { className: "leading-snug", children: job }), hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] })] }), hasMeta || hasAction ? (_jsxs(CardFooter, { className: "mt-auto gap-nadicode-sm border-t py-nadicode-sm", children: [hasMeta ? (_jsx("div", { className: "min-w-0 flex-1 text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasAction ? (_jsx("div", { className: "ml-auto shrink-0", "data-slot": "agent-card-action", children: action })) : null] })) : null] }));
12
+ return (_jsxs(Card, { className: cn("h-full", className), ...props, children: [_jsxs("div", { className: cn("grid items-start gap-(--card-spacing) px-(--card-spacing)", hasVisual && "grid-cols-[auto_minmax(0,1fr)]"), children: [hasVisual ? (_jsx("div", { className: "grid size-24 place-items-center overflow-hidden", "data-slot": "agent-card-visual", children: visual })) : null, _jsxs("div", { className: "grid min-w-0 content-start gap-nadicode-xs", children: [_jsx(CardTitle, { className: "break-words", children: name }), _jsx(CardDescription, { children: job }), hasStatus ? (_jsx("div", { className: "flex flex-wrap items-center gap-nadicode-xxs pt-nadicode-xxs", "data-slot": "agent-card-status", children: status })) : null] })] }), hasMeta || hasAction ? (_jsxs(CardFooter, { className: "mt-auto gap-nadicode-sm", children: [hasMeta ? (_jsx("div", { className: "min-w-0 flex-1 text-xs text-muted-foreground", "data-slot": "agent-card-meta", children: meta })) : null, hasAction ? (_jsx("div", { className: "ml-auto shrink-0", "data-slot": "agent-card-action", children: action })) : null] })) : null] }));
13
13
  }
14
14
  export { AgentCard };
@@ -35,7 +35,7 @@ export function AgentProfileCard({ orb, name, description, descriptionMissingLab
35
35
  },
36
36
  ];
37
37
  const text = description?.trim();
38
- return (_jsxs(Card, { className: "@container/agent-profile min-w-0", render: _jsx("section", { "aria-labelledby": headingProps?.id }), "data-slot": "agent-profile", children: [_jsxs(CardContent, { className: "grid min-w-0 gap-nadicode-lg @3xl/agent-profile:grid-cols-[minmax(0,1fr)_minmax(18rem,22rem)] @3xl/agent-profile:gap-nadicode-xl", children: [_jsxs("div", { className: "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-nadicode-md", children: [_jsx("div", { className: "shrink-0", children: orb(AGENT_PROFILE_ORB_SIZE) }), editor ? (_jsxs("div", { className: "grid min-w-0 gap-nadicode-md", "data-slot": "agent-profile-editor", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-2xl leading-8 font-semibold break-words text-foreground outline-none", headingProps?.className), children: name }), editor] })) : (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-1 gap-y-nadicode-sm", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-2xl leading-8 font-semibold break-words text-foreground outline-none", headingProps?.className), children: name }), edit ? (_jsx(Button, { "aria-label": edit.label, onClick: edit.onClick, ref: edit.ref, size: "icon", title: edit.label, type: "button", variant: "ghost", children: _jsx(PencilIcon, { "aria-hidden": "true", "data-icon": true }) })) : null, actions ? (_jsx("div", { className: "ml-auto flex shrink-0 items-center gap-2 pl-nadicode-sm", "data-slot": "agent-profile-actions", children: _jsx(PageActionsRow, { ...actions }) })) : null] }), _jsx("p", { className: "line-clamp-2 min-w-0 text-sm text-muted-foreground", title: text, children: _jsx(TableValue, { missingLabel: descriptionMissingLabel, value: text }) }), _jsx("dl", { className: "mt-nadicode-sm flex min-w-0 flex-wrap gap-x-nadicode-lg gap-y-nadicode-sm", "data-slot": "agent-profile-facts", children: facts.map((fact) => (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsx("dt", { className: "text-xs text-muted-foreground", children: fact.label }), _jsx("dd", { className: "flex min-h-6 min-w-0 items-center text-sm", children: fact.value })] }, fact.label))) })] }))] }), settings ? (_jsx("div", { className: "grid min-w-0 content-start gap-nadicode-md border-t border-border pt-nadicode-md @3xl/agent-profile:border-t-0 @3xl/agent-profile:border-l @3xl/agent-profile:pt-0 @3xl/agent-profile:pl-nadicode-lg", "data-slot": "agent-profile-settings", children: settings })) : null] }), _jsx(FooterStrip, { hint: footerHint, hintSlot: "agent-profile-hint", children: footer })] }));
38
+ return (_jsxs(Card, { className: "@container/agent-profile min-w-0", render: _jsx("section", { "aria-labelledby": headingProps?.id }), "data-slot": "agent-profile", children: [_jsxs(CardContent, { className: "grid min-w-0 gap-nadicode-lg @3xl/agent-profile:grid-cols-[minmax(0,1fr)_minmax(18rem,22rem)] @3xl/agent-profile:gap-nadicode-xl", children: [_jsxs("div", { className: "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-nadicode-md", children: [_jsx("div", { className: "shrink-0", children: orb(AGENT_PROFILE_ORB_SIZE) }), editor ? (_jsxs("div", { className: "grid min-w-0 gap-nadicode-md", "data-slot": "agent-profile-editor", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-heading-md break-words text-foreground outline-none", headingProps?.className), children: name }), editor] })) : (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-1 gap-y-nadicode-sm", children: [_jsx("h1", { ...headingProps, className: cn("min-w-0 text-heading-md break-words text-foreground outline-none", headingProps?.className), children: name }), edit ? (_jsx(Button, { "aria-label": edit.label, onClick: edit.onClick, ref: edit.ref, size: "icon", title: edit.label, type: "button", variant: "ghost", children: _jsx(PencilIcon, { "aria-hidden": "true", "data-icon": true }) })) : null, actions ? (_jsx("div", { className: "ml-auto flex shrink-0 items-center gap-2 pl-nadicode-sm", "data-slot": "agent-profile-actions", children: _jsx(PageActionsRow, { ...actions }) })) : null] }), _jsx("p", { className: "line-clamp-2 min-w-0 text-sm text-muted-foreground", title: text, children: _jsx(TableValue, { missingLabel: descriptionMissingLabel, value: text }) }), _jsx("dl", { className: "mt-nadicode-sm flex min-w-0 flex-wrap gap-x-nadicode-lg gap-y-nadicode-sm", "data-slot": "agent-profile-facts", children: facts.map((fact) => (_jsxs("div", { className: "grid min-w-0 gap-1", children: [_jsx("dt", { className: "text-xs text-muted-foreground", children: fact.label }), _jsx("dd", { className: "flex min-h-6 min-w-0 items-center text-sm", children: fact.value })] }, fact.label))) })] }))] }), settings ? (_jsx("div", { className: "grid min-w-0 content-start gap-nadicode-md border-t border-border pt-nadicode-md @3xl/agent-profile:border-t-0 @3xl/agent-profile:border-l @3xl/agent-profile:pt-0 @3xl/agent-profile:pl-nadicode-lg", "data-slot": "agent-profile-settings", children: settings })) : null] }), _jsx(FooterStrip, { hint: footerHint, hintSlot: "agent-profile-hint", children: footer })] }));
39
39
  }
40
40
  /**
41
41
  * A model chosen from a list: the trigger and every option read the model the
@@ -23,16 +23,16 @@ function AlertDialogHeader({ className, ...props }) {
23
23
  return (_jsx("div", { "data-slot": "alert-dialog-header", className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className), ...props }));
24
24
  }
25
25
  function AlertDialogFooter({ className, ...props }) {
26
- return (_jsx("div", { "data-slot": "alert-dialog-footer", className: cn("-mx-nadicode-lg -mb-nadicode-lg flex flex-col-reverse gap-2 p-nadicode-md group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className), ...props }));
26
+ return (_jsx("div", { "data-slot": "alert-dialog-footer", className: cn("-mx-nadicode-lg -mb-nadicode-lg flex flex-col-reverse gap-2 rounded-b-lg border-t border-border bg-recessed px-nadicode-lg py-control-padding-inline group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end", className), ...props }));
27
27
  }
28
28
  function AlertDialogMedia({ className, ...props }) {
29
29
  return (_jsx("div", { "data-slot": "alert-dialog-media", className: cn("mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6", className), ...props }));
30
30
  }
31
31
  function AlertDialogTitle({ className, ...props }) {
32
- return (_jsx(AlertDialogPrimitive.Title, { "data-slot": "alert-dialog-title", className: cn("min-w-0 text-base font-medium break-words sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className), ...props }));
32
+ return (_jsx(AlertDialogPrimitive.Title, { "data-slot": "alert-dialog-title", className: cn("min-w-0 text-heading-sm break-words sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2", className), ...props }));
33
33
  }
34
34
  function AlertDialogDescription({ className, ...props }) {
35
- return (_jsx(AlertDialogPrimitive.Description, { "data-slot": "alert-dialog-description", className: cn("text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props }));
35
+ return (_jsx(AlertDialogPrimitive.Description, { "data-slot": "alert-dialog-description", className: cn("text-body-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props }));
36
36
  }
37
37
  // An action is also a Base UI Close so the standard alert-dialog contract
38
38
  // dismisses after confirmation while preserving the Button API.
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cva } from "class-variance-authority";
3
3
  import { cn } from "../lib/utils.js";
4
- const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-md border px-2.5 py-2 text-left text-sm sm:has-data-[slot=alert-action]:grid-cols-[minmax(0,1fr)_auto] sm:has-[>svg]:has-data-[slot=alert-action]:grid-cols-[auto_minmax(0,1fr)_auto] has-[>svg]:grid-cols-[auto_minmax(0,1fr)] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
4
+ const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-sm border px-2.5 py-2 text-left text-sm sm:has-data-[slot=alert-action]:grid-cols-[minmax(0,1fr)_auto] sm:has-[>svg]:has-data-[slot=alert-action]:grid-cols-[auto_minmax(0,1fr)_auto] has-[>svg]:grid-cols-[auto_minmax(0,1fr)] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
5
5
  variants: {
6
6
  variant: {
7
7
  default: "bg-card text-card-foreground",
@@ -47,10 +47,10 @@ const environmentStateMeta = {
47
47
  invalid: { label: "Needs review", variant: "destructive" },
48
48
  };
49
49
  function AutomationSection({ title, description, actions, automations = [], emptyTitle = "No automations configured", emptyDescription = "Add automation rows from the consuming app when there is work to run.", onAutomationEnabledChange, children, className, ...props }) {
50
- return (_jsxs("section", { "data-slot": "automation-section", className: cn("grid gap-5 rounded-md border bg-background p-5", className), ...props, children: [(title || description || actions) && (_jsxs("div", { "data-slot": "automation-section-header", className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { className: "grid gap-1", children: [title && (_jsx("h2", { "data-slot": "automation-section-title", className: "text-base font-semibold", children: title })), description && (_jsx("p", { "data-slot": "automation-section-description", className: "text-sm text-muted-foreground", children: description }))] }), actions && _jsx("div", { "data-slot": "automation-section-actions", children: actions })] })), automations.length > 0 ? (_jsx(ItemGroup, { "data-slot": "automation-section-items", className: "gap-2", children: automations.map((automation) => {
50
+ return (_jsxs("section", { "data-slot": "automation-section", className: cn("grid gap-5 rounded-sm border bg-background p-5", className), ...props, children: [(title || description || actions) && (_jsxs("div", { "data-slot": "automation-section-header", className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { className: "grid gap-1", children: [title && (_jsx("h2", { "data-slot": "automation-section-title", className: "text-heading-xs", children: title })), description && (_jsx("p", { "data-slot": "automation-section-description", className: "text-sm text-muted-foreground", children: description }))] }), actions && _jsx("div", { "data-slot": "automation-section-actions", children: actions })] })), automations.length > 0 ? (_jsx(ItemGroup, { "data-slot": "automation-section-items", className: "gap-2", children: automations.map((automation) => {
51
51
  const status = automation.status ?? "ready";
52
52
  return (_jsxs(Item, { role: "listitem", "data-slot": "automation-section-item", "data-status": status, "data-enabled": automation.enabled, "data-disabled": automation.disabled ? true : undefined, variant: "outline", children: [_jsx(ItemMedia, { variant: "icon", "aria-hidden": "true", children: automationStatusMeta[status].icon }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: automation.title }), automation.description && (_jsx(ItemDescription, { children: automation.description })), automation.meta && (_jsx("div", { className: "text-sm text-muted-foreground", children: automation.meta }))] }), _jsxs(ItemActions, { children: [_jsx(Badge, { variant: automationStatusMeta[status].variant, children: automationStatusMeta[status].label }), _jsx(Switch, { "aria-label": automation.toggleLabel ?? "Toggle automation", checked: Boolean(automation.enabled), disabled: automation.disabled, onCheckedChange: (enabled) => onAutomationEnabledChange?.(automation.id, enabled) }), automation.actions] })] }, automation.id));
53
- }) })) : (_jsx(FeedbackState, { "data-slot": "automation-section-empty", status: "empty", title: emptyTitle, description: emptyDescription, compact: true, className: "rounded-md" })), children] }));
53
+ }) })) : (_jsx(FeedbackState, { "data-slot": "automation-section-empty", status: "empty", title: emptyTitle, description: emptyDescription, compact: true, className: "rounded-sm" })), children] }));
54
54
  }
55
55
  function renderAutomationSettingsField(field) {
56
56
  return (_jsx(SettingsField, { id: field.id, label: field.label, description: field.description, error: field.error, invalid: field.invalid, disabled: field.disabled, required: field.required, children: field.control ??
@@ -8,5 +8,13 @@ declare function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallbac
8
8
  declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
9
9
  declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
10
  declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
- export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge };
11
+ declare function AvatarUploadButton({ label, pendingLabel, src, fallback, busy, onClick, }: {
12
+ label: string;
13
+ pendingLabel: string;
14
+ src?: string;
15
+ fallback: React.ReactNode;
16
+ busy?: boolean;
17
+ onClick: () => void;
18
+ }): React.JSX.Element;
19
+ export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge, AvatarUploadButton, };
12
20
  //# sourceMappingURL=avatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAChC,qBAYA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,qBAQxE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,qBAW9E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAczE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYxE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7E;AAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQlE,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAChC,qBAYA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,qBAQxE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,qBAW9E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAczE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYxE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7E;AAED,iBAAS,kBAAkB,CAAC,EAC1B,KAAK,EACL,YAAY,EACZ,GAAG,EACH,QAAQ,EACR,IAAY,EACZ,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,qBA0BA;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,kBAAkB,GACnB,CAAC"}
@@ -1,5 +1,8 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
3
+ import { CameraIcon } from "lucide-react";
4
+ import { Button } from "./button.js";
5
+ import { WaitingLine } from "./waiting-line.js";
3
6
  import { cn } from "../lib/utils.js";
4
7
  function Avatar({ className, size = "default", ...props }) {
5
8
  return (_jsx(AvatarPrimitive.Root, { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6", className), ...props }));
@@ -21,4 +24,7 @@ function AvatarGroup({ className, ...props }) {
21
24
  function AvatarGroupCount({ className, ...props }) {
22
25
  return (_jsx("div", { "data-slot": "avatar-group-count", className: cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className), ...props }));
23
26
  }
24
- export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge };
27
+ function AvatarUploadButton({ label, pendingLabel, src, fallback, busy = false, onClick, }) {
28
+ return (_jsxs("div", { className: "relative inline-flex w-20 shrink-0 flex-col items-center", children: [_jsxs(Button, { "aria-label": busy ? pendingLabel : label, "aria-busy": busy || undefined, disabled: busy, type: "button", variant: "ghost", className: "group/avatar-upload relative size-20 shrink-0 rounded-full p-0", onClick: onClick, children: [_jsxs(Avatar, { "aria-hidden": "true", className: "size-full", children: [_jsx(AvatarImage, { src: src, alt: "" }), _jsx(AvatarFallback, { className: "text-xl", children: fallback })] }), _jsx("span", { "aria-hidden": "true", className: "absolute inset-0 flex items-center justify-center rounded-full bg-background/80 opacity-0 group-hover/avatar-upload:opacity-100 group-focus-visible/avatar-upload:opacity-100 group-aria-busy/avatar-upload:opacity-100", children: _jsx(CameraIcon, { "data-icon": "inline-start", className: "size-5" }) })] }), busy ? _jsx(WaitingLine, { className: "absolute inset-x-0 -bottom-3", decorative: true }) : null] }));
29
+ }
30
+ export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge, AvatarUploadButton, };
@@ -1,7 +1,7 @@
1
1
  import { useRender } from "@base-ui/react/use-render";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | "blue" | "gray" | "green" | "red" | "amber" | null | undefined;
4
+ variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | "blue" | "gray" | "green" | "pink" | "purple" | "red" | "teal" | "amber" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  declare function Badge({ className, variant, render, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
7
7
  export { Badge, badgeVariants };
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EA2BlB,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,8FAevE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EA0BlB,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,8FAevE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -2,7 +2,7 @@ import { mergeProps } from "@base-ui/react/merge-props";
2
2
  import { useRender } from "@base-ui/react/use-render";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { cn } from "../lib/utils.js";
5
- const badgeVariants = cva("group/badge inline-flex min-h-5 w-fit max-w-full shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border border-transparent px-2 py-px text-xs font-medium transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive [&>svg]:pointer-events-none [&>svg]:size-3!", {
5
+ const badgeVariants = cva("group/badge inline-flex min-h-5 w-fit max-w-full shrink-0 items-center justify-center gap-1 overflow-hidden rounded-sm border border-transparent px-2 py-px text-xs font-medium transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive [&>svg]:pointer-events-none [&>svg]:size-3!", {
6
6
  variants: {
7
7
  variant: {
8
8
  default: "bg-primary text-primary-foreground [a]:hover:bg-primary-hover",
@@ -10,16 +10,15 @@ const badgeVariants = cva("group/badge inline-flex min-h-5 w-fit max-w-full shri
10
10
  destructive: "bg-destructive-soft text-destructive-soft-foreground [a]:hover:border-destructive-soft-foreground",
11
11
  outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
12
12
  ghost: "hover:bg-muted hover:text-muted-foreground",
13
- link: "text-primary underline-offset-4 hover:underline",
14
- // The five semantic tones. Each is one soft/deep role pair — a tinted
15
- // ground with its own deep label — so a status reads as one unit at
16
- // AA in both modes. They are variants, not call-site classes, because
17
- // repainting a primitive where it is used is forbidden.
13
+ link: "text-(--nc-link) underline-offset-4 hover:underline",
18
14
  gray: "bg-accent text-muted-foreground",
19
15
  green: "bg-success-soft text-success-soft-foreground",
20
16
  red: "bg-destructive-soft text-destructive-soft-foreground",
21
17
  amber: "bg-warning-soft text-warning-soft-foreground",
22
18
  blue: "bg-info-soft text-info-soft-foreground",
19
+ teal: "bg-category-teal text-category-teal-foreground",
20
+ purple: "bg-category-purple text-category-purple-foreground",
21
+ pink: "bg-category-pink text-category-pink-foreground",
23
22
  },
24
23
  },
25
24
  defaultVariants: {
@@ -4,11 +4,11 @@ import { useRender } from "@base-ui/react/use-render";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { cn } from "../lib/utils.js";
6
6
  import { Separator } from "./separator.js";
7
- const buttonGroupVariants = cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1", {
7
+ const buttonGroupVariants = cva("flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-sm [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1", {
8
8
  variants: {
9
9
  orientation: {
10
- horizontal: "*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
11
- vertical: "flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0",
10
+ horizontal: "*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-sm! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0",
11
+ vertical: "flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-sm! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0",
12
12
  },
13
13
  },
14
14
  defaultVariants: {
@@ -22,7 +22,7 @@ function ButtonGroupText({ className, render, ...props }) {
22
22
  return useRender({
23
23
  defaultTagName: "div",
24
24
  props: mergeProps({
25
- className: cn("flex items-center gap-2 rounded-md border bg-muted px-control-padding-inline text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
25
+ className: cn("flex items-center gap-2 rounded-sm border bg-muted px-control-padding-inline text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
26
26
  }, props),
27
27
  render,
28
28
  state: {
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAuCnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,+BAQ7D;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAsCnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,+BAQ7D;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -2,27 +2,27 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Button as ButtonPrimitive } from "@base-ui/react/button";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { cn } from "../lib/utils.js";
5
- const buttonVariants = cva("group/button inline-flex min-h-touch-target min-w-touch-target shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,scale] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] select-none motion-safe:active:not-aria-[haspopup]:scale-[0.97] disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
5
+ const buttonVariants = cva("group/button inline-flex min-h-touch-target min-w-touch-target shrink-0 items-center justify-center rounded-sm border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,scale] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] select-none motion-safe:active:not-aria-[haspopup]:scale-[0.97] disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
6
6
  variants: {
7
7
  variant: {
8
8
  default: "bg-primary text-primary-foreground hover:bg-primary-hover active:bg-primary-active",
9
- outline: "border-border bg-transparent hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
9
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
10
10
  secondary: "border-border bg-secondary text-secondary-foreground hover:bg-accent aria-expanded:bg-accent aria-expanded:text-accent-foreground",
11
11
  ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
12
12
  brandGhost: "text-nc-identity-white hover:bg-nc-identity-white/10 hover:text-nc-identity-white aria-expanded:bg-nc-identity-white/10 aria-expanded:text-nc-identity-white",
13
13
  brandSolid: "bg-nc-identity-white text-nc-identity-ink hover:bg-nc-identity-white/90 hover:text-nc-identity-ink active:bg-nc-identity-white/80 active:text-nc-identity-ink",
14
- destructive: "bg-destructive-soft text-destructive-soft-foreground hover:border-destructive-soft-foreground",
14
+ destructive: "bg-destructive text-destructive-foreground hover:brightness-95",
15
15
  link: "text-primary underline-offset-4 hover:underline",
16
16
  },
17
17
  size: {
18
18
  default: "h-control-height gap-1.5 px-control-padding-inline has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [@media(hover:hover)_and_(pointer:fine)]:min-h-control-height",
19
- xs: "h-6 gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
20
- sm: "h-7 gap-1 px-control-padding-inline text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
21
- lg: "h-9 gap-1.5 px-control-padding-inline has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
19
+ xs: "h-nadicode-control-height-xs gap-1 px-2 text-xs in-data-[slot=button-group]:rounded-sm has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
20
+ sm: "h-nadicode-control-height-sm gap-1 px-control-padding-inline text-xs in-data-[slot=button-group]:rounded-sm has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
21
+ lg: "h-nadicode-control-height-lg gap-1.5 px-control-padding-inline has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
22
22
  icon: "size-control-height",
23
- "icon-xs": "size-6 in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
24
- "icon-sm": "size-7 in-data-[slot=button-group]:rounded-md",
25
- "icon-lg": "size-9",
23
+ "icon-xs": "size-nadicode-control-height-xs in-data-[slot=button-group]:rounded-sm [&_svg:not([class*='size-'])]:size-3",
24
+ "icon-sm": "size-nadicode-control-height-sm in-data-[slot=button-group]:rounded-sm",
25
+ "icon-lg": "size-nadicode-control-height-lg",
26
26
  },
27
27
  },
28
28
  defaultVariants: {
@@ -7,7 +7,7 @@ import { Button, buttonVariants } from "./button.js";
7
7
  import { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from "lucide-react";
8
8
  function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale, formatters, components, ...props }) {
9
9
  const defaultClassNames = getDefaultClassNames();
10
- return (_jsx(DayPicker, { showOutsideDays: showOutsideDays, className: cn("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:var(--spacing-touch-target)] [@media(hover:hover)_and_(pointer:fine)]:[--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw `rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw `rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className), captionLayout: captionLayout, locale: locale, formatters: {
10
+ return (_jsx(DayPicker, { showOutsideDays: showOutsideDays, className: cn("group/calendar bg-background p-2 [--cell-radius:var(--radius-sm)] [--cell-size:var(--spacing-touch-target)] [@media(hover:hover)_and_(pointer:fine)]:[--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw `rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw `rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className), captionLayout: captionLayout, locale: locale, formatters: {
11
11
  formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
12
12
  ...formatters,
13
13
  }, classNames: {
@@ -26,10 +26,10 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
26
26
  : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
27
27
  month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
28
28
  weekdays: cn("flex", defaultClassNames.weekdays),
29
- weekday: cn("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none", defaultClassNames.weekday),
29
+ weekday: cn("flex-1 rounded-(--cell-radius) text-label-sm font-normal text-muted-foreground select-none", defaultClassNames.weekday),
30
30
  week: cn("mt-2 flex w-full", defaultClassNames.week),
31
31
  week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
32
- week_number: cn("text-[0.8rem] text-muted-foreground select-none", defaultClassNames.week_number),
32
+ week_number: cn("text-label-sm text-muted-foreground select-none", defaultClassNames.week_number),
33
33
  day: cn("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)", props.showWeekNumber
34
34
  ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)"
35
35
  : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)", defaultClassNames.day),
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,KAAK,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC/D,KAAK,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,MAAM,EACN,IAAgB,EAChB,OAAmB,EACnB,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,0EAsBA;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAevE;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,qBAazD;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,qBAIxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,CAAC"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,KAAK,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC/D,KAAK,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,MAAM,EACN,IAAgB,EAChB,OAAmB,EACnB,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IACnC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,0EAsBA;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,qBAazD;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,qBAIxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,CAAC"}
@@ -3,10 +3,10 @@ import { mergeProps } from "@base-ui/react/merge-props";
3
3
  import { useRender } from "@base-ui/react/use-render";
4
4
  import { cn } from "../lib/utils.js";
5
5
  function Card({ className, render, size = "default", surface = "resting", variant = "default", ...props }) {
6
- const structure = cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden bg-card py-(--card-spacing) text-sm text-card-foreground [--card-spacing:var(--spacing-nadicode-lg)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:var(--spacing-nadicode-md)] data-[size=sm]:has-data-[slot=card-footer]:pb-0", variant === "interactive" && "cursor-pointer", variant === "link" && "nc-transition-paint");
6
+ const structure = cn("group/card flex flex-col gap-(--card-spacing) overflow-hidden bg-card py-(--card-spacing) text-sm text-card-foreground [--card-spacing:var(--spacing-nadicode-card-padding)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:var(--spacing-nadicode-md)] data-[size=sm]:has-data-[slot=card-footer]:pb-0", variant === "interactive" && "cursor-pointer", variant === "link" && "nc-transition-paint");
7
7
  const surfaceClassName = surface === "outlined"
8
- ? cn(structure, "rounded-lg border border-border", className)
9
- : cn(structure, "rounded-lg border-0 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg", surface === "resting" && "nc-elevation-resting", surface === "raised" && "nc-elevation-raised", className);
8
+ ? cn(structure, "rounded-sm border border-border", className)
9
+ : cn(structure, "rounded-sm border-0 *:[img:first-child]:rounded-t-sm *:[img:last-child]:rounded-b-sm", surface === "resting" && "nc-elevation-resting", surface === "raised" && "nc-elevation-raised", className);
10
10
  return useRender({
11
11
  defaultTagName: "div",
12
12
  props: mergeProps({ className: surfaceClassName }, props),
@@ -15,15 +15,10 @@ function Card({ className, render, size = "default", surface = "resting", varian
15
15
  });
16
16
  }
17
17
  function CardHeader({ className, ...props }) {
18
- return (_jsx("div", { "data-slot": "card-header", className: cn(
19
- // The action's column keeps its own width and the text column yields:
20
- // `minmax(0,1fr)`, not `1fr`, because a `1fr` track never shrinks below
21
- // its content and a long title or an unbreakable figure would push the
22
- // action past the card's edge, where the card's clipping cuts it.
23
- "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[minmax(0,1fr)_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] *:data-[slot=card-description]:col-start-1 *:data-[slot=card-title]:col-start-1 [.border-b]:pb-(--card-spacing)", className), ...props }));
18
+ return (_jsx("div", { "data-slot": "card-header", className: cn("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-sm px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[minmax(0,1fr)_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] *:data-[slot=card-description]:col-start-1 *:data-[slot=card-title]:col-start-1 [.border-b]:pb-(--card-spacing)", className), ...props }));
24
19
  }
25
20
  function CardTitle({ className, focusTarget = false, ...props }) {
26
- return (_jsx("div", { "data-slot": "card-title", "data-focus-target": focusTarget || undefined, className: cn("text-base font-medium group-data-[size=sm]/card:text-sm", focusTarget && "rounded-sm", className), ...props }));
21
+ return (_jsx("div", { "data-slot": "card-title", "data-focus-target": focusTarget || undefined, className: cn("text-heading-sm group-data-[size=sm]/card:text-heading-xs", focusTarget && "rounded-sm", className), ...props }));
27
22
  }
28
23
  function CardDescription({ className, ...props }) {
29
24
  return (_jsx("div", { "data-slot": "card-description", className: cn("text-sm text-muted-foreground", className), ...props }));
@@ -35,6 +30,6 @@ function CardContent({ className, ...props }) {
35
30
  return (_jsx("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props }));
36
31
  }
37
32
  function CardFooter({ className, ...props }) {
38
- return (_jsx("div", { "data-slot": "card-footer", className: cn("flex items-center p-(--card-spacing)", className), ...props }));
33
+ return (_jsx("div", { "data-slot": "card-footer", className: cn("flex flex-wrap items-center gap-3 border-t border-border bg-recessed px-(--card-spacing) py-3", className), ...props }));
39
34
  }
40
35
  export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent, };
@@ -3,11 +3,9 @@ type CatalogTileProps = Omit<React.ComponentProps<"span">, "children" | "classNa
3
3
  /** The entry's line icon. */
4
4
  icon: React.ReactNode;
5
5
  /**
6
- * The ground that says what kind of entry it is: `neutral`, a card tile with
7
- * a hairline border like an app mark's, for a skill; `info`, the soft blue,
8
- * for a plugin.
6
+ * The category ground: purple for a skill, info for a plugin.
9
7
  */
10
- tone: "neutral" | "info";
8
+ tone: "info" | "purple";
11
9
  /** 40 px where the tile names a row, 64 px at the head of the entry's own page. */
12
10
  size?: "row" | "page";
13
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-tile.d.ts","sourceRoot":"","sources":["../../src/components/catalog-tile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,KAAK,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IACrF,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB;;;;OAIG;IACH,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,mFAAmF;IACnF,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAY,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBAmB5E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"catalog-tile.d.ts","sourceRoot":"","sources":["../../src/components/catalog-tile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,KAAK,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IACrF,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,mFAAmF;IACnF,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAY,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBAmB5E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
@@ -6,8 +6,8 @@ import { cn } from "../lib/utils.js";
6
6
  * replaces.
7
7
  */
8
8
  function CatalogTile({ icon, tone, size = "row", ...props }) {
9
- return (_jsx("span", { "aria-hidden": "true", className: cn("flex shrink-0 items-center justify-center rounded-md", tone === "neutral"
10
- ? "bg-card text-foreground ring-1 ring-border"
9
+ return (_jsx("span", { "aria-hidden": "true", className: cn("flex shrink-0 items-center justify-center rounded-sm", tone === "purple"
10
+ ? "bg-category-purple text-category-purple-foreground"
11
11
  : "bg-info-soft text-info-soft-foreground", size === "row" ? "size-10 [&>svg]:size-5" : "size-16 [&>svg]:size-6"), "data-size": size, "data-slot": "catalog-tile", "data-tone": tone, ...props, children: icon }));
12
12
  }
13
13
  export { CatalogTile };
@@ -1 +1 @@
1
- {"version":3,"file":"channel-view.d.ts","sourceRoot":"","sources":["../../src/components/channel-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel-view.d.ts","sourceRoot":"","sources":["../../src/components/channel-view.tsx"],"names":[],"mappings":"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"}
@@ -21,11 +21,11 @@ export function ChannelView({ children, className, header, }) {
21
21
  return (_jsxs("div", { className: cn("grid min-h-0 min-w-0 grid-cols-[minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] bg-background", className), children: [header, _jsx("div", { className: "flex min-h-0 min-w-0 flex-col justify-end overflow-hidden px-2 pb-4", children: children })] }));
22
22
  }
23
23
  export function ChannelHeader({ actions, className, glyph, memberCount, members, membersLabel, name, }) {
24
- return (_jsx("header", { className: cn("min-w-0 shrink-0 select-none px-3 py-2 sm:px-5", className), children: _jsxs("div", { className: "flex h-9 min-w-0 items-center gap-2.5", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1", children: [_jsx("span", { "aria-hidden": "true", className: "flex shrink-0 items-center text-muted-foreground", children: glyph ?? _jsx(Hash, { className: "size-4" }) }), _jsx("h2", { className: "nc-type-body-md m-0 min-w-0 truncate font-medium text-foreground", children: name })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [members, _jsxs("span", { "aria-label": membersLabel, className: "inline-flex h-8 items-center gap-1.5 rounded-md border border-border px-2.5", role: "img", children: [_jsx(Users, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }), _jsx("span", { className: "nc-type-body-sm font-medium tabular-nums text-foreground", children: memberCount })] }), actions] })] }) }));
24
+ return (_jsx("header", { className: cn("min-w-0 shrink-0 select-none px-3 py-2 sm:px-5", className), children: _jsxs("div", { className: "flex h-9 min-w-0 items-center gap-2.5", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1", children: [_jsx("span", { "aria-hidden": "true", className: "flex shrink-0 items-center text-muted-foreground", children: glyph ?? _jsx(Hash, { className: "size-4" }) }), _jsx("h2", { className: "text-body-md m-0 min-w-0 truncate font-medium text-foreground", children: name })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [members, _jsxs("span", { "aria-label": membersLabel, className: "inline-flex h-8 items-center gap-1.5 rounded-md border border-border px-2.5", role: "img", children: [_jsx(Users, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }), _jsx("span", { className: "text-body-sm font-medium tabular-nums text-foreground", children: memberCount })] }), actions] })] }) }));
25
25
  }
26
26
  /** The channel's members overlapped, the last one whole, as a stack of pictures. */
27
27
  export function ChannelMemberStack({ children, className, overflow, }) {
28
- return (_jsxs("div", { className: cn("hidden shrink-0 items-center *:not-last:-me-2 *:ring-2 *:ring-background sm:flex", className), children: [children, overflow ? (_jsx("span", { className: "nc-type-caption flex size-8 items-center justify-center rounded-full bg-muted font-medium text-muted-foreground", children: overflow })) : null] }));
28
+ return (_jsxs("div", { className: cn("hidden shrink-0 items-center *:not-last:-me-2 *:ring-2 *:ring-background sm:flex", className), children: [children, overflow ? (_jsx("span", { className: "text-caption flex size-8 items-center justify-center rounded-full bg-muted font-medium text-muted-foreground", children: overflow })) : null] }));
29
29
  }
30
30
  /** A person in a channel: their initials on the muted fill, never a colour from the name. */
31
31
  export function ChannelPerson({ className, initials, name, }) {
@@ -33,10 +33,10 @@ export function ChannelPerson({ className, initials, name, }) {
33
33
  }
34
34
  /** The day a run of messages belongs to: its name on the line that separates it. */
35
35
  export function ChannelDay({ className, label }) {
36
- return (_jsx("div", { className: cn("relative flex justify-center py-2 before:absolute before:inset-x-0 before:top-1/2 before:h-px before:-translate-y-1/2 before:bg-border before:content-['']", className), children: _jsx("p", { className: "nc-type-caption relative m-0 shrink-0 rounded-full border border-border bg-background px-2.5 py-1 font-medium text-muted-foreground", children: label }) }));
36
+ return (_jsx("div", { className: cn("relative flex justify-center py-2 before:absolute before:inset-x-0 before:top-1/2 before:h-px before:-translate-y-1/2 before:bg-border before:content-['']", className), children: _jsx("p", { className: "text-caption relative m-0 shrink-0 rounded-full border border-border bg-background px-2.5 py-1 font-medium text-muted-foreground", children: label }) }));
37
37
  }
38
38
  export function ChannelMessage({ author, children, className, member, time, }) {
39
- return (_jsxs("article", { className: cn("mx-1 flex items-start gap-2.5 rounded-md px-2 py-1", className), children: [_jsx("div", { className: MEMBER_COLUMN, children: member }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-baseline gap-x-1.5", children: [_jsx("span", { className: "nc-type-body-md min-w-0 truncate font-medium text-foreground", children: author }), _jsx("span", { "aria-hidden": "true", className: "nc-type-caption text-muted-foreground", children: "\u00B7" }), _jsx("span", { className: "nc-type-caption shrink-0 whitespace-nowrap tabular-nums text-muted-foreground", children: time })] }), _jsx("div", { className: "nc-type-body-md mt-0.5 min-w-0 text-foreground", children: children })] })] }));
39
+ return (_jsxs("article", { className: cn("mx-1 flex items-start gap-2.5 rounded-md px-2 py-1", className), children: [_jsx("div", { className: MEMBER_COLUMN, children: member }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-baseline gap-x-1.5", children: [_jsx("span", { className: "text-body-md min-w-0 truncate font-medium text-foreground", children: author }), _jsx("span", { "aria-hidden": "true", className: "text-caption text-muted-foreground", children: "\u00B7" }), _jsx("span", { className: "text-caption shrink-0 whitespace-nowrap tabular-nums text-muted-foreground", children: time })] }), _jsx("div", { className: "text-body-md mt-0.5 min-w-0 text-foreground", children: children })] })] }));
40
40
  }
41
41
  /** A colleague addressed by name inside a message, the way a person types it. */
42
42
  export function ChannelMention({ children }) {
@@ -47,7 +47,7 @@ export function ChannelReactions({ children }) {
47
47
  return _jsx("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: children });
48
48
  }
49
49
  export function ChannelReaction({ count, glyph, label, mine, }) {
50
- return (_jsxs("span", { "aria-label": label, className: cn("nc-type-caption inline-flex h-7 min-w-12 items-center justify-center gap-1.5 rounded-full border font-medium", mine
50
+ return (_jsxs("span", { "aria-label": label, className: cn("text-caption inline-flex h-7 min-w-12 items-center justify-center gap-1.5 rounded-full border font-medium", mine
51
51
  ? "border-primary bg-primary/10 text-primary"
52
52
  : "border-border bg-muted text-foreground"), role: "img", children: [_jsx("span", { "aria-hidden": "true", children: glyph }), _jsx("span", { className: "tabular-nums text-muted-foreground", children: count })] }));
53
53
  }
@@ -60,16 +60,16 @@ export function ChannelThread({ children, summary }) {
60
60
  return (_jsxs("div", { className: "grid min-w-0 grid-cols-[minmax(0,1fr)] pl-6 sm:pl-[2.625rem]", children: [_jsx("div", { className: "pl-2", children: summary }), children] }));
61
61
  }
62
62
  export function ChannelThreadSummary({ lastActivity, members, replies, }) {
63
- return (_jsx("div", { className: "py-0.5", children: _jsxs("span", { className: "nc-type-caption inline-flex h-[1.875rem] w-fit max-w-full items-center gap-1.5 rounded-full pr-3 font-medium text-muted-foreground", children: [_jsx("span", { className: "flex shrink-0 items-center *:not-last:-me-1 *:ring-2 *:ring-background", children: members }), _jsxs("span", { className: "min-w-0 truncate", children: [_jsx("span", { className: "font-medium", children: replies }), _jsx("span", { "aria-hidden": "true", className: "mx-1 font-normal", children: "\u00B7" }), _jsx("span", { className: "font-normal", children: lastActivity })] })] }) }));
63
+ return (_jsx("div", { className: "py-0.5", children: _jsxs("span", { className: "text-caption inline-flex h-[1.875rem] w-fit max-w-full items-center gap-1.5 rounded-full pr-3 font-medium text-muted-foreground", children: [_jsx("span", { className: "flex shrink-0 items-center *:not-last:-me-1 *:ring-2 *:ring-background", children: members }), _jsxs("span", { className: "min-w-0 truncate", children: [_jsx("span", { className: "font-medium", children: replies }), _jsx("span", { "aria-hidden": "true", className: "mx-1 font-normal", children: "\u00B7" }), _jsx("span", { className: "font-normal", children: lastActivity })] })] }) }));
64
64
  }
65
65
  /** A file left in the conversation. */
66
66
  export function ChannelFile({ meta, name }) {
67
- return (_jsxs("div", { className: "mt-2 flex w-fit max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2 text-left sm:max-w-sm", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(FileText, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "nc-type-body-sm block truncate font-medium text-foreground", children: name }), _jsx("span", { className: "nc-type-caption block text-muted-foreground", children: meta })] }), _jsx(Download, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground" })] }));
67
+ return (_jsxs("div", { className: "mt-2 flex w-fit max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2 text-left sm:max-w-sm", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(FileText, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-body-sm block truncate font-medium text-foreground", children: name }), _jsx("span", { className: "text-caption block text-muted-foreground", children: meta })] }), _jsx(Download, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground" })] }));
68
68
  }
69
69
  /**
70
70
  * What a voice call leaves in the conversation once it ends: that it happened,
71
71
  * how many people were in it, and the way back to what was said.
72
72
  */
73
73
  export function ChannelCall({ action, participants, title, }) {
74
- return (_jsxs("div", { className: "mt-2 flex w-96 max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2.5", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(Headphones, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "nc-type-body-sm block font-medium text-foreground", children: title }), _jsx("span", { className: "nc-type-caption block truncate text-muted-foreground", children: participants })] }), action ? _jsx("span", { className: "flex shrink-0 items-center gap-1", children: action }) : null] }));
74
+ return (_jsxs("div", { className: "mt-2 flex w-96 max-w-full items-center gap-3 rounded-md border border-border bg-muted px-3 py-2.5", children: [_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: _jsx(Headphones, { "aria-hidden": "true", className: "size-4" }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-body-sm block font-medium text-foreground", children: title }), _jsx("span", { className: "text-caption block truncate text-muted-foreground", children: participants })] }), action ? _jsx("span", { className: "flex shrink-0 items-center gap-1", children: action }) : null] }));
75
75
  }
@@ -59,7 +59,7 @@ function ChartCard({ title, description, action, summary, aside, footer, heading
59
59
  "grid min-w-0 gap-(--card-spacing) lg:grid-cols-[minmax(0,2fr)_minmax(16rem,1fr)]"), children: [_jsx("div", { className: "min-w-0", children: children(titleId) }), aside ? (_jsx("aside", { "data-slot": "chart-card-aside", className: "min-w-0 border-t border-border pt-(--card-spacing) lg:border-t-0 lg:border-l lg:pt-0 lg:pl-(--card-spacing)", children: aside })) : null] }), footer ? (_jsx(CardFooter, { className: "flex-col items-start gap-2 text-sm", children: footer })) : null] }));
60
60
  }
61
61
  function ChartSummary({ label, value, valueTitle, valueSize = "default", trend, status, }) {
62
- return (_jsxs("div", { "data-slot": "chart-summary", className: "flex flex-col items-start gap-2", children: [_jsx("div", { className: "text-muted-foreground text-sm", children: label }), _jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-3", children: [_jsx("div", { "data-slot": "chart-summary-value", className: cn("truncate font-semibold tracking-tight tabular-nums", valueSize === "lg" ? "text-3xl" : "text-2xl"), title: valueTitle, children: value }), trend ? (_jsx(TrendBadge, { direction: trend.direction, directionLabel: trend.directionLabel, tone: trend.tone, value: trend.value })) : null, status] }), trend ? (_jsx("div", { "data-slot": "chart-summary-comparison", className: "text-muted-foreground text-sm", children: trend.comparison })) : null] }));
62
+ return (_jsxs("div", { "data-slot": "chart-summary", className: "flex flex-col items-start gap-2", children: [_jsx("div", { className: "text-muted-foreground text-sm", children: label }), _jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-3", children: [_jsx("div", { "data-slot": "chart-summary-value", className: cn("truncate tabular-nums", valueSize === "lg" ? "text-heading-lg" : "text-heading-md"), title: valueTitle, children: value }), trend ? (_jsx(TrendBadge, { direction: trend.direction, directionLabel: trend.directionLabel, tone: trend.tone, value: trend.value })) : null, status] }), trend ? (_jsx("div", { "data-slot": "chart-summary-comparison", className: "text-muted-foreground text-sm", children: trend.comparison })) : null] }));
63
63
  }
64
64
  /** The plot frame class: fixed height, no aspect ratio, full width. */
65
65
  function chartPlotClassName(size) {
@@ -85,7 +85,7 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
85
85
  return null;
86
86
  }
87
87
  const nestLabel = payload.length === 1 && indicator !== "dot";
88
- return (_jsxs("div", { className: cn("grid min-w-32 items-start gap-1.5 rounded-md border-0 bg-popover px-nadicode-sm py-1.5 text-xs text-popover-foreground nc-elevation-floating", className), children: [!nestLabel ? tooltipLabel : null, _jsx("div", { className: "grid gap-1.5", children: payload
88
+ return (_jsxs("div", { className: cn("grid min-w-32 items-start gap-1.5 rounded-sm border-0 bg-popover px-nadicode-sm py-1.5 text-xs text-popover-foreground nc-elevation-floating", className), children: [!nestLabel ? tooltipLabel : null, _jsx("div", { className: "grid gap-1.5", children: payload
89
89
  .filter((item) => item.type !== "none")
90
90
  .map((item, index) => {
91
91
  const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKxE,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,+BAkBtE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/components/checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAKxE,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,+BAmBtE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -2,8 +2,8 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
4
4
  import { cn } from "../lib/utils.js";
5
- import { CheckIcon } from "lucide-react";
5
+ import { CheckIcon, MinusIcon } from "lucide-react";
6
6
  function Checkbox({ className, ...props }) {
7
- return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-sm border border-input transition-colors group-has-disabled/field:opacity-50 after:absolute after:top-1/2 after:left-1/2 after:size-touch-target after:-translate-x-1/2 after:-translate-y-1/2 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:aria-checked:border-primary data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground [@media(hover:hover)_and_(pointer:fine)]:after:hidden", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none [&>svg]:size-3.5", children: _jsx(CheckIcon, {}) }) }));
7
+ return (_jsx(CheckboxPrimitive.Root, { "data-slot": "checkbox", className: cn("peer relative flex size-4 shrink-0 items-center justify-center rounded-xs border border-input transition-colors group-has-disabled/field:opacity-50 after:absolute after:top-1/2 after:left-1/2 after:size-touch-target after:-translate-x-1/2 after:-translate-y-1/2 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:aria-checked:border-primary data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-indeterminate:border-primary data-indeterminate:bg-primary data-indeterminate:text-primary-foreground [@media(hover:hover)_and_(pointer:fine)]:after:hidden", className), ...props, children: _jsx(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "grid place-content-center text-current transition-none [&>svg]:size-3.5", render: (indicatorProps, state) => (_jsx("span", { ...indicatorProps, children: state.indeterminate ? _jsx(MinusIcon, {}) : _jsx(CheckIcon, {}) })) }) }));
8
8
  }
9
9
  export { Checkbox };
@@ -0,0 +1,8 @@
1
+ import { type CopyButtonProps } from "./copy-button.js";
2
+ export declare function CodeBlock({ code, label, filename, language, copyLabel, copiedLabel, copyFailedLabel, }: {
3
+ code: string;
4
+ label: string;
5
+ filename?: string;
6
+ language?: string;
7
+ } & Pick<CopyButtonProps, "copyLabel" | "copiedLabel" | "copyFailedLabel">): import("react").JSX.Element;
8
+ //# sourceMappingURL=code-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/components/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQ5E,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,GAChB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,aAAa,GAAG,iBAAiB,CAAC,+BAiCzE"}
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { CopyButton } from "./copy-button.js";
4
+ import { InputGroup, InputGroupAddon, InputGroupText, InputGroupTextarea, } from "./input-group.js";
5
+ export function CodeBlock({ code, label, filename, language, copyLabel, copiedLabel, copyFailedLabel, }) {
6
+ return (_jsxs(InputGroup, { children: [_jsx(InputGroupTextarea, { "aria-label": label, value: code, readOnly: true, wrap: "off", spellCheck: false, className: "max-h-96 min-h-0 overflow-auto font-code text-code md:text-code" }), _jsxs(InputGroupAddon, { align: "block-start", className: "justify-between border-b border-border", children: [_jsx(InputGroupText, { title: filename ?? label, className: "min-w-0 truncate font-label-mono text-label-mono", children: filename ?? label }), _jsx(CopyButton, { value: code, copyLabel: copyLabel, copiedLabel: copiedLabel, copyFailedLabel: copyFailedLabel, size: "icon-xs" })] }), language ? (_jsx(InputGroupAddon, { align: "block-end", className: "border-t border-border", children: _jsx(InputGroupText, { children: language }) })) : null] }));
7
+ }