@wow-two-beta/ui 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/actions/index.d.ts +1 -0
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +3 -3
  4. package/dist/actions/speedDial/SpeedDial.d.ts +38 -0
  5. package/dist/actions/speedDial/SpeedDial.d.ts.map +1 -0
  6. package/dist/actions/speedDial/index.d.ts +3 -0
  7. package/dist/actions/speedDial/index.d.ts.map +1 -0
  8. package/dist/{chunk-EU6JT5B4.js → chunk-2VAZKEQD.js} +22 -272
  9. package/dist/chunk-2VAZKEQD.js.map +1 -0
  10. package/dist/{chunk-RIW2V3N4.js → chunk-3IN5ULKY.js} +213 -5
  11. package/dist/chunk-3IN5ULKY.js.map +1 -0
  12. package/dist/{chunk-UGHPZ3I7.js → chunk-4ESR253U.js} +331 -5
  13. package/dist/chunk-4ESR253U.js.map +1 -0
  14. package/dist/chunk-ASIHQQDQ.js +27 -0
  15. package/dist/chunk-ASIHQQDQ.js.map +1 -0
  16. package/dist/chunk-FFQENBTW.js +31 -0
  17. package/dist/chunk-FFQENBTW.js.map +1 -0
  18. package/dist/{chunk-A4N52LL6.js → chunk-ILYL6ROC.js} +716 -342
  19. package/dist/chunk-ILYL6ROC.js.map +1 -0
  20. package/dist/{chunk-YMSAS7M7.js → chunk-NC2CBGX2.js} +24 -4
  21. package/dist/chunk-NC2CBGX2.js.map +1 -0
  22. package/dist/{chunk-ULAOIBCP.js → chunk-NRAJPSEK.js} +164 -7
  23. package/dist/chunk-NRAJPSEK.js.map +1 -0
  24. package/dist/chunk-SM2TOB4U.js +641 -0
  25. package/dist/chunk-SM2TOB4U.js.map +1 -0
  26. package/dist/{chunk-PRRVOVUC.js → chunk-W7LQZKTH.js} +766 -42
  27. package/dist/chunk-W7LQZKTH.js.map +1 -0
  28. package/dist/chunk-XHGWBSIR.js +222 -0
  29. package/dist/chunk-XHGWBSIR.js.map +1 -0
  30. package/dist/chunk-ZCA365IX.js +44 -0
  31. package/dist/chunk-ZCA365IX.js.map +1 -0
  32. package/dist/display/carousel/Carousel.d.ts +47 -0
  33. package/dist/display/carousel/Carousel.d.ts.map +1 -0
  34. package/dist/display/carousel/index.d.ts +3 -0
  35. package/dist/display/carousel/index.d.ts.map +1 -0
  36. package/dist/display/dataTable/DataTable.d.ts +34 -0
  37. package/dist/display/dataTable/DataTable.d.ts.map +1 -0
  38. package/dist/display/dataTable/index.d.ts +2 -0
  39. package/dist/display/dataTable/index.d.ts.map +1 -0
  40. package/dist/display/index.d.ts +6 -0
  41. package/dist/display/index.d.ts.map +1 -1
  42. package/dist/display/index.js +4 -3
  43. package/dist/display/list/List.d.ts +23 -0
  44. package/dist/display/list/List.d.ts.map +1 -0
  45. package/dist/display/list/List.variants.d.ts +89 -0
  46. package/dist/display/list/List.variants.d.ts.map +1 -0
  47. package/dist/display/list/index.d.ts +2 -0
  48. package/dist/display/list/index.d.ts.map +1 -0
  49. package/dist/display/table/Table.d.ts +35 -0
  50. package/dist/display/table/Table.d.ts.map +1 -0
  51. package/dist/display/table/index.d.ts +2 -0
  52. package/dist/display/table/index.d.ts.map +1 -0
  53. package/dist/display/timeline/Timeline.d.ts +29 -0
  54. package/dist/display/timeline/Timeline.d.ts.map +1 -0
  55. package/dist/display/timeline/index.d.ts +2 -0
  56. package/dist/display/timeline/index.d.ts.map +1 -0
  57. package/dist/display/tree/Tree.d.ts +30 -0
  58. package/dist/display/tree/Tree.d.ts.map +1 -0
  59. package/dist/display/tree/index.d.ts +2 -0
  60. package/dist/display/tree/index.d.ts.map +1 -0
  61. package/dist/feedback/index.d.ts +2 -0
  62. package/dist/feedback/index.d.ts.map +1 -1
  63. package/dist/feedback/index.js +4 -1
  64. package/dist/feedback/loadingOverlay/LoadingOverlay.d.ts +19 -0
  65. package/dist/feedback/loadingOverlay/LoadingOverlay.d.ts.map +1 -0
  66. package/dist/feedback/loadingOverlay/index.d.ts +2 -0
  67. package/dist/feedback/loadingOverlay/index.d.ts.map +1 -0
  68. package/dist/feedback/toaster/Toaster.d.ts +49 -0
  69. package/dist/feedback/toaster/Toaster.d.ts.map +1 -0
  70. package/dist/feedback/toaster/index.d.ts +2 -0
  71. package/dist/feedback/toaster/index.d.ts.map +1 -0
  72. package/dist/forms/MonthGrid.d.ts +29 -0
  73. package/dist/forms/MonthGrid.d.ts.map +1 -0
  74. package/dist/forms/calendar/Calendar.d.ts.map +1 -1
  75. package/dist/forms/editable/Editable.d.ts +37 -0
  76. package/dist/forms/editable/Editable.d.ts.map +1 -0
  77. package/dist/forms/editable/index.d.ts +3 -0
  78. package/dist/forms/editable/index.d.ts.map +1 -0
  79. package/dist/forms/fileUpload/FileUpload.d.ts +25 -0
  80. package/dist/forms/fileUpload/FileUpload.d.ts.map +1 -0
  81. package/dist/forms/fileUpload/index.d.ts +2 -0
  82. package/dist/forms/fileUpload/index.d.ts.map +1 -0
  83. package/dist/forms/index.d.ts +3 -0
  84. package/dist/forms/index.d.ts.map +1 -1
  85. package/dist/forms/index.js +8 -4
  86. package/dist/forms/multiSelect/MultiSelect.d.ts +4 -5
  87. package/dist/forms/multiSelect/MultiSelect.d.ts.map +1 -1
  88. package/dist/forms/rangeCalendar/RangeCalendar.d.ts.map +1 -1
  89. package/dist/forms/select/Select.d.ts +5 -9
  90. package/dist/forms/select/Select.d.ts.map +1 -1
  91. package/dist/forms/tagsInput/TagsInput.d.ts +26 -0
  92. package/dist/forms/tagsInput/TagsInput.d.ts.map +1 -0
  93. package/dist/forms/tagsInput/index.d.ts +2 -0
  94. package/dist/forms/tagsInput/index.d.ts.map +1 -0
  95. package/dist/index.js +13 -9
  96. package/dist/layout/index.d.ts +1 -0
  97. package/dist/layout/index.d.ts.map +1 -1
  98. package/dist/layout/index.js +3 -1
  99. package/dist/layout/resizablePanels/ResizablePanels.d.ts +27 -0
  100. package/dist/layout/resizablePanels/ResizablePanels.d.ts.map +1 -0
  101. package/dist/layout/resizablePanels/index.d.ts +3 -0
  102. package/dist/layout/resizablePanels/index.d.ts.map +1 -0
  103. package/dist/nav/commandPalette/CommandPalette.d.ts +48 -0
  104. package/dist/nav/commandPalette/CommandPalette.d.ts.map +1 -0
  105. package/dist/nav/commandPalette/index.d.ts +3 -0
  106. package/dist/nav/commandPalette/index.d.ts.map +1 -0
  107. package/dist/nav/index.d.ts +1 -0
  108. package/dist/nav/index.d.ts.map +1 -1
  109. package/dist/nav/index.js +6 -3
  110. package/dist/overlays/OverlayChrome.d.ts +34 -0
  111. package/dist/overlays/OverlayChrome.d.ts.map +1 -0
  112. package/dist/overlays/dialog/Dialog.d.ts +7 -25
  113. package/dist/overlays/dialog/Dialog.d.ts.map +1 -1
  114. package/dist/overlays/dialog/index.d.ts +1 -1
  115. package/dist/overlays/dialog/index.d.ts.map +1 -1
  116. package/dist/overlays/drawer/Drawer.d.ts +7 -21
  117. package/dist/overlays/drawer/Drawer.d.ts.map +1 -1
  118. package/dist/overlays/drawer/index.d.ts +1 -1
  119. package/dist/overlays/drawer/index.d.ts.map +1 -1
  120. package/dist/overlays/index.js +5 -3
  121. package/dist/primitives/announce/Announce.d.ts +13 -0
  122. package/dist/primitives/announce/Announce.d.ts.map +1 -0
  123. package/dist/primitives/announce/index.d.ts +2 -0
  124. package/dist/primitives/announce/index.d.ts.map +1 -0
  125. package/dist/primitives/index.d.ts +1 -0
  126. package/dist/primitives/index.d.ts.map +1 -1
  127. package/dist/primitives/index.js +2 -2
  128. package/package.json +1 -1
  129. package/dist/chunk-A4N52LL6.js.map +0 -1
  130. package/dist/chunk-EU6JT5B4.js.map +0 -1
  131. package/dist/chunk-NKGNOOXJ.js +0 -330
  132. package/dist/chunk-NKGNOOXJ.js.map +0 -1
  133. package/dist/chunk-PRRVOVUC.js.map +0 -1
  134. package/dist/chunk-RIW2V3N4.js.map +0 -1
  135. package/dist/chunk-UGHPZ3I7.js.map +0 -1
  136. package/dist/chunk-ULAOIBCP.js.map +0 -1
  137. package/dist/chunk-YMSAS7M7.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import { useClipboard, useControlled } from './chunk-4P2TFUVW.js';
2
- import { Slot, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner } from './chunk-YMSAS7M7.js';
3
2
  import { tv, dataAttr } from './chunk-BMBIZLO4.js';
4
3
  import { Icon } from './chunk-TDX22OWF.js';
4
+ import { Slot, RovingFocusGroup, useRovingFocusItem, Portal, AnchoredPositioner } from './chunk-NC2CBGX2.js';
5
5
  import { composeRefs } from './chunk-DN7WBRIV.js';
6
6
  import { cn } from './chunk-KZ4VFY2T.js';
7
- import { forwardRef, useState, Children, isValidElement, Fragment as Fragment$1, createContext, useId, useMemo, useCallback, useContext, useRef, cloneElement } from 'react';
7
+ import { forwardRef, useState, Children, isValidElement, Fragment as Fragment$1, createContext, useId, useMemo, useCallback, useContext, useEffect, useRef, cloneElement } from 'react';
8
8
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
9
- import { X, TrendingUp, TrendingDown, Check, Copy, ChevronDown } from 'lucide-react';
9
+ import { TrendingUp, TrendingDown, Check, Copy, ChevronDown, ChevronLeft, ChevronRight, ArrowUp, ArrowDown, ArrowUpDown } from 'lucide-react';
10
10
 
11
11
  // src/display/heading/Heading.variants.ts
12
12
  var headingVariants = tv({
@@ -41,9 +41,9 @@ var headingVariants = tv({
41
41
  });
42
42
  var Heading = forwardRef(
43
43
  ({ level = 2, className, size, weight, align, ...props }, ref) => {
44
- const Tag2 = `h${level}`;
44
+ const Tag = `h${level}`;
45
45
  return /* @__PURE__ */ jsx(
46
- Tag2,
46
+ Tag,
47
47
  {
48
48
  ref,
49
49
  className: cn(headingVariants({ size, weight, align }), className),
@@ -241,40 +241,6 @@ var Badge = forwardRef(
241
241
  ({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx("span", { ref, className: cn(badgeVariants({ variant, size }), className), ...props })
242
242
  );
243
243
  Badge.displayName = "Badge";
244
-
245
- // src/display/tag/Tag.variants.ts
246
- var tagVariants = tv({
247
- base: "inline-flex items-center gap-1 rounded-md border border-border bg-card px-2 py-0.5 text-xs font-medium text-card-foreground",
248
- variants: {
249
- variant: {
250
- neutral: "",
251
- brand: "border-transparent bg-primary-soft text-primary-soft-foreground",
252
- success: "border-transparent bg-success-soft text-success-soft-foreground",
253
- warning: "border-transparent bg-warning-soft text-warning-soft-foreground",
254
- danger: "border-transparent bg-destructive-soft text-destructive-soft-foreground",
255
- info: "border-transparent bg-info-soft text-info-soft-foreground"
256
- }
257
- },
258
- defaultVariants: {
259
- variant: "neutral"
260
- }
261
- });
262
- var Tag = forwardRef(
263
- ({ children, onClose, closeLabel = "Remove", variant, className, ...props }, ref) => /* @__PURE__ */ jsxs("span", { ref, className: cn(tagVariants({ variant }), className), ...props, children: [
264
- children,
265
- onClose && /* @__PURE__ */ jsx(
266
- "button",
267
- {
268
- type: "button",
269
- "aria-label": closeLabel,
270
- onClick: onClose,
271
- className: "-mr-1 inline-flex h-4 w-4 items-center justify-center rounded-sm text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
272
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: 12 })
273
- }
274
- )
275
- ] })
276
- );
277
- Tag.displayName = "Tag";
278
244
  var Separator = forwardRef(
279
245
  ({ orientation = "horizontal", decorative = true, className, ...props }, ref) => /* @__PURE__ */ jsx(
280
246
  "div",
@@ -1145,6 +1111,764 @@ Tabs.List = TabsList;
1145
1111
  Tabs.Tab = TabsTab;
1146
1112
  Tabs.Panel = TabsPanel;
1147
1113
 
1148
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Avatar, AvatarGroup, Badge, BadgeOverlay, Card, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, CountBadge, DescriptionList, EmptyState, Heading, Highlight, Image, InfoRow, Kbd, KeyboardShortcut, Mark, NotificationDot, Quote, SectionHeader, Separator, Snippet, Stat, Status, Tabs, TabsList, TabsPanel, TabsTab, Tag, Text, Tooltip, avatarVariants, badgeVariants, codeVariants, headingVariants, tagVariants, textVariants };
1149
- //# sourceMappingURL=chunk-PRRVOVUC.js.map
1150
- //# sourceMappingURL=chunk-PRRVOVUC.js.map
1114
+ // src/display/list/List.variants.ts
1115
+ var listVariants = tv({
1116
+ base: "list-outside",
1117
+ variants: {
1118
+ marker: {
1119
+ none: "list-none pl-0",
1120
+ disc: "list-disc pl-5",
1121
+ decimal: "list-decimal pl-5",
1122
+ check: "list-none pl-0"
1123
+ },
1124
+ spacing: {
1125
+ tight: "[&>li]:py-0.5",
1126
+ normal: "[&>li]:py-1",
1127
+ loose: "[&>li]:py-2"
1128
+ }
1129
+ },
1130
+ defaultVariants: {
1131
+ marker: "none",
1132
+ spacing: "normal"
1133
+ }
1134
+ });
1135
+ var listItemVariants = tv({
1136
+ base: "flex items-start gap-3 text-sm text-foreground"
1137
+ });
1138
+ var List = forwardRef(function List2({ ordered, marker, spacing, className, children, ...rest }, ref) {
1139
+ const Component = ordered ? "ol" : "ul";
1140
+ return /* @__PURE__ */ jsx(
1141
+ Component,
1142
+ {
1143
+ ref,
1144
+ className: cn(listVariants({ marker, spacing }), className),
1145
+ ...rest,
1146
+ children
1147
+ }
1148
+ );
1149
+ });
1150
+ var ListItem = forwardRef(function ListItem2({ leading, trailing, showCheckMarker, className, children, ...rest }, ref) {
1151
+ return /* @__PURE__ */ jsxs("li", { ref, className: cn(listItemVariants(), className), ...rest, children: [
1152
+ showCheckMarker && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "mt-0.5 shrink-0 text-primary", children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }),
1153
+ leading && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "mt-0.5 shrink-0 text-muted-foreground", children: leading }),
1154
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children }),
1155
+ trailing && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-muted-foreground", children: trailing })
1156
+ ] });
1157
+ });
1158
+ List.Item = ListItem;
1159
+ var TimelineContext = createContext(null);
1160
+ var Timeline = forwardRef(function Timeline2({ align = "left", className, children, ...rest }, ref) {
1161
+ const total = Children.toArray(children).filter(isValidElement).length;
1162
+ return /* @__PURE__ */ jsx(TimelineContext.Provider, { value: { align, total }, children: /* @__PURE__ */ jsx(
1163
+ "ol",
1164
+ {
1165
+ ref,
1166
+ className: cn(
1167
+ "flex list-none flex-col",
1168
+ align === "right" && "items-end",
1169
+ className
1170
+ ),
1171
+ ...rest,
1172
+ children: Children.map(children, (child, idx) => {
1173
+ if (!isValidElement(child)) return child;
1174
+ return idx === total - 1 ? (
1175
+ // mark the last item so the connector line is suppressed
1176
+ { ...child, props: { ...child.props, "data-last": "" } }
1177
+ ) : child;
1178
+ })
1179
+ }
1180
+ ) });
1181
+ });
1182
+ var STATUS_BG = {
1183
+ default: "bg-muted text-muted-foreground border-border",
1184
+ primary: "bg-primary text-primary-foreground border-primary",
1185
+ success: "bg-success text-success-foreground border-success",
1186
+ warning: "bg-warning text-warning-foreground border-warning",
1187
+ destructive: "bg-destructive text-destructive-foreground border-destructive",
1188
+ info: "bg-info text-info-foreground border-info"
1189
+ };
1190
+ var TimelineItem = forwardRef(function TimelineItem2({ status = "default", icon, className, children, ...rest }, ref) {
1191
+ const ctx = useContext(TimelineContext);
1192
+ const isLast = rest["data-last"] !== void 0;
1193
+ return /* @__PURE__ */ jsxs(
1194
+ "li",
1195
+ {
1196
+ ref,
1197
+ "data-status": status,
1198
+ className: cn("relative flex gap-3 pb-6 last:pb-0", className),
1199
+ ...rest,
1200
+ children: [
1201
+ /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col items-center", children: [
1202
+ /* @__PURE__ */ jsx(
1203
+ "span",
1204
+ {
1205
+ "aria-hidden": "true",
1206
+ className: cn(
1207
+ "relative z-10 grid h-7 w-7 place-items-center rounded-full border-2",
1208
+ STATUS_BG[status]
1209
+ ),
1210
+ children: icon ?? /* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-current" })
1211
+ }
1212
+ ),
1213
+ !isLast && /* @__PURE__ */ jsx(
1214
+ "span",
1215
+ {
1216
+ "aria-hidden": "true",
1217
+ className: cn(
1218
+ "absolute left-1/2 top-7 h-full w-px -translate-x-1/2 bg-border"
1219
+ )
1220
+ }
1221
+ )
1222
+ ] }),
1223
+ /* @__PURE__ */ jsx("div", { className: cn("flex-1 pt-0.5", ctx?.align === "right" && "order-first text-right"), children })
1224
+ ]
1225
+ }
1226
+ );
1227
+ });
1228
+ function TimelineTitle({ className, children, ...rest }) {
1229
+ return /* @__PURE__ */ jsx("h4", { className: cn("text-sm font-medium text-foreground", className), ...rest, children });
1230
+ }
1231
+ function TimelineDescription({
1232
+ className,
1233
+ children,
1234
+ ...rest
1235
+ }) {
1236
+ return /* @__PURE__ */ jsx("p", { className: cn("text-xs text-muted-foreground", className), ...rest, children });
1237
+ }
1238
+ Timeline.Item = TimelineItem;
1239
+ Timeline.Title = TimelineTitle;
1240
+ Timeline.Description = TimelineDescription;
1241
+ var TreeContext = createContext(null);
1242
+ function useTreeContext() {
1243
+ const ctx = useContext(TreeContext);
1244
+ if (!ctx) throw new Error("Tree.* must be used inside <Tree>");
1245
+ return ctx;
1246
+ }
1247
+ var TreeLevelContext = createContext({ level: 1 });
1248
+ function useTreeLevel() {
1249
+ return useContext(TreeLevelContext).level;
1250
+ }
1251
+ var Tree = forwardRef(function Tree2({
1252
+ selectedValue,
1253
+ defaultSelectedValue,
1254
+ onSelectionChange,
1255
+ expanded,
1256
+ defaultExpanded,
1257
+ onExpandedChange,
1258
+ className,
1259
+ children,
1260
+ ...rest
1261
+ }, ref) {
1262
+ const [selected, setSelected] = useControlled({
1263
+ controlled: selectedValue,
1264
+ default: defaultSelectedValue ?? null,
1265
+ onChange: onSelectionChange
1266
+ });
1267
+ const [expandedList, setExpandedList] = useControlled({
1268
+ controlled: expanded,
1269
+ default: defaultExpanded ?? [],
1270
+ onChange: onExpandedChange
1271
+ });
1272
+ const expandedSet = useMemo(() => new Set(expandedList), [expandedList]);
1273
+ const toggleExpanded = useCallback(
1274
+ (value) => {
1275
+ const next = new Set(expandedSet);
1276
+ if (next.has(value)) next.delete(value);
1277
+ else next.add(value);
1278
+ setExpandedList(Array.from(next));
1279
+ },
1280
+ [expandedSet, setExpandedList]
1281
+ );
1282
+ const ctx = useMemo(
1283
+ () => ({
1284
+ selectedValue: selected,
1285
+ setSelectedValue: setSelected,
1286
+ expanded: expandedSet,
1287
+ toggleExpanded
1288
+ }),
1289
+ [selected, setSelected, expandedSet, toggleExpanded]
1290
+ );
1291
+ return /* @__PURE__ */ jsx(TreeContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
1292
+ RovingFocusGroup,
1293
+ {
1294
+ ref,
1295
+ orientation: "vertical",
1296
+ loop: true,
1297
+ role: "tree",
1298
+ className: cn("flex flex-col text-sm", className),
1299
+ ...rest,
1300
+ children
1301
+ }
1302
+ ) });
1303
+ });
1304
+ function NodeRow({
1305
+ level,
1306
+ selected,
1307
+ expanded,
1308
+ hasChildren,
1309
+ disabled,
1310
+ onActivate,
1311
+ label
1312
+ }) {
1313
+ const roving = useRovingFocusItem();
1314
+ const handleKeyDown = useCallback(
1315
+ (e) => {
1316
+ roving.onKeyDown(e);
1317
+ if (e.defaultPrevented || disabled) return;
1318
+ if (e.key === "Enter" || e.key === " ") {
1319
+ e.preventDefault();
1320
+ onActivate();
1321
+ }
1322
+ },
1323
+ [roving, disabled, onActivate]
1324
+ );
1325
+ return /* @__PURE__ */ jsxs(
1326
+ "div",
1327
+ {
1328
+ ref: roving.ref,
1329
+ role: "treeitem",
1330
+ "aria-level": level,
1331
+ "aria-selected": selected || void 0,
1332
+ "aria-expanded": hasChildren ? expanded : void 0,
1333
+ "aria-disabled": disabled || void 0,
1334
+ "data-selected": dataAttr(selected),
1335
+ "data-disabled": dataAttr(disabled),
1336
+ tabIndex: roving.tabIndex,
1337
+ onFocus: roving.onFocus,
1338
+ onKeyDown: handleKeyDown,
1339
+ onClick: () => {
1340
+ if (!disabled) onActivate();
1341
+ },
1342
+ style: { paddingLeft: `${(level - 1) * 16}px` },
1343
+ className: cn(
1344
+ "flex cursor-pointer items-center gap-1 rounded-sm px-2 py-1 transition-colors",
1345
+ "hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1346
+ selected && "bg-primary-soft text-primary-soft-foreground",
1347
+ disabled && "pointer-events-none opacity-50"
1348
+ ),
1349
+ children: [
1350
+ hasChildren ? /* @__PURE__ */ jsx(
1351
+ ChevronRight,
1352
+ {
1353
+ className: cn(
1354
+ "h-4 w-4 shrink-0 text-muted-foreground transition-transform",
1355
+ expanded && "rotate-90"
1356
+ )
1357
+ }
1358
+ ) : /* @__PURE__ */ jsx("span", { className: "w-4 shrink-0" }),
1359
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: label })
1360
+ ]
1361
+ }
1362
+ );
1363
+ }
1364
+ var TreeGroup = forwardRef(function TreeGroup2({ value, label, disabled = false, className, children, ...rest }, ref) {
1365
+ const ctx = useTreeContext();
1366
+ const level = useTreeLevel();
1367
+ const expanded = ctx.expanded.has(value);
1368
+ return /* @__PURE__ */ jsxs(
1369
+ "li",
1370
+ {
1371
+ ref,
1372
+ role: "presentation",
1373
+ "data-state": expanded ? "open" : "closed",
1374
+ className: cn("list-none", className),
1375
+ ...rest,
1376
+ children: [
1377
+ /* @__PURE__ */ jsx(
1378
+ NodeRow,
1379
+ {
1380
+ level,
1381
+ selected: false,
1382
+ expanded,
1383
+ hasChildren: true,
1384
+ disabled,
1385
+ onActivate: () => ctx.toggleExpanded(value),
1386
+ label
1387
+ }
1388
+ ),
1389
+ expanded && /* @__PURE__ */ jsx(TreeLevelContext.Provider, { value: { level: level + 1 }, children: /* @__PURE__ */ jsx("ul", { role: "group", className: "flex flex-col", children }) })
1390
+ ]
1391
+ }
1392
+ );
1393
+ });
1394
+ var TreeItem = forwardRef(function TreeItem2({ value, disabled = false, className, children, ...rest }, ref) {
1395
+ const ctx = useTreeContext();
1396
+ const level = useTreeLevel();
1397
+ const selected = ctx.selectedValue === value;
1398
+ return /* @__PURE__ */ jsx("li", { ref, role: "presentation", className: cn("list-none", className), ...rest, children: /* @__PURE__ */ jsx(
1399
+ NodeRow,
1400
+ {
1401
+ level,
1402
+ selected,
1403
+ hasChildren: false,
1404
+ disabled,
1405
+ onActivate: () => ctx.setSelectedValue(value),
1406
+ label: children
1407
+ }
1408
+ ) });
1409
+ });
1410
+ Tree.Group = TreeGroup;
1411
+ Tree.Item = TreeItem;
1412
+ var TableContext = createContext({
1413
+ striped: false,
1414
+ hoverable: false,
1415
+ density: "cozy"
1416
+ });
1417
+ var DENSITY_CELL = {
1418
+ compact: "px-2 py-1.5 text-sm",
1419
+ cozy: "px-3 py-2 text-sm",
1420
+ comfortable: "px-4 py-3 text-sm"
1421
+ };
1422
+ var Table = forwardRef(function Table2({ striped = false, hoverable = false, density = "cozy", bare = false, className, children, ...rest }, ref) {
1423
+ const ctx = { striped, hoverable, density };
1424
+ const tableEl = /* @__PURE__ */ jsx(
1425
+ "table",
1426
+ {
1427
+ ref,
1428
+ className: cn("w-full caption-bottom border-collapse text-left", className),
1429
+ ...rest,
1430
+ children
1431
+ }
1432
+ );
1433
+ return /* @__PURE__ */ jsx(TableContext.Provider, { value: ctx, children: bare ? tableEl : /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-x-auto rounded-md border border-border", children: tableEl }) });
1434
+ });
1435
+ var TableHead = forwardRef(
1436
+ function TableHead2({ className, ...rest }, ref) {
1437
+ return /* @__PURE__ */ jsx(
1438
+ "thead",
1439
+ {
1440
+ ref,
1441
+ className: cn("border-b border-border bg-muted/50 text-xs font-semibold uppercase tracking-wide text-muted-foreground", className),
1442
+ ...rest
1443
+ }
1444
+ );
1445
+ }
1446
+ );
1447
+ var TableBody = forwardRef(
1448
+ function TableBody2({ className, ...rest }, ref) {
1449
+ const ctx = useContext(TableContext);
1450
+ return /* @__PURE__ */ jsx(
1451
+ "tbody",
1452
+ {
1453
+ ref,
1454
+ className: cn(
1455
+ ctx.striped && "[&>tr:nth-child(even)]:bg-muted/30",
1456
+ ctx.hoverable && "[&>tr:hover]:bg-muted",
1457
+ className
1458
+ ),
1459
+ ...rest
1460
+ }
1461
+ );
1462
+ }
1463
+ );
1464
+ var TableFooter = forwardRef(
1465
+ function TableFooter2({ className, ...rest }, ref) {
1466
+ return /* @__PURE__ */ jsx(
1467
+ "tfoot",
1468
+ {
1469
+ ref,
1470
+ className: cn("border-t border-border bg-muted/50 font-medium", className),
1471
+ ...rest
1472
+ }
1473
+ );
1474
+ }
1475
+ );
1476
+ var TableRow = forwardRef(
1477
+ function TableRow2({ className, ...rest }, ref) {
1478
+ return /* @__PURE__ */ jsx(
1479
+ "tr",
1480
+ {
1481
+ ref,
1482
+ className: cn("border-b border-border last:border-0 transition-colors data-[selected]:bg-primary-soft", className),
1483
+ ...rest
1484
+ }
1485
+ );
1486
+ }
1487
+ );
1488
+ var TableHeaderCell = forwardRef(
1489
+ function TableHeaderCell2({ className, ...rest }, ref) {
1490
+ const ctx = useContext(TableContext);
1491
+ return /* @__PURE__ */ jsx(
1492
+ "th",
1493
+ {
1494
+ ref,
1495
+ scope: "col",
1496
+ className: cn(DENSITY_CELL[ctx.density], "font-semibold text-foreground", className),
1497
+ ...rest
1498
+ }
1499
+ );
1500
+ }
1501
+ );
1502
+ var TableCell = forwardRef(function TableCell2({ className, ...rest }, ref) {
1503
+ const ctx = useContext(TableContext);
1504
+ return /* @__PURE__ */ jsx(
1505
+ "td",
1506
+ {
1507
+ ref,
1508
+ className: cn(DENSITY_CELL[ctx.density], "align-middle", className),
1509
+ ...rest
1510
+ }
1511
+ );
1512
+ });
1513
+ var TableCaption = forwardRef(function TableCaption2({ className, ...rest }, ref) {
1514
+ return /* @__PURE__ */ jsx(
1515
+ "caption",
1516
+ {
1517
+ ref,
1518
+ className: cn("mt-2 text-sm text-muted-foreground", className),
1519
+ ...rest
1520
+ }
1521
+ );
1522
+ });
1523
+ Table.Head = TableHead;
1524
+ Table.Body = TableBody;
1525
+ Table.Footer = TableFooter;
1526
+ Table.Row = TableRow;
1527
+ Table.HeaderCell = TableHeaderCell;
1528
+ Table.Cell = TableCell;
1529
+ Table.Caption = TableCaption;
1530
+ function defaultCompare(a, b) {
1531
+ if (a === b) return 0;
1532
+ if (a === null || a === void 0) return 1;
1533
+ if (b === null || b === void 0) return -1;
1534
+ if (typeof a === "number" && typeof b === "number") return a - b;
1535
+ if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();
1536
+ return String(a).localeCompare(String(b));
1537
+ }
1538
+ function DataTable({
1539
+ columns,
1540
+ data,
1541
+ rowKey,
1542
+ onRowClick,
1543
+ sortBy,
1544
+ defaultSortBy,
1545
+ onSortChange,
1546
+ striped,
1547
+ hoverable = !!onRowClick,
1548
+ density,
1549
+ bare,
1550
+ emptyContent = "No results.",
1551
+ className,
1552
+ "aria-label": ariaLabel
1553
+ }) {
1554
+ const [sort, setSort] = useControlled({
1555
+ controlled: sortBy,
1556
+ default: defaultSortBy ?? null,
1557
+ onChange: onSortChange
1558
+ });
1559
+ const sortedData = useMemo(() => {
1560
+ if (!sort) return data;
1561
+ const col = columns.find((c) => c.key === sort.columnKey);
1562
+ if (!col?.accessor) return data;
1563
+ const accessor = col.accessor;
1564
+ const sorted = [...data].sort((a, b) => {
1565
+ const r = defaultCompare(accessor(a), accessor(b));
1566
+ return sort.direction === "asc" ? r : -r;
1567
+ });
1568
+ return sorted;
1569
+ }, [data, columns, sort]);
1570
+ const cycleSort = (columnKey) => {
1571
+ if (!sort || sort.columnKey !== columnKey) {
1572
+ setSort({ columnKey, direction: "asc" });
1573
+ } else if (sort.direction === "asc") {
1574
+ setSort({ columnKey, direction: "desc" });
1575
+ } else {
1576
+ setSort(null);
1577
+ }
1578
+ };
1579
+ const alignClass = (a) => a === "right" ? "text-right" : a === "center" ? "text-center" : "text-left";
1580
+ return /* @__PURE__ */ jsxs(
1581
+ Table,
1582
+ {
1583
+ striped,
1584
+ hoverable,
1585
+ density,
1586
+ bare,
1587
+ className,
1588
+ "aria-label": ariaLabel,
1589
+ children: [
1590
+ /* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(TableRow, { children: columns.map((col) => {
1591
+ const isSorted = sort?.columnKey === col.key;
1592
+ const ariaSort = isSorted ? sort?.direction === "asc" ? "ascending" : "descending" : col.sortable ? "none" : void 0;
1593
+ return /* @__PURE__ */ jsx(
1594
+ TableHeaderCell,
1595
+ {
1596
+ "aria-sort": ariaSort,
1597
+ style: col.width ? { width: col.width } : void 0,
1598
+ className: alignClass(col.align),
1599
+ children: col.sortable ? /* @__PURE__ */ jsxs(
1600
+ "button",
1601
+ {
1602
+ type: "button",
1603
+ onClick: () => cycleSort(col.key),
1604
+ className: cn(
1605
+ "inline-flex items-center gap-1 rounded-sm transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1606
+ ),
1607
+ children: [
1608
+ /* @__PURE__ */ jsx("span", { children: col.header }),
1609
+ isSorted ? sort?.direction === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(ArrowDown, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(ArrowUpDown, { className: "h-3.5 w-3.5 opacity-50" })
1610
+ ]
1611
+ }
1612
+ ) : col.header
1613
+ },
1614
+ col.key
1615
+ );
1616
+ }) }) }),
1617
+ /* @__PURE__ */ jsx(TableBody, { children: sortedData.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: columns.length, className: "py-8 text-center text-muted-foreground", children: emptyContent }) }) : sortedData.map((row, rowIndex) => {
1618
+ const key = rowKey ? rowKey(row, rowIndex) : rowIndex;
1619
+ return /* @__PURE__ */ jsx(
1620
+ TableRow,
1621
+ {
1622
+ onClick: onRowClick ? () => onRowClick(row, rowIndex) : void 0,
1623
+ className: cn(onRowClick && "cursor-pointer"),
1624
+ children: columns.map((col) => /* @__PURE__ */ jsx(TableCell, { className: alignClass(col.align), children: col.cell ? col.cell(row, rowIndex) : col.accessor ? col.accessor(row) : null }, col.key))
1625
+ },
1626
+ key
1627
+ );
1628
+ }) })
1629
+ ]
1630
+ }
1631
+ );
1632
+ }
1633
+ var CarouselContext = createContext(null);
1634
+ function useCarouselContext() {
1635
+ const ctx = useContext(CarouselContext);
1636
+ if (!ctx) throw new Error("Carousel.* must be used inside <Carousel>");
1637
+ return ctx;
1638
+ }
1639
+ var Carousel = forwardRef(function Carousel2({
1640
+ index: indexProp,
1641
+ defaultIndex = 0,
1642
+ onIndexChange,
1643
+ loop = false,
1644
+ autoPlay,
1645
+ slidesCount,
1646
+ className,
1647
+ children,
1648
+ ...rest
1649
+ }, ref) {
1650
+ const [index, setIndexState] = useControlled({
1651
+ controlled: indexProp,
1652
+ default: defaultIndex,
1653
+ onChange: onIndexChange
1654
+ });
1655
+ const [count, setCount] = useState(slidesCount ?? 0);
1656
+ const [paused, setPaused] = useState(false);
1657
+ useEffect(() => {
1658
+ if (slidesCount != null) setCount(slidesCount);
1659
+ }, [slidesCount]);
1660
+ const setIndex = useCallback(
1661
+ (i) => {
1662
+ if (count === 0) {
1663
+ setIndexState(0);
1664
+ return;
1665
+ }
1666
+ let next2 = i;
1667
+ if (loop) {
1668
+ next2 = (i % count + count) % count;
1669
+ } else {
1670
+ next2 = Math.max(0, Math.min(count - 1, i));
1671
+ }
1672
+ setIndexState(next2);
1673
+ },
1674
+ [count, loop, setIndexState]
1675
+ );
1676
+ const prev = useCallback(() => setIndex(index - 1), [index, setIndex]);
1677
+ const next = useCallback(() => setIndex(index + 1), [index, setIndex]);
1678
+ useEffect(() => {
1679
+ if (!autoPlay || paused || count === 0) return;
1680
+ const handle = window.setInterval(() => {
1681
+ setIndex(loop ? index + 1 : Math.min(count - 1, index + 1));
1682
+ }, autoPlay);
1683
+ return () => window.clearInterval(handle);
1684
+ }, [autoPlay, paused, count, index, loop, setIndex]);
1685
+ const ctx = useMemo(
1686
+ () => ({ index, setIndex, count, setCount, loop, prev, next, paused, setPaused, autoPlay }),
1687
+ [index, setIndex, count, loop, prev, next, paused, autoPlay]
1688
+ );
1689
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
1690
+ "div",
1691
+ {
1692
+ ref,
1693
+ onMouseEnter: () => setPaused(true),
1694
+ onMouseLeave: () => setPaused(false),
1695
+ onFocus: () => setPaused(true),
1696
+ onBlur: () => setPaused(false),
1697
+ className: cn("relative", className),
1698
+ ...rest,
1699
+ children
1700
+ }
1701
+ ) });
1702
+ });
1703
+ var CarouselViewport = forwardRef(
1704
+ function CarouselViewport2({ "aria-label": ariaLabel = "Carousel", className, onKeyDown, children, ...rest }, forwardedRef) {
1705
+ const ctx = useCarouselContext();
1706
+ const handleKeyDown = (e) => {
1707
+ onKeyDown?.(e);
1708
+ if (e.defaultPrevented) return;
1709
+ if (e.key === "ArrowLeft") {
1710
+ e.preventDefault();
1711
+ ctx.prev();
1712
+ } else if (e.key === "ArrowRight") {
1713
+ e.preventDefault();
1714
+ ctx.next();
1715
+ }
1716
+ };
1717
+ return /* @__PURE__ */ jsx(
1718
+ "div",
1719
+ {
1720
+ ref: forwardedRef,
1721
+ role: "group",
1722
+ "aria-roledescription": "carousel",
1723
+ "aria-label": ariaLabel,
1724
+ tabIndex: 0,
1725
+ onKeyDown: handleKeyDown,
1726
+ className: cn(
1727
+ "relative overflow-hidden rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1728
+ className
1729
+ ),
1730
+ ...rest,
1731
+ children
1732
+ }
1733
+ );
1734
+ }
1735
+ );
1736
+ var CarouselSlides = forwardRef(
1737
+ function CarouselSlides2({ className, children, ...rest }, forwardedRef) {
1738
+ const ctx = useCarouselContext();
1739
+ const childArray = Children.toArray(children).filter(isValidElement);
1740
+ useEffect(() => {
1741
+ ctx.setCount(childArray.length);
1742
+ }, [childArray.length, ctx]);
1743
+ return /* @__PURE__ */ jsx(
1744
+ "div",
1745
+ {
1746
+ ref: forwardedRef,
1747
+ "aria-live": ctx.autoPlay ? "off" : "polite",
1748
+ className: cn("flex transition-transform duration-300 ease-out", className),
1749
+ style: { transform: `translateX(-${ctx.index * 100}%)` },
1750
+ ...rest,
1751
+ children: childArray.map((child, idx) => /* @__PURE__ */ jsx(
1752
+ "div",
1753
+ {
1754
+ role: "group",
1755
+ "aria-roledescription": "slide",
1756
+ "aria-label": `${idx + 1} of ${childArray.length}`,
1757
+ "aria-hidden": idx !== ctx.index || void 0,
1758
+ className: "w-full shrink-0",
1759
+ children: child
1760
+ },
1761
+ idx
1762
+ ))
1763
+ }
1764
+ );
1765
+ }
1766
+ );
1767
+ var CarouselSlide = forwardRef(
1768
+ function CarouselSlide2({ className, ...rest }, ref) {
1769
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("h-full w-full", className), ...rest });
1770
+ }
1771
+ );
1772
+ var CarouselPrev = forwardRef(
1773
+ function CarouselPrev2({ "aria-label": ariaLabel = "Previous slide", className, onClick, type = "button", children, ...rest }, forwardedRef) {
1774
+ const ctx = useCarouselContext();
1775
+ const disabled = !ctx.loop && ctx.index === 0;
1776
+ return /* @__PURE__ */ jsx(
1777
+ "button",
1778
+ {
1779
+ ref: forwardedRef,
1780
+ type,
1781
+ "aria-label": ariaLabel,
1782
+ disabled,
1783
+ onClick: (e) => {
1784
+ onClick?.(e);
1785
+ if (e.defaultPrevented) return;
1786
+ ctx.prev();
1787
+ },
1788
+ className: cn(
1789
+ "absolute left-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40",
1790
+ className
1791
+ ),
1792
+ ...rest,
1793
+ children: children ?? /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft, size: 16 })
1794
+ }
1795
+ );
1796
+ }
1797
+ );
1798
+ var CarouselNext = forwardRef(
1799
+ function CarouselNext2({ "aria-label": ariaLabel = "Next slide", className, onClick, type = "button", children, ...rest }, forwardedRef) {
1800
+ const ctx = useCarouselContext();
1801
+ const disabled = !ctx.loop && ctx.index === ctx.count - 1;
1802
+ return /* @__PURE__ */ jsx(
1803
+ "button",
1804
+ {
1805
+ ref: forwardedRef,
1806
+ type,
1807
+ "aria-label": ariaLabel,
1808
+ disabled,
1809
+ onClick: (e) => {
1810
+ onClick?.(e);
1811
+ if (e.defaultPrevented) return;
1812
+ ctx.next();
1813
+ },
1814
+ className: cn(
1815
+ "absolute right-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40",
1816
+ className
1817
+ ),
1818
+ ...rest,
1819
+ children: children ?? /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: 16 })
1820
+ }
1821
+ );
1822
+ }
1823
+ );
1824
+ var CarouselDots = forwardRef(
1825
+ function CarouselDots2({ className, ...rest }, forwardedRef) {
1826
+ const ctx = useCarouselContext();
1827
+ return /* @__PURE__ */ jsx(
1828
+ "div",
1829
+ {
1830
+ ref: forwardedRef,
1831
+ className: cn("mt-3 flex items-center justify-center gap-1.5", className),
1832
+ ...rest,
1833
+ children: Array.from({ length: ctx.count }, (_, i) => /* @__PURE__ */ jsx(CarouselDot, { slideIndex: i }, i))
1834
+ }
1835
+ );
1836
+ }
1837
+ );
1838
+ var CarouselDot = forwardRef(
1839
+ function CarouselDot2({ slideIndex, className, onClick, type = "button", ...rest }, forwardedRef) {
1840
+ const ctx = useCarouselContext();
1841
+ const isActive = ctx.index === slideIndex;
1842
+ return /* @__PURE__ */ jsx(
1843
+ "button",
1844
+ {
1845
+ ref: forwardedRef,
1846
+ type,
1847
+ "aria-label": `Go to slide ${slideIndex + 1}`,
1848
+ "aria-current": isActive || void 0,
1849
+ onClick: (e) => {
1850
+ onClick?.(e);
1851
+ if (e.defaultPrevented) return;
1852
+ ctx.setIndex(slideIndex);
1853
+ },
1854
+ className: cn(
1855
+ "h-1.5 rounded-full bg-border transition-all hover:bg-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1856
+ isActive ? "w-6 bg-primary hover:bg-primary" : "w-1.5",
1857
+ className
1858
+ ),
1859
+ ...rest
1860
+ }
1861
+ );
1862
+ }
1863
+ );
1864
+ Carousel.Viewport = CarouselViewport;
1865
+ Carousel.Slides = CarouselSlides;
1866
+ Carousel.Slide = CarouselSlide;
1867
+ Carousel.Prev = CarouselPrev;
1868
+ Carousel.Next = CarouselNext;
1869
+ Carousel.Dots = CarouselDots;
1870
+ Carousel.Dot = CarouselDot;
1871
+
1872
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Avatar, AvatarGroup, Badge, BadgeOverlay, Card, Carousel, CarouselDot, CarouselDots, CarouselNext, CarouselPrev, CarouselSlide, CarouselSlides, CarouselViewport, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, CountBadge, DataTable, DescriptionList, EmptyState, Heading, Highlight, Image, InfoRow, Kbd, KeyboardShortcut, List, ListItem, Mark, NotificationDot, Quote, SectionHeader, Separator, Snippet, Stat, Status, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeaderCell, TableRow, Tabs, TabsList, TabsPanel, TabsTab, Text, Timeline, TimelineDescription, TimelineItem, TimelineTitle, Tooltip, Tree, TreeGroup, TreeItem, avatarVariants, badgeVariants, codeVariants, headingVariants, textVariants };
1873
+ //# sourceMappingURL=chunk-W7LQZKTH.js.map
1874
+ //# sourceMappingURL=chunk-W7LQZKTH.js.map