@aortl/admin-react 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -12,28 +12,49 @@ import { Field as Field$1 } from "@base-ui/react/field";
12
12
  import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
13
13
  import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
14
14
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
15
+ //#region src/cn.ts
16
+ /**
17
+ * Every admin class name is prefixed so the bundle can coexist with a host
18
+ * page's CSS without colliding on common names like `.btn` or `.card`. The
19
+ * matching CSS lives in `@aortl/admin-css/admin.scoped.css` (built by
20
+ * `wrap-scoped.mjs`), which carries the same prefix on every selector.
21
+ */
22
+ var PREFIX = "_ao-";
23
+ function prefixTokens(value) {
24
+ if (!value) return "";
25
+ return value.split(/\s+/).filter(Boolean).map((token) => `${PREFIX}${token}`).join(" ");
26
+ }
27
+ function join(...parts) {
28
+ return parts.filter(Boolean).join(" ");
29
+ }
30
+ function cn(base, className) {
31
+ const baseClasses = prefixTokens(clsx(base));
32
+ if (typeof className === "function") return (state) => join(baseClasses, className(state) ?? void 0);
33
+ return join(baseClasses, className);
34
+ }
35
+ //#endregion
15
36
  //#region src/Accordion.tsx
16
37
  function AccordionRoot({ className, ...rest }) {
17
38
  return /* @__PURE__ */ jsx("div", {
18
- className: clsx("accordion", className),
39
+ className: cn("accordion", className),
19
40
  ...rest
20
41
  });
21
42
  }
22
43
  function AccordionItem({ className, ...rest }) {
23
44
  return /* @__PURE__ */ jsx("details", {
24
- className: clsx("accordion-item", className),
45
+ className: cn("accordion-item", className),
25
46
  ...rest
26
47
  });
27
48
  }
28
49
  function AccordionSummary({ className, ...rest }) {
29
50
  return /* @__PURE__ */ jsx("summary", {
30
- className: clsx("accordion-summary", className),
51
+ className: cn("accordion-summary", className),
31
52
  ...rest
32
53
  });
33
54
  }
34
55
  function AccordionContent({ className, ...rest }) {
35
56
  return /* @__PURE__ */ jsx("div", {
36
- className: clsx("accordion-content", className),
57
+ className: cn("accordion-content", className),
37
58
  ...rest
38
59
  });
39
60
  }
@@ -46,7 +67,7 @@ var Accordion = Object.assign(AccordionRoot, {
46
67
  //#region src/AdminRoot.tsx
47
68
  function AdminRoot({ className, ...rest }) {
48
69
  return /* @__PURE__ */ jsx("div", {
49
- className: clsx("admin-root", className),
70
+ className: cn("admin-root", className),
50
71
  ...rest
51
72
  });
52
73
  }
@@ -73,7 +94,7 @@ function renderIcon(icon, size = 16) {
73
94
  function AlertRoot({ variant = "info", icon, title, description, className, role, children, ...rest }) {
74
95
  return /* @__PURE__ */ jsxs("div", {
75
96
  role: role ?? (variant === "danger" || variant === "warning" ? "alert" : "status"),
76
- className: clsx("alert", `alert-${variant}`, className),
97
+ className: cn(["alert", `alert-${variant}`], className),
77
98
  ...rest,
78
99
  children: [
79
100
  renderIcon(icon),
@@ -85,13 +106,13 @@ function AlertRoot({ variant = "info", icon, title, description, className, role
85
106
  }
86
107
  function AlertTitle({ className, ...rest }) {
87
108
  return /* @__PURE__ */ jsx("strong", {
88
- className: clsx("alert-title", className),
109
+ className: cn("alert-title", className),
89
110
  ...rest
90
111
  });
91
112
  }
92
113
  function AlertDescription({ className, ...rest }) {
93
114
  return /* @__PURE__ */ jsx("p", {
94
- className: clsx("alert-description", className),
115
+ className: cn("alert-description", className),
95
116
  ...rest
96
117
  });
97
118
  }
@@ -129,7 +150,11 @@ function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen,
129
150
  return /* @__PURE__ */ jsx(AppShellContext.Provider, {
130
151
  value,
131
152
  children: /* @__PURE__ */ jsx("div", {
132
- className: clsx("app-shell", hasSidebar && "app-shell-with-sidebar", hasFooter && "app-shell-with-footer", className),
153
+ className: cn([
154
+ "app-shell",
155
+ hasSidebar && "app-shell-with-sidebar",
156
+ hasFooter && "app-shell-with-footer"
157
+ ], className),
133
158
  style: rootStyle,
134
159
  ...rest,
135
160
  children
@@ -138,7 +163,7 @@ function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen,
138
163
  }
139
164
  function AppShellMain({ className, ...rest }) {
140
165
  return /* @__PURE__ */ jsx("main", {
141
- className: clsx("app-shell-main", className),
166
+ className: cn("app-shell-main", className),
142
167
  ...rest
143
168
  });
144
169
  }
@@ -147,7 +172,11 @@ var AppShell = Object.assign(AppShellRoot, { Main: AppShellMain });
147
172
  //#region src/Badge.tsx
148
173
  function Badge({ variant = "neutral", size = "md", icon, className, children, ...rest }) {
149
174
  return /* @__PURE__ */ jsxs("span", {
150
- className: clsx("badge", `badge-${variant}`, size !== "md" && `badge-${size}`, className),
175
+ className: cn([
176
+ "badge",
177
+ `badge-${variant}`,
178
+ size !== "md" && `badge-${size}`
179
+ ], className),
151
180
  ...rest,
152
181
  children: [renderIcon(icon, size === "sm" ? 10 : 12), children]
153
182
  });
@@ -156,26 +185,13 @@ function Badge({ variant = "neutral", size = "md", icon, className, children, ..
156
185
  //#region src/BrandTile.tsx
157
186
  function BrandTile({ monogram, icon, className, children, ...rest }) {
158
187
  return /* @__PURE__ */ jsx("span", {
159
- className: clsx("brand-tile", className),
188
+ className: cn("brand-tile", className),
160
189
  "aria-hidden": true,
161
190
  ...rest,
162
191
  children: icon ? renderIcon(icon, 14) : children ?? monogram
163
192
  });
164
193
  }
165
194
  //#endregion
166
- //#region src/cn.ts
167
- /**
168
- * className merger that preserves Base UI's render-prop className form.
169
- *
170
- * Base UI components accept `className: string | ((state) => string | undefined)`. The plain
171
- * `clsx()` path is correct for strings, but a function form has to be deferred
172
- * until Base UI invokes it with the component state.
173
- */
174
- function cn(base, className) {
175
- if (typeof className === "function") return (state) => clsx(base, className(state));
176
- return clsx(base, className);
177
- }
178
- //#endregion
179
195
  //#region src/Button.tsx
180
196
  function Button({ variant = "primary", size = "md", fullWidth, loading, icon, iconTrailing, className, type = "button", disabled, children, ...rest }) {
181
197
  const iconOnly = children == null && (icon != null || iconTrailing != null);
@@ -204,7 +220,7 @@ function Button({ variant = "primary", size = "md", fullWidth, loading, icon, ic
204
220
  function ButtonGroup({ orientation = "horizontal", role = "group", className, ...rest }) {
205
221
  return /* @__PURE__ */ jsx("div", {
206
222
  role,
207
- className: clsx("btn-group", orientation === "vertical" && "btn-group-vertical", className),
223
+ className: cn(["btn-group", orientation === "vertical" && "btn-group-vertical"], className),
208
224
  ...rest
209
225
  });
210
226
  }
@@ -214,7 +230,7 @@ function BreadcrumbsRoot({ separator, className, children, "aria-label": ariaLab
214
230
  const items = Children.toArray(children).filter(isValidElement);
215
231
  return /* @__PURE__ */ jsx("nav", {
216
232
  "aria-label": ariaLabel,
217
- className: clsx("breadcrumbs", className),
233
+ className: cn("breadcrumbs", className),
218
234
  ...rest,
219
235
  children: /* @__PURE__ */ jsx("ol", { children: items.map((child, i) => /* @__PURE__ */ jsxs(Fragment$1, { children: [child, i < items.length - 1 ? /* @__PURE__ */ jsx(BreadcrumbSeparator, { children: separator }) : null] }, child.key ?? i)) })
220
236
  });
@@ -223,7 +239,7 @@ function BreadcrumbItem(props) {
223
239
  if (props.href !== void 0) {
224
240
  const { className, current, icon, children, ...rest } = props;
225
241
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("a", {
226
- className: clsx("breadcrumb-item", className),
242
+ className: cn("breadcrumb-item", className),
227
243
  "aria-current": current ? "page" : void 0,
228
244
  ...rest,
229
245
  children: [renderIcon(icon, 14), children]
@@ -231,7 +247,7 @@ function BreadcrumbItem(props) {
231
247
  }
232
248
  const { className, current, icon, children, ...rest } = props;
233
249
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", {
234
- className: clsx("breadcrumb-item", className),
250
+ className: cn("breadcrumb-item", className),
235
251
  "aria-current": current ? "page" : void 0,
236
252
  ...rest,
237
253
  children: [renderIcon(icon, 14), children]
@@ -240,7 +256,7 @@ function BreadcrumbItem(props) {
240
256
  function BreadcrumbSeparator({ className, children, ...rest }) {
241
257
  return /* @__PURE__ */ jsx("span", {
242
258
  "aria-hidden": "true",
243
- className: clsx("breadcrumb-separator", className),
259
+ className: cn("breadcrumb-separator", className),
244
260
  ...rest,
245
261
  children
246
262
  });
@@ -279,13 +295,13 @@ function FileInput({ variant = "bordered", inputSize = "md", className, ...rest
279
295
  //#region src/InputGroup.tsx
280
296
  function InputGroupRoot({ className, ...rest }) {
281
297
  return /* @__PURE__ */ jsx("div", {
282
- className: clsx("input-group", className),
298
+ className: cn("input-group", className),
283
299
  ...rest
284
300
  });
285
301
  }
286
302
  function InputGroupAddon({ className, ...rest }) {
287
303
  return /* @__PURE__ */ jsx("span", {
288
- className: clsx("input-group-addon", className),
304
+ className: cn("input-group-addon", className),
289
305
  ...rest
290
306
  });
291
307
  }
@@ -370,10 +386,10 @@ function Pagination({ page, total, onPageChange, siblingCount = 1, boundaryCount
370
386
  const next = nextIcon !== void 0 ? renderIcon(nextIcon, 16) : /* @__PURE__ */ jsx(ChevronRightIcon, {});
371
387
  return /* @__PURE__ */ jsx("nav", {
372
388
  "aria-label": ariaLabel,
373
- className: clsx("pagination", className),
389
+ className: cn("pagination", className),
374
390
  ...rest,
375
391
  children: /* @__PURE__ */ jsx("ul", { children: items.map((item, i) => /* @__PURE__ */ jsx("li", {
376
- className: "page-item",
392
+ className: cn("page-item", void 0),
377
393
  children: renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next)
378
394
  }, paginationItemKey(item, i))) })
379
395
  });
@@ -419,7 +435,7 @@ function defaultRender(item, onPageChange, prev, next) {
419
435
  switch (item.type) {
420
436
  case "previous": return /* @__PURE__ */ jsx("button", {
421
437
  type: "button",
422
- className: "page-link",
438
+ className: cn("page-link", void 0),
423
439
  "aria-label": "Previous page",
424
440
  "aria-disabled": item.disabled || void 0,
425
441
  disabled: item.disabled,
@@ -428,7 +444,7 @@ function defaultRender(item, onPageChange, prev, next) {
428
444
  });
429
445
  case "next": return /* @__PURE__ */ jsx("button", {
430
446
  type: "button",
431
- className: "page-link",
447
+ className: cn("page-link", void 0),
432
448
  "aria-label": "Next page",
433
449
  "aria-disabled": item.disabled || void 0,
434
450
  disabled: item.disabled,
@@ -436,13 +452,13 @@ function defaultRender(item, onPageChange, prev, next) {
436
452
  children: next
437
453
  });
438
454
  case "ellipsis": return /* @__PURE__ */ jsx("span", {
439
- className: "page-ellipsis",
455
+ className: cn("page-ellipsis", void 0),
440
456
  "aria-hidden": "true",
441
457
  children: "…"
442
458
  });
443
459
  case "page": return /* @__PURE__ */ jsx("button", {
444
460
  type: "button",
445
- className: clsx("page-link", item.selected && "active"),
461
+ className: cn(["page-link", item.selected && "active"], void 0),
446
462
  "aria-current": item.selected ? "page" : void 0,
447
463
  "aria-label": `Page ${item.page}`,
448
464
  onClick: () => onPageChange(item.page),
@@ -454,7 +470,11 @@ function defaultRender(item, onPageChange, prev, next) {
454
470
  //#region src/Textarea.tsx
455
471
  function Textarea({ variant = "bordered", textareaSize = "md", className, ...rest }) {
456
472
  return /* @__PURE__ */ jsx("textarea", {
457
- className: clsx("textarea", `textarea-${variant}`, textareaSize !== "md" && `textarea-${textareaSize}`, className),
473
+ className: cn([
474
+ "textarea",
475
+ `textarea-${variant}`,
476
+ textareaSize !== "md" && `textarea-${textareaSize}`
477
+ ], className),
458
478
  ...rest
459
479
  });
460
480
  }
@@ -516,7 +536,11 @@ function Progress({ value, max = 100, variant = "primary", size = "md", classNam
516
536
  return /* @__PURE__ */ jsx("progress", {
517
537
  value,
518
538
  max,
519
- className: clsx("progress", variant !== "primary" && `progress-${variant}`, size !== "md" && `progress-${size}`, className),
539
+ className: cn([
540
+ "progress",
541
+ variant !== "primary" && `progress-${variant}`,
542
+ size !== "md" && `progress-${size}`
543
+ ], className),
520
544
  ...rest
521
545
  });
522
546
  }
@@ -525,7 +549,7 @@ function Progress({ value, max = 100, variant = "primary", size = "md", classNam
525
549
  function Spinner({ size = "md", label = "Loading", className, ...rest }) {
526
550
  return /* @__PURE__ */ jsx("output", {
527
551
  "aria-label": label,
528
- className: clsx("spinner", size !== "md" && `spinner-${size}`, className),
552
+ className: cn(["spinner", size !== "md" && `spinner-${size}`], className),
529
553
  ...rest
530
554
  });
531
555
  }
@@ -652,7 +676,11 @@ var Select = Object.assign(SelectRoot, {
652
676
  */
653
677
  function CardContainer({ bordered, compact, className, ...rest }) {
654
678
  return /* @__PURE__ */ jsx("div", {
655
- className: clsx("card", bordered && "card-bordered", compact && "card-compact", className),
679
+ className: cn([
680
+ "card",
681
+ bordered && "card-bordered",
682
+ compact && "card-compact"
683
+ ], className),
656
684
  ...rest
657
685
  });
658
686
  }
@@ -681,26 +709,26 @@ function CardRoot({ bordered, compact, icon, title, description, actions, classN
681
709
  }
682
710
  function CardBody({ className, ...rest }) {
683
711
  return /* @__PURE__ */ jsx("div", {
684
- className: clsx("card-body", className),
712
+ className: cn("card-body", className),
685
713
  ...rest
686
714
  });
687
715
  }
688
716
  function CardTitle({ icon, className, children, ...rest }) {
689
717
  return /* @__PURE__ */ jsxs("h3", {
690
- className: clsx("card-title", className),
718
+ className: cn("card-title", className),
691
719
  ...rest,
692
720
  children: [renderIcon(icon), children]
693
721
  });
694
722
  }
695
723
  function CardDescription({ className, ...rest }) {
696
724
  return /* @__PURE__ */ jsx("p", {
697
- className: clsx("card-description", className),
725
+ className: cn("card-description", className),
698
726
  ...rest
699
727
  });
700
728
  }
701
729
  function CardActions({ className, ...rest }) {
702
730
  return /* @__PURE__ */ jsx("div", {
703
- className: clsx("card-actions", className),
731
+ className: cn("card-actions", className),
704
732
  ...rest
705
733
  });
706
734
  }
@@ -754,7 +782,7 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
754
782
  value: { close: () => ref.current?.close() },
755
783
  children: /* @__PURE__ */ jsx("dialog", {
756
784
  ref,
757
- className: clsx("dialog", size !== "md" && `dialog-${size}`, className),
785
+ className: cn(["dialog", size !== "md" && `dialog-${size}`], className),
758
786
  closedby,
759
787
  ...rest,
760
788
  children
@@ -763,32 +791,32 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
763
791
  }
764
792
  function DialogHeader({ className, ...rest }) {
765
793
  return /* @__PURE__ */ jsx("div", {
766
- className: clsx("dialog-header", className),
794
+ className: cn("dialog-header", className),
767
795
  ...rest
768
796
  });
769
797
  }
770
798
  function DialogTitle({ icon, className, children, ...rest }) {
771
799
  return /* @__PURE__ */ jsxs("h2", {
772
- className: clsx("dialog-title", className),
800
+ className: cn("dialog-title", className),
773
801
  ...rest,
774
802
  children: [renderIcon(icon), children]
775
803
  });
776
804
  }
777
805
  function DialogDescription({ className, ...rest }) {
778
806
  return /* @__PURE__ */ jsx("p", {
779
- className: clsx("dialog-description", className),
807
+ className: cn("dialog-description", className),
780
808
  ...rest
781
809
  });
782
810
  }
783
811
  function DialogBody({ className, ...rest }) {
784
812
  return /* @__PURE__ */ jsx("div", {
785
- className: clsx("dialog-body", className),
813
+ className: cn("dialog-body", className),
786
814
  ...rest
787
815
  });
788
816
  }
789
817
  function DialogFooter({ className, ...rest }) {
790
818
  return /* @__PURE__ */ jsx("div", {
791
- className: clsx("dialog-footer", className),
819
+ className: cn("dialog-footer", className),
792
820
  ...rest
793
821
  });
794
822
  }
@@ -796,7 +824,7 @@ function DialogCloseButton({ icon, className, children, onClick, type = "button"
796
824
  const ctx = useContext(DialogContext);
797
825
  return /* @__PURE__ */ jsx("button", {
798
826
  type,
799
- className: clsx("dialog-close", className),
827
+ className: cn("dialog-close", className),
800
828
  "aria-label": ariaLabel,
801
829
  onClick: (event) => {
802
830
  onClick?.(event);
@@ -820,7 +848,7 @@ function DialogRoot({ icon, title, description, actions, dismissible = true, clo
820
848
  showHeader ? /* @__PURE__ */ jsxs(DialogHeader, { children: [hasTitle ? /* @__PURE__ */ jsx(DialogTitle, {
821
849
  icon,
822
850
  children: title
823
- }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }), dismissible ? /* @__PURE__ */ jsx(DialogCloseButton, { "aria-label": closeLabel }) : null] }) : null,
851
+ }) : /* @__PURE__ */ jsx("span", { className: cn("flex-1", void 0) }), dismissible ? /* @__PURE__ */ jsx(DialogCloseButton, { "aria-label": closeLabel }) : null] }) : null,
824
852
  description !== void 0 ? /* @__PURE__ */ jsx(DialogDescription, { children: description }) : null,
825
853
  children !== void 0 ? /* @__PURE__ */ jsx(DialogBody, { children }) : null,
826
854
  actions !== void 0 ? /* @__PURE__ */ jsx(DialogFooter, { children: actions }) : null
@@ -872,26 +900,26 @@ var Field = Object.assign(FieldRoot, {
872
900
  //#region src/Footer.tsx
873
901
  function FooterRoot({ className, ...rest }) {
874
902
  return /* @__PURE__ */ jsx("footer", {
875
- className: clsx("footer", className),
903
+ className: cn("footer", className),
876
904
  ...rest
877
905
  });
878
906
  }
879
907
  function FooterLinks({ className, ...rest }) {
880
908
  return /* @__PURE__ */ jsx("div", {
881
- className: clsx("footer-links", className),
909
+ className: cn("footer-links", className),
882
910
  ...rest
883
911
  });
884
912
  }
885
913
  function FooterLink({ className, children, ...rest }) {
886
914
  return /* @__PURE__ */ jsx("a", {
887
- className: clsx("footer-link", className),
915
+ className: cn("footer-link", className),
888
916
  ...rest,
889
917
  children
890
918
  });
891
919
  }
892
920
  function FooterMeta({ className, ...rest }) {
893
921
  return /* @__PURE__ */ jsx("div", {
894
- className: clsx("footer-meta", className),
922
+ className: cn("footer-meta", className),
895
923
  ...rest
896
924
  });
897
925
  }
@@ -904,20 +932,20 @@ var Footer = Object.assign(FooterRoot, {
904
932
  //#region src/Menu.tsx
905
933
  function MenuRoot({ className, ...rest }) {
906
934
  return /* @__PURE__ */ jsx("details", {
907
- className: clsx("menu", className),
935
+ className: cn("menu", className),
908
936
  ...rest
909
937
  });
910
938
  }
911
939
  function MenuTrigger({ className, ...rest }) {
912
940
  return /* @__PURE__ */ jsx("summary", {
913
- className: clsx("menu-trigger", className),
941
+ className: cn("menu-trigger", className),
914
942
  ...rest
915
943
  });
916
944
  }
917
945
  function MenuPopup({ className, role = "menu", ...rest }) {
918
946
  return /* @__PURE__ */ jsx("div", {
919
947
  role,
920
- className: clsx("menu-popup", className),
948
+ className: cn("menu-popup", className),
921
949
  ...rest
922
950
  });
923
951
  }
@@ -926,7 +954,7 @@ function MenuItem(props) {
926
954
  const { className, role = "menuitem", icon, children, ...rest } = props;
927
955
  return /* @__PURE__ */ jsxs("a", {
928
956
  role,
929
- className: clsx("menu-item", className),
957
+ className: cn("menu-item", className),
930
958
  ...rest,
931
959
  children: [renderIcon(icon), children]
932
960
  });
@@ -935,27 +963,27 @@ function MenuItem(props) {
935
963
  return /* @__PURE__ */ jsxs("button", {
936
964
  type,
937
965
  role,
938
- className: clsx("menu-item", className),
966
+ className: cn("menu-item", className),
939
967
  ...rest,
940
968
  children: [renderIcon(icon), children]
941
969
  });
942
970
  }
943
971
  function MenuSeparator({ className, ...rest }) {
944
972
  return /* @__PURE__ */ jsx("hr", {
945
- className: clsx("menu-separator", className),
973
+ className: cn("menu-separator", className),
946
974
  ...rest
947
975
  });
948
976
  }
949
977
  function MenuGroup({ className, role = "group", ...rest }) {
950
978
  return /* @__PURE__ */ jsx("div", {
951
979
  role,
952
- className: clsx("menu-group", className),
980
+ className: cn("menu-group", className),
953
981
  ...rest
954
982
  });
955
983
  }
956
984
  function MenuGroupLabel({ className, ...rest }) {
957
985
  return /* @__PURE__ */ jsx("div", {
958
- className: clsx("menu-group-label", className),
986
+ className: cn("menu-group-label", className),
959
987
  ...rest
960
988
  });
961
989
  }
@@ -971,25 +999,25 @@ var Menu = Object.assign(MenuRoot, {
971
999
  //#region src/Navbar.tsx
972
1000
  function NavbarRoot({ className, ...rest }) {
973
1001
  return /* @__PURE__ */ jsx("header", {
974
- className: clsx("navbar", className),
1002
+ className: cn("navbar", className),
975
1003
  ...rest
976
1004
  });
977
1005
  }
978
1006
  function NavbarBrand({ className, ...rest }) {
979
1007
  return /* @__PURE__ */ jsx("div", {
980
- className: clsx("navbar-brand", className),
1008
+ className: cn("navbar-brand", className),
981
1009
  ...rest
982
1010
  });
983
1011
  }
984
1012
  function NavbarItems({ className, ...rest }) {
985
1013
  return /* @__PURE__ */ jsx("nav", {
986
- className: clsx("navbar-items", className),
1014
+ className: cn("navbar-items", className),
987
1015
  ...rest
988
1016
  });
989
1017
  }
990
1018
  function NavbarItem({ active, icon, className, children, ...rest }) {
991
1019
  return /* @__PURE__ */ jsxs("a", {
992
- className: clsx("navbar-item", className),
1020
+ className: cn("navbar-item", className),
993
1021
  "aria-current": active ? "page" : void 0,
994
1022
  ...rest,
995
1023
  children: [renderIcon(icon), children]
@@ -1000,14 +1028,14 @@ function NavbarDropdown({ label, className, children, ...rest }) {
1000
1028
  className,
1001
1029
  ...rest,
1002
1030
  children: [/* @__PURE__ */ jsx(Menu.Trigger, {
1003
- className: "navbar-item",
1031
+ className: cn("navbar-item", void 0),
1004
1032
  children: label
1005
1033
  }), /* @__PURE__ */ jsx(Menu.Popup, { children })]
1006
1034
  });
1007
1035
  }
1008
1036
  function NavbarActions({ className, ...rest }) {
1009
1037
  return /* @__PURE__ */ jsx("div", {
1010
- className: clsx("navbar-actions", className),
1038
+ className: cn("navbar-actions", className),
1011
1039
  ...rest
1012
1040
  });
1013
1041
  }
@@ -1019,7 +1047,7 @@ function NavbarMobileToggle({ label = "Open menu", className, type = "button", .
1019
1047
  "aria-label": label,
1020
1048
  "aria-expanded": open,
1021
1049
  onClick: () => shell?.setMobileDrawerOpen(!open),
1022
- className: clsx("navbar-mobile-toggle", className),
1050
+ className: cn("navbar-mobile-toggle", className),
1023
1051
  ...rest
1024
1052
  });
1025
1053
  }
@@ -1120,38 +1148,44 @@ var Tooltip = Object.assign(TooltipShorthand, {
1120
1148
  //#region src/Table.tsx
1121
1149
  function TableRoot({ striped, bordered, relaxed, sticky, className, ...rest }) {
1122
1150
  return /* @__PURE__ */ jsx("table", {
1123
- className: clsx("table", striped && "table-striped", bordered && "table-bordered", relaxed && "table-relaxed", sticky && "table-sticky", className),
1151
+ className: cn([
1152
+ "table",
1153
+ striped && "table-striped",
1154
+ bordered && "table-bordered",
1155
+ relaxed && "table-relaxed",
1156
+ sticky && "table-sticky"
1157
+ ], className),
1124
1158
  ...rest
1125
1159
  });
1126
1160
  }
1127
1161
  function TableHead({ className, ...rest }) {
1128
1162
  return /* @__PURE__ */ jsx("thead", {
1129
- className: clsx(className),
1163
+ className,
1130
1164
  ...rest
1131
1165
  });
1132
1166
  }
1133
1167
  function TableBody({ className, ...rest }) {
1134
1168
  return /* @__PURE__ */ jsx("tbody", {
1135
- className: clsx(className),
1169
+ className,
1136
1170
  ...rest
1137
1171
  });
1138
1172
  }
1139
1173
  function TableFoot({ className, ...rest }) {
1140
1174
  return /* @__PURE__ */ jsx("tfoot", {
1141
- className: clsx(className),
1175
+ className,
1142
1176
  ...rest
1143
1177
  });
1144
1178
  }
1145
1179
  function TableRow({ selected, asLink, className, ...rest }) {
1146
1180
  return /* @__PURE__ */ jsx("tr", {
1147
- className: clsx(asLink && "table-row-link", className),
1181
+ className: cn(asLink && "table-row-link", className),
1148
1182
  "data-selected": selected || void 0,
1149
1183
  ...rest
1150
1184
  });
1151
1185
  }
1152
1186
  function TableHeaderCell({ align, gutter, className, scope, ...rest }) {
1153
1187
  return /* @__PURE__ */ jsx("th", {
1154
- className: clsx("table-header-cell", gutter && "table-cell-gutter", className),
1188
+ className: cn(["table-header-cell", gutter && "table-cell-gutter"], className),
1155
1189
  "data-align": align && align !== "left" ? align : void 0,
1156
1190
  scope: scope ?? "col",
1157
1191
  ...rest
@@ -1159,7 +1193,11 @@ function TableHeaderCell({ align, gutter, className, scope, ...rest }) {
1159
1193
  }
1160
1194
  function TableCell({ align, gutter, numeric, className, ...rest }) {
1161
1195
  return /* @__PURE__ */ jsx("td", {
1162
- className: clsx("table-cell", gutter && "table-cell-gutter", numeric && "table-cell-numeric", className),
1196
+ className: cn([
1197
+ "table-cell",
1198
+ gutter && "table-cell-gutter",
1199
+ numeric && "table-cell-numeric"
1200
+ ], className),
1163
1201
  "data-align": align && align !== "left" ? align : void 0,
1164
1202
  ...rest
1165
1203
  });
@@ -1185,14 +1223,14 @@ function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLab
1185
1223
  onCollapsedChange
1186
1224
  },
1187
1225
  children: [/* @__PURE__ */ jsx("aside", {
1188
- className: clsx("sidebar", className),
1226
+ className: cn("sidebar", className),
1189
1227
  ...rest,
1190
1228
  children: drawerOpen ? null : children
1191
1229
  }), shell ? /* @__PURE__ */ jsx(Dialog$1.Root, {
1192
1230
  open: drawerOpen,
1193
1231
  onOpenChange: (open) => shell.setMobileDrawerOpen(open),
1194
- children: /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [/* @__PURE__ */ jsx(Dialog$1.Backdrop, { className: "sidebar-drawer-backdrop" }), /* @__PURE__ */ jsx(Dialog$1.Popup, {
1195
- className: "sidebar-drawer",
1232
+ children: /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [/* @__PURE__ */ jsx(Dialog$1.Backdrop, { className: cn("sidebar-drawer-backdrop", void 0) }), /* @__PURE__ */ jsx(Dialog$1.Popup, {
1233
+ className: cn("sidebar-drawer", void 0),
1196
1234
  "aria-label": drawerLabel,
1197
1235
  onClick: (event) => {
1198
1236
  if (event.target.closest("a, [data-drawer-close]")) shell.setMobileDrawerOpen(false);
@@ -1204,31 +1242,31 @@ function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLab
1204
1242
  }
1205
1243
  function SidebarHeader({ className, ...rest }) {
1206
1244
  return /* @__PURE__ */ jsx("div", {
1207
- className: clsx("sidebar-header", className),
1245
+ className: cn("sidebar-header", className),
1208
1246
  ...rest
1209
1247
  });
1210
1248
  }
1211
1249
  function SidebarNav({ className, ...rest }) {
1212
1250
  return /* @__PURE__ */ jsx("nav", {
1213
- className: clsx("sidebar-nav", className),
1251
+ className: cn("sidebar-nav", className),
1214
1252
  ...rest
1215
1253
  });
1216
1254
  }
1217
1255
  function SidebarGroup({ className, ...rest }) {
1218
1256
  return /* @__PURE__ */ jsx("div", {
1219
- className: clsx("sidebar-group", className),
1257
+ className: cn("sidebar-group", className),
1220
1258
  ...rest
1221
1259
  });
1222
1260
  }
1223
1261
  function SidebarGroupLabel({ className, ...rest }) {
1224
1262
  return /* @__PURE__ */ jsx("div", {
1225
- className: clsx("sidebar-group-label", className),
1263
+ className: cn("sidebar-group-label", className),
1226
1264
  ...rest
1227
1265
  });
1228
1266
  }
1229
1267
  function SidebarItem({ active, icon, badge, className, children, ...rest }) {
1230
1268
  return /* @__PURE__ */ jsxs("a", {
1231
- className: clsx("sidebar-item", className),
1269
+ className: cn("sidebar-item", className),
1232
1270
  "aria-current": active ? "page" : void 0,
1233
1271
  ...rest,
1234
1272
  children: [
@@ -1241,19 +1279,19 @@ function SidebarItem({ active, icon, badge, className, children, ...rest }) {
1241
1279
  function SidebarIcon({ className, ...rest }) {
1242
1280
  return /* @__PURE__ */ jsx("span", {
1243
1281
  "aria-hidden": true,
1244
- className: clsx("sidebar-icon", className),
1282
+ className: cn("sidebar-icon", className),
1245
1283
  ...rest
1246
1284
  });
1247
1285
  }
1248
1286
  function SidebarLabel({ className, ...rest }) {
1249
1287
  return /* @__PURE__ */ jsx("span", {
1250
- className: clsx("sidebar-label", className),
1288
+ className: cn("sidebar-label", className),
1251
1289
  ...rest
1252
1290
  });
1253
1291
  }
1254
1292
  function SidebarBadge({ className, ...rest }) {
1255
1293
  return /* @__PURE__ */ jsx("span", {
1256
- className: clsx("sidebar-badge", className),
1294
+ className: cn("sidebar-badge", className),
1257
1295
  ...rest
1258
1296
  });
1259
1297
  }
@@ -1263,7 +1301,7 @@ function SidebarCollapsible({ icon, label, trigger, children, className, open, d
1263
1301
  const isOpen = isControlled ? open : internalOpen;
1264
1302
  const triggerContent = trigger ?? /* @__PURE__ */ jsxs(Fragment, { children: [icon != null ? /* @__PURE__ */ jsx(SidebarIcon, { children: renderIcon(icon) }) : null, label !== void 0 ? /* @__PURE__ */ jsx(SidebarLabel, { children: label }) : null] });
1265
1303
  return /* @__PURE__ */ jsxs("details", {
1266
- className: clsx("sidebar-collapsible", className),
1304
+ className: cn("sidebar-collapsible", className),
1267
1305
  open: isOpen,
1268
1306
  onToggle: (event) => {
1269
1307
  const next = event.currentTarget.open;
@@ -1272,17 +1310,17 @@ function SidebarCollapsible({ icon, label, trigger, children, className, open, d
1272
1310
  },
1273
1311
  ...rest,
1274
1312
  children: [/* @__PURE__ */ jsx("summary", {
1275
- className: "sidebar-collapsible-trigger",
1313
+ className: cn("sidebar-collapsible-trigger", void 0),
1276
1314
  children: triggerContent
1277
1315
  }), /* @__PURE__ */ jsx("div", {
1278
- className: "sidebar-collapsible-panel",
1316
+ className: cn("sidebar-collapsible-panel", void 0),
1279
1317
  children
1280
1318
  })]
1281
1319
  });
1282
1320
  }
1283
1321
  function SidebarSubItem({ active, icon, badge, className, children, ...rest }) {
1284
1322
  return /* @__PURE__ */ jsxs("a", {
1285
- className: clsx("sidebar-subitem", className),
1323
+ className: cn("sidebar-subitem", className),
1286
1324
  "aria-current": active ? "page" : void 0,
1287
1325
  ...rest,
1288
1326
  children: [
@@ -1294,7 +1332,7 @@ function SidebarSubItem({ active, icon, badge, className, children, ...rest }) {
1294
1332
  }
1295
1333
  function SidebarFooter({ className, ...rest }) {
1296
1334
  return /* @__PURE__ */ jsx("div", {
1297
- className: clsx("sidebar-footer", className),
1335
+ className: cn("sidebar-footer", className),
1298
1336
  ...rest
1299
1337
  });
1300
1338
  }
@@ -1303,18 +1341,18 @@ function SidebarCollapseToggle({ label = "Toggle sidebar", className, children,
1303
1341
  const controlledChecked = ctx?.collapsed;
1304
1342
  const isControlled = controlledChecked !== void 0;
1305
1343
  return /* @__PURE__ */ jsxs("label", {
1306
- className: clsx("sidebar-collapse-toggle", className),
1344
+ className: cn("sidebar-collapse-toggle", className),
1307
1345
  ...rest,
1308
1346
  children: [
1309
1347
  /* @__PURE__ */ jsx("input", {
1310
1348
  type: "checkbox",
1311
- className: "sidebar-toggle",
1349
+ className: cn("sidebar-toggle", void 0),
1312
1350
  "aria-label": label,
1313
1351
  ...isControlled ? { checked: controlledChecked } : { defaultChecked: ctx?.defaultCollapsed },
1314
1352
  onChange: (event) => ctx?.onCollapsedChange?.(event.currentTarget.checked)
1315
1353
  }),
1316
1354
  /* @__PURE__ */ jsx("span", {
1317
- className: "sr-only",
1355
+ className: cn("sr-only", void 0),
1318
1356
  children: label
1319
1357
  }),
1320
1358
  children