@hachej/boring-ui-kit 0.1.80 → 0.1.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -174,6 +174,21 @@ type StatusBadgeProps = BadgeProps & {
174
174
  };
175
175
  declare function StatusBadge({ className, tone, variant, ...props }: StatusBadgeProps): React.JSX.Element;
176
176
 
177
+ type MeterTone = 'default' | 'warning' | 'danger';
178
+ interface MeterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'role'> {
179
+ /** Filled fraction as a percentage in the range 0..100. */
180
+ value: number;
181
+ /** Accessible label for the progressbar (screen readers). */
182
+ label?: string;
183
+ tone?: MeterTone;
184
+ }
185
+ /**
186
+ * Accessible horizontal usage/progress bar. Renders a subtle track with a
187
+ * proportional fill and exposes `role="progressbar"` with aria value props so
188
+ * consumers get an accessible meter out of the box.
189
+ */
190
+ declare function Meter({ value, label, tone, className, ...props }: MeterProps): React.JSX.Element;
191
+
177
192
  type NoticeTone = 'info' | 'success' | 'warning' | 'error' | 'accent' | 'destructive';
178
193
  type NoticeProps = React.ComponentProps<'div'> & {
179
194
  tone?: NoticeTone;
@@ -454,4 +469,4 @@ interface BoringPerspectiveThemeOptions {
454
469
  declare function boringPerspectiveThemeName(root?: Pick<Element, "classList"> | null | undefined): "Pro Light" | "Pro Dark";
455
470
  declare function applyBoringPerspectiveTheme(element: HTMLElement, options?: BoringPerspectiveThemeOptions): void;
456
471
 
457
- export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, type AvatarFallbackProps, type AvatarProps, Badge, type BadgeProps, type BoringPerspectiveThemeOptions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Chip, ChipButton, type ChipButtonProps, type ChipProps, ChipRemove, type ChipRemoveProps, ChoiceGroup, ChoiceGroupLegend, ChoiceItem, ChoiceItemBody, ChoiceItemDescription, ChoiceItemTitle, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DetailLine, type DetailLineProps, DetailList, type DetailListProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Disclosure, DisclosureChevron, DisclosureContent, DisclosureTrigger, type DisclosureTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldDescription, FieldError, FieldLabel, FloatingPanel, FloatingPanelBody, type FloatingPanelBodyProps, FloatingPanelHeader, type FloatingPanelHeaderProps, type FloatingPanelProps, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, InitialsAvatar, type InitialsAvatarProps, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, type InputProps, Kbd, type KbdProps, Label, List, type ListProps, ListRow, ListRowActions, type ListRowActionsProps, ListRowDescription, type ListRowDescriptionProps, ListRowMain, type ListRowMainProps, ListRowMeta, type ListRowMetaProps, type ListRowProps, ListRowTitle, type ListRowTitleProps, LoadingState, type LoadingStateProps, Notice, type NoticeProps, type NoticeTone, Pane, PaneBody, PaneDescription, PaneFooter, PaneHeader, PaneTitle, PaneToolbar, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Radio, type RadioProps, ResizeHandle, type ResizeHandleOrientation, type ResizeHandleProps, ScrollArea, ScrollBar, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps, SettingsActionRow, type SettingsActionRowProps, SettingsNav, type SettingsNavItem, type SettingsNavProps, SettingsPageHeader, type SettingsPageHeaderProps, SettingsPanel, type SettingsPanelProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type ToastApi$1 as ToastApi, type ToastApi as ToastEventApi, type ToastInput as ToastEventInput, type ToastVariant as ToastEventVariant, type ToastInput$1 as ToastInput, type ToastRecord, type ToastVariant$1 as ToastVariant, Toaster, type ToasterProps, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, applyBoringPerspectiveTheme, badgeVariants, boringPerspectiveThemeName, buttonGroupVariants, buttonVariants, clearToasts, cn, dismissToast, getActiveToasts, subscribeToasts, tabsListVariants, toast, useToast };
472
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, type AvatarFallbackProps, type AvatarProps, Badge, type BadgeProps, type BoringPerspectiveThemeOptions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Chip, ChipButton, type ChipButtonProps, type ChipProps, ChipRemove, type ChipRemoveProps, ChoiceGroup, ChoiceGroupLegend, ChoiceItem, ChoiceItemBody, ChoiceItemDescription, ChoiceItemTitle, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DetailLine, type DetailLineProps, DetailList, type DetailListProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Disclosure, DisclosureChevron, DisclosureContent, DisclosureTrigger, type DisclosureTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldDescription, FieldError, FieldLabel, FloatingPanel, FloatingPanelBody, type FloatingPanelBodyProps, FloatingPanelHeader, type FloatingPanelHeaderProps, type FloatingPanelProps, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, InitialsAvatar, type InitialsAvatarProps, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, type InputProps, Kbd, type KbdProps, Label, List, type ListProps, ListRow, ListRowActions, type ListRowActionsProps, ListRowDescription, type ListRowDescriptionProps, ListRowMain, type ListRowMainProps, ListRowMeta, type ListRowMetaProps, type ListRowProps, ListRowTitle, type ListRowTitleProps, LoadingState, type LoadingStateProps, Meter, type MeterProps, type MeterTone, Notice, type NoticeProps, type NoticeTone, Pane, PaneBody, PaneDescription, PaneFooter, PaneHeader, PaneTitle, PaneToolbar, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Radio, type RadioProps, ResizeHandle, type ResizeHandleOrientation, type ResizeHandleProps, ScrollArea, ScrollBar, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps, SettingsActionRow, type SettingsActionRowProps, SettingsNav, type SettingsNavItem, type SettingsNavProps, SettingsPageHeader, type SettingsPageHeaderProps, SettingsPanel, type SettingsPanelProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type ToastApi$1 as ToastApi, type ToastApi as ToastEventApi, type ToastInput as ToastEventInput, type ToastVariant as ToastEventVariant, type ToastInput$1 as ToastInput, type ToastRecord, type ToastVariant$1 as ToastVariant, Toaster, type ToasterProps, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, applyBoringPerspectiveTheme, badgeVariants, boringPerspectiveThemeName, buttonGroupVariants, buttonVariants, clearToasts, cn, dismissToast, getActiveToasts, subscribeToasts, tabsListVariants, toast, useToast };
package/dist/index.js CHANGED
@@ -1044,8 +1044,40 @@ function StatusBadge({ className, tone = "neutral", variant = "ghost", ...props
1044
1044
  return /* @__PURE__ */ jsx19(Badge, { "data-slot": "status-badge", variant, className: cn(toneClasses[tone], className), ...props });
1045
1045
  }
1046
1046
 
1047
+ // src/meter.tsx
1048
+ import { jsx as jsx20 } from "react/jsx-runtime";
1049
+ var toneFill = {
1050
+ default: "bg-primary",
1051
+ warning: "bg-[color:var(--boring-warning,var(--accent-foreground))]",
1052
+ danger: "bg-destructive"
1053
+ };
1054
+ function Meter({ value, label, tone = "default", className, ...props }) {
1055
+ const clamped = Number.isFinite(value) ? Math.max(0, Math.min(100, value)) : 0;
1056
+ return /* @__PURE__ */ jsx20(
1057
+ "div",
1058
+ {
1059
+ role: "progressbar",
1060
+ "aria-valuenow": Math.round(clamped),
1061
+ "aria-valuemin": 0,
1062
+ "aria-valuemax": 100,
1063
+ "aria-label": label,
1064
+ "data-slot": "meter",
1065
+ className: cn("relative h-2 w-full overflow-hidden rounded-full bg-muted", className),
1066
+ ...props,
1067
+ children: /* @__PURE__ */ jsx20(
1068
+ "div",
1069
+ {
1070
+ "data-slot": "meter-fill",
1071
+ className: cn("h-full rounded-full transition-[width] duration-300 ease-out", toneFill[tone]),
1072
+ style: { width: `${clamped}%` }
1073
+ }
1074
+ )
1075
+ }
1076
+ );
1077
+ }
1078
+
1047
1079
  // src/notice.tsx
1048
- import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
1080
+ import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
1049
1081
  var noticeToneClasses = {
1050
1082
  info: "border-border bg-muted/20 text-foreground [&_[data-slot=notice-icon]]:text-muted-foreground",
1051
1083
  success: "border-success/35 bg-[color:var(--success-soft)] text-success [&_[data-slot=notice-description]]:text-foreground",
@@ -1076,22 +1108,22 @@ function Notice({
1076
1108
  ),
1077
1109
  ...props,
1078
1110
  children: [
1079
- icon && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-icon", className: "mt-0.5 shrink-0", children: icon }),
1111
+ icon && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-icon", className: "mt-0.5 shrink-0", children: icon }),
1080
1112
  /* @__PURE__ */ jsxs8("div", { className: "min-w-0 flex-1", children: [
1081
- title && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-title", className: "font-medium leading-snug", children: title }),
1082
- description && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-description", className: cn("text-muted-foreground", title && "mt-0.5"), children: description }),
1113
+ title && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-title", className: "font-medium leading-snug", children: title }),
1114
+ description && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-description", className: cn("text-muted-foreground", title && "mt-0.5"), children: description }),
1083
1115
  children
1084
1116
  ] }),
1085
- actions && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-actions", className: "flex shrink-0 items-center gap-2", children: actions })
1117
+ actions && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-actions", className: "flex shrink-0 items-center gap-2", children: actions })
1086
1118
  ]
1087
1119
  }
1088
1120
  );
1089
1121
  }
1090
1122
 
1091
1123
  // src/skeleton.tsx
1092
- import { jsx as jsx21 } from "react/jsx-runtime";
1124
+ import { jsx as jsx22 } from "react/jsx-runtime";
1093
1125
  function Skeleton({ className, ...props }) {
1094
- return /* @__PURE__ */ jsx21(
1126
+ return /* @__PURE__ */ jsx22(
1095
1127
  "div",
1096
1128
  {
1097
1129
  "data-slot": "skeleton",
@@ -1103,9 +1135,9 @@ function Skeleton({ className, ...props }) {
1103
1135
  }
1104
1136
 
1105
1137
  // src/inline-code.tsx
1106
- import { jsx as jsx22 } from "react/jsx-runtime";
1138
+ import { jsx as jsx23 } from "react/jsx-runtime";
1107
1139
  function InlineCode({ className, ...props }) {
1108
- return /* @__PURE__ */ jsx22(
1140
+ return /* @__PURE__ */ jsx23(
1109
1141
  "code",
1110
1142
  {
1111
1143
  "data-slot": "inline-code",
@@ -1116,9 +1148,9 @@ function InlineCode({ className, ...props }) {
1116
1148
  }
1117
1149
 
1118
1150
  // src/toolbar.tsx
1119
- import { jsx as jsx23 } from "react/jsx-runtime";
1151
+ import { jsx as jsx24 } from "react/jsx-runtime";
1120
1152
  function Toolbar({ className, ...props }) {
1121
- return /* @__PURE__ */ jsx23(
1153
+ return /* @__PURE__ */ jsx24(
1122
1154
  "div",
1123
1155
  {
1124
1156
  "data-slot": "toolbar",
@@ -1129,19 +1161,19 @@ function Toolbar({ className, ...props }) {
1129
1161
  );
1130
1162
  }
1131
1163
  function ToolbarGroup({ className, ...props }) {
1132
- return /* @__PURE__ */ jsx23("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-0.5", className), ...props });
1164
+ return /* @__PURE__ */ jsx24("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-0.5", className), ...props });
1133
1165
  }
1134
1166
  function ToolbarButton({ className, variant = "ghost", size = "icon-sm", ...props }) {
1135
- return /* @__PURE__ */ jsx23(Button, { "data-slot": "toolbar-button", variant, size, className: cn("shrink-0", className), ...props });
1167
+ return /* @__PURE__ */ jsx24(Button, { "data-slot": "toolbar-button", variant, size, className: cn("shrink-0", className), ...props });
1136
1168
  }
1137
1169
  function ToolbarSeparator({ className, ...props }) {
1138
- return /* @__PURE__ */ jsx23("div", { "data-slot": "toolbar-separator", "aria-hidden": "true", className: cn("mx-1 h-4 w-px shrink-0 bg-border/60", className), ...props });
1170
+ return /* @__PURE__ */ jsx24("div", { "data-slot": "toolbar-separator", "aria-hidden": "true", className: cn("mx-1 h-4 w-px shrink-0 bg-border/60", className), ...props });
1139
1171
  }
1140
1172
 
1141
1173
  // src/chip.tsx
1142
- import { jsx as jsx24 } from "react/jsx-runtime";
1174
+ import { jsx as jsx25 } from "react/jsx-runtime";
1143
1175
  function Chip({ className, selected, ...props }) {
1144
- return /* @__PURE__ */ jsx24(
1176
+ return /* @__PURE__ */ jsx25(
1145
1177
  "span",
1146
1178
  {
1147
1179
  "data-slot": "chip",
@@ -1156,7 +1188,7 @@ function Chip({ className, selected, ...props }) {
1156
1188
  );
1157
1189
  }
1158
1190
  function ChipButton({ className, selected, variant = "outline", size = "xs", ...props }) {
1159
- return /* @__PURE__ */ jsx24(
1191
+ return /* @__PURE__ */ jsx25(
1160
1192
  Button,
1161
1193
  {
1162
1194
  "data-slot": "chip-button",
@@ -1173,7 +1205,7 @@ function ChipButton({ className, selected, variant = "outline", size = "xs", ...
1173
1205
  );
1174
1206
  }
1175
1207
  function ChipRemove({ className, children, variant = "ghost", size = "icon-xs", ...props }) {
1176
- return /* @__PURE__ */ jsx24(
1208
+ return /* @__PURE__ */ jsx25(
1177
1209
  Button,
1178
1210
  {
1179
1211
  "data-slot": "chip-remove",
@@ -1181,15 +1213,15 @@ function ChipRemove({ className, children, variant = "ghost", size = "icon-xs",
1181
1213
  size,
1182
1214
  className: cn("size-4 rounded-full text-muted-foreground hover:text-foreground", className),
1183
1215
  ...props,
1184
- children: children ?? /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" })
1216
+ children: children ?? /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" })
1185
1217
  }
1186
1218
  );
1187
1219
  }
1188
1220
 
1189
1221
  // src/segmented-control.tsx
1190
- import { jsx as jsx25 } from "react/jsx-runtime";
1222
+ import { jsx as jsx26 } from "react/jsx-runtime";
1191
1223
  function SegmentedControl({ className, ...props }) {
1192
- return /* @__PURE__ */ jsx25(
1224
+ return /* @__PURE__ */ jsx26(
1193
1225
  "div",
1194
1226
  {
1195
1227
  "data-slot": "segmented-control",
@@ -1200,7 +1232,7 @@ function SegmentedControl({ className, ...props }) {
1200
1232
  );
1201
1233
  }
1202
1234
  function SegmentedControlItem({ className, selected, variant = "ghost", size = "xs", ...props }) {
1203
- return /* @__PURE__ */ jsx25(
1235
+ return /* @__PURE__ */ jsx26(
1204
1236
  Button,
1205
1237
  {
1206
1238
  "data-slot": "segmented-control-item",
@@ -1220,7 +1252,7 @@ function SegmentedControlItem({ className, selected, variant = "ghost", size = "
1220
1252
  }
1221
1253
 
1222
1254
  // src/settings.tsx
1223
- import { jsx as jsx26, jsxs as jsxs9 } from "react/jsx-runtime";
1255
+ import { jsx as jsx27, jsxs as jsxs9 } from "react/jsx-runtime";
1224
1256
  function SettingsPanel({ className, icon, title, description, footer, danger, testId, children, ...props }) {
1225
1257
  return /* @__PURE__ */ jsxs9(
1226
1258
  "section",
@@ -1231,24 +1263,24 @@ function SettingsPanel({ className, icon, title, description, footer, danger, te
1231
1263
  ...props,
1232
1264
  children: [
1233
1265
  /* @__PURE__ */ jsxs9("div", { "data-slot": "settings-panel-header", className: "flex min-h-11 items-center gap-2 border-b border-border/50 px-4 py-2.5", children: [
1234
- icon && /* @__PURE__ */ jsx26("span", { "data-slot": "settings-panel-icon", className: danger ? "text-destructive" : "text-muted-foreground", children: icon }),
1266
+ icon && /* @__PURE__ */ jsx27("span", { "data-slot": "settings-panel-icon", className: danger ? "text-destructive" : "text-muted-foreground", children: icon }),
1235
1267
  /* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
1236
- /* @__PURE__ */ jsx26("h2", { "data-slot": "settings-panel-title", className: cn("text-[13px] font-medium leading-5", danger ? "text-destructive" : "text-foreground"), children: title }),
1237
- description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-panel-description", className: "text-[12px] leading-5 text-muted-foreground", children: description }) : null
1268
+ /* @__PURE__ */ jsx27("h2", { "data-slot": "settings-panel-title", className: cn("text-[13px] font-medium leading-5", danger ? "text-destructive" : "text-foreground"), children: title }),
1269
+ description ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-panel-description", className: "text-[12px] leading-5 text-muted-foreground", children: description }) : null
1238
1270
  ] })
1239
1271
  ] }),
1240
- /* @__PURE__ */ jsx26("div", { "data-slot": "settings-panel-body", className: "p-4", children }),
1241
- footer ? /* @__PURE__ */ jsx26("div", { "data-slot": "settings-panel-footer", className: "flex items-center justify-end gap-2 border-t border-border/50 bg-muted/10 px-4 py-3", children: footer }) : null
1272
+ /* @__PURE__ */ jsx27("div", { "data-slot": "settings-panel-body", className: "p-4", children }),
1273
+ footer ? /* @__PURE__ */ jsx27("div", { "data-slot": "settings-panel-footer", className: "flex items-center justify-end gap-2 border-t border-border/50 bg-muted/10 px-4 py-3", children: footer }) : null
1242
1274
  ]
1243
1275
  }
1244
1276
  );
1245
1277
  }
1246
1278
  function SettingsNav({ className, label, items, ...props }) {
1247
1279
  return /* @__PURE__ */ jsxs9("nav", { "data-slot": "settings-nav", "aria-label": `${label} sections`, className: cn("boring-settings-nav", className), ...props, children: [
1248
- /* @__PURE__ */ jsx26("p", { "data-slot": "settings-nav-label", className: "boring-settings-nav-label", children: label }),
1249
- items.map((item) => /* @__PURE__ */ jsx26("a", { "data-slot": "settings-nav-item", href: item.href, className: "boring-settings-nav-item", children: /* @__PURE__ */ jsxs9("span", { className: "min-w-0", children: [
1250
- /* @__PURE__ */ jsx26("span", { className: "block truncate text-[12.5px] font-medium text-foreground", children: item.label }),
1251
- item.description ? /* @__PURE__ */ jsx26("span", { className: "block truncate text-[11.5px] leading-4 text-muted-foreground", children: item.description }) : null
1280
+ /* @__PURE__ */ jsx27("p", { "data-slot": "settings-nav-label", className: "boring-settings-nav-label", children: label }),
1281
+ items.map((item) => /* @__PURE__ */ jsx27("a", { "data-slot": "settings-nav-item", href: item.href, className: "boring-settings-nav-item", children: /* @__PURE__ */ jsxs9("span", { className: "min-w-0", children: [
1282
+ /* @__PURE__ */ jsx27("span", { className: "block truncate text-[12.5px] font-medium text-foreground", children: item.label }),
1283
+ item.description ? /* @__PURE__ */ jsx27("span", { className: "block truncate text-[11.5px] leading-4 text-muted-foreground", children: item.description }) : null
1252
1284
  ] }) }, item.href))
1253
1285
  ] });
1254
1286
  }
@@ -1256,9 +1288,9 @@ function SettingsPageHeader({ className, eyebrow, title, description, context, c
1256
1288
  return /* @__PURE__ */ jsxs9("header", { "data-slot": "settings-page-header", className: cn("boring-settings-page-header", className), ...props, children: [
1257
1289
  context,
1258
1290
  /* @__PURE__ */ jsxs9("div", { className: "max-w-2xl", children: [
1259
- eyebrow ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-page-eyebrow", className: "text-[11px] font-medium uppercase leading-4 text-muted-foreground", children: eyebrow }) : null,
1260
- /* @__PURE__ */ jsx26("h1", { "data-slot": "settings-page-title", className: "mt-1 text-[20px] font-semibold leading-7 tracking-tight text-foreground", children: title }),
1261
- description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-page-description", className: "mt-2 text-[13px] leading-5 text-muted-foreground", children: description }) : null
1291
+ eyebrow ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-page-eyebrow", className: "text-[11px] font-medium uppercase leading-4 text-muted-foreground", children: eyebrow }) : null,
1292
+ /* @__PURE__ */ jsx27("h1", { "data-slot": "settings-page-title", className: "mt-1 text-[20px] font-semibold leading-7 tracking-tight text-foreground", children: title }),
1293
+ description ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-page-description", className: "mt-2 text-[13px] leading-5 text-muted-foreground", children: description }) : null
1262
1294
  ] }),
1263
1295
  children
1264
1296
  ] });
@@ -1266,26 +1298,26 @@ function SettingsPageHeader({ className, eyebrow, title, description, context, c
1266
1298
  function SettingsActionRow({ className, title, description, action, ...props }) {
1267
1299
  return /* @__PURE__ */ jsxs9("div", { "data-slot": "settings-action-row", className: cn("boring-settings-action-row", className), ...props, children: [
1268
1300
  /* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
1269
- /* @__PURE__ */ jsx26("p", { "data-slot": "settings-action-title", className: "text-[13px] font-medium leading-5 text-foreground", children: title }),
1270
- description ? /* @__PURE__ */ jsx26("p", { "data-slot": "settings-action-description", className: "mt-1 max-w-xl text-[12px] leading-5 text-muted-foreground", children: description }) : null
1301
+ /* @__PURE__ */ jsx27("p", { "data-slot": "settings-action-title", className: "text-[13px] font-medium leading-5 text-foreground", children: title }),
1302
+ description ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-action-description", className: "mt-1 max-w-xl text-[12px] leading-5 text-muted-foreground", children: description }) : null
1271
1303
  ] }),
1272
- /* @__PURE__ */ jsx26("div", { "data-slot": "settings-action", className: "shrink-0", children: action })
1304
+ /* @__PURE__ */ jsx27("div", { "data-slot": "settings-action", className: "shrink-0", children: action })
1273
1305
  ] });
1274
1306
  }
1275
1307
  function DetailLine({ className, icon, label, children, ...props }) {
1276
1308
  return /* @__PURE__ */ jsxs9("div", { "data-slot": "detail-line", className: cn("flex min-h-12 items-center gap-3 px-3 py-2 text-[13px]", className), ...props, children: [
1277
- icon ? /* @__PURE__ */ jsx26("span", { "data-slot": "detail-line-icon", className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground", children: icon }) : null,
1278
- /* @__PURE__ */ jsx26("dt", { "data-slot": "detail-line-label", className: "w-32 shrink-0 text-[12px] text-muted-foreground", children: label }),
1279
- /* @__PURE__ */ jsx26("dd", { "data-slot": "detail-line-value", className: "min-w-0 flex-1 text-foreground", children })
1309
+ icon ? /* @__PURE__ */ jsx27("span", { "data-slot": "detail-line-icon", className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground", children: icon }) : null,
1310
+ /* @__PURE__ */ jsx27("dt", { "data-slot": "detail-line-label", className: "w-32 shrink-0 text-[12px] text-muted-foreground", children: label }),
1311
+ /* @__PURE__ */ jsx27("dd", { "data-slot": "detail-line-value", className: "min-w-0 flex-1 text-foreground", children })
1280
1312
  ] });
1281
1313
  }
1282
1314
 
1283
1315
  // src/disclosure.tsx
1284
1316
  import * as React6 from "react";
1285
1317
  import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
1286
- import { jsx as jsx27, jsxs as jsxs10 } from "react/jsx-runtime";
1318
+ import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
1287
1319
  var Disclosure = CollapsiblePrimitive.Root;
1288
- var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1320
+ var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1289
1321
  CollapsiblePrimitive.Content,
1290
1322
  {
1291
1323
  ref,
@@ -1296,7 +1328,7 @@ var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @
1296
1328
  ));
1297
1329
  DisclosureContent.displayName = "DisclosureContent";
1298
1330
  var DisclosureTrigger = React6.forwardRef(
1299
- ({ className, children, chevron, variant = "ghost", size = "sm", ...props }, ref) => /* @__PURE__ */ jsx27(CollapsiblePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
1331
+ ({ className, children, chevron, variant = "ghost", size = "sm", ...props }, ref) => /* @__PURE__ */ jsx28(CollapsiblePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
1300
1332
  Button,
1301
1333
  {
1302
1334
  ref,
@@ -1306,7 +1338,7 @@ var DisclosureTrigger = React6.forwardRef(
1306
1338
  className: cn("group/disclosure justify-start gap-2", className),
1307
1339
  ...props,
1308
1340
  children: [
1309
- chevron ?? /* @__PURE__ */ jsx27(DisclosureChevron, {}),
1341
+ chevron ?? /* @__PURE__ */ jsx28(DisclosureChevron, {}),
1310
1342
  children
1311
1343
  ]
1312
1344
  }
@@ -1314,7 +1346,7 @@ var DisclosureTrigger = React6.forwardRef(
1314
1346
  );
1315
1347
  DisclosureTrigger.displayName = "DisclosureTrigger";
1316
1348
  function DisclosureChevron({ className, ...props }) {
1317
- return /* @__PURE__ */ jsx27(
1349
+ return /* @__PURE__ */ jsx28(
1318
1350
  "span",
1319
1351
  {
1320
1352
  "data-slot": "disclosure-chevron",
@@ -1327,7 +1359,7 @@ function DisclosureChevron({ className, ...props }) {
1327
1359
  }
1328
1360
 
1329
1361
  // src/resize-handle.tsx
1330
- import { jsx as jsx28 } from "react/jsx-runtime";
1362
+ import { jsx as jsx29 } from "react/jsx-runtime";
1331
1363
  function ResizeHandle({
1332
1364
  className,
1333
1365
  orientation = "vertical",
@@ -1336,7 +1368,7 @@ function ResizeHandle({
1336
1368
  tabIndex = 0,
1337
1369
  ...props
1338
1370
  }) {
1339
- return /* @__PURE__ */ jsx28(
1371
+ return /* @__PURE__ */ jsx29(
1340
1372
  "div",
1341
1373
  {
1342
1374
  "data-slot": "resize-handle",
@@ -1356,9 +1388,9 @@ function ResizeHandle({
1356
1388
  }
1357
1389
 
1358
1390
  // src/avatar.tsx
1359
- import { jsx as jsx29 } from "react/jsx-runtime";
1391
+ import { jsx as jsx30 } from "react/jsx-runtime";
1360
1392
  function Avatar({ className, ...props }) {
1361
- return /* @__PURE__ */ jsx29(
1393
+ return /* @__PURE__ */ jsx30(
1362
1394
  "div",
1363
1395
  {
1364
1396
  "data-slot": "avatar",
@@ -1368,7 +1400,7 @@ function Avatar({ className, ...props }) {
1368
1400
  );
1369
1401
  }
1370
1402
  function AvatarFallback({ className, ...props }) {
1371
- return /* @__PURE__ */ jsx29(
1403
+ return /* @__PURE__ */ jsx30(
1372
1404
  "span",
1373
1405
  {
1374
1406
  "data-slot": "avatar-fallback",
@@ -1378,13 +1410,13 @@ function AvatarFallback({ className, ...props }) {
1378
1410
  );
1379
1411
  }
1380
1412
  function InitialsAvatar({ initials, className, ...props }) {
1381
- return /* @__PURE__ */ jsx29(Avatar, { className, ...props, children: /* @__PURE__ */ jsx29(AvatarFallback, { children: initials }) });
1413
+ return /* @__PURE__ */ jsx30(Avatar, { className, ...props, children: /* @__PURE__ */ jsx30(AvatarFallback, { children: initials }) });
1382
1414
  }
1383
1415
 
1384
1416
  // src/toast.tsx
1385
1417
  import * as React7 from "react";
1386
1418
  import { createPortal } from "react-dom";
1387
- import { jsx as jsx30, jsxs as jsxs11 } from "react/jsx-runtime";
1419
+ import { jsx as jsx31, jsxs as jsxs11 } from "react/jsx-runtime";
1388
1420
  var toasts = [];
1389
1421
  var listeners = /* @__PURE__ */ new Set();
1390
1422
  var nextId = 0;
@@ -1443,7 +1475,7 @@ function Toaster({ position = "bottom-right", className }) {
1443
1475
  const [items, setItems] = React7.useState(() => toasts);
1444
1476
  React7.useEffect(() => subscribeToasts(setItems), []);
1445
1477
  if (typeof document === "undefined") return null;
1446
- const node = /* @__PURE__ */ jsx30(
1478
+ const node = /* @__PURE__ */ jsx31(
1447
1479
  "div",
1448
1480
  {
1449
1481
  role: "region",
@@ -1471,12 +1503,12 @@ function Toaster({ position = "bottom-right", className }) {
1471
1503
  VARIANT_CLASS[variant]
1472
1504
  ),
1473
1505
  children: [
1474
- /* @__PURE__ */ jsx30("span", { "data-toast-icon": true, className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center text-[11px] font-semibold leading-none", children: VARIANT_ICON[variant] }),
1506
+ /* @__PURE__ */ jsx31("span", { "data-toast-icon": true, className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center text-[11px] font-semibold leading-none", children: VARIANT_ICON[variant] }),
1475
1507
  /* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
1476
- item.title && /* @__PURE__ */ jsx30("div", { className: "text-sm font-medium leading-snug", children: item.title }),
1477
- item.description && /* @__PURE__ */ jsx30("div", { className: cn("text-xs text-muted-foreground", item.title ? "mt-0.5" : "leading-snug"), children: item.description })
1508
+ item.title && /* @__PURE__ */ jsx31("div", { className: "text-sm font-medium leading-snug", children: item.title }),
1509
+ item.description && /* @__PURE__ */ jsx31("div", { className: cn("text-xs text-muted-foreground", item.title ? "mt-0.5" : "leading-snug"), children: item.description })
1478
1510
  ] }),
1479
- /* @__PURE__ */ jsx30(IconButton, { type: "button", variant: "ghost", size: "icon-xs", onClick: () => dismissToast(item.id), "aria-label": "Dismiss", className: "shrink-0 text-muted-foreground/70", children: /* @__PURE__ */ jsx30("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" }) })
1511
+ /* @__PURE__ */ jsx31(IconButton, { type: "button", variant: "ghost", size: "icon-xs", onClick: () => dismissToast(item.id), "aria-label": "Dismiss", className: "shrink-0 text-muted-foreground/70", children: /* @__PURE__ */ jsx31("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" }) })
1480
1512
  ]
1481
1513
  },
1482
1514
  item.id
@@ -1488,7 +1520,7 @@ function Toaster({ position = "bottom-right", className }) {
1488
1520
  }
1489
1521
 
1490
1522
  // src/loading-state.tsx
1491
- import { jsx as jsx31, jsxs as jsxs12 } from "react/jsx-runtime";
1523
+ import { jsx as jsx32, jsxs as jsxs12 } from "react/jsx-runtime";
1492
1524
  function LoadingState({ className, label = "Loading\u2026", centered = false, children, ...props }) {
1493
1525
  return /* @__PURE__ */ jsxs12(
1494
1526
  "div",
@@ -1502,20 +1534,20 @@ function LoadingState({ className, label = "Loading\u2026", centered = false, ch
1502
1534
  ),
1503
1535
  ...props,
1504
1536
  children: [
1505
- /* @__PURE__ */ jsx31(Spinner, { className: "size-3.5" }),
1506
- /* @__PURE__ */ jsx31("span", { children: children ?? label })
1537
+ /* @__PURE__ */ jsx32(Spinner, { className: "size-3.5" }),
1538
+ /* @__PURE__ */ jsx32("span", { children: children ?? label })
1507
1539
  ]
1508
1540
  }
1509
1541
  );
1510
1542
  }
1511
1543
 
1512
1544
  // src/list.tsx
1513
- import { jsx as jsx32 } from "react/jsx-runtime";
1545
+ import { jsx as jsx33 } from "react/jsx-runtime";
1514
1546
  function List2({ className, ...props }) {
1515
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list", className: cn("divide-y divide-border/60", className), ...props });
1547
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list", className: cn("divide-y divide-border/60", className), ...props });
1516
1548
  }
1517
1549
  function ListRow({ className, interactive, ...props }) {
1518
- return /* @__PURE__ */ jsx32(
1550
+ return /* @__PURE__ */ jsx33(
1519
1551
  "div",
1520
1552
  {
1521
1553
  "data-slot": "list-row",
@@ -1530,25 +1562,25 @@ function ListRow({ className, interactive, ...props }) {
1530
1562
  );
1531
1563
  }
1532
1564
  function ListRowMain({ className, ...props }) {
1533
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-main", className: cn("min-w-0 flex-1", className), ...props });
1565
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list-row-main", className: cn("min-w-0 flex-1", className), ...props });
1534
1566
  }
1535
1567
  function ListRowTitle({ className, ...props }) {
1536
- return /* @__PURE__ */ jsx32("p", { "data-slot": "list-row-title", className: cn("truncate text-sm font-medium text-foreground", className), ...props });
1568
+ return /* @__PURE__ */ jsx33("p", { "data-slot": "list-row-title", className: cn("truncate text-sm font-medium text-foreground", className), ...props });
1537
1569
  }
1538
1570
  function ListRowDescription({ className, ...props }) {
1539
- return /* @__PURE__ */ jsx32("p", { "data-slot": "list-row-description", className: cn("truncate text-xs text-muted-foreground", className), ...props });
1571
+ return /* @__PURE__ */ jsx33("p", { "data-slot": "list-row-description", className: cn("truncate text-xs text-muted-foreground", className), ...props });
1540
1572
  }
1541
1573
  function ListRowMeta({ className, ...props }) {
1542
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-meta", className: cn("flex shrink-0 items-center gap-2 text-xs text-muted-foreground", className), ...props });
1574
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list-row-meta", className: cn("flex shrink-0 items-center gap-2 text-xs text-muted-foreground", className), ...props });
1543
1575
  }
1544
1576
  function ListRowActions({ className, ...props }) {
1545
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
1577
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list-row-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
1546
1578
  }
1547
1579
 
1548
1580
  // src/detail-list.tsx
1549
- import { jsx as jsx33 } from "react/jsx-runtime";
1581
+ import { jsx as jsx34 } from "react/jsx-runtime";
1550
1582
  function DetailList({ className, ...props }) {
1551
- return /* @__PURE__ */ jsx33(
1583
+ return /* @__PURE__ */ jsx34(
1552
1584
  "dl",
1553
1585
  {
1554
1586
  "data-slot": "detail-list",
@@ -1559,9 +1591,9 @@ function DetailList({ className, ...props }) {
1559
1591
  }
1560
1592
 
1561
1593
  // src/floating-panel.tsx
1562
- import { jsx as jsx34 } from "react/jsx-runtime";
1594
+ import { jsx as jsx35 } from "react/jsx-runtime";
1563
1595
  function FloatingPanel({ className, ...props }) {
1564
- return /* @__PURE__ */ jsx34(
1596
+ return /* @__PURE__ */ jsx35(
1565
1597
  "div",
1566
1598
  {
1567
1599
  "data-slot": "floating-panel",
@@ -1571,16 +1603,16 @@ function FloatingPanel({ className, ...props }) {
1571
1603
  );
1572
1604
  }
1573
1605
  function FloatingPanelHeader({ className, ...props }) {
1574
- return /* @__PURE__ */ jsx34("div", { "data-slot": "floating-panel-header", className: cn("flex items-center justify-between gap-2 border-b border-border px-1 pb-2", className), ...props });
1606
+ return /* @__PURE__ */ jsx35("div", { "data-slot": "floating-panel-header", className: cn("flex items-center justify-between gap-2 border-b border-border px-1 pb-2", className), ...props });
1575
1607
  }
1576
1608
  function FloatingPanelBody({ className, ...props }) {
1577
- return /* @__PURE__ */ jsx34("div", { "data-slot": "floating-panel-body", className: cn("py-1", className), ...props });
1609
+ return /* @__PURE__ */ jsx35("div", { "data-slot": "floating-panel-body", className: cn("py-1", className), ...props });
1578
1610
  }
1579
1611
 
1580
1612
  // src/card.tsx
1581
- import { jsx as jsx35 } from "react/jsx-runtime";
1613
+ import { jsx as jsx36 } from "react/jsx-runtime";
1582
1614
  function Card({ className, ...props }) {
1583
- return /* @__PURE__ */ jsx35(
1615
+ return /* @__PURE__ */ jsx36(
1584
1616
  "div",
1585
1617
  {
1586
1618
  "data-slot": "card",
@@ -1593,7 +1625,7 @@ function Card({ className, ...props }) {
1593
1625
  );
1594
1626
  }
1595
1627
  function CardHeader({ className, ...props }) {
1596
- return /* @__PURE__ */ jsx35(
1628
+ return /* @__PURE__ */ jsx36(
1597
1629
  "div",
1598
1630
  {
1599
1631
  "data-slot": "card-header",
@@ -1606,7 +1638,7 @@ function CardHeader({ className, ...props }) {
1606
1638
  );
1607
1639
  }
1608
1640
  function CardTitle({ className, ...props }) {
1609
- return /* @__PURE__ */ jsx35(
1641
+ return /* @__PURE__ */ jsx36(
1610
1642
  "div",
1611
1643
  {
1612
1644
  "data-slot": "card-title",
@@ -1616,7 +1648,7 @@ function CardTitle({ className, ...props }) {
1616
1648
  );
1617
1649
  }
1618
1650
  function CardDescription({ className, ...props }) {
1619
- return /* @__PURE__ */ jsx35(
1651
+ return /* @__PURE__ */ jsx36(
1620
1652
  "div",
1621
1653
  {
1622
1654
  "data-slot": "card-description",
@@ -1626,7 +1658,7 @@ function CardDescription({ className, ...props }) {
1626
1658
  );
1627
1659
  }
1628
1660
  function CardAction({ className, ...props }) {
1629
- return /* @__PURE__ */ jsx35(
1661
+ return /* @__PURE__ */ jsx36(
1630
1662
  "div",
1631
1663
  {
1632
1664
  "data-slot": "card-action",
@@ -1639,7 +1671,7 @@ function CardAction({ className, ...props }) {
1639
1671
  );
1640
1672
  }
1641
1673
  function CardContent({ className, ...props }) {
1642
- return /* @__PURE__ */ jsx35(
1674
+ return /* @__PURE__ */ jsx36(
1643
1675
  "div",
1644
1676
  {
1645
1677
  "data-slot": "card-content",
@@ -1649,7 +1681,7 @@ function CardContent({ className, ...props }) {
1649
1681
  );
1650
1682
  }
1651
1683
  function CardFooter({ className, ...props }) {
1652
- return /* @__PURE__ */ jsx35(
1684
+ return /* @__PURE__ */ jsx36(
1653
1685
  "div",
1654
1686
  {
1655
1687
  "data-slot": "card-footer",
@@ -1661,12 +1693,12 @@ function CardFooter({ className, ...props }) {
1661
1693
 
1662
1694
  // src/label.tsx
1663
1695
  import * as LabelPrimitive from "@radix-ui/react-label";
1664
- import { jsx as jsx36 } from "react/jsx-runtime";
1696
+ import { jsx as jsx37 } from "react/jsx-runtime";
1665
1697
  function Label3({
1666
1698
  className,
1667
1699
  ...props
1668
1700
  }) {
1669
- return /* @__PURE__ */ jsx36(
1701
+ return /* @__PURE__ */ jsx37(
1670
1702
  LabelPrimitive.Root,
1671
1703
  {
1672
1704
  "data-slot": "label",
@@ -1681,12 +1713,12 @@ function Label3({
1681
1713
 
1682
1714
  // src/checkbox.tsx
1683
1715
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
1684
- import { jsx as jsx37 } from "react/jsx-runtime";
1716
+ import { jsx as jsx38 } from "react/jsx-runtime";
1685
1717
  function Checkbox({
1686
1718
  className,
1687
1719
  ...props
1688
1720
  }) {
1689
- return /* @__PURE__ */ jsx37(
1721
+ return /* @__PURE__ */ jsx38(
1690
1722
  CheckboxPrimitive.Root,
1691
1723
  {
1692
1724
  "data-slot": "checkbox",
@@ -1695,12 +1727,12 @@ function Checkbox({
1695
1727
  className
1696
1728
  ),
1697
1729
  ...props,
1698
- children: /* @__PURE__ */ jsx37(
1730
+ children: /* @__PURE__ */ jsx38(
1699
1731
  CheckboxPrimitive.Indicator,
1700
1732
  {
1701
1733
  "data-slot": "checkbox-indicator",
1702
1734
  className: "grid place-content-center text-current transition-none",
1703
- children: /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" })
1735
+ children: /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" })
1704
1736
  }
1705
1737
  )
1706
1738
  }
@@ -1709,8 +1741,8 @@ function Checkbox({
1709
1741
 
1710
1742
  // src/radio.tsx
1711
1743
  import * as React8 from "react";
1712
- import { jsx as jsx38 } from "react/jsx-runtime";
1713
- var Radio = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx38(
1744
+ import { jsx as jsx39 } from "react/jsx-runtime";
1745
+ var Radio = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(
1714
1746
  "input",
1715
1747
  {
1716
1748
  ref,
@@ -1727,27 +1759,27 @@ Radio.displayName = "Radio";
1727
1759
 
1728
1760
  // src/alert-dialog.tsx
1729
1761
  import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
1730
- import { jsx as jsx39, jsxs as jsxs13 } from "react/jsx-runtime";
1762
+ import { jsx as jsx40, jsxs as jsxs13 } from "react/jsx-runtime";
1731
1763
  function AlertDialog({
1732
1764
  ...props
1733
1765
  }) {
1734
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
1766
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
1735
1767
  }
1736
1768
  function AlertDialogTrigger({
1737
1769
  ...props
1738
1770
  }) {
1739
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
1771
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
1740
1772
  }
1741
1773
  function AlertDialogPortal({
1742
1774
  ...props
1743
1775
  }) {
1744
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
1776
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
1745
1777
  }
1746
1778
  function AlertDialogOverlay({
1747
1779
  className,
1748
1780
  ...props
1749
1781
  }) {
1750
- return /* @__PURE__ */ jsx39(
1782
+ return /* @__PURE__ */ jsx40(
1751
1783
  AlertDialogPrimitive.Overlay,
1752
1784
  {
1753
1785
  "data-slot": "alert-dialog-overlay",
@@ -1765,8 +1797,8 @@ function AlertDialogContent({
1765
1797
  ...props
1766
1798
  }) {
1767
1799
  return /* @__PURE__ */ jsxs13(AlertDialogPortal, { children: [
1768
- /* @__PURE__ */ jsx39(AlertDialogOverlay, {}),
1769
- /* @__PURE__ */ jsx39(
1800
+ /* @__PURE__ */ jsx40(AlertDialogOverlay, {}),
1801
+ /* @__PURE__ */ jsx40(
1770
1802
  AlertDialogPrimitive.Content,
1771
1803
  {
1772
1804
  "data-slot": "alert-dialog-content",
@@ -1784,7 +1816,7 @@ function AlertDialogHeader({
1784
1816
  className,
1785
1817
  ...props
1786
1818
  }) {
1787
- return /* @__PURE__ */ jsx39(
1819
+ return /* @__PURE__ */ jsx40(
1788
1820
  "div",
1789
1821
  {
1790
1822
  "data-slot": "alert-dialog-header",
@@ -1800,7 +1832,7 @@ function AlertDialogFooter({
1800
1832
  className,
1801
1833
  ...props
1802
1834
  }) {
1803
- return /* @__PURE__ */ jsx39(
1835
+ return /* @__PURE__ */ jsx40(
1804
1836
  "div",
1805
1837
  {
1806
1838
  "data-slot": "alert-dialog-footer",
@@ -1816,7 +1848,7 @@ function AlertDialogTitle({
1816
1848
  className,
1817
1849
  ...props
1818
1850
  }) {
1819
- return /* @__PURE__ */ jsx39(
1851
+ return /* @__PURE__ */ jsx40(
1820
1852
  AlertDialogPrimitive.Title,
1821
1853
  {
1822
1854
  "data-slot": "alert-dialog-title",
@@ -1832,7 +1864,7 @@ function AlertDialogDescription({
1832
1864
  className,
1833
1865
  ...props
1834
1866
  }) {
1835
- return /* @__PURE__ */ jsx39(
1867
+ return /* @__PURE__ */ jsx40(
1836
1868
  AlertDialogPrimitive.Description,
1837
1869
  {
1838
1870
  "data-slot": "alert-dialog-description",
@@ -1845,7 +1877,7 @@ function AlertDialogMedia({
1845
1877
  className,
1846
1878
  ...props
1847
1879
  }) {
1848
- return /* @__PURE__ */ jsx39(
1880
+ return /* @__PURE__ */ jsx40(
1849
1881
  "div",
1850
1882
  {
1851
1883
  "data-slot": "alert-dialog-media",
@@ -1863,7 +1895,7 @@ function AlertDialogAction({
1863
1895
  size = "default",
1864
1896
  ...props
1865
1897
  }) {
1866
- return /* @__PURE__ */ jsx39(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx39(
1898
+ return /* @__PURE__ */ jsx40(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx40(
1867
1899
  AlertDialogPrimitive.Action,
1868
1900
  {
1869
1901
  "data-slot": "alert-dialog-action",
@@ -1878,7 +1910,7 @@ function AlertDialogCancel({
1878
1910
  size = "default",
1879
1911
  ...props
1880
1912
  }) {
1881
- return /* @__PURE__ */ jsx39(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx39(
1913
+ return /* @__PURE__ */ jsx40(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx40(
1882
1914
  AlertDialogPrimitive.Cancel,
1883
1915
  {
1884
1916
  "data-slot": "alert-dialog-cancel",
@@ -1890,16 +1922,16 @@ function AlertDialogCancel({
1890
1922
 
1891
1923
  // src/popover.tsx
1892
1924
  import * as PopoverPrimitive from "@radix-ui/react-popover";
1893
- import { jsx as jsx40 } from "react/jsx-runtime";
1925
+ import { jsx as jsx41 } from "react/jsx-runtime";
1894
1926
  function Popover({
1895
1927
  ...props
1896
1928
  }) {
1897
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1929
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1898
1930
  }
1899
1931
  function PopoverTrigger({
1900
1932
  ...props
1901
1933
  }) {
1902
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1934
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1903
1935
  }
1904
1936
  function PopoverContent({
1905
1937
  className,
@@ -1907,7 +1939,7 @@ function PopoverContent({
1907
1939
  sideOffset = 4,
1908
1940
  ...props
1909
1941
  }) {
1910
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx40(
1942
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx41(
1911
1943
  PopoverPrimitive.Content,
1912
1944
  {
1913
1945
  "data-slot": "popover-content",
@@ -1924,10 +1956,10 @@ function PopoverContent({
1924
1956
  function PopoverAnchor({
1925
1957
  ...props
1926
1958
  }) {
1927
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1959
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1928
1960
  }
1929
1961
  function PopoverHeader({ className, ...props }) {
1930
- return /* @__PURE__ */ jsx40(
1962
+ return /* @__PURE__ */ jsx41(
1931
1963
  "div",
1932
1964
  {
1933
1965
  "data-slot": "popover-header",
@@ -1937,7 +1969,7 @@ function PopoverHeader({ className, ...props }) {
1937
1969
  );
1938
1970
  }
1939
1971
  function PopoverTitle({ className, ...props }) {
1940
- return /* @__PURE__ */ jsx40(
1972
+ return /* @__PURE__ */ jsx41(
1941
1973
  "div",
1942
1974
  {
1943
1975
  "data-slot": "popover-title",
@@ -1950,7 +1982,7 @@ function PopoverDescription({
1950
1982
  className,
1951
1983
  ...props
1952
1984
  }) {
1953
- return /* @__PURE__ */ jsx40(
1985
+ return /* @__PURE__ */ jsx41(
1954
1986
  "p",
1955
1987
  {
1956
1988
  "data-slot": "popover-description",
@@ -1962,7 +1994,7 @@ function PopoverDescription({
1962
1994
 
1963
1995
  // src/scroll-area.tsx
1964
1996
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
1965
- import { jsx as jsx41, jsxs as jsxs14 } from "react/jsx-runtime";
1997
+ import { jsx as jsx42, jsxs as jsxs14 } from "react/jsx-runtime";
1966
1998
  function ScrollArea({
1967
1999
  className,
1968
2000
  children,
@@ -1975,7 +2007,7 @@ function ScrollArea({
1975
2007
  className: cn("relative", className),
1976
2008
  ...props,
1977
2009
  children: [
1978
- /* @__PURE__ */ jsx41(
2010
+ /* @__PURE__ */ jsx42(
1979
2011
  ScrollAreaPrimitive.Viewport,
1980
2012
  {
1981
2013
  "data-slot": "scroll-area-viewport",
@@ -1983,8 +2015,8 @@ function ScrollArea({
1983
2015
  children
1984
2016
  }
1985
2017
  ),
1986
- /* @__PURE__ */ jsx41(ScrollBar, {}),
1987
- /* @__PURE__ */ jsx41(ScrollAreaPrimitive.Corner, {})
2018
+ /* @__PURE__ */ jsx42(ScrollBar, {}),
2019
+ /* @__PURE__ */ jsx42(ScrollAreaPrimitive.Corner, {})
1988
2020
  ]
1989
2021
  }
1990
2022
  );
@@ -1994,7 +2026,7 @@ function ScrollBar({
1994
2026
  orientation = "vertical",
1995
2027
  ...props
1996
2028
  }) {
1997
- return /* @__PURE__ */ jsx41(
2029
+ return /* @__PURE__ */ jsx42(
1998
2030
  ScrollAreaPrimitive.ScrollAreaScrollbar,
1999
2031
  {
2000
2032
  "data-slot": "scroll-area-scrollbar",
@@ -2006,7 +2038,7 @@ function ScrollBar({
2006
2038
  className
2007
2039
  ),
2008
2040
  ...props,
2009
- children: /* @__PURE__ */ jsx41(
2041
+ children: /* @__PURE__ */ jsx42(
2010
2042
  ScrollAreaPrimitive.ScrollAreaThumb,
2011
2043
  {
2012
2044
  "data-slot": "scroll-area-thumb",
@@ -2019,30 +2051,30 @@ function ScrollBar({
2019
2051
 
2020
2052
  // src/sheet.tsx
2021
2053
  import * as SheetPrimitive from "@radix-ui/react-dialog";
2022
- import { jsx as jsx42, jsxs as jsxs15 } from "react/jsx-runtime";
2054
+ import { jsx as jsx43, jsxs as jsxs15 } from "react/jsx-runtime";
2023
2055
  function Sheet({ ...props }) {
2024
- return /* @__PURE__ */ jsx42(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
2056
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
2025
2057
  }
2026
2058
  function SheetTrigger({
2027
2059
  ...props
2028
2060
  }) {
2029
- return /* @__PURE__ */ jsx42(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2061
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2030
2062
  }
2031
2063
  function SheetClose({
2032
2064
  ...props
2033
2065
  }) {
2034
- return /* @__PURE__ */ jsx42(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
2066
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
2035
2067
  }
2036
2068
  function SheetPortal({
2037
2069
  ...props
2038
2070
  }) {
2039
- return /* @__PURE__ */ jsx42(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2071
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2040
2072
  }
2041
2073
  function SheetOverlay({
2042
2074
  className,
2043
2075
  ...props
2044
2076
  }) {
2045
- return /* @__PURE__ */ jsx42(
2077
+ return /* @__PURE__ */ jsx43(
2046
2078
  SheetPrimitive.Overlay,
2047
2079
  {
2048
2080
  "data-slot": "sheet-overlay",
@@ -2062,7 +2094,7 @@ function SheetContent({
2062
2094
  ...props
2063
2095
  }) {
2064
2096
  return /* @__PURE__ */ jsxs15(SheetPortal, { children: [
2065
- /* @__PURE__ */ jsx42(SheetOverlay, {}),
2097
+ /* @__PURE__ */ jsx43(SheetOverlay, {}),
2066
2098
  /* @__PURE__ */ jsxs15(
2067
2099
  SheetPrimitive.Content,
2068
2100
  {
@@ -2079,8 +2111,8 @@ function SheetContent({
2079
2111
  children: [
2080
2112
  children,
2081
2113
  showCloseButton && /* @__PURE__ */ jsxs15(SheetPrimitive.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
2082
- /* @__PURE__ */ jsx42("span", { "aria-hidden": "true", className: "text-base leading-none", children: "\xD7" }),
2083
- /* @__PURE__ */ jsx42("span", { className: "sr-only", children: "Close" })
2114
+ /* @__PURE__ */ jsx43("span", { "aria-hidden": "true", className: "text-base leading-none", children: "\xD7" }),
2115
+ /* @__PURE__ */ jsx43("span", { className: "sr-only", children: "Close" })
2084
2116
  ] })
2085
2117
  ]
2086
2118
  }
@@ -2088,7 +2120,7 @@ function SheetContent({
2088
2120
  ] });
2089
2121
  }
2090
2122
  function SheetHeader({ className, ...props }) {
2091
- return /* @__PURE__ */ jsx42(
2123
+ return /* @__PURE__ */ jsx43(
2092
2124
  "div",
2093
2125
  {
2094
2126
  "data-slot": "sheet-header",
@@ -2098,7 +2130,7 @@ function SheetHeader({ className, ...props }) {
2098
2130
  );
2099
2131
  }
2100
2132
  function SheetFooter({ className, ...props }) {
2101
- return /* @__PURE__ */ jsx42(
2133
+ return /* @__PURE__ */ jsx43(
2102
2134
  "div",
2103
2135
  {
2104
2136
  "data-slot": "sheet-footer",
@@ -2111,7 +2143,7 @@ function SheetTitle({
2111
2143
  className,
2112
2144
  ...props
2113
2145
  }) {
2114
- return /* @__PURE__ */ jsx42(
2146
+ return /* @__PURE__ */ jsx43(
2115
2147
  SheetPrimitive.Title,
2116
2148
  {
2117
2149
  "data-slot": "sheet-title",
@@ -2124,7 +2156,7 @@ function SheetDescription({
2124
2156
  className,
2125
2157
  ...props
2126
2158
  }) {
2127
- return /* @__PURE__ */ jsx42(
2159
+ return /* @__PURE__ */ jsx43(
2128
2160
  SheetPrimitive.Description,
2129
2161
  {
2130
2162
  "data-slot": "sheet-description",
@@ -2147,10 +2179,10 @@ function useToast() {
2147
2179
  // src/hover-card.tsx
2148
2180
  import * as React9 from "react";
2149
2181
  import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
2150
- import { jsx as jsx43 } from "react/jsx-runtime";
2182
+ import { jsx as jsx44 } from "react/jsx-runtime";
2151
2183
  var HoverCard = HoverCardPrimitive.Root;
2152
2184
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
2153
- var HoverCardContent = React9.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx43(
2185
+ var HoverCardContent = React9.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx44(
2154
2186
  HoverCardPrimitive.Content,
2155
2187
  {
2156
2188
  ref,
@@ -2174,7 +2206,7 @@ var CollapsibleContent2 = CollapsiblePrimitive2.CollapsibleContent;
2174
2206
  // src/button-group.tsx
2175
2207
  import { Slot as Slot3 } from "@radix-ui/react-slot";
2176
2208
  import { cva as cva4 } from "class-variance-authority";
2177
- import { jsx as jsx44 } from "react/jsx-runtime";
2209
+ import { jsx as jsx45 } from "react/jsx-runtime";
2178
2210
  var buttonGroupVariants = cva4(
2179
2211
  "flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 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",
2180
2212
  {
@@ -2192,7 +2224,7 @@ function ButtonGroup({
2192
2224
  orientation,
2193
2225
  ...props
2194
2226
  }) {
2195
- return /* @__PURE__ */ jsx44(
2227
+ return /* @__PURE__ */ jsx45(
2196
2228
  "div",
2197
2229
  {
2198
2230
  role: "group",
@@ -2209,7 +2241,7 @@ function ButtonGroupText({
2209
2241
  ...props
2210
2242
  }) {
2211
2243
  const Comp = asChild ? Slot3 : "div";
2212
- return /* @__PURE__ */ jsx44(
2244
+ return /* @__PURE__ */ jsx45(
2213
2245
  Comp,
2214
2246
  {
2215
2247
  className: cn(
@@ -2225,7 +2257,7 @@ function ButtonGroupSeparator({
2225
2257
  orientation = "vertical",
2226
2258
  ...props
2227
2259
  }) {
2228
- return /* @__PURE__ */ jsx44(
2260
+ return /* @__PURE__ */ jsx45(
2229
2261
  Separator,
2230
2262
  {
2231
2263
  "data-slot": "button-group-separator",
@@ -2238,9 +2270,9 @@ function ButtonGroupSeparator({
2238
2270
 
2239
2271
  // src/input-group.tsx
2240
2272
  import { cva as cva5 } from "class-variance-authority";
2241
- import { jsx as jsx45 } from "react/jsx-runtime";
2273
+ import { jsx as jsx46 } from "react/jsx-runtime";
2242
2274
  function InputGroup({ className, ...props }) {
2243
- return /* @__PURE__ */ jsx45(
2275
+ return /* @__PURE__ */ jsx46(
2244
2276
  "div",
2245
2277
  {
2246
2278
  "data-slot": "input-group",
@@ -2278,7 +2310,7 @@ function InputGroupAddon({
2278
2310
  align = "inline-start",
2279
2311
  ...props
2280
2312
  }) {
2281
- return /* @__PURE__ */ jsx45(
2313
+ return /* @__PURE__ */ jsx46(
2282
2314
  "div",
2283
2315
  {
2284
2316
  role: "group",
@@ -2311,10 +2343,10 @@ function InputGroupButton({
2311
2343
  size = "xs",
2312
2344
  ...props
2313
2345
  }) {
2314
- return /* @__PURE__ */ jsx45(Button, { type, "data-size": size, variant, className: cn(inputGroupButtonVariants({ size }), className), ...props });
2346
+ return /* @__PURE__ */ jsx46(Button, { type, "data-size": size, variant, className: cn(inputGroupButtonVariants({ size }), className), ...props });
2315
2347
  }
2316
2348
  function InputGroupText({ className, ...props }) {
2317
- return /* @__PURE__ */ jsx45(
2349
+ return /* @__PURE__ */ jsx46(
2318
2350
  "span",
2319
2351
  {
2320
2352
  className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg:not([class*=size-])]:size-4 [&_svg]:pointer-events-none", className),
@@ -2323,7 +2355,7 @@ function InputGroupText({ className, ...props }) {
2323
2355
  );
2324
2356
  }
2325
2357
  function InputGroupInput({ className, ...props }) {
2326
- return /* @__PURE__ */ jsx45(
2358
+ return /* @__PURE__ */ jsx46(
2327
2359
  Input,
2328
2360
  {
2329
2361
  "data-slot": "input-group-control",
@@ -2333,7 +2365,7 @@ function InputGroupInput({ className, ...props }) {
2333
2365
  );
2334
2366
  }
2335
2367
  function InputGroupTextarea({ className, ...props }) {
2336
- return /* @__PURE__ */ jsx45(
2368
+ return /* @__PURE__ */ jsx46(
2337
2369
  Textarea,
2338
2370
  {
2339
2371
  "data-slot": "input-group-control",
@@ -2344,15 +2376,15 @@ function InputGroupTextarea({ className, ...props }) {
2344
2376
  }
2345
2377
 
2346
2378
  // src/choice-group.tsx
2347
- import { jsx as jsx46 } from "react/jsx-runtime";
2379
+ import { jsx as jsx47 } from "react/jsx-runtime";
2348
2380
  function ChoiceGroup({ className, ...props }) {
2349
- return /* @__PURE__ */ jsx46("fieldset", { "data-slot": "choice-group", className: cn("grid gap-2", className), ...props });
2381
+ return /* @__PURE__ */ jsx47("fieldset", { "data-slot": "choice-group", className: cn("grid gap-2", className), ...props });
2350
2382
  }
2351
2383
  function ChoiceGroupLegend({ className, ...props }) {
2352
- return /* @__PURE__ */ jsx46("legend", { "data-slot": "choice-group-legend", className: cn("mb-2 text-sm font-medium leading-5 text-foreground", className), ...props });
2384
+ return /* @__PURE__ */ jsx47("legend", { "data-slot": "choice-group-legend", className: cn("mb-2 text-sm font-medium leading-5 text-foreground", className), ...props });
2353
2385
  }
2354
2386
  function ChoiceItem({ className, ...props }) {
2355
- return /* @__PURE__ */ jsx46(
2387
+ return /* @__PURE__ */ jsx47(
2356
2388
  "label",
2357
2389
  {
2358
2390
  "data-slot": "choice-item",
@@ -2367,13 +2399,13 @@ function ChoiceItem({ className, ...props }) {
2367
2399
  );
2368
2400
  }
2369
2401
  function ChoiceItemBody({ className, ...props }) {
2370
- return /* @__PURE__ */ jsx46("span", { "data-slot": "choice-item-body", className: cn("flex flex-col gap-1", className), ...props });
2402
+ return /* @__PURE__ */ jsx47("span", { "data-slot": "choice-item-body", className: cn("flex flex-col gap-1", className), ...props });
2371
2403
  }
2372
2404
  function ChoiceItemTitle({ className, ...props }) {
2373
- return /* @__PURE__ */ jsx46("span", { "data-slot": "choice-item-title", className: cn("leading-5", className), ...props });
2405
+ return /* @__PURE__ */ jsx47("span", { "data-slot": "choice-item-title", className: cn("leading-5", className), ...props });
2374
2406
  }
2375
2407
  function ChoiceItemDescription({ className, ...props }) {
2376
- return /* @__PURE__ */ jsx46("small", { "data-slot": "choice-item-description", className: cn("text-sm leading-5 text-muted-foreground", className), ...props });
2408
+ return /* @__PURE__ */ jsx47("small", { "data-slot": "choice-item-description", className: cn("text-sm leading-5 text-muted-foreground", className), ...props });
2377
2409
  }
2378
2410
 
2379
2411
  // src/perspective-theme.ts
@@ -2543,6 +2575,7 @@ export {
2543
2575
  ListRowMeta,
2544
2576
  ListRowTitle,
2545
2577
  LoadingState,
2578
+ Meter,
2546
2579
  Notice,
2547
2580
  Pane,
2548
2581
  PaneBody,
package/dist/styles.css CHANGED
@@ -27,6 +27,7 @@
27
27
  --tracking-widest: 0.1em;
28
28
  --leading-snug: 1.375;
29
29
  --radius-xs: 0.125rem;
30
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
30
31
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
31
32
  --animate-spin: spin 1s linear infinite;
32
33
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
@@ -219,6 +220,9 @@
219
220
  .h-1 {
220
221
  height: var(--spacing);
221
222
  }
223
+ .h-2 {
224
+ height: calc(var(--spacing) * 2);
225
+ }
222
226
  .h-2\.5 {
223
227
  height: calc(var(--spacing) * 2.5);
224
228
  }
@@ -709,6 +713,9 @@
709
713
  .bg-\[color\:var\(--boring-success-soft\,var\(--secondary\)\)\] {
710
714
  background-color: var(--boring-success-soft,var(--secondary));
711
715
  }
716
+ .bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
717
+ background-color: var(--boring-warning,var(--accent-foreground));
718
+ }
712
719
  .bg-\[color\:var\(--boring-warning-soft\,var\(--accent\)\)\] {
713
720
  background-color: var(--boring-warning-soft,var(--accent));
714
721
  }
@@ -1126,6 +1133,11 @@
1126
1133
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1127
1134
  transition-duration: var(--tw-duration, var(--default-transition-duration));
1128
1135
  }
1136
+ .transition-\[width\] {
1137
+ transition-property: width;
1138
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1139
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1140
+ }
1129
1141
  .transition-all {
1130
1142
  transition-property: all;
1131
1143
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -1162,10 +1174,18 @@
1162
1174
  --tw-duration: 200ms;
1163
1175
  transition-duration: 200ms;
1164
1176
  }
1177
+ .duration-300 {
1178
+ --tw-duration: 300ms;
1179
+ transition-duration: 300ms;
1180
+ }
1165
1181
  .ease-in-out {
1166
1182
  --tw-ease: var(--ease-in-out);
1167
1183
  transition-timing-function: var(--ease-in-out);
1168
1184
  }
1185
+ .ease-out {
1186
+ --tw-ease: var(--ease-out);
1187
+ transition-timing-function: var(--ease-out);
1188
+ }
1169
1189
  .outline-none {
1170
1190
  --tw-outline-style: none;
1171
1191
  outline-style: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-ui-kit",
3
- "version": "0.1.80",
3
+ "version": "0.1.82",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Shared shadcn-style UI primitives for Boring packages and app-generated panes.",