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