@hachej/boring-ui-kit 0.1.81 → 0.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.
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.ComponentProps<'progress'>, 'role' | 'value' | 'max'> {
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. A native `<progress>` element
187
+ * gives the browser the dynamic fill without inline styles, which keeps it
188
+ * compatible with applications that enforce nonce-only style CSPs.
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,38 @@ 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: "[&::-webkit-progress-value]:bg-primary [&::-moz-progress-bar]:bg-primary",
1051
+ warning: "[&::-webkit-progress-value]:bg-[color:var(--boring-warning,var(--accent-foreground))] [&::-moz-progress-bar]:bg-[color:var(--boring-warning,var(--accent-foreground))]",
1052
+ danger: "[&::-webkit-progress-value]:bg-destructive [&::-moz-progress-bar]: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
+ "progress",
1058
+ {
1059
+ role: "progressbar",
1060
+ value: clamped,
1061
+ max: 100,
1062
+ "aria-valuenow": Math.round(clamped),
1063
+ "aria-valuemin": 0,
1064
+ "aria-valuemax": 100,
1065
+ "aria-label": label,
1066
+ "data-slot": "meter",
1067
+ className: cn(
1068
+ "h-2 w-full overflow-hidden rounded-full border-0 bg-muted [&::-webkit-progress-bar]:bg-muted [&::-webkit-progress-value]:rounded-full [&::-webkit-progress-value]:transition-all [&::-webkit-progress-value]:duration-300 [&::-moz-progress-bar]:rounded-full",
1069
+ toneFill[tone],
1070
+ className
1071
+ ),
1072
+ ...props
1073
+ }
1074
+ );
1075
+ }
1076
+
1047
1077
  // src/notice.tsx
1048
- import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
1078
+ import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
1049
1079
  var noticeToneClasses = {
1050
1080
  info: "border-border bg-muted/20 text-foreground [&_[data-slot=notice-icon]]:text-muted-foreground",
1051
1081
  success: "border-success/35 bg-[color:var(--success-soft)] text-success [&_[data-slot=notice-description]]:text-foreground",
@@ -1076,22 +1106,22 @@ function Notice({
1076
1106
  ),
1077
1107
  ...props,
1078
1108
  children: [
1079
- icon && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-icon", className: "mt-0.5 shrink-0", children: icon }),
1109
+ icon && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-icon", className: "mt-0.5 shrink-0", children: icon }),
1080
1110
  /* @__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 }),
1111
+ title && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-title", className: "font-medium leading-snug", children: title }),
1112
+ description && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-description", className: cn("text-muted-foreground", title && "mt-0.5"), children: description }),
1083
1113
  children
1084
1114
  ] }),
1085
- actions && /* @__PURE__ */ jsx20("div", { "data-slot": "notice-actions", className: "flex shrink-0 items-center gap-2", children: actions })
1115
+ actions && /* @__PURE__ */ jsx21("div", { "data-slot": "notice-actions", className: "flex shrink-0 items-center gap-2", children: actions })
1086
1116
  ]
1087
1117
  }
1088
1118
  );
1089
1119
  }
1090
1120
 
1091
1121
  // src/skeleton.tsx
1092
- import { jsx as jsx21 } from "react/jsx-runtime";
1122
+ import { jsx as jsx22 } from "react/jsx-runtime";
1093
1123
  function Skeleton({ className, ...props }) {
1094
- return /* @__PURE__ */ jsx21(
1124
+ return /* @__PURE__ */ jsx22(
1095
1125
  "div",
1096
1126
  {
1097
1127
  "data-slot": "skeleton",
@@ -1103,9 +1133,9 @@ function Skeleton({ className, ...props }) {
1103
1133
  }
1104
1134
 
1105
1135
  // src/inline-code.tsx
1106
- import { jsx as jsx22 } from "react/jsx-runtime";
1136
+ import { jsx as jsx23 } from "react/jsx-runtime";
1107
1137
  function InlineCode({ className, ...props }) {
1108
- return /* @__PURE__ */ jsx22(
1138
+ return /* @__PURE__ */ jsx23(
1109
1139
  "code",
1110
1140
  {
1111
1141
  "data-slot": "inline-code",
@@ -1116,9 +1146,9 @@ function InlineCode({ className, ...props }) {
1116
1146
  }
1117
1147
 
1118
1148
  // src/toolbar.tsx
1119
- import { jsx as jsx23 } from "react/jsx-runtime";
1149
+ import { jsx as jsx24 } from "react/jsx-runtime";
1120
1150
  function Toolbar({ className, ...props }) {
1121
- return /* @__PURE__ */ jsx23(
1151
+ return /* @__PURE__ */ jsx24(
1122
1152
  "div",
1123
1153
  {
1124
1154
  "data-slot": "toolbar",
@@ -1129,19 +1159,19 @@ function Toolbar({ className, ...props }) {
1129
1159
  );
1130
1160
  }
1131
1161
  function ToolbarGroup({ className, ...props }) {
1132
- return /* @__PURE__ */ jsx23("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-0.5", className), ...props });
1162
+ return /* @__PURE__ */ jsx24("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-0.5", className), ...props });
1133
1163
  }
1134
1164
  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 });
1165
+ return /* @__PURE__ */ jsx24(Button, { "data-slot": "toolbar-button", variant, size, className: cn("shrink-0", className), ...props });
1136
1166
  }
1137
1167
  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 });
1168
+ 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
1169
  }
1140
1170
 
1141
1171
  // src/chip.tsx
1142
- import { jsx as jsx24 } from "react/jsx-runtime";
1172
+ import { jsx as jsx25 } from "react/jsx-runtime";
1143
1173
  function Chip({ className, selected, ...props }) {
1144
- return /* @__PURE__ */ jsx24(
1174
+ return /* @__PURE__ */ jsx25(
1145
1175
  "span",
1146
1176
  {
1147
1177
  "data-slot": "chip",
@@ -1156,7 +1186,7 @@ function Chip({ className, selected, ...props }) {
1156
1186
  );
1157
1187
  }
1158
1188
  function ChipButton({ className, selected, variant = "outline", size = "xs", ...props }) {
1159
- return /* @__PURE__ */ jsx24(
1189
+ return /* @__PURE__ */ jsx25(
1160
1190
  Button,
1161
1191
  {
1162
1192
  "data-slot": "chip-button",
@@ -1173,7 +1203,7 @@ function ChipButton({ className, selected, variant = "outline", size = "xs", ...
1173
1203
  );
1174
1204
  }
1175
1205
  function ChipRemove({ className, children, variant = "ghost", size = "icon-xs", ...props }) {
1176
- return /* @__PURE__ */ jsx24(
1206
+ return /* @__PURE__ */ jsx25(
1177
1207
  Button,
1178
1208
  {
1179
1209
  "data-slot": "chip-remove",
@@ -1181,15 +1211,15 @@ function ChipRemove({ className, children, variant = "ghost", size = "icon-xs",
1181
1211
  size,
1182
1212
  className: cn("size-4 rounded-full text-muted-foreground hover:text-foreground", className),
1183
1213
  ...props,
1184
- children: children ?? /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" })
1214
+ children: children ?? /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "text-[13px] leading-none", children: "\xD7" })
1185
1215
  }
1186
1216
  );
1187
1217
  }
1188
1218
 
1189
1219
  // src/segmented-control.tsx
1190
- import { jsx as jsx25 } from "react/jsx-runtime";
1220
+ import { jsx as jsx26 } from "react/jsx-runtime";
1191
1221
  function SegmentedControl({ className, ...props }) {
1192
- return /* @__PURE__ */ jsx25(
1222
+ return /* @__PURE__ */ jsx26(
1193
1223
  "div",
1194
1224
  {
1195
1225
  "data-slot": "segmented-control",
@@ -1200,7 +1230,7 @@ function SegmentedControl({ className, ...props }) {
1200
1230
  );
1201
1231
  }
1202
1232
  function SegmentedControlItem({ className, selected, variant = "ghost", size = "xs", ...props }) {
1203
- return /* @__PURE__ */ jsx25(
1233
+ return /* @__PURE__ */ jsx26(
1204
1234
  Button,
1205
1235
  {
1206
1236
  "data-slot": "segmented-control-item",
@@ -1220,7 +1250,7 @@ function SegmentedControlItem({ className, selected, variant = "ghost", size = "
1220
1250
  }
1221
1251
 
1222
1252
  // src/settings.tsx
1223
- import { jsx as jsx26, jsxs as jsxs9 } from "react/jsx-runtime";
1253
+ import { jsx as jsx27, jsxs as jsxs9 } from "react/jsx-runtime";
1224
1254
  function SettingsPanel({ className, icon, title, description, footer, danger, testId, children, ...props }) {
1225
1255
  return /* @__PURE__ */ jsxs9(
1226
1256
  "section",
@@ -1231,24 +1261,24 @@ function SettingsPanel({ className, icon, title, description, footer, danger, te
1231
1261
  ...props,
1232
1262
  children: [
1233
1263
  /* @__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 }),
1264
+ icon && /* @__PURE__ */ jsx27("span", { "data-slot": "settings-panel-icon", className: danger ? "text-destructive" : "text-muted-foreground", children: icon }),
1235
1265
  /* @__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
1266
+ /* @__PURE__ */ jsx27("h2", { "data-slot": "settings-panel-title", className: cn("text-[13px] font-medium leading-5", danger ? "text-destructive" : "text-foreground"), children: title }),
1267
+ description ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-panel-description", className: "text-[12px] leading-5 text-muted-foreground", children: description }) : null
1238
1268
  ] })
1239
1269
  ] }),
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
1270
+ /* @__PURE__ */ jsx27("div", { "data-slot": "settings-panel-body", className: "p-4", children }),
1271
+ 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
1272
  ]
1243
1273
  }
1244
1274
  );
1245
1275
  }
1246
1276
  function SettingsNav({ className, label, items, ...props }) {
1247
1277
  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
1278
+ /* @__PURE__ */ jsx27("p", { "data-slot": "settings-nav-label", className: "boring-settings-nav-label", children: label }),
1279
+ 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: [
1280
+ /* @__PURE__ */ jsx27("span", { className: "block truncate text-[12.5px] font-medium text-foreground", children: item.label }),
1281
+ item.description ? /* @__PURE__ */ jsx27("span", { className: "block truncate text-[11.5px] leading-4 text-muted-foreground", children: item.description }) : null
1252
1282
  ] }) }, item.href))
1253
1283
  ] });
1254
1284
  }
@@ -1256,9 +1286,9 @@ function SettingsPageHeader({ className, eyebrow, title, description, context, c
1256
1286
  return /* @__PURE__ */ jsxs9("header", { "data-slot": "settings-page-header", className: cn("boring-settings-page-header", className), ...props, children: [
1257
1287
  context,
1258
1288
  /* @__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
1289
+ eyebrow ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-page-eyebrow", className: "text-[11px] font-medium uppercase leading-4 text-muted-foreground", children: eyebrow }) : null,
1290
+ /* @__PURE__ */ jsx27("h1", { "data-slot": "settings-page-title", className: "mt-1 text-[20px] font-semibold leading-7 tracking-tight text-foreground", children: title }),
1291
+ description ? /* @__PURE__ */ jsx27("p", { "data-slot": "settings-page-description", className: "mt-2 text-[13px] leading-5 text-muted-foreground", children: description }) : null
1262
1292
  ] }),
1263
1293
  children
1264
1294
  ] });
@@ -1266,26 +1296,26 @@ function SettingsPageHeader({ className, eyebrow, title, description, context, c
1266
1296
  function SettingsActionRow({ className, title, description, action, ...props }) {
1267
1297
  return /* @__PURE__ */ jsxs9("div", { "data-slot": "settings-action-row", className: cn("boring-settings-action-row", className), ...props, children: [
1268
1298
  /* @__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
1299
+ /* @__PURE__ */ jsx27("p", { "data-slot": "settings-action-title", className: "text-[13px] font-medium leading-5 text-foreground", children: title }),
1300
+ 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
1301
  ] }),
1272
- /* @__PURE__ */ jsx26("div", { "data-slot": "settings-action", className: "shrink-0", children: action })
1302
+ /* @__PURE__ */ jsx27("div", { "data-slot": "settings-action", className: "shrink-0", children: action })
1273
1303
  ] });
1274
1304
  }
1275
1305
  function DetailLine({ className, icon, label, children, ...props }) {
1276
1306
  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 })
1307
+ 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,
1308
+ /* @__PURE__ */ jsx27("dt", { "data-slot": "detail-line-label", className: "w-32 shrink-0 text-[12px] text-muted-foreground", children: label }),
1309
+ /* @__PURE__ */ jsx27("dd", { "data-slot": "detail-line-value", className: "min-w-0 flex-1 text-foreground", children })
1280
1310
  ] });
1281
1311
  }
1282
1312
 
1283
1313
  // src/disclosure.tsx
1284
1314
  import * as React6 from "react";
1285
1315
  import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
1286
- import { jsx as jsx27, jsxs as jsxs10 } from "react/jsx-runtime";
1316
+ import { jsx as jsx28, jsxs as jsxs10 } from "react/jsx-runtime";
1287
1317
  var Disclosure = CollapsiblePrimitive.Root;
1288
- var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(
1318
+ var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx28(
1289
1319
  CollapsiblePrimitive.Content,
1290
1320
  {
1291
1321
  ref,
@@ -1296,7 +1326,7 @@ var DisclosureContent = React6.forwardRef(({ className, ...props }, ref) => /* @
1296
1326
  ));
1297
1327
  DisclosureContent.displayName = "DisclosureContent";
1298
1328
  var DisclosureTrigger = React6.forwardRef(
1299
- ({ className, children, chevron, variant = "ghost", size = "sm", ...props }, ref) => /* @__PURE__ */ jsx27(CollapsiblePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
1329
+ ({ className, children, chevron, variant = "ghost", size = "sm", ...props }, ref) => /* @__PURE__ */ jsx28(CollapsiblePrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
1300
1330
  Button,
1301
1331
  {
1302
1332
  ref,
@@ -1306,7 +1336,7 @@ var DisclosureTrigger = React6.forwardRef(
1306
1336
  className: cn("group/disclosure justify-start gap-2", className),
1307
1337
  ...props,
1308
1338
  children: [
1309
- chevron ?? /* @__PURE__ */ jsx27(DisclosureChevron, {}),
1339
+ chevron ?? /* @__PURE__ */ jsx28(DisclosureChevron, {}),
1310
1340
  children
1311
1341
  ]
1312
1342
  }
@@ -1314,7 +1344,7 @@ var DisclosureTrigger = React6.forwardRef(
1314
1344
  );
1315
1345
  DisclosureTrigger.displayName = "DisclosureTrigger";
1316
1346
  function DisclosureChevron({ className, ...props }) {
1317
- return /* @__PURE__ */ jsx27(
1347
+ return /* @__PURE__ */ jsx28(
1318
1348
  "span",
1319
1349
  {
1320
1350
  "data-slot": "disclosure-chevron",
@@ -1327,7 +1357,7 @@ function DisclosureChevron({ className, ...props }) {
1327
1357
  }
1328
1358
 
1329
1359
  // src/resize-handle.tsx
1330
- import { jsx as jsx28 } from "react/jsx-runtime";
1360
+ import { jsx as jsx29 } from "react/jsx-runtime";
1331
1361
  function ResizeHandle({
1332
1362
  className,
1333
1363
  orientation = "vertical",
@@ -1336,7 +1366,7 @@ function ResizeHandle({
1336
1366
  tabIndex = 0,
1337
1367
  ...props
1338
1368
  }) {
1339
- return /* @__PURE__ */ jsx28(
1369
+ return /* @__PURE__ */ jsx29(
1340
1370
  "div",
1341
1371
  {
1342
1372
  "data-slot": "resize-handle",
@@ -1356,9 +1386,9 @@ function ResizeHandle({
1356
1386
  }
1357
1387
 
1358
1388
  // src/avatar.tsx
1359
- import { jsx as jsx29 } from "react/jsx-runtime";
1389
+ import { jsx as jsx30 } from "react/jsx-runtime";
1360
1390
  function Avatar({ className, ...props }) {
1361
- return /* @__PURE__ */ jsx29(
1391
+ return /* @__PURE__ */ jsx30(
1362
1392
  "div",
1363
1393
  {
1364
1394
  "data-slot": "avatar",
@@ -1368,7 +1398,7 @@ function Avatar({ className, ...props }) {
1368
1398
  );
1369
1399
  }
1370
1400
  function AvatarFallback({ className, ...props }) {
1371
- return /* @__PURE__ */ jsx29(
1401
+ return /* @__PURE__ */ jsx30(
1372
1402
  "span",
1373
1403
  {
1374
1404
  "data-slot": "avatar-fallback",
@@ -1378,13 +1408,13 @@ function AvatarFallback({ className, ...props }) {
1378
1408
  );
1379
1409
  }
1380
1410
  function InitialsAvatar({ initials, className, ...props }) {
1381
- return /* @__PURE__ */ jsx29(Avatar, { className, ...props, children: /* @__PURE__ */ jsx29(AvatarFallback, { children: initials }) });
1411
+ return /* @__PURE__ */ jsx30(Avatar, { className, ...props, children: /* @__PURE__ */ jsx30(AvatarFallback, { children: initials }) });
1382
1412
  }
1383
1413
 
1384
1414
  // src/toast.tsx
1385
1415
  import * as React7 from "react";
1386
1416
  import { createPortal } from "react-dom";
1387
- import { jsx as jsx30, jsxs as jsxs11 } from "react/jsx-runtime";
1417
+ import { jsx as jsx31, jsxs as jsxs11 } from "react/jsx-runtime";
1388
1418
  var toasts = [];
1389
1419
  var listeners = /* @__PURE__ */ new Set();
1390
1420
  var nextId = 0;
@@ -1443,7 +1473,7 @@ function Toaster({ position = "bottom-right", className }) {
1443
1473
  const [items, setItems] = React7.useState(() => toasts);
1444
1474
  React7.useEffect(() => subscribeToasts(setItems), []);
1445
1475
  if (typeof document === "undefined") return null;
1446
- const node = /* @__PURE__ */ jsx30(
1476
+ const node = /* @__PURE__ */ jsx31(
1447
1477
  "div",
1448
1478
  {
1449
1479
  role: "region",
@@ -1471,12 +1501,12 @@ function Toaster({ position = "bottom-right", className }) {
1471
1501
  VARIANT_CLASS[variant]
1472
1502
  ),
1473
1503
  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] }),
1504
+ /* @__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
1505
  /* @__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 })
1506
+ item.title && /* @__PURE__ */ jsx31("div", { className: "text-sm font-medium leading-snug", children: item.title }),
1507
+ item.description && /* @__PURE__ */ jsx31("div", { className: cn("text-xs text-muted-foreground", item.title ? "mt-0.5" : "leading-snug"), children: item.description })
1478
1508
  ] }),
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" }) })
1509
+ /* @__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
1510
  ]
1481
1511
  },
1482
1512
  item.id
@@ -1488,7 +1518,7 @@ function Toaster({ position = "bottom-right", className }) {
1488
1518
  }
1489
1519
 
1490
1520
  // src/loading-state.tsx
1491
- import { jsx as jsx31, jsxs as jsxs12 } from "react/jsx-runtime";
1521
+ import { jsx as jsx32, jsxs as jsxs12 } from "react/jsx-runtime";
1492
1522
  function LoadingState({ className, label = "Loading\u2026", centered = false, children, ...props }) {
1493
1523
  return /* @__PURE__ */ jsxs12(
1494
1524
  "div",
@@ -1502,20 +1532,20 @@ function LoadingState({ className, label = "Loading\u2026", centered = false, ch
1502
1532
  ),
1503
1533
  ...props,
1504
1534
  children: [
1505
- /* @__PURE__ */ jsx31(Spinner, { className: "size-3.5" }),
1506
- /* @__PURE__ */ jsx31("span", { children: children ?? label })
1535
+ /* @__PURE__ */ jsx32(Spinner, { className: "size-3.5" }),
1536
+ /* @__PURE__ */ jsx32("span", { children: children ?? label })
1507
1537
  ]
1508
1538
  }
1509
1539
  );
1510
1540
  }
1511
1541
 
1512
1542
  // src/list.tsx
1513
- import { jsx as jsx32 } from "react/jsx-runtime";
1543
+ import { jsx as jsx33 } from "react/jsx-runtime";
1514
1544
  function List2({ className, ...props }) {
1515
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list", className: cn("divide-y divide-border/60", className), ...props });
1545
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list", className: cn("divide-y divide-border/60", className), ...props });
1516
1546
  }
1517
1547
  function ListRow({ className, interactive, ...props }) {
1518
- return /* @__PURE__ */ jsx32(
1548
+ return /* @__PURE__ */ jsx33(
1519
1549
  "div",
1520
1550
  {
1521
1551
  "data-slot": "list-row",
@@ -1530,25 +1560,25 @@ function ListRow({ className, interactive, ...props }) {
1530
1560
  );
1531
1561
  }
1532
1562
  function ListRowMain({ className, ...props }) {
1533
- return /* @__PURE__ */ jsx32("div", { "data-slot": "list-row-main", className: cn("min-w-0 flex-1", className), ...props });
1563
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list-row-main", className: cn("min-w-0 flex-1", className), ...props });
1534
1564
  }
1535
1565
  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 });
1566
+ return /* @__PURE__ */ jsx33("p", { "data-slot": "list-row-title", className: cn("truncate text-sm font-medium text-foreground", className), ...props });
1537
1567
  }
1538
1568
  function ListRowDescription({ className, ...props }) {
1539
- return /* @__PURE__ */ jsx32("p", { "data-slot": "list-row-description", className: cn("truncate text-xs text-muted-foreground", className), ...props });
1569
+ return /* @__PURE__ */ jsx33("p", { "data-slot": "list-row-description", className: cn("truncate text-xs text-muted-foreground", className), ...props });
1540
1570
  }
1541
1571
  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 });
1572
+ 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
1573
  }
1544
1574
  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 });
1575
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "list-row-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
1546
1576
  }
1547
1577
 
1548
1578
  // src/detail-list.tsx
1549
- import { jsx as jsx33 } from "react/jsx-runtime";
1579
+ import { jsx as jsx34 } from "react/jsx-runtime";
1550
1580
  function DetailList({ className, ...props }) {
1551
- return /* @__PURE__ */ jsx33(
1581
+ return /* @__PURE__ */ jsx34(
1552
1582
  "dl",
1553
1583
  {
1554
1584
  "data-slot": "detail-list",
@@ -1559,9 +1589,9 @@ function DetailList({ className, ...props }) {
1559
1589
  }
1560
1590
 
1561
1591
  // src/floating-panel.tsx
1562
- import { jsx as jsx34 } from "react/jsx-runtime";
1592
+ import { jsx as jsx35 } from "react/jsx-runtime";
1563
1593
  function FloatingPanel({ className, ...props }) {
1564
- return /* @__PURE__ */ jsx34(
1594
+ return /* @__PURE__ */ jsx35(
1565
1595
  "div",
1566
1596
  {
1567
1597
  "data-slot": "floating-panel",
@@ -1571,16 +1601,16 @@ function FloatingPanel({ className, ...props }) {
1571
1601
  );
1572
1602
  }
1573
1603
  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 });
1604
+ 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
1605
  }
1576
1606
  function FloatingPanelBody({ className, ...props }) {
1577
- return /* @__PURE__ */ jsx34("div", { "data-slot": "floating-panel-body", className: cn("py-1", className), ...props });
1607
+ return /* @__PURE__ */ jsx35("div", { "data-slot": "floating-panel-body", className: cn("py-1", className), ...props });
1578
1608
  }
1579
1609
 
1580
1610
  // src/card.tsx
1581
- import { jsx as jsx35 } from "react/jsx-runtime";
1611
+ import { jsx as jsx36 } from "react/jsx-runtime";
1582
1612
  function Card({ className, ...props }) {
1583
- return /* @__PURE__ */ jsx35(
1613
+ return /* @__PURE__ */ jsx36(
1584
1614
  "div",
1585
1615
  {
1586
1616
  "data-slot": "card",
@@ -1593,7 +1623,7 @@ function Card({ className, ...props }) {
1593
1623
  );
1594
1624
  }
1595
1625
  function CardHeader({ className, ...props }) {
1596
- return /* @__PURE__ */ jsx35(
1626
+ return /* @__PURE__ */ jsx36(
1597
1627
  "div",
1598
1628
  {
1599
1629
  "data-slot": "card-header",
@@ -1606,7 +1636,7 @@ function CardHeader({ className, ...props }) {
1606
1636
  );
1607
1637
  }
1608
1638
  function CardTitle({ className, ...props }) {
1609
- return /* @__PURE__ */ jsx35(
1639
+ return /* @__PURE__ */ jsx36(
1610
1640
  "div",
1611
1641
  {
1612
1642
  "data-slot": "card-title",
@@ -1616,7 +1646,7 @@ function CardTitle({ className, ...props }) {
1616
1646
  );
1617
1647
  }
1618
1648
  function CardDescription({ className, ...props }) {
1619
- return /* @__PURE__ */ jsx35(
1649
+ return /* @__PURE__ */ jsx36(
1620
1650
  "div",
1621
1651
  {
1622
1652
  "data-slot": "card-description",
@@ -1626,7 +1656,7 @@ function CardDescription({ className, ...props }) {
1626
1656
  );
1627
1657
  }
1628
1658
  function CardAction({ className, ...props }) {
1629
- return /* @__PURE__ */ jsx35(
1659
+ return /* @__PURE__ */ jsx36(
1630
1660
  "div",
1631
1661
  {
1632
1662
  "data-slot": "card-action",
@@ -1639,7 +1669,7 @@ function CardAction({ className, ...props }) {
1639
1669
  );
1640
1670
  }
1641
1671
  function CardContent({ className, ...props }) {
1642
- return /* @__PURE__ */ jsx35(
1672
+ return /* @__PURE__ */ jsx36(
1643
1673
  "div",
1644
1674
  {
1645
1675
  "data-slot": "card-content",
@@ -1649,7 +1679,7 @@ function CardContent({ className, ...props }) {
1649
1679
  );
1650
1680
  }
1651
1681
  function CardFooter({ className, ...props }) {
1652
- return /* @__PURE__ */ jsx35(
1682
+ return /* @__PURE__ */ jsx36(
1653
1683
  "div",
1654
1684
  {
1655
1685
  "data-slot": "card-footer",
@@ -1661,12 +1691,12 @@ function CardFooter({ className, ...props }) {
1661
1691
 
1662
1692
  // src/label.tsx
1663
1693
  import * as LabelPrimitive from "@radix-ui/react-label";
1664
- import { jsx as jsx36 } from "react/jsx-runtime";
1694
+ import { jsx as jsx37 } from "react/jsx-runtime";
1665
1695
  function Label3({
1666
1696
  className,
1667
1697
  ...props
1668
1698
  }) {
1669
- return /* @__PURE__ */ jsx36(
1699
+ return /* @__PURE__ */ jsx37(
1670
1700
  LabelPrimitive.Root,
1671
1701
  {
1672
1702
  "data-slot": "label",
@@ -1681,12 +1711,12 @@ function Label3({
1681
1711
 
1682
1712
  // src/checkbox.tsx
1683
1713
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
1684
- import { jsx as jsx37 } from "react/jsx-runtime";
1714
+ import { jsx as jsx38 } from "react/jsx-runtime";
1685
1715
  function Checkbox({
1686
1716
  className,
1687
1717
  ...props
1688
1718
  }) {
1689
- return /* @__PURE__ */ jsx37(
1719
+ return /* @__PURE__ */ jsx38(
1690
1720
  CheckboxPrimitive.Root,
1691
1721
  {
1692
1722
  "data-slot": "checkbox",
@@ -1695,12 +1725,12 @@ function Checkbox({
1695
1725
  className
1696
1726
  ),
1697
1727
  ...props,
1698
- children: /* @__PURE__ */ jsx37(
1728
+ children: /* @__PURE__ */ jsx38(
1699
1729
  CheckboxPrimitive.Indicator,
1700
1730
  {
1701
1731
  "data-slot": "checkbox-indicator",
1702
1732
  className: "grid place-content-center text-current transition-none",
1703
- children: /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" })
1733
+ children: /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "text-xs leading-none", children: "\u2713" })
1704
1734
  }
1705
1735
  )
1706
1736
  }
@@ -1709,8 +1739,8 @@ function Checkbox({
1709
1739
 
1710
1740
  // src/radio.tsx
1711
1741
  import * as React8 from "react";
1712
- import { jsx as jsx38 } from "react/jsx-runtime";
1713
- var Radio = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx38(
1742
+ import { jsx as jsx39 } from "react/jsx-runtime";
1743
+ var Radio = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(
1714
1744
  "input",
1715
1745
  {
1716
1746
  ref,
@@ -1727,27 +1757,27 @@ Radio.displayName = "Radio";
1727
1757
 
1728
1758
  // src/alert-dialog.tsx
1729
1759
  import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
1730
- import { jsx as jsx39, jsxs as jsxs13 } from "react/jsx-runtime";
1760
+ import { jsx as jsx40, jsxs as jsxs13 } from "react/jsx-runtime";
1731
1761
  function AlertDialog({
1732
1762
  ...props
1733
1763
  }) {
1734
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
1764
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
1735
1765
  }
1736
1766
  function AlertDialogTrigger({
1737
1767
  ...props
1738
1768
  }) {
1739
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
1769
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
1740
1770
  }
1741
1771
  function AlertDialogPortal({
1742
1772
  ...props
1743
1773
  }) {
1744
- return /* @__PURE__ */ jsx39(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
1774
+ return /* @__PURE__ */ jsx40(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
1745
1775
  }
1746
1776
  function AlertDialogOverlay({
1747
1777
  className,
1748
1778
  ...props
1749
1779
  }) {
1750
- return /* @__PURE__ */ jsx39(
1780
+ return /* @__PURE__ */ jsx40(
1751
1781
  AlertDialogPrimitive.Overlay,
1752
1782
  {
1753
1783
  "data-slot": "alert-dialog-overlay",
@@ -1765,8 +1795,8 @@ function AlertDialogContent({
1765
1795
  ...props
1766
1796
  }) {
1767
1797
  return /* @__PURE__ */ jsxs13(AlertDialogPortal, { children: [
1768
- /* @__PURE__ */ jsx39(AlertDialogOverlay, {}),
1769
- /* @__PURE__ */ jsx39(
1798
+ /* @__PURE__ */ jsx40(AlertDialogOverlay, {}),
1799
+ /* @__PURE__ */ jsx40(
1770
1800
  AlertDialogPrimitive.Content,
1771
1801
  {
1772
1802
  "data-slot": "alert-dialog-content",
@@ -1784,7 +1814,7 @@ function AlertDialogHeader({
1784
1814
  className,
1785
1815
  ...props
1786
1816
  }) {
1787
- return /* @__PURE__ */ jsx39(
1817
+ return /* @__PURE__ */ jsx40(
1788
1818
  "div",
1789
1819
  {
1790
1820
  "data-slot": "alert-dialog-header",
@@ -1800,7 +1830,7 @@ function AlertDialogFooter({
1800
1830
  className,
1801
1831
  ...props
1802
1832
  }) {
1803
- return /* @__PURE__ */ jsx39(
1833
+ return /* @__PURE__ */ jsx40(
1804
1834
  "div",
1805
1835
  {
1806
1836
  "data-slot": "alert-dialog-footer",
@@ -1816,7 +1846,7 @@ function AlertDialogTitle({
1816
1846
  className,
1817
1847
  ...props
1818
1848
  }) {
1819
- return /* @__PURE__ */ jsx39(
1849
+ return /* @__PURE__ */ jsx40(
1820
1850
  AlertDialogPrimitive.Title,
1821
1851
  {
1822
1852
  "data-slot": "alert-dialog-title",
@@ -1832,7 +1862,7 @@ function AlertDialogDescription({
1832
1862
  className,
1833
1863
  ...props
1834
1864
  }) {
1835
- return /* @__PURE__ */ jsx39(
1865
+ return /* @__PURE__ */ jsx40(
1836
1866
  AlertDialogPrimitive.Description,
1837
1867
  {
1838
1868
  "data-slot": "alert-dialog-description",
@@ -1845,7 +1875,7 @@ function AlertDialogMedia({
1845
1875
  className,
1846
1876
  ...props
1847
1877
  }) {
1848
- return /* @__PURE__ */ jsx39(
1878
+ return /* @__PURE__ */ jsx40(
1849
1879
  "div",
1850
1880
  {
1851
1881
  "data-slot": "alert-dialog-media",
@@ -1863,7 +1893,7 @@ function AlertDialogAction({
1863
1893
  size = "default",
1864
1894
  ...props
1865
1895
  }) {
1866
- return /* @__PURE__ */ jsx39(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx39(
1896
+ return /* @__PURE__ */ jsx40(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx40(
1867
1897
  AlertDialogPrimitive.Action,
1868
1898
  {
1869
1899
  "data-slot": "alert-dialog-action",
@@ -1878,7 +1908,7 @@ function AlertDialogCancel({
1878
1908
  size = "default",
1879
1909
  ...props
1880
1910
  }) {
1881
- return /* @__PURE__ */ jsx39(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx39(
1911
+ return /* @__PURE__ */ jsx40(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx40(
1882
1912
  AlertDialogPrimitive.Cancel,
1883
1913
  {
1884
1914
  "data-slot": "alert-dialog-cancel",
@@ -1890,16 +1920,16 @@ function AlertDialogCancel({
1890
1920
 
1891
1921
  // src/popover.tsx
1892
1922
  import * as PopoverPrimitive from "@radix-ui/react-popover";
1893
- import { jsx as jsx40 } from "react/jsx-runtime";
1923
+ import { jsx as jsx41 } from "react/jsx-runtime";
1894
1924
  function Popover({
1895
1925
  ...props
1896
1926
  }) {
1897
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1927
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1898
1928
  }
1899
1929
  function PopoverTrigger({
1900
1930
  ...props
1901
1931
  }) {
1902
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1932
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
1903
1933
  }
1904
1934
  function PopoverContent({
1905
1935
  className,
@@ -1907,7 +1937,7 @@ function PopoverContent({
1907
1937
  sideOffset = 4,
1908
1938
  ...props
1909
1939
  }) {
1910
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx40(
1940
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx41(
1911
1941
  PopoverPrimitive.Content,
1912
1942
  {
1913
1943
  "data-slot": "popover-content",
@@ -1924,10 +1954,10 @@ function PopoverContent({
1924
1954
  function PopoverAnchor({
1925
1955
  ...props
1926
1956
  }) {
1927
- return /* @__PURE__ */ jsx40(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1957
+ return /* @__PURE__ */ jsx41(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1928
1958
  }
1929
1959
  function PopoverHeader({ className, ...props }) {
1930
- return /* @__PURE__ */ jsx40(
1960
+ return /* @__PURE__ */ jsx41(
1931
1961
  "div",
1932
1962
  {
1933
1963
  "data-slot": "popover-header",
@@ -1937,7 +1967,7 @@ function PopoverHeader({ className, ...props }) {
1937
1967
  );
1938
1968
  }
1939
1969
  function PopoverTitle({ className, ...props }) {
1940
- return /* @__PURE__ */ jsx40(
1970
+ return /* @__PURE__ */ jsx41(
1941
1971
  "div",
1942
1972
  {
1943
1973
  "data-slot": "popover-title",
@@ -1950,7 +1980,7 @@ function PopoverDescription({
1950
1980
  className,
1951
1981
  ...props
1952
1982
  }) {
1953
- return /* @__PURE__ */ jsx40(
1983
+ return /* @__PURE__ */ jsx41(
1954
1984
  "p",
1955
1985
  {
1956
1986
  "data-slot": "popover-description",
@@ -1962,7 +1992,7 @@ function PopoverDescription({
1962
1992
 
1963
1993
  // src/scroll-area.tsx
1964
1994
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
1965
- import { jsx as jsx41, jsxs as jsxs14 } from "react/jsx-runtime";
1995
+ import { jsx as jsx42, jsxs as jsxs14 } from "react/jsx-runtime";
1966
1996
  function ScrollArea({
1967
1997
  className,
1968
1998
  children,
@@ -1975,7 +2005,7 @@ function ScrollArea({
1975
2005
  className: cn("relative", className),
1976
2006
  ...props,
1977
2007
  children: [
1978
- /* @__PURE__ */ jsx41(
2008
+ /* @__PURE__ */ jsx42(
1979
2009
  ScrollAreaPrimitive.Viewport,
1980
2010
  {
1981
2011
  "data-slot": "scroll-area-viewport",
@@ -1983,8 +2013,8 @@ function ScrollArea({
1983
2013
  children
1984
2014
  }
1985
2015
  ),
1986
- /* @__PURE__ */ jsx41(ScrollBar, {}),
1987
- /* @__PURE__ */ jsx41(ScrollAreaPrimitive.Corner, {})
2016
+ /* @__PURE__ */ jsx42(ScrollBar, {}),
2017
+ /* @__PURE__ */ jsx42(ScrollAreaPrimitive.Corner, {})
1988
2018
  ]
1989
2019
  }
1990
2020
  );
@@ -1994,7 +2024,7 @@ function ScrollBar({
1994
2024
  orientation = "vertical",
1995
2025
  ...props
1996
2026
  }) {
1997
- return /* @__PURE__ */ jsx41(
2027
+ return /* @__PURE__ */ jsx42(
1998
2028
  ScrollAreaPrimitive.ScrollAreaScrollbar,
1999
2029
  {
2000
2030
  "data-slot": "scroll-area-scrollbar",
@@ -2006,7 +2036,7 @@ function ScrollBar({
2006
2036
  className
2007
2037
  ),
2008
2038
  ...props,
2009
- children: /* @__PURE__ */ jsx41(
2039
+ children: /* @__PURE__ */ jsx42(
2010
2040
  ScrollAreaPrimitive.ScrollAreaThumb,
2011
2041
  {
2012
2042
  "data-slot": "scroll-area-thumb",
@@ -2019,30 +2049,30 @@ function ScrollBar({
2019
2049
 
2020
2050
  // src/sheet.tsx
2021
2051
  import * as SheetPrimitive from "@radix-ui/react-dialog";
2022
- import { jsx as jsx42, jsxs as jsxs15 } from "react/jsx-runtime";
2052
+ import { jsx as jsx43, jsxs as jsxs15 } from "react/jsx-runtime";
2023
2053
  function Sheet({ ...props }) {
2024
- return /* @__PURE__ */ jsx42(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
2054
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
2025
2055
  }
2026
2056
  function SheetTrigger({
2027
2057
  ...props
2028
2058
  }) {
2029
- return /* @__PURE__ */ jsx42(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2059
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2030
2060
  }
2031
2061
  function SheetClose({
2032
2062
  ...props
2033
2063
  }) {
2034
- return /* @__PURE__ */ jsx42(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
2064
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
2035
2065
  }
2036
2066
  function SheetPortal({
2037
2067
  ...props
2038
2068
  }) {
2039
- return /* @__PURE__ */ jsx42(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2069
+ return /* @__PURE__ */ jsx43(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2040
2070
  }
2041
2071
  function SheetOverlay({
2042
2072
  className,
2043
2073
  ...props
2044
2074
  }) {
2045
- return /* @__PURE__ */ jsx42(
2075
+ return /* @__PURE__ */ jsx43(
2046
2076
  SheetPrimitive.Overlay,
2047
2077
  {
2048
2078
  "data-slot": "sheet-overlay",
@@ -2062,7 +2092,7 @@ function SheetContent({
2062
2092
  ...props
2063
2093
  }) {
2064
2094
  return /* @__PURE__ */ jsxs15(SheetPortal, { children: [
2065
- /* @__PURE__ */ jsx42(SheetOverlay, {}),
2095
+ /* @__PURE__ */ jsx43(SheetOverlay, {}),
2066
2096
  /* @__PURE__ */ jsxs15(
2067
2097
  SheetPrimitive.Content,
2068
2098
  {
@@ -2079,8 +2109,8 @@ function SheetContent({
2079
2109
  children: [
2080
2110
  children,
2081
2111
  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" })
2112
+ /* @__PURE__ */ jsx43("span", { "aria-hidden": "true", className: "text-base leading-none", children: "\xD7" }),
2113
+ /* @__PURE__ */ jsx43("span", { className: "sr-only", children: "Close" })
2084
2114
  ] })
2085
2115
  ]
2086
2116
  }
@@ -2088,7 +2118,7 @@ function SheetContent({
2088
2118
  ] });
2089
2119
  }
2090
2120
  function SheetHeader({ className, ...props }) {
2091
- return /* @__PURE__ */ jsx42(
2121
+ return /* @__PURE__ */ jsx43(
2092
2122
  "div",
2093
2123
  {
2094
2124
  "data-slot": "sheet-header",
@@ -2098,7 +2128,7 @@ function SheetHeader({ className, ...props }) {
2098
2128
  );
2099
2129
  }
2100
2130
  function SheetFooter({ className, ...props }) {
2101
- return /* @__PURE__ */ jsx42(
2131
+ return /* @__PURE__ */ jsx43(
2102
2132
  "div",
2103
2133
  {
2104
2134
  "data-slot": "sheet-footer",
@@ -2111,7 +2141,7 @@ function SheetTitle({
2111
2141
  className,
2112
2142
  ...props
2113
2143
  }) {
2114
- return /* @__PURE__ */ jsx42(
2144
+ return /* @__PURE__ */ jsx43(
2115
2145
  SheetPrimitive.Title,
2116
2146
  {
2117
2147
  "data-slot": "sheet-title",
@@ -2124,7 +2154,7 @@ function SheetDescription({
2124
2154
  className,
2125
2155
  ...props
2126
2156
  }) {
2127
- return /* @__PURE__ */ jsx42(
2157
+ return /* @__PURE__ */ jsx43(
2128
2158
  SheetPrimitive.Description,
2129
2159
  {
2130
2160
  "data-slot": "sheet-description",
@@ -2147,10 +2177,10 @@ function useToast() {
2147
2177
  // src/hover-card.tsx
2148
2178
  import * as React9 from "react";
2149
2179
  import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
2150
- import { jsx as jsx43 } from "react/jsx-runtime";
2180
+ import { jsx as jsx44 } from "react/jsx-runtime";
2151
2181
  var HoverCard = HoverCardPrimitive.Root;
2152
2182
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
2153
- var HoverCardContent = React9.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx43(
2183
+ var HoverCardContent = React9.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx44(
2154
2184
  HoverCardPrimitive.Content,
2155
2185
  {
2156
2186
  ref,
@@ -2174,7 +2204,7 @@ var CollapsibleContent2 = CollapsiblePrimitive2.CollapsibleContent;
2174
2204
  // src/button-group.tsx
2175
2205
  import { Slot as Slot3 } from "@radix-ui/react-slot";
2176
2206
  import { cva as cva4 } from "class-variance-authority";
2177
- import { jsx as jsx44 } from "react/jsx-runtime";
2207
+ import { jsx as jsx45 } from "react/jsx-runtime";
2178
2208
  var buttonGroupVariants = cva4(
2179
2209
  "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
2210
  {
@@ -2192,7 +2222,7 @@ function ButtonGroup({
2192
2222
  orientation,
2193
2223
  ...props
2194
2224
  }) {
2195
- return /* @__PURE__ */ jsx44(
2225
+ return /* @__PURE__ */ jsx45(
2196
2226
  "div",
2197
2227
  {
2198
2228
  role: "group",
@@ -2209,7 +2239,7 @@ function ButtonGroupText({
2209
2239
  ...props
2210
2240
  }) {
2211
2241
  const Comp = asChild ? Slot3 : "div";
2212
- return /* @__PURE__ */ jsx44(
2242
+ return /* @__PURE__ */ jsx45(
2213
2243
  Comp,
2214
2244
  {
2215
2245
  className: cn(
@@ -2225,7 +2255,7 @@ function ButtonGroupSeparator({
2225
2255
  orientation = "vertical",
2226
2256
  ...props
2227
2257
  }) {
2228
- return /* @__PURE__ */ jsx44(
2258
+ return /* @__PURE__ */ jsx45(
2229
2259
  Separator,
2230
2260
  {
2231
2261
  "data-slot": "button-group-separator",
@@ -2238,9 +2268,9 @@ function ButtonGroupSeparator({
2238
2268
 
2239
2269
  // src/input-group.tsx
2240
2270
  import { cva as cva5 } from "class-variance-authority";
2241
- import { jsx as jsx45 } from "react/jsx-runtime";
2271
+ import { jsx as jsx46 } from "react/jsx-runtime";
2242
2272
  function InputGroup({ className, ...props }) {
2243
- return /* @__PURE__ */ jsx45(
2273
+ return /* @__PURE__ */ jsx46(
2244
2274
  "div",
2245
2275
  {
2246
2276
  "data-slot": "input-group",
@@ -2278,7 +2308,7 @@ function InputGroupAddon({
2278
2308
  align = "inline-start",
2279
2309
  ...props
2280
2310
  }) {
2281
- return /* @__PURE__ */ jsx45(
2311
+ return /* @__PURE__ */ jsx46(
2282
2312
  "div",
2283
2313
  {
2284
2314
  role: "group",
@@ -2311,10 +2341,10 @@ function InputGroupButton({
2311
2341
  size = "xs",
2312
2342
  ...props
2313
2343
  }) {
2314
- return /* @__PURE__ */ jsx45(Button, { type, "data-size": size, variant, className: cn(inputGroupButtonVariants({ size }), className), ...props });
2344
+ return /* @__PURE__ */ jsx46(Button, { type, "data-size": size, variant, className: cn(inputGroupButtonVariants({ size }), className), ...props });
2315
2345
  }
2316
2346
  function InputGroupText({ className, ...props }) {
2317
- return /* @__PURE__ */ jsx45(
2347
+ return /* @__PURE__ */ jsx46(
2318
2348
  "span",
2319
2349
  {
2320
2350
  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 +2353,7 @@ function InputGroupText({ className, ...props }) {
2323
2353
  );
2324
2354
  }
2325
2355
  function InputGroupInput({ className, ...props }) {
2326
- return /* @__PURE__ */ jsx45(
2356
+ return /* @__PURE__ */ jsx46(
2327
2357
  Input,
2328
2358
  {
2329
2359
  "data-slot": "input-group-control",
@@ -2333,7 +2363,7 @@ function InputGroupInput({ className, ...props }) {
2333
2363
  );
2334
2364
  }
2335
2365
  function InputGroupTextarea({ className, ...props }) {
2336
- return /* @__PURE__ */ jsx45(
2366
+ return /* @__PURE__ */ jsx46(
2337
2367
  Textarea,
2338
2368
  {
2339
2369
  "data-slot": "input-group-control",
@@ -2344,15 +2374,15 @@ function InputGroupTextarea({ className, ...props }) {
2344
2374
  }
2345
2375
 
2346
2376
  // src/choice-group.tsx
2347
- import { jsx as jsx46 } from "react/jsx-runtime";
2377
+ import { jsx as jsx47 } from "react/jsx-runtime";
2348
2378
  function ChoiceGroup({ className, ...props }) {
2349
- return /* @__PURE__ */ jsx46("fieldset", { "data-slot": "choice-group", className: cn("grid gap-2", className), ...props });
2379
+ return /* @__PURE__ */ jsx47("fieldset", { "data-slot": "choice-group", className: cn("grid gap-2", className), ...props });
2350
2380
  }
2351
2381
  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 });
2382
+ return /* @__PURE__ */ jsx47("legend", { "data-slot": "choice-group-legend", className: cn("mb-2 text-sm font-medium leading-5 text-foreground", className), ...props });
2353
2383
  }
2354
2384
  function ChoiceItem({ className, ...props }) {
2355
- return /* @__PURE__ */ jsx46(
2385
+ return /* @__PURE__ */ jsx47(
2356
2386
  "label",
2357
2387
  {
2358
2388
  "data-slot": "choice-item",
@@ -2367,13 +2397,13 @@ function ChoiceItem({ className, ...props }) {
2367
2397
  );
2368
2398
  }
2369
2399
  function ChoiceItemBody({ className, ...props }) {
2370
- return /* @__PURE__ */ jsx46("span", { "data-slot": "choice-item-body", className: cn("flex flex-col gap-1", className), ...props });
2400
+ return /* @__PURE__ */ jsx47("span", { "data-slot": "choice-item-body", className: cn("flex flex-col gap-1", className), ...props });
2371
2401
  }
2372
2402
  function ChoiceItemTitle({ className, ...props }) {
2373
- return /* @__PURE__ */ jsx46("span", { "data-slot": "choice-item-title", className: cn("leading-5", className), ...props });
2403
+ return /* @__PURE__ */ jsx47("span", { "data-slot": "choice-item-title", className: cn("leading-5", className), ...props });
2374
2404
  }
2375
2405
  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 });
2406
+ return /* @__PURE__ */ jsx47("small", { "data-slot": "choice-item-description", className: cn("text-sm leading-5 text-muted-foreground", className), ...props });
2377
2407
  }
2378
2408
 
2379
2409
  // src/perspective-theme.ts
@@ -2543,6 +2573,7 @@ export {
2543
2573
  ListRowMeta,
2544
2574
  ListRowTitle,
2545
2575
  LoadingState,
2576
+ Meter,
2546
2577
  Notice,
2547
2578
  Pane,
2548
2579
  PaneBody,
package/dist/styles.css CHANGED
@@ -170,6 +170,9 @@
170
170
  .grid {
171
171
  display: grid;
172
172
  }
173
+ .inline {
174
+ display: inline;
175
+ }
173
176
  .inline-block {
174
177
  display: inline-block;
175
178
  }
@@ -219,6 +222,9 @@
219
222
  .h-1 {
220
223
  height: var(--spacing);
221
224
  }
225
+ .h-2 {
226
+ height: calc(var(--spacing) * 2);
227
+ }
222
228
  .h-2\.5 {
223
229
  height: calc(var(--spacing) * 2.5);
224
230
  }
@@ -2423,6 +2429,64 @@
2423
2429
  height: calc(var(--spacing) * 4);
2424
2430
  }
2425
2431
  }
2432
+ .\[\&\:\:-moz-progress-bar\]\:rounded-full {
2433
+ &::-moz-progress-bar {
2434
+ border-radius: calc(infinity * 1px);
2435
+ }
2436
+ }
2437
+ .\[\&\:\:-moz-progress-bar\]\:bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
2438
+ &::-moz-progress-bar {
2439
+ background-color: var(--boring-warning,var(--accent-foreground));
2440
+ }
2441
+ }
2442
+ .\[\&\:\:-moz-progress-bar\]\:bg-destructive {
2443
+ &::-moz-progress-bar {
2444
+ background-color: var(--boring-destructive);
2445
+ }
2446
+ }
2447
+ .\[\&\:\:-moz-progress-bar\]\:bg-primary {
2448
+ &::-moz-progress-bar {
2449
+ background-color: var(--boring-primary);
2450
+ }
2451
+ }
2452
+ .\[\&\:\:-webkit-progress-bar\]\:bg-muted {
2453
+ &::-webkit-progress-bar {
2454
+ background-color: var(--boring-muted);
2455
+ }
2456
+ }
2457
+ .\[\&\:\:-webkit-progress-value\]\:rounded-full {
2458
+ &::-webkit-progress-value {
2459
+ border-radius: calc(infinity * 1px);
2460
+ }
2461
+ }
2462
+ .\[\&\:\:-webkit-progress-value\]\:bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
2463
+ &::-webkit-progress-value {
2464
+ background-color: var(--boring-warning,var(--accent-foreground));
2465
+ }
2466
+ }
2467
+ .\[\&\:\:-webkit-progress-value\]\:bg-destructive {
2468
+ &::-webkit-progress-value {
2469
+ background-color: var(--boring-destructive);
2470
+ }
2471
+ }
2472
+ .\[\&\:\:-webkit-progress-value\]\:bg-primary {
2473
+ &::-webkit-progress-value {
2474
+ background-color: var(--boring-primary);
2475
+ }
2476
+ }
2477
+ .\[\&\:\:-webkit-progress-value\]\:transition-all {
2478
+ &::-webkit-progress-value {
2479
+ transition-property: all;
2480
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
2481
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
2482
+ }
2483
+ }
2484
+ .\[\&\:\:-webkit-progress-value\]\:duration-300 {
2485
+ &::-webkit-progress-value {
2486
+ --tw-duration: 300ms;
2487
+ transition-duration: 300ms;
2488
+ }
2489
+ }
2426
2490
  .\[\&\:\:-webkit-scrollbar\]\:hidden {
2427
2491
  &::-webkit-scrollbar {
2428
2492
  display: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-ui-kit",
3
- "version": "0.1.81",
3
+ "version": "0.1.83",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Shared shadcn-style UI primitives for Boring packages and app-generated panes.",