@aortl/admin-react 0.3.0 → 0.5.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
  }
@@ -44,10 +65,16 @@ var Accordion = Object.assign(AccordionRoot, {
44
65
  });
45
66
  //#endregion
46
67
  //#region src/AdminRoot.tsx
47
- function AdminRoot({ className, ...rest }) {
68
+ function AdminRoot({ className, theme, systemAccent, style, ...rest }) {
69
+ const rootStyle = systemAccent !== void 0 ? {
70
+ ...style,
71
+ "--color-system-accent": systemAccent
72
+ } : style;
48
73
  return /* @__PURE__ */ jsx("div", {
49
- className: clsx("admin-root", className),
50
- ...rest
74
+ className: cn("admin-root", className),
75
+ style: rootStyle,
76
+ ...rest,
77
+ ...theme !== void 0 && { "data-theme": theme }
51
78
  });
52
79
  }
53
80
  //#endregion
@@ -73,7 +100,7 @@ function renderIcon(icon, size = 16) {
73
100
  function AlertRoot({ variant = "info", icon, title, description, className, role, children, ...rest }) {
74
101
  return /* @__PURE__ */ jsxs("div", {
75
102
  role: role ?? (variant === "danger" || variant === "warning" ? "alert" : "status"),
76
- className: clsx("alert", `alert-${variant}`, className),
103
+ className: cn(["alert", `alert-${variant}`], className),
77
104
  ...rest,
78
105
  children: [
79
106
  renderIcon(icon),
@@ -85,13 +112,13 @@ function AlertRoot({ variant = "info", icon, title, description, className, role
85
112
  }
86
113
  function AlertTitle({ className, ...rest }) {
87
114
  return /* @__PURE__ */ jsx("strong", {
88
- className: clsx("alert-title", className),
115
+ className: cn("alert-title", className),
89
116
  ...rest
90
117
  });
91
118
  }
92
119
  function AlertDescription({ className, ...rest }) {
93
120
  return /* @__PURE__ */ jsx("p", {
94
- className: clsx("alert-description", className),
121
+ className: cn("alert-description", className),
95
122
  ...rest
96
123
  });
97
124
  }
@@ -129,7 +156,11 @@ function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen,
129
156
  return /* @__PURE__ */ jsx(AppShellContext.Provider, {
130
157
  value,
131
158
  children: /* @__PURE__ */ jsx("div", {
132
- className: clsx("app-shell", hasSidebar && "app-shell-with-sidebar", hasFooter && "app-shell-with-footer", className),
159
+ className: cn([
160
+ "app-shell",
161
+ hasSidebar && "app-shell-with-sidebar",
162
+ hasFooter && "app-shell-with-footer"
163
+ ], className),
133
164
  style: rootStyle,
134
165
  ...rest,
135
166
  children
@@ -138,7 +169,7 @@ function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen,
138
169
  }
139
170
  function AppShellMain({ className, ...rest }) {
140
171
  return /* @__PURE__ */ jsx("main", {
141
- className: clsx("app-shell-main", className),
172
+ className: cn("app-shell-main", className),
142
173
  ...rest
143
174
  });
144
175
  }
@@ -147,7 +178,11 @@ var AppShell = Object.assign(AppShellRoot, { Main: AppShellMain });
147
178
  //#region src/Badge.tsx
148
179
  function Badge({ variant = "neutral", size = "md", icon, className, children, ...rest }) {
149
180
  return /* @__PURE__ */ jsxs("span", {
150
- className: clsx("badge", `badge-${variant}`, size !== "md" && `badge-${size}`, className),
181
+ className: cn([
182
+ "badge",
183
+ `badge-${variant}`,
184
+ size !== "md" && `badge-${size}`
185
+ ], className),
151
186
  ...rest,
152
187
  children: [renderIcon(icon, size === "sm" ? 10 : 12), children]
153
188
  });
@@ -156,26 +191,13 @@ function Badge({ variant = "neutral", size = "md", icon, className, children, ..
156
191
  //#region src/BrandTile.tsx
157
192
  function BrandTile({ monogram, icon, className, children, ...rest }) {
158
193
  return /* @__PURE__ */ jsx("span", {
159
- className: clsx("brand-tile", className),
194
+ className: cn("brand-tile", className),
160
195
  "aria-hidden": true,
161
196
  ...rest,
162
197
  children: icon ? renderIcon(icon, 14) : children ?? monogram
163
198
  });
164
199
  }
165
200
  //#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
201
  //#region src/Button.tsx
180
202
  function Button({ variant = "primary", size = "md", fullWidth, loading, icon, iconTrailing, className, type = "button", disabled, children, ...rest }) {
181
203
  const iconOnly = children == null && (icon != null || iconTrailing != null);
@@ -204,7 +226,7 @@ function Button({ variant = "primary", size = "md", fullWidth, loading, icon, ic
204
226
  function ButtonGroup({ orientation = "horizontal", role = "group", className, ...rest }) {
205
227
  return /* @__PURE__ */ jsx("div", {
206
228
  role,
207
- className: clsx("btn-group", orientation === "vertical" && "btn-group-vertical", className),
229
+ className: cn(["btn-group", orientation === "vertical" && "btn-group-vertical"], className),
208
230
  ...rest
209
231
  });
210
232
  }
@@ -214,7 +236,7 @@ function BreadcrumbsRoot({ separator, className, children, "aria-label": ariaLab
214
236
  const items = Children.toArray(children).filter(isValidElement);
215
237
  return /* @__PURE__ */ jsx("nav", {
216
238
  "aria-label": ariaLabel,
217
- className: clsx("breadcrumbs", className),
239
+ className: cn("breadcrumbs", className),
218
240
  ...rest,
219
241
  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
242
  });
@@ -223,7 +245,7 @@ function BreadcrumbItem(props) {
223
245
  if (props.href !== void 0) {
224
246
  const { className, current, icon, children, ...rest } = props;
225
247
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("a", {
226
- className: clsx("breadcrumb-item", className),
248
+ className: cn("breadcrumb-item", className),
227
249
  "aria-current": current ? "page" : void 0,
228
250
  ...rest,
229
251
  children: [renderIcon(icon, 14), children]
@@ -231,7 +253,7 @@ function BreadcrumbItem(props) {
231
253
  }
232
254
  const { className, current, icon, children, ...rest } = props;
233
255
  return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", {
234
- className: clsx("breadcrumb-item", className),
256
+ className: cn("breadcrumb-item", className),
235
257
  "aria-current": current ? "page" : void 0,
236
258
  ...rest,
237
259
  children: [renderIcon(icon, 14), children]
@@ -240,7 +262,7 @@ function BreadcrumbItem(props) {
240
262
  function BreadcrumbSeparator({ className, children, ...rest }) {
241
263
  return /* @__PURE__ */ jsx("span", {
242
264
  "aria-hidden": "true",
243
- className: clsx("breadcrumb-separator", className),
265
+ className: cn("breadcrumb-separator", className),
244
266
  ...rest,
245
267
  children
246
268
  });
@@ -279,13 +301,13 @@ function FileInput({ variant = "bordered", inputSize = "md", className, ...rest
279
301
  //#region src/InputGroup.tsx
280
302
  function InputGroupRoot({ className, ...rest }) {
281
303
  return /* @__PURE__ */ jsx("div", {
282
- className: clsx("input-group", className),
304
+ className: cn("input-group", className),
283
305
  ...rest
284
306
  });
285
307
  }
286
308
  function InputGroupAddon({ className, ...rest }) {
287
309
  return /* @__PURE__ */ jsx("span", {
288
- className: clsx("input-group-addon", className),
310
+ className: cn("input-group-addon", className),
289
311
  ...rest
290
312
  });
291
313
  }
@@ -370,10 +392,10 @@ function Pagination({ page, total, onPageChange, siblingCount = 1, boundaryCount
370
392
  const next = nextIcon !== void 0 ? renderIcon(nextIcon, 16) : /* @__PURE__ */ jsx(ChevronRightIcon, {});
371
393
  return /* @__PURE__ */ jsx("nav", {
372
394
  "aria-label": ariaLabel,
373
- className: clsx("pagination", className),
395
+ className: cn("pagination", className),
374
396
  ...rest,
375
397
  children: /* @__PURE__ */ jsx("ul", { children: items.map((item, i) => /* @__PURE__ */ jsx("li", {
376
- className: "page-item",
398
+ className: cn("page-item", void 0),
377
399
  children: renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next)
378
400
  }, paginationItemKey(item, i))) })
379
401
  });
@@ -419,7 +441,7 @@ function defaultRender(item, onPageChange, prev, next) {
419
441
  switch (item.type) {
420
442
  case "previous": return /* @__PURE__ */ jsx("button", {
421
443
  type: "button",
422
- className: "page-link",
444
+ className: cn("page-link", void 0),
423
445
  "aria-label": "Previous page",
424
446
  "aria-disabled": item.disabled || void 0,
425
447
  disabled: item.disabled,
@@ -428,7 +450,7 @@ function defaultRender(item, onPageChange, prev, next) {
428
450
  });
429
451
  case "next": return /* @__PURE__ */ jsx("button", {
430
452
  type: "button",
431
- className: "page-link",
453
+ className: cn("page-link", void 0),
432
454
  "aria-label": "Next page",
433
455
  "aria-disabled": item.disabled || void 0,
434
456
  disabled: item.disabled,
@@ -436,13 +458,13 @@ function defaultRender(item, onPageChange, prev, next) {
436
458
  children: next
437
459
  });
438
460
  case "ellipsis": return /* @__PURE__ */ jsx("span", {
439
- className: "page-ellipsis",
461
+ className: cn("page-ellipsis", void 0),
440
462
  "aria-hidden": "true",
441
463
  children: "…"
442
464
  });
443
465
  case "page": return /* @__PURE__ */ jsx("button", {
444
466
  type: "button",
445
- className: clsx("page-link", item.selected && "active"),
467
+ className: cn(["page-link", item.selected && "active"], void 0),
446
468
  "aria-current": item.selected ? "page" : void 0,
447
469
  "aria-label": `Page ${item.page}`,
448
470
  onClick: () => onPageChange(item.page),
@@ -454,7 +476,11 @@ function defaultRender(item, onPageChange, prev, next) {
454
476
  //#region src/Textarea.tsx
455
477
  function Textarea({ variant = "bordered", textareaSize = "md", className, ...rest }) {
456
478
  return /* @__PURE__ */ jsx("textarea", {
457
- className: clsx("textarea", `textarea-${variant}`, textareaSize !== "md" && `textarea-${textareaSize}`, className),
479
+ className: cn([
480
+ "textarea",
481
+ `textarea-${variant}`,
482
+ textareaSize !== "md" && `textarea-${textareaSize}`
483
+ ], className),
458
484
  ...rest
459
485
  });
460
486
  }
@@ -516,7 +542,11 @@ function Progress({ value, max = 100, variant = "primary", size = "md", classNam
516
542
  return /* @__PURE__ */ jsx("progress", {
517
543
  value,
518
544
  max,
519
- className: clsx("progress", variant !== "primary" && `progress-${variant}`, size !== "md" && `progress-${size}`, className),
545
+ className: cn([
546
+ "progress",
547
+ variant !== "primary" && `progress-${variant}`,
548
+ size !== "md" && `progress-${size}`
549
+ ], className),
520
550
  ...rest
521
551
  });
522
552
  }
@@ -525,7 +555,7 @@ function Progress({ value, max = 100, variant = "primary", size = "md", classNam
525
555
  function Spinner({ size = "md", label = "Loading", className, ...rest }) {
526
556
  return /* @__PURE__ */ jsx("output", {
527
557
  "aria-label": label,
528
- className: clsx("spinner", size !== "md" && `spinner-${size}`, className),
558
+ className: cn(["spinner", size !== "md" && `spinner-${size}`], className),
529
559
  ...rest
530
560
  });
531
561
  }
@@ -652,7 +682,11 @@ var Select = Object.assign(SelectRoot, {
652
682
  */
653
683
  function CardContainer({ bordered, compact, className, ...rest }) {
654
684
  return /* @__PURE__ */ jsx("div", {
655
- className: clsx("card", bordered && "card-bordered", compact && "card-compact", className),
685
+ className: cn([
686
+ "card",
687
+ bordered && "card-bordered",
688
+ compact && "card-compact"
689
+ ], className),
656
690
  ...rest
657
691
  });
658
692
  }
@@ -681,26 +715,26 @@ function CardRoot({ bordered, compact, icon, title, description, actions, classN
681
715
  }
682
716
  function CardBody({ className, ...rest }) {
683
717
  return /* @__PURE__ */ jsx("div", {
684
- className: clsx("card-body", className),
718
+ className: cn("card-body", className),
685
719
  ...rest
686
720
  });
687
721
  }
688
722
  function CardTitle({ icon, className, children, ...rest }) {
689
723
  return /* @__PURE__ */ jsxs("h3", {
690
- className: clsx("card-title", className),
724
+ className: cn("card-title", className),
691
725
  ...rest,
692
726
  children: [renderIcon(icon), children]
693
727
  });
694
728
  }
695
729
  function CardDescription({ className, ...rest }) {
696
730
  return /* @__PURE__ */ jsx("p", {
697
- className: clsx("card-description", className),
731
+ className: cn("card-description", className),
698
732
  ...rest
699
733
  });
700
734
  }
701
735
  function CardActions({ className, ...rest }) {
702
736
  return /* @__PURE__ */ jsx("div", {
703
- className: clsx("card-actions", className),
737
+ className: cn("card-actions", className),
704
738
  ...rest
705
739
  });
706
740
  }
@@ -754,7 +788,7 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
754
788
  value: { close: () => ref.current?.close() },
755
789
  children: /* @__PURE__ */ jsx("dialog", {
756
790
  ref,
757
- className: clsx("dialog", size !== "md" && `dialog-${size}`, className),
791
+ className: cn(["dialog", size !== "md" && `dialog-${size}`], className),
758
792
  closedby,
759
793
  ...rest,
760
794
  children
@@ -763,32 +797,32 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
763
797
  }
764
798
  function DialogHeader({ className, ...rest }) {
765
799
  return /* @__PURE__ */ jsx("div", {
766
- className: clsx("dialog-header", className),
800
+ className: cn("dialog-header", className),
767
801
  ...rest
768
802
  });
769
803
  }
770
804
  function DialogTitle({ icon, className, children, ...rest }) {
771
805
  return /* @__PURE__ */ jsxs("h2", {
772
- className: clsx("dialog-title", className),
806
+ className: cn("dialog-title", className),
773
807
  ...rest,
774
808
  children: [renderIcon(icon), children]
775
809
  });
776
810
  }
777
811
  function DialogDescription({ className, ...rest }) {
778
812
  return /* @__PURE__ */ jsx("p", {
779
- className: clsx("dialog-description", className),
813
+ className: cn("dialog-description", className),
780
814
  ...rest
781
815
  });
782
816
  }
783
817
  function DialogBody({ className, ...rest }) {
784
818
  return /* @__PURE__ */ jsx("div", {
785
- className: clsx("dialog-body", className),
819
+ className: cn("dialog-body", className),
786
820
  ...rest
787
821
  });
788
822
  }
789
823
  function DialogFooter({ className, ...rest }) {
790
824
  return /* @__PURE__ */ jsx("div", {
791
- className: clsx("dialog-footer", className),
825
+ className: cn("dialog-footer", className),
792
826
  ...rest
793
827
  });
794
828
  }
@@ -796,7 +830,7 @@ function DialogCloseButton({ icon, className, children, onClick, type = "button"
796
830
  const ctx = useContext(DialogContext);
797
831
  return /* @__PURE__ */ jsx("button", {
798
832
  type,
799
- className: clsx("dialog-close", className),
833
+ className: cn("dialog-close", className),
800
834
  "aria-label": ariaLabel,
801
835
  onClick: (event) => {
802
836
  onClick?.(event);
@@ -820,7 +854,7 @@ function DialogRoot({ icon, title, description, actions, dismissible = true, clo
820
854
  showHeader ? /* @__PURE__ */ jsxs(DialogHeader, { children: [hasTitle ? /* @__PURE__ */ jsx(DialogTitle, {
821
855
  icon,
822
856
  children: title
823
- }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }), dismissible ? /* @__PURE__ */ jsx(DialogCloseButton, { "aria-label": closeLabel }) : null] }) : null,
857
+ }) : /* @__PURE__ */ jsx("span", { className: cn("flex-1", void 0) }), dismissible ? /* @__PURE__ */ jsx(DialogCloseButton, { "aria-label": closeLabel }) : null] }) : null,
824
858
  description !== void 0 ? /* @__PURE__ */ jsx(DialogDescription, { children: description }) : null,
825
859
  children !== void 0 ? /* @__PURE__ */ jsx(DialogBody, { children }) : null,
826
860
  actions !== void 0 ? /* @__PURE__ */ jsx(DialogFooter, { children: actions }) : null
@@ -872,26 +906,26 @@ var Field = Object.assign(FieldRoot, {
872
906
  //#region src/Footer.tsx
873
907
  function FooterRoot({ className, ...rest }) {
874
908
  return /* @__PURE__ */ jsx("footer", {
875
- className: clsx("footer", className),
909
+ className: cn("footer", className),
876
910
  ...rest
877
911
  });
878
912
  }
879
913
  function FooterLinks({ className, ...rest }) {
880
914
  return /* @__PURE__ */ jsx("div", {
881
- className: clsx("footer-links", className),
915
+ className: cn("footer-links", className),
882
916
  ...rest
883
917
  });
884
918
  }
885
919
  function FooterLink({ className, children, ...rest }) {
886
920
  return /* @__PURE__ */ jsx("a", {
887
- className: clsx("footer-link", className),
921
+ className: cn("footer-link", className),
888
922
  ...rest,
889
923
  children
890
924
  });
891
925
  }
892
926
  function FooterMeta({ className, ...rest }) {
893
927
  return /* @__PURE__ */ jsx("div", {
894
- className: clsx("footer-meta", className),
928
+ className: cn("footer-meta", className),
895
929
  ...rest
896
930
  });
897
931
  }
@@ -904,20 +938,20 @@ var Footer = Object.assign(FooterRoot, {
904
938
  //#region src/Menu.tsx
905
939
  function MenuRoot({ className, ...rest }) {
906
940
  return /* @__PURE__ */ jsx("details", {
907
- className: clsx("menu", className),
941
+ className: cn("menu", className),
908
942
  ...rest
909
943
  });
910
944
  }
911
945
  function MenuTrigger({ className, ...rest }) {
912
946
  return /* @__PURE__ */ jsx("summary", {
913
- className: clsx("menu-trigger", className),
947
+ className: cn("menu-trigger", className),
914
948
  ...rest
915
949
  });
916
950
  }
917
951
  function MenuPopup({ className, role = "menu", ...rest }) {
918
952
  return /* @__PURE__ */ jsx("div", {
919
953
  role,
920
- className: clsx("menu-popup", className),
954
+ className: cn("menu-popup", className),
921
955
  ...rest
922
956
  });
923
957
  }
@@ -926,7 +960,7 @@ function MenuItem(props) {
926
960
  const { className, role = "menuitem", icon, children, ...rest } = props;
927
961
  return /* @__PURE__ */ jsxs("a", {
928
962
  role,
929
- className: clsx("menu-item", className),
963
+ className: cn("menu-item", className),
930
964
  ...rest,
931
965
  children: [renderIcon(icon), children]
932
966
  });
@@ -935,27 +969,27 @@ function MenuItem(props) {
935
969
  return /* @__PURE__ */ jsxs("button", {
936
970
  type,
937
971
  role,
938
- className: clsx("menu-item", className),
972
+ className: cn("menu-item", className),
939
973
  ...rest,
940
974
  children: [renderIcon(icon), children]
941
975
  });
942
976
  }
943
977
  function MenuSeparator({ className, ...rest }) {
944
978
  return /* @__PURE__ */ jsx("hr", {
945
- className: clsx("menu-separator", className),
979
+ className: cn("menu-separator", className),
946
980
  ...rest
947
981
  });
948
982
  }
949
983
  function MenuGroup({ className, role = "group", ...rest }) {
950
984
  return /* @__PURE__ */ jsx("div", {
951
985
  role,
952
- className: clsx("menu-group", className),
986
+ className: cn("menu-group", className),
953
987
  ...rest
954
988
  });
955
989
  }
956
990
  function MenuGroupLabel({ className, ...rest }) {
957
991
  return /* @__PURE__ */ jsx("div", {
958
- className: clsx("menu-group-label", className),
992
+ className: cn("menu-group-label", className),
959
993
  ...rest
960
994
  });
961
995
  }
@@ -971,25 +1005,25 @@ var Menu = Object.assign(MenuRoot, {
971
1005
  //#region src/Navbar.tsx
972
1006
  function NavbarRoot({ className, ...rest }) {
973
1007
  return /* @__PURE__ */ jsx("header", {
974
- className: clsx("navbar", className),
1008
+ className: cn("navbar", className),
975
1009
  ...rest
976
1010
  });
977
1011
  }
978
1012
  function NavbarBrand({ className, ...rest }) {
979
1013
  return /* @__PURE__ */ jsx("div", {
980
- className: clsx("navbar-brand", className),
1014
+ className: cn("navbar-brand", className),
981
1015
  ...rest
982
1016
  });
983
1017
  }
984
1018
  function NavbarItems({ className, ...rest }) {
985
1019
  return /* @__PURE__ */ jsx("nav", {
986
- className: clsx("navbar-items", className),
1020
+ className: cn("navbar-items", className),
987
1021
  ...rest
988
1022
  });
989
1023
  }
990
1024
  function NavbarItem({ active, icon, className, children, ...rest }) {
991
1025
  return /* @__PURE__ */ jsxs("a", {
992
- className: clsx("navbar-item", className),
1026
+ className: cn("navbar-item", className),
993
1027
  "aria-current": active ? "page" : void 0,
994
1028
  ...rest,
995
1029
  children: [renderIcon(icon), children]
@@ -1000,14 +1034,14 @@ function NavbarDropdown({ label, className, children, ...rest }) {
1000
1034
  className,
1001
1035
  ...rest,
1002
1036
  children: [/* @__PURE__ */ jsx(Menu.Trigger, {
1003
- className: "navbar-item",
1037
+ className: cn("navbar-item", void 0),
1004
1038
  children: label
1005
1039
  }), /* @__PURE__ */ jsx(Menu.Popup, { children })]
1006
1040
  });
1007
1041
  }
1008
1042
  function NavbarActions({ className, ...rest }) {
1009
1043
  return /* @__PURE__ */ jsx("div", {
1010
- className: clsx("navbar-actions", className),
1044
+ className: cn("navbar-actions", className),
1011
1045
  ...rest
1012
1046
  });
1013
1047
  }
@@ -1019,7 +1053,7 @@ function NavbarMobileToggle({ label = "Open menu", className, type = "button", .
1019
1053
  "aria-label": label,
1020
1054
  "aria-expanded": open,
1021
1055
  onClick: () => shell?.setMobileDrawerOpen(!open),
1022
- className: clsx("navbar-mobile-toggle", className),
1056
+ className: cn("navbar-mobile-toggle", className),
1023
1057
  ...rest
1024
1058
  });
1025
1059
  }
@@ -1120,38 +1154,44 @@ var Tooltip = Object.assign(TooltipShorthand, {
1120
1154
  //#region src/Table.tsx
1121
1155
  function TableRoot({ striped, bordered, relaxed, sticky, className, ...rest }) {
1122
1156
  return /* @__PURE__ */ jsx("table", {
1123
- className: clsx("table", striped && "table-striped", bordered && "table-bordered", relaxed && "table-relaxed", sticky && "table-sticky", className),
1157
+ className: cn([
1158
+ "table",
1159
+ striped && "table-striped",
1160
+ bordered && "table-bordered",
1161
+ relaxed && "table-relaxed",
1162
+ sticky && "table-sticky"
1163
+ ], className),
1124
1164
  ...rest
1125
1165
  });
1126
1166
  }
1127
1167
  function TableHead({ className, ...rest }) {
1128
1168
  return /* @__PURE__ */ jsx("thead", {
1129
- className: clsx(className),
1169
+ className,
1130
1170
  ...rest
1131
1171
  });
1132
1172
  }
1133
1173
  function TableBody({ className, ...rest }) {
1134
1174
  return /* @__PURE__ */ jsx("tbody", {
1135
- className: clsx(className),
1175
+ className,
1136
1176
  ...rest
1137
1177
  });
1138
1178
  }
1139
1179
  function TableFoot({ className, ...rest }) {
1140
1180
  return /* @__PURE__ */ jsx("tfoot", {
1141
- className: clsx(className),
1181
+ className,
1142
1182
  ...rest
1143
1183
  });
1144
1184
  }
1145
1185
  function TableRow({ selected, asLink, className, ...rest }) {
1146
1186
  return /* @__PURE__ */ jsx("tr", {
1147
- className: clsx(asLink && "table-row-link", className),
1187
+ className: cn(asLink && "table-row-link", className),
1148
1188
  "data-selected": selected || void 0,
1149
1189
  ...rest
1150
1190
  });
1151
1191
  }
1152
1192
  function TableHeaderCell({ align, gutter, className, scope, ...rest }) {
1153
1193
  return /* @__PURE__ */ jsx("th", {
1154
- className: clsx("table-header-cell", gutter && "table-cell-gutter", className),
1194
+ className: cn(["table-header-cell", gutter && "table-cell-gutter"], className),
1155
1195
  "data-align": align && align !== "left" ? align : void 0,
1156
1196
  scope: scope ?? "col",
1157
1197
  ...rest
@@ -1159,7 +1199,11 @@ function TableHeaderCell({ align, gutter, className, scope, ...rest }) {
1159
1199
  }
1160
1200
  function TableCell({ align, gutter, numeric, className, ...rest }) {
1161
1201
  return /* @__PURE__ */ jsx("td", {
1162
- className: clsx("table-cell", gutter && "table-cell-gutter", numeric && "table-cell-numeric", className),
1202
+ className: cn([
1203
+ "table-cell",
1204
+ gutter && "table-cell-gutter",
1205
+ numeric && "table-cell-numeric"
1206
+ ], className),
1163
1207
  "data-align": align && align !== "left" ? align : void 0,
1164
1208
  ...rest
1165
1209
  });
@@ -1185,14 +1229,14 @@ function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLab
1185
1229
  onCollapsedChange
1186
1230
  },
1187
1231
  children: [/* @__PURE__ */ jsx("aside", {
1188
- className: clsx("sidebar", className),
1232
+ className: cn("sidebar", className),
1189
1233
  ...rest,
1190
1234
  children: drawerOpen ? null : children
1191
1235
  }), shell ? /* @__PURE__ */ jsx(Dialog$1.Root, {
1192
1236
  open: drawerOpen,
1193
1237
  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",
1238
+ children: /* @__PURE__ */ jsxs(Dialog$1.Portal, { children: [/* @__PURE__ */ jsx(Dialog$1.Backdrop, { className: cn("sidebar-drawer-backdrop", void 0) }), /* @__PURE__ */ jsx(Dialog$1.Popup, {
1239
+ className: cn("sidebar-drawer", void 0),
1196
1240
  "aria-label": drawerLabel,
1197
1241
  onClick: (event) => {
1198
1242
  if (event.target.closest("a, [data-drawer-close]")) shell.setMobileDrawerOpen(false);
@@ -1204,31 +1248,31 @@ function SidebarRoot({ collapsed, defaultCollapsed, onCollapsedChange, drawerLab
1204
1248
  }
1205
1249
  function SidebarHeader({ className, ...rest }) {
1206
1250
  return /* @__PURE__ */ jsx("div", {
1207
- className: clsx("sidebar-header", className),
1251
+ className: cn("sidebar-header", className),
1208
1252
  ...rest
1209
1253
  });
1210
1254
  }
1211
1255
  function SidebarNav({ className, ...rest }) {
1212
1256
  return /* @__PURE__ */ jsx("nav", {
1213
- className: clsx("sidebar-nav", className),
1257
+ className: cn("sidebar-nav", className),
1214
1258
  ...rest
1215
1259
  });
1216
1260
  }
1217
1261
  function SidebarGroup({ className, ...rest }) {
1218
1262
  return /* @__PURE__ */ jsx("div", {
1219
- className: clsx("sidebar-group", className),
1263
+ className: cn("sidebar-group", className),
1220
1264
  ...rest
1221
1265
  });
1222
1266
  }
1223
1267
  function SidebarGroupLabel({ className, ...rest }) {
1224
1268
  return /* @__PURE__ */ jsx("div", {
1225
- className: clsx("sidebar-group-label", className),
1269
+ className: cn("sidebar-group-label", className),
1226
1270
  ...rest
1227
1271
  });
1228
1272
  }
1229
1273
  function SidebarItem({ active, icon, badge, className, children, ...rest }) {
1230
1274
  return /* @__PURE__ */ jsxs("a", {
1231
- className: clsx("sidebar-item", className),
1275
+ className: cn("sidebar-item", className),
1232
1276
  "aria-current": active ? "page" : void 0,
1233
1277
  ...rest,
1234
1278
  children: [
@@ -1241,19 +1285,19 @@ function SidebarItem({ active, icon, badge, className, children, ...rest }) {
1241
1285
  function SidebarIcon({ className, ...rest }) {
1242
1286
  return /* @__PURE__ */ jsx("span", {
1243
1287
  "aria-hidden": true,
1244
- className: clsx("sidebar-icon", className),
1288
+ className: cn("sidebar-icon", className),
1245
1289
  ...rest
1246
1290
  });
1247
1291
  }
1248
1292
  function SidebarLabel({ className, ...rest }) {
1249
1293
  return /* @__PURE__ */ jsx("span", {
1250
- className: clsx("sidebar-label", className),
1294
+ className: cn("sidebar-label", className),
1251
1295
  ...rest
1252
1296
  });
1253
1297
  }
1254
1298
  function SidebarBadge({ className, ...rest }) {
1255
1299
  return /* @__PURE__ */ jsx("span", {
1256
- className: clsx("sidebar-badge", className),
1300
+ className: cn("sidebar-badge", className),
1257
1301
  ...rest
1258
1302
  });
1259
1303
  }
@@ -1263,7 +1307,7 @@ function SidebarCollapsible({ icon, label, trigger, children, className, open, d
1263
1307
  const isOpen = isControlled ? open : internalOpen;
1264
1308
  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
1309
  return /* @__PURE__ */ jsxs("details", {
1266
- className: clsx("sidebar-collapsible", className),
1310
+ className: cn("sidebar-collapsible", className),
1267
1311
  open: isOpen,
1268
1312
  onToggle: (event) => {
1269
1313
  const next = event.currentTarget.open;
@@ -1272,17 +1316,17 @@ function SidebarCollapsible({ icon, label, trigger, children, className, open, d
1272
1316
  },
1273
1317
  ...rest,
1274
1318
  children: [/* @__PURE__ */ jsx("summary", {
1275
- className: "sidebar-collapsible-trigger",
1319
+ className: cn("sidebar-collapsible-trigger", void 0),
1276
1320
  children: triggerContent
1277
1321
  }), /* @__PURE__ */ jsx("div", {
1278
- className: "sidebar-collapsible-panel",
1322
+ className: cn("sidebar-collapsible-panel", void 0),
1279
1323
  children
1280
1324
  })]
1281
1325
  });
1282
1326
  }
1283
1327
  function SidebarSubItem({ active, icon, badge, className, children, ...rest }) {
1284
1328
  return /* @__PURE__ */ jsxs("a", {
1285
- className: clsx("sidebar-subitem", className),
1329
+ className: cn("sidebar-subitem", className),
1286
1330
  "aria-current": active ? "page" : void 0,
1287
1331
  ...rest,
1288
1332
  children: [
@@ -1294,7 +1338,7 @@ function SidebarSubItem({ active, icon, badge, className, children, ...rest }) {
1294
1338
  }
1295
1339
  function SidebarFooter({ className, ...rest }) {
1296
1340
  return /* @__PURE__ */ jsx("div", {
1297
- className: clsx("sidebar-footer", className),
1341
+ className: cn("sidebar-footer", className),
1298
1342
  ...rest
1299
1343
  });
1300
1344
  }
@@ -1303,18 +1347,18 @@ function SidebarCollapseToggle({ label = "Toggle sidebar", className, children,
1303
1347
  const controlledChecked = ctx?.collapsed;
1304
1348
  const isControlled = controlledChecked !== void 0;
1305
1349
  return /* @__PURE__ */ jsxs("label", {
1306
- className: clsx("sidebar-collapse-toggle", className),
1350
+ className: cn("sidebar-collapse-toggle", className),
1307
1351
  ...rest,
1308
1352
  children: [
1309
1353
  /* @__PURE__ */ jsx("input", {
1310
1354
  type: "checkbox",
1311
- className: "sidebar-toggle",
1355
+ className: cn("sidebar-toggle", void 0),
1312
1356
  "aria-label": label,
1313
1357
  ...isControlled ? { checked: controlledChecked } : { defaultChecked: ctx?.defaultCollapsed },
1314
1358
  onChange: (event) => ctx?.onCollapsedChange?.(event.currentTarget.checked)
1315
1359
  }),
1316
1360
  /* @__PURE__ */ jsx("span", {
1317
- className: "sr-only",
1361
+ className: cn("sr-only", void 0),
1318
1362
  children: label
1319
1363
  }),
1320
1364
  children