@snksergio/design-system 0.32.1 → 0.34.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.
Files changed (58) hide show
  1. package/dist-lib/chunks/{input-BjUSWce3.cjs → input-CizzMZ20.cjs} +3 -3
  2. package/dist-lib/chunks/{input-BjUSWce3.cjs.map → input-CizzMZ20.cjs.map} +1 -1
  3. package/dist-lib/chunks/{input-DCDU4i4S.mjs → input-Cym0k4ZI.mjs} +2 -2
  4. package/dist-lib/chunks/{input-DCDU4i4S.mjs.map → input-Cym0k4ZI.mjs.map} +1 -1
  5. package/dist-lib/chunks/{kpi-delta-C_3V6uG6.cjs → kpi-delta-DrSJPMCY.cjs} +8 -8
  6. package/dist-lib/chunks/{kpi-delta-C_3V6uG6.cjs.map → kpi-delta-DrSJPMCY.cjs.map} +1 -1
  7. package/dist-lib/chunks/{kpi-delta-DpYuDY4h.mjs → kpi-delta-FhfuIg27.mjs} +2 -2
  8. package/dist-lib/chunks/{kpi-delta-DpYuDY4h.mjs.map → kpi-delta-FhfuIg27.mjs.map} +1 -1
  9. package/dist-lib/chunks/{page-header-D0rpU0yn.cjs → page-header-BMzUloFi.cjs} +4 -4
  10. package/dist-lib/chunks/{page-header-D0rpU0yn.cjs.map → page-header-BMzUloFi.cjs.map} +1 -1
  11. package/dist-lib/chunks/{page-header-B6XJyIMz.mjs → page-header-Buh6YlQM.mjs} +2 -2
  12. package/dist-lib/chunks/{page-header-B6XJyIMz.mjs.map → page-header-Buh6YlQM.mjs.map} +1 -1
  13. package/dist-lib/chunks/{panel-8FiBxwcI.mjs → panel-Cdl0GPVE.mjs} +3 -3
  14. package/dist-lib/chunks/{panel-8FiBxwcI.mjs.map → panel-Cdl0GPVE.mjs.map} +1 -1
  15. package/dist-lib/chunks/{panel-BOrETqXz.cjs → panel-DlyaLunw.cjs} +401 -401
  16. package/dist-lib/chunks/{panel-BOrETqXz.cjs.map → panel-DlyaLunw.cjs.map} +1 -1
  17. package/dist-lib/chunks/{app-shell-Cyh8AUJT.cjs → useTheme-D4alxxGV.cjs} +70 -4
  18. package/dist-lib/chunks/useTheme-D4alxxGV.cjs.map +1 -0
  19. package/dist-lib/chunks/{app-shell-78w0pYdP.mjs → useTheme-DF2xbSdI.mjs} +107 -41
  20. package/dist-lib/chunks/useTheme-DF2xbSdI.mjs.map +1 -0
  21. package/dist-lib/index.cjs +224 -154
  22. package/dist-lib/index.cjs.map +1 -1
  23. package/dist-lib/index.mjs +110 -40
  24. package/dist-lib/index.mjs.map +1 -1
  25. package/dist-lib/preview/chat.cjs +54 -55
  26. package/dist-lib/preview/chat.cjs.map +1 -1
  27. package/dist-lib/preview/chat.mjs +2 -3
  28. package/dist-lib/preview/chat.mjs.map +1 -1
  29. package/dist-lib/preview/clientes.cjs +28 -29
  30. package/dist-lib/preview/clientes.cjs.map +1 -1
  31. package/dist-lib/preview/clientes.mjs +4 -5
  32. package/dist-lib/preview/clientes.mjs.map +1 -1
  33. package/dist-lib/preview/dashboard.cjs +24 -25
  34. package/dist-lib/preview/dashboard.cjs.map +1 -1
  35. package/dist-lib/preview/dashboard.mjs +3 -4
  36. package/dist-lib/preview/dashboard.mjs.map +1 -1
  37. package/dist-lib/src/components/index.d.ts +4 -0
  38. package/dist-lib/src/components/index.d.ts.map +1 -1
  39. package/dist-lib/src/components/ui/AppShell/app-shell.d.ts +3 -2
  40. package/dist-lib/src/components/ui/AppShell/app-shell.d.ts.map +1 -1
  41. package/dist-lib/src/components/ui/AppShell/app-shell.styles.d.ts +21 -4
  42. package/dist-lib/src/components/ui/AppShell/app-shell.styles.d.ts.map +1 -1
  43. package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts +13 -3
  44. package/dist-lib/src/components/ui/AppShell/app-shell.types.d.ts.map +1 -1
  45. package/dist-lib/src/hooks/useBrand.d.ts +49 -16
  46. package/dist-lib/src/hooks/useBrand.d.ts.map +1 -1
  47. package/dist-lib/theme/brand-blue.css +6 -3
  48. package/dist-lib/theme/brand-green.css +6 -3
  49. package/dist-lib/theme/brand-pay.css +6 -3
  50. package/dist-lib/theme/brand-vibrant.css +6 -3
  51. package/dist-lib/theme.css +5 -2
  52. package/package.json +4 -2
  53. package/dist-lib/chunks/app-shell-78w0pYdP.mjs.map +0 -1
  54. package/dist-lib/chunks/app-shell-Cyh8AUJT.cjs.map +0 -1
  55. package/dist-lib/chunks/useTheme-BUPLZBMs.mjs +0 -66
  56. package/dist-lib/chunks/useTheme-BUPLZBMs.mjs.map +0 -1
  57. package/dist-lib/chunks/useTheme-Dee4mo-A.cjs +0 -65
  58. package/dist-lib/chunks/useTheme-Dee4mo-A.cjs.map +0 -1
@@ -7,11 +7,11 @@ const React = require("react");
7
7
  const core = require("@dnd-kit/core");
8
8
  const sortable = require("@dnd-kit/sortable");
9
9
  const reactVirtual = require("@tanstack/react-virtual");
10
- const appShell = require("./app-shell-Cyh8AUJT.cjs");
10
+ const useTheme = require("./useTheme-D4alxxGV.cjs");
11
11
  const lucideReact = require("lucide-react");
12
12
  const CheckboxPrimitive = require("@radix-ui/react-checkbox");
13
13
  const SwitchPrimitives = require("@radix-ui/react-switch");
14
- const input = require("./input-BjUSWce3.cjs");
14
+ const input = require("./input-CizzMZ20.cjs");
15
15
  const AlertDialogPrimitive = require("@radix-ui/react-alert-dialog");
16
16
  const SelectPrimitive = require("@radix-ui/react-select");
17
17
  const ReactDOM = require("react-dom");
@@ -47,7 +47,7 @@ const AlertDialogOverlay = React__namespace.forwardRef(({ className, ...props },
47
47
  AlertDialogPrimitive__namespace.Overlay,
48
48
  {
49
49
  ref: ref2,
50
- className: appShell.cn(
50
+ className: useTheme.cn(
51
51
  "fixed inset-0 z-50 bg-black/30 supports-[backdrop-filter]:backdrop-blur-sm",
52
52
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
53
53
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
@@ -63,7 +63,7 @@ const AlertDialogContent = React__namespace.forwardRef(({ className, ...props },
63
63
  AlertDialogPrimitive__namespace.Content,
64
64
  {
65
65
  ref: ref2,
66
- className: appShell.cn(
66
+ className: useTheme.cn(
67
67
  "fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] sm:max-w-[420px]",
68
68
  "translate-x-[-50%] translate-y-[-50%]",
69
69
  "rounded-radius-2xl bg-bg-surface text-fg-default",
@@ -85,7 +85,7 @@ const AlertDialogHeader = ({
85
85
  }) => /* @__PURE__ */ jsxRuntime.jsx(
86
86
  "div",
87
87
  {
88
- className: appShell.cn(
88
+ className: useTheme.cn(
89
89
  "flex flex-col items-center text-center gap-gp-lg",
90
90
  "px-pad-4xl pt-[32px] pb-pad-3xl",
91
91
  className
@@ -103,7 +103,7 @@ const AlertDialogFooter = ({
103
103
  /* @__PURE__ */ jsxRuntime.jsx(
104
104
  "div",
105
105
  {
106
- className: appShell.cn(
106
+ className: useTheme.cn(
107
107
  "flex flex-col-reverse items-stretch gap-gp-md sm:flex-row",
108
108
  "px-pad-3xl pb-pad-3xl",
109
109
  className
@@ -117,7 +117,7 @@ const AlertDialogTitle = React__namespace.forwardRef(({ className, ...props }, r
117
117
  AlertDialogPrimitive__namespace.Title,
118
118
  {
119
119
  ref: ref2,
120
- className: appShell.cn(
120
+ className: useTheme.cn(
121
121
  "text-body-xl font-bold tracking-[-0.01em] text-fg-default leading-tight",
122
122
  className
123
123
  ),
@@ -129,7 +129,7 @@ const AlertDialogDescription = React__namespace.forwardRef(({ className, ...prop
129
129
  AlertDialogPrimitive__namespace.Description,
130
130
  {
131
131
  ref: ref2,
132
- className: appShell.cn(
132
+ className: useTheme.cn(
133
133
  "text-body-sm font-normal leading-[1.5] text-fg-muted max-w-[340px]",
134
134
  className
135
135
  ),
@@ -139,7 +139,7 @@ const AlertDialogDescription = React__namespace.forwardRef(({ className, ...prop
139
139
  AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
140
140
  const AlertDialogAction = AlertDialogPrimitive__namespace.Action;
141
141
  const AlertDialogCancel = AlertDialogPrimitive__namespace.Cancel;
142
- const alertModalIcon = appShell.tv({
142
+ const alertModalIcon = useTheme.tv({
143
143
  base: [
144
144
  "inline-flex items-center justify-center",
145
145
  "size-[56px] shrink-0 rounded-radius-full",
@@ -212,7 +212,7 @@ function AlertModal({
212
212
  ] }),
213
213
  /* @__PURE__ */ jsxRuntime.jsxs(AlertDialogFooter, { children: [
214
214
  !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(AlertDialogCancel, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
215
- appShell.Button,
215
+ useTheme.Button,
216
216
  {
217
217
  type: "button",
218
218
  color: "secondary",
@@ -224,7 +224,7 @@ function AlertModal({
224
224
  }
225
225
  ) }),
226
226
  /* @__PURE__ */ jsxRuntime.jsx(AlertDialogAction, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
227
- appShell.Button,
227
+ useTheme.Button,
228
228
  {
229
229
  type: "button",
230
230
  color: TONE_BUTTON_COLOR[tone],
@@ -273,7 +273,7 @@ function getContrastTextColor(bgColor) {
273
273
  const blackContrast = contrastRatio(0, bgLum);
274
274
  return whiteContrast >= blackContrast ? "white" : "black";
275
275
  }
276
- const avatarVariants = appShell.tv({
276
+ const avatarVariants = useTheme.tv({
277
277
  base: [
278
278
  "inline-flex items-center justify-center",
279
279
  "shrink-0",
@@ -345,14 +345,14 @@ const Avatar = React.forwardRef(
345
345
  }
346
346
  );
347
347
  Avatar.displayName = "Avatar";
348
- const buttonGroupVariants = appShell.tv({
348
+ const buttonGroupVariants = useTheme.tv({
349
349
  base: [
350
350
  "inline-flex items-stretch",
351
351
  // Permite focus ring de cada filho aparecer (z-index relativo no slot focused).
352
352
  "isolate"
353
353
  ]
354
354
  });
355
- const buttonGroupSlot = appShell.tv({
355
+ const buttonGroupSlot = useTheme.tv({
356
356
  variants: {
357
357
  position: {
358
358
  // Primary: arredondado só na esquerda; direita reta pra "encostar" no chevron
@@ -363,7 +363,7 @@ const buttonGroupSlot = appShell.tv({
363
363
  }
364
364
  }
365
365
  });
366
- const buttonGroupChevronSize = appShell.tv({
366
+ const buttonGroupChevronSize = useTheme.tv({
367
367
  variants: {
368
368
  size: {
369
369
  "2xs": "size-form-xs px-0",
@@ -385,7 +385,7 @@ const ButtonGroupRoot = React.forwardRef(
385
385
  {
386
386
  ref: ref2,
387
387
  role: "group",
388
- className: appShell.cn(buttonGroupVariants(), className),
388
+ className: useTheme.cn(buttonGroupVariants(), className),
389
389
  children
390
390
  }
391
391
  ) });
@@ -396,11 +396,11 @@ const ButtonGroupPrimary = React.forwardRef(
396
396
  const ctx = React.useContext(ButtonGroupContext);
397
397
  const merged = mergeWithContext(ctx, props);
398
398
  return /* @__PURE__ */ jsxRuntime.jsx(
399
- appShell.Button,
399
+ useTheme.Button,
400
400
  {
401
401
  ref: ref2,
402
402
  ...merged,
403
- className: appShell.cn(buttonGroupSlot({ position: "primary" }), className)
403
+ className: useTheme.cn(buttonGroupSlot({ position: "primary" }), className)
404
404
  }
405
405
  );
406
406
  }
@@ -411,11 +411,11 @@ const ButtonGroupChevron = React.forwardRef(
411
411
  const merged = mergeWithContext(ctx, props);
412
412
  const effectiveSize = merged.size ?? "md";
413
413
  return /* @__PURE__ */ jsxRuntime.jsx(
414
- appShell.Button,
414
+ useTheme.Button,
415
415
  {
416
416
  ref: ref2,
417
417
  ...merged,
418
- className: appShell.cn(
418
+ className: useTheme.cn(
419
419
  buttonGroupSlot({ position: "chevron" }),
420
420
  buttonGroupChevronSize({ size: effectiveSize }),
421
421
  // Anula gap do Button (não tem children) + reset svg size pra default 14px
@@ -445,7 +445,7 @@ const Checkbox = React__namespace.forwardRef(({ className, ...props }, ref2) =>
445
445
  CheckboxPrimitive__namespace.Root,
446
446
  {
447
447
  ref: ref2,
448
- className: appShell.cn(
448
+ className: useTheme.cn(
449
449
  "peer relative flex size-4 shrink-0 items-center justify-center cursor-pointer",
450
450
  "rounded-radius-xs",
451
451
  "bg-bg-input dark:bg-bg-muted",
@@ -462,17 +462,17 @@ const Checkbox = React__namespace.forwardRef(({ className, ...props }, ref2) =>
462
462
  children: /* @__PURE__ */ jsxRuntime.jsx(
463
463
  CheckboxPrimitive__namespace.Indicator,
464
464
  {
465
- className: appShell.cn("grid place-content-center text-fg-on-brand"),
465
+ className: useTheme.cn("grid place-content-center text-fg-on-brand"),
466
466
  children: props.checked === "indeterminate" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "size-3", strokeWidth: 3 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3", strokeWidth: 3 })
467
467
  }
468
468
  )
469
469
  }
470
470
  ));
471
471
  Checkbox.displayName = CheckboxPrimitive__namespace.Root.displayName;
472
- const formFieldRoot = appShell.tv({
472
+ const formFieldRoot = useTheme.tv({
473
473
  base: "flex flex-col gap-[7px] w-full"
474
474
  });
475
- const formFieldLabel = appShell.tv({
475
+ const formFieldLabel = useTheme.tv({
476
476
  base: [
477
477
  "text-body-sm font-semibold tracking-[0.01em] leading-none",
478
478
  "text-fg-default dark:text-fg-muted",
@@ -484,10 +484,10 @@ const formFieldLabel = appShell.tv({
484
484
  }
485
485
  }
486
486
  });
487
- const formFieldRequired = appShell.tv({
487
+ const formFieldRequired = useTheme.tv({
488
488
  base: "ml-[2px] text-fg-danger"
489
489
  });
490
- const formFieldMessage = appShell.tv({
490
+ const formFieldMessage = useTheme.tv({
491
491
  base: "text-caption-sm leading-snug",
492
492
  variants: {
493
493
  state: {
@@ -527,7 +527,7 @@ function FormField({
527
527
  message = successMessage;
528
528
  messageState = "success";
529
529
  }
530
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn(formFieldRoot(), className), children: [
530
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn(formFieldRoot(), className), children: [
531
531
  label && !hideLabel && /* @__PURE__ */ jsxRuntime.jsxs(
532
532
  "label",
533
533
  {
@@ -552,9 +552,9 @@ function FormField({
552
552
  }
553
553
  function renderAddon(content, key) {
554
554
  if (typeof content === "string") {
555
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.InputGroupAddon, { align: key === "start" ? "inline-start" : "inline-end", children: /* @__PURE__ */ jsxRuntime.jsx(appShell.InputGroupText, { children: content }) }, key);
555
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.InputGroupAddon, { align: key === "start" ? "inline-start" : "inline-end", children: /* @__PURE__ */ jsxRuntime.jsx(useTheme.InputGroupText, { children: content }) }, key);
556
556
  }
557
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.InputGroupAddon, { align: key === "start" ? "inline-start" : "inline-end", children: content }, key);
557
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.InputGroupAddon, { align: key === "start" ? "inline-start" : "inline-end", children: content }, key);
558
558
  }
559
559
  const FormFieldInput = React.forwardRef(
560
560
  ({
@@ -586,9 +586,9 @@ const FormFieldInput = React.forwardRef(
586
586
  className,
587
587
  id,
588
588
  disabled: inputProps.disabled,
589
- children: ({ id: fieldId, state: fieldState }) => hasAddon ? /* @__PURE__ */ jsxRuntime.jsxs(appShell.InputGroup, { state: fieldState, size: size ?? void 0, children: [
589
+ children: ({ id: fieldId, state: fieldState }) => hasAddon ? /* @__PURE__ */ jsxRuntime.jsxs(useTheme.InputGroup, { state: fieldState, size: size ?? void 0, children: [
590
590
  startAddon !== void 0 && renderAddon(startAddon, "start"),
591
- /* @__PURE__ */ jsxRuntime.jsx(appShell.InputGroupInput, { ref: ref2, id: fieldId, ...inputHtmlProps }),
591
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.InputGroupInput, { ref: ref2, id: fieldId, ...inputHtmlProps }),
592
592
  endAddon !== void 0 && renderAddon(endAddon, "end")
593
593
  ] }) : /* @__PURE__ */ jsxRuntime.jsx(
594
594
  input.Input,
@@ -636,7 +636,7 @@ const Textarea = React__namespace.forwardRef(
636
636
  return /* @__PURE__ */ jsxRuntime.jsx(
637
637
  "textarea",
638
638
  {
639
- className: appShell.cn(textareaVariants({ state }), className),
639
+ className: useTheme.cn(textareaVariants({ state }), className),
640
640
  ref: ref2,
641
641
  ...props
642
642
  }
@@ -688,7 +688,7 @@ const SelectTrigger = React__namespace.forwardRef(({ className, children, state
688
688
  SelectPrimitive__namespace.Trigger,
689
689
  {
690
690
  ref: ref2,
691
- className: appShell.cn(
691
+ className: useTheme.cn(
692
692
  "flex min-h-form-lg w-full items-center justify-between gap-gp-md",
693
693
  "rounded-radius-lg px-pad-xl",
694
694
  "bg-bg-input dark:bg-bg-muted",
@@ -717,7 +717,7 @@ const SelectScrollUpButton = React__namespace.forwardRef(({ className, ...props
717
717
  SelectPrimitive__namespace.ScrollUpButton,
718
718
  {
719
719
  ref: ref2,
720
- className: appShell.cn(
720
+ className: useTheme.cn(
721
721
  "flex cursor-default items-center justify-center py-pad-xs",
722
722
  className
723
723
  ),
@@ -730,7 +730,7 @@ const SelectScrollDownButton = React__namespace.forwardRef(({ className, ...prop
730
730
  SelectPrimitive__namespace.ScrollDownButton,
731
731
  {
732
732
  ref: ref2,
733
- className: appShell.cn(
733
+ className: useTheme.cn(
734
734
  "flex cursor-default items-center justify-center py-pad-xs",
735
735
  className
736
736
  ),
@@ -743,7 +743,7 @@ const SelectContent = React__namespace.forwardRef(({ className, children, positi
743
743
  SelectPrimitive__namespace.Content,
744
744
  {
745
745
  ref: ref2,
746
- className: appShell.cn(
746
+ className: useTheme.cn(
747
747
  "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden",
748
748
  "rounded-[12px] bg-bg-dropdown border border-border-default shadow-sh-lg outline-float",
749
749
  "before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150",
@@ -761,7 +761,7 @@ const SelectContent = React__namespace.forwardRef(({ className, children, positi
761
761
  /* @__PURE__ */ jsxRuntime.jsx(
762
762
  SelectPrimitive__namespace.Viewport,
763
763
  {
764
- className: appShell.cn(
764
+ className: useTheme.cn(
765
765
  "p-pad-sm",
766
766
  position2 === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
767
767
  ),
@@ -777,7 +777,7 @@ const SelectLabel = React__namespace.forwardRef(({ className, ...props }, ref2)
777
777
  SelectPrimitive__namespace.Label,
778
778
  {
779
779
  ref: ref2,
780
- className: appShell.cn("py-pad-sm pl-8 pr-2 text-body-md font-medium text-fg-muted", className),
780
+ className: useTheme.cn("py-pad-sm pl-8 pr-2 text-body-md font-medium text-fg-muted", className),
781
781
  ...props
782
782
  }
783
783
  ));
@@ -786,7 +786,7 @@ const SelectItem = React__namespace.forwardRef(({ className, children, ...props
786
786
  SelectPrimitive__namespace.Item,
787
787
  {
788
788
  ref: ref2,
789
- className: appShell.cn(
789
+ className: useTheme.cn(
790
790
  "relative flex w-full cursor-default select-none items-center gap-pad-md",
791
791
  "rounded-radius-sm py-pad-md pl-8 pr-pad-lg",
792
792
  "text-body-sm font-medium text-fg-muted",
@@ -809,7 +809,7 @@ const SelectSeparator = React__namespace.forwardRef(({ className, ...props }, re
809
809
  SelectPrimitive__namespace.Separator,
810
810
  {
811
811
  ref: ref2,
812
- className: appShell.cn("-mx-1 my-1 h-px bg-border", className),
812
+ className: useTheme.cn("-mx-1 my-1 h-px bg-border", className),
813
813
  ...props
814
814
  }
815
815
  ));
@@ -906,7 +906,7 @@ const FormFieldCheckbox = React.forwardRef(
906
906
  message = successMessage;
907
907
  messageState = "success";
908
908
  }
909
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn(formFieldRoot(), "gap-[5px]", className), children: [
909
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn(formFieldRoot(), "gap-[5px]", className), children: [
910
910
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-gp-md", children: [
911
911
  /* @__PURE__ */ jsxRuntime.jsx(
912
912
  Checkbox,
@@ -921,7 +921,7 @@ const FormFieldCheckbox = React.forwardRef(
921
921
  "label",
922
922
  {
923
923
  htmlFor: id,
924
- className: appShell.cn(formFieldLabel({ disabled }), "cursor-pointer"),
924
+ className: useTheme.cn(formFieldLabel({ disabled }), "cursor-pointer"),
925
925
  children: [
926
926
  label,
927
927
  required2 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: formFieldRequired(), "aria-hidden": "true", children: "*" })
@@ -932,7 +932,7 @@ const FormFieldCheckbox = React.forwardRef(
932
932
  message && /* @__PURE__ */ jsxRuntime.jsx(
933
933
  "p",
934
934
  {
935
- className: appShell.cn(formFieldMessage({ state: messageState }), "pl-[26px]"),
935
+ className: useTheme.cn(formFieldMessage({ state: messageState }), "pl-[26px]"),
936
936
  role: messageState === "error" ? "alert" : void 0,
937
937
  children: message
938
938
  }
@@ -944,7 +944,7 @@ FormFieldCheckbox.displayName = "FormFieldCheckbox";
944
944
  const Switch = React__namespace.forwardRef(({ className, ...props }, ref2) => /* @__PURE__ */ jsxRuntime.jsx(
945
945
  SwitchPrimitives__namespace.Root,
946
946
  {
947
- className: appShell.cn(
947
+ className: useTheme.cn(
948
948
  "peer relative inline-flex h-[24px] w-[42px] shrink-0 cursor-pointer items-center",
949
949
  "rounded-radius-full",
950
950
  "transition-[background-color,box-shadow] duration-150 outline-none",
@@ -959,7 +959,7 @@ const Switch = React__namespace.forwardRef(({ className, ...props }, ref2) => /*
959
959
  children: /* @__PURE__ */ jsxRuntime.jsx(
960
960
  SwitchPrimitives__namespace.Thumb,
961
961
  {
962
- className: appShell.cn(
962
+ className: useTheme.cn(
963
963
  "pointer-events-none block size-[20px] rounded-radius-full bg-white",
964
964
  "shadow-[0_1px_2px_rgba(0,0,0,0.10)]",
965
965
  "transition-transform duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)]",
@@ -1005,14 +1005,14 @@ const FormFieldSwitch = React.forwardRef(
1005
1005
  "label",
1006
1006
  {
1007
1007
  htmlFor: id,
1008
- className: appShell.cn(formFieldLabel({ disabled }), "cursor-pointer flex-1"),
1008
+ className: useTheme.cn(formFieldLabel({ disabled }), "cursor-pointer flex-1"),
1009
1009
  children: [
1010
1010
  label,
1011
1011
  required2 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: formFieldRequired(), "aria-hidden": "true", children: "*" })
1012
1012
  ]
1013
1013
  }
1014
1014
  );
1015
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn(formFieldRoot(), "gap-[5px]", className), children: [
1015
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn(formFieldRoot(), "gap-[5px]", className), children: [
1016
1016
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-gp-md", children: switchPosition === "start" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1017
1017
  switchEl,
1018
1018
  labelEl
@@ -1032,7 +1032,7 @@ const FormFieldSwitch = React.forwardRef(
1032
1032
  }
1033
1033
  );
1034
1034
  FormFieldSwitch.displayName = "FormFieldSwitch";
1035
- const comboboxStyles = appShell.tv({
1035
+ const comboboxStyles = useTheme.tv({
1036
1036
  slots: {
1037
1037
  trigger: [
1038
1038
  "flex min-h-form-lg w-full items-center justify-between gap-gp-md",
@@ -1088,8 +1088,8 @@ const Combobox = React.forwardRef(
1088
1088
  };
1089
1089
  const styles2 = comboboxStyles();
1090
1090
  const selected = options.find((o) => o.value === value);
1091
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange: setOpen, children: [
1092
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1091
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange: setOpen, children: [
1092
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
1093
1093
  "button",
1094
1094
  {
1095
1095
  ref: ref2,
@@ -1108,18 +1108,18 @@ const Combobox = React.forwardRef(
1108
1108
  }
1109
1109
  ) }),
1110
1110
  /* @__PURE__ */ jsxRuntime.jsx(
1111
- appShell.PopoverContent,
1111
+ useTheme.PopoverContent,
1112
1112
  {
1113
1113
  align,
1114
1114
  className: styles2.content({ className: contentClassName }),
1115
- children: /* @__PURE__ */ jsxRuntime.jsxs(appShell.Command, { children: [
1116
- /* @__PURE__ */ jsxRuntime.jsx(appShell.CommandInput, { placeholder: searchPlaceholder }),
1117
- /* @__PURE__ */ jsxRuntime.jsxs(appShell.CommandList, { children: [
1118
- /* @__PURE__ */ jsxRuntime.jsx(appShell.CommandEmpty, { children: emptyMessage }),
1119
- /* @__PURE__ */ jsxRuntime.jsx(appShell.CommandGroup, { children: options.map((option) => {
1115
+ children: /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Command, { children: [
1116
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.CommandInput, { placeholder: searchPlaceholder }),
1117
+ /* @__PURE__ */ jsxRuntime.jsxs(useTheme.CommandList, { children: [
1118
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.CommandEmpty, { children: emptyMessage }),
1119
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.CommandGroup, { children: options.map((option) => {
1120
1120
  const isSelected = option.value === value;
1121
1121
  return /* @__PURE__ */ jsxRuntime.jsxs(
1122
- appShell.CommandItem,
1122
+ useTheme.CommandItem,
1123
1123
  {
1124
1124
  value: option.label,
1125
1125
  keywords: [option.value, ...option.keywords ?? []],
@@ -1127,7 +1127,7 @@ const Combobox = React.forwardRef(
1127
1127
  onValueChange?.(option.value);
1128
1128
  setOpen(false);
1129
1129
  },
1130
- className: appShell.cn(
1130
+ className: useTheme.cn(
1131
1131
  isSelected && "text-fg-default font-medium [&_svg]:text-fg-brand"
1132
1132
  ),
1133
1133
  children: [
@@ -1146,7 +1146,7 @@ const Combobox = React.forwardRef(
1146
1146
  }
1147
1147
  );
1148
1148
  Combobox.displayName = "Combobox";
1149
- const tableStyles = appShell.tv({
1149
+ const tableStyles = useTheme.tv({
1150
1150
  slots: {
1151
1151
  /* Root grid container. Aplica container-type pra container queries.
1152
1152
  flex flex-col: scroll child usa flex-1 min-h-0 pra esticar quando há altura forçada
@@ -1520,7 +1520,7 @@ function Table({
1520
1520
  "aria-label": ariaLabel,
1521
1521
  "data-density": density,
1522
1522
  "data-resizing-col": resizingField ?? void 0,
1523
- className: appShell.cn(styles$4.root(), className),
1523
+ className: useTheme.cn(styles$4.root(), className),
1524
1524
  style: cardCss,
1525
1525
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: styles$4.scroll(), children })
1526
1526
  }
@@ -1541,7 +1541,7 @@ function TableHead({
1541
1541
  ...rootProps,
1542
1542
  role: "rowgroup",
1543
1543
  "data-scrolled": isScrolled ? "true" : void 0,
1544
- className: appShell.cn(tableStyles({ sticky }).head(), className),
1544
+ className: useTheme.cn(tableStyles({ sticky }).head(), className),
1545
1545
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { role: "row", className: "flex w-full", children })
1546
1546
  }
1547
1547
  );
@@ -1564,7 +1564,7 @@ function TableBody({
1564
1564
  {
1565
1565
  ...rootProps,
1566
1566
  role: "rowgroup",
1567
- className: appShell.cn(
1567
+ className: useTheme.cn(
1568
1568
  styles$4.body(),
1569
1569
  virtualized && "!block",
1570
1570
  className
@@ -1600,7 +1600,7 @@ const TableRow = React.forwardRef(function TableRow2({
1600
1600
  "data-focused": focused || void 0,
1601
1601
  "data-highlighted": solidPinned || void 0,
1602
1602
  tabIndex: focused ? 0 : -1,
1603
- className: appShell.cn(
1603
+ className: useTheme.cn(
1604
1604
  "group/row",
1605
1605
  tableStyles({ selected: highlighted, clickable: isClickable, density }).row(),
1606
1606
  // Focus visual — bg tinted (match checkbox selected) + borda brand interna.
@@ -1651,7 +1651,7 @@ const TableCell = React.forwardRef(function TableCell2({
1651
1651
  "data-purpose": purpose,
1652
1652
  "data-resize-active": isResizingThisCol ? "true" : void 0,
1653
1653
  title: tooltip,
1654
- className: appShell.cn(
1654
+ className: useTheme.cn(
1655
1655
  tableStyles({ pinned, align, ellipsis, density, cellBorders, purpose }).cell(),
1656
1656
  // Linha brand 2px alinhada com o centro do resize handle do header (~2px do edge)
1657
1657
  isResizingThisCol && "relative after:absolute after:right-[2px] after:top-0 after:bottom-0 after:w-[2px] after:bg-bg-brand after:pointer-events-none",
@@ -1734,7 +1734,7 @@ const TableHeadCell = React.forwardRef(function TableHeadCell2({
1734
1734
  "data-sort": sortDirection ?? void 0,
1735
1735
  "data-field": field,
1736
1736
  "data-purpose": purpose,
1737
- className: appShell.cn(
1737
+ className: useTheme.cn(
1738
1738
  "group/headcell",
1739
1739
  tableStyles({ pinned, align, sortable: sortable2, density, cellBorders, purpose }).headCell(),
1740
1740
  className
@@ -1746,11 +1746,11 @@ const TableHeadCell = React.forwardRef(function TableHeadCell2({
1746
1746
  /* @__PURE__ */ jsxRuntime.jsx(
1747
1747
  "span",
1748
1748
  {
1749
- className: appShell.cn(
1749
+ className: useTheme.cn(
1750
1750
  "flex-1 min-w-0",
1751
1751
  // Coluna de seleção (checkbox) centraliza por padrão — sem precisar
1752
1752
  // de align="center" no consumer (alinha com o purpose="selection").
1753
- align === "center" || purpose === "selection" ? "flex items-center justify-center" : align === "right" ? appShell.cn(
1753
+ align === "center" || purpose === "selection" ? "flex items-center justify-center" : align === "right" ? useTheme.cn(
1754
1754
  "truncate text-right",
1755
1755
  // Reserva espaço pro headRightStack APENAS quando sort está
1756
1756
  // ATIVO (sort badge + indicator visíveis permanentemente).
@@ -1826,7 +1826,7 @@ function TableCardRow({
1826
1826
  role: "article",
1827
1827
  "aria-selected": selected || void 0,
1828
1828
  "data-state": dataState,
1829
- className: appShell.cn(
1829
+ className: useTheme.cn(
1830
1830
  tableStyles({ selected: highlighted, clickable: isClickable }).cardWrap(),
1831
1831
  className
1832
1832
  ),
@@ -1883,14 +1883,14 @@ function useColumnWidths(columns) {
1883
1883
  }
1884
1884
  const SELECTION_COLUMN_WIDTH = 56;
1885
1885
  const TABLE_HEADER_HEIGHT = 42;
1886
- const toolbarRoot = appShell.tv({
1886
+ const toolbarRoot = useTheme.tv({
1887
1887
  base: [
1888
1888
  "flex items-center justify-between flex-wrap",
1889
1889
  "gap-gp-md md:gap-gp-2xl"
1890
1890
  // 8px → 16px
1891
1891
  ]
1892
1892
  });
1893
- const toolbarLeft = appShell.tv({
1893
+ const toolbarLeft = useTheme.tv({
1894
1894
  base: [
1895
1895
  "flex flex-1 items-center flex-wrap min-w-0",
1896
1896
  "gap-gp-sm md:gap-[10px]",
@@ -1902,7 +1902,7 @@ const toolbarLeft = appShell.tv({
1902
1902
  "max-md:hidden"
1903
1903
  ]
1904
1904
  });
1905
- const toolbarActions = appShell.tv({
1905
+ const toolbarActions = useTheme.tv({
1906
1906
  base: [
1907
1907
  "flex items-center flex-wrap shrink-0",
1908
1908
  "gap-gp-sm md:gap-gp-md",
@@ -1913,10 +1913,10 @@ const toolbarActions = appShell.tv({
1913
1913
  "max-md:w-full max-md:flex-1"
1914
1914
  ]
1915
1915
  });
1916
- const toolbarDivider = appShell.tv({
1916
+ const toolbarDivider = useTheme.tv({
1917
1917
  base: "w-[1px] h-[24px] bg-border-default shrink-0 mx-[6px] self-center"
1918
1918
  });
1919
- const toolbarSearch = appShell.tv({
1919
+ const toolbarSearch = useTheme.tv({
1920
1920
  base: [
1921
1921
  "relative flex items-center gap-gp-md cursor-text",
1922
1922
  "h-form-lg px-[14px] rounded-radius-lg",
@@ -1940,21 +1940,21 @@ const toolbarSearch = appShell.tv({
1940
1940
  },
1941
1941
  defaultVariants: { expanded: false }
1942
1942
  });
1943
- const toolbarSearchInput = appShell.tv({
1943
+ const toolbarSearchInput = useTheme.tv({
1944
1944
  base: [
1945
1945
  "flex-1 min-w-0 bg-transparent border-0 outline-none",
1946
1946
  "text-body-sm font-normal text-fg-default",
1947
1947
  "placeholder:text-fg-muted"
1948
1948
  ]
1949
1949
  });
1950
- const toolbarToolDot = appShell.tv({
1950
+ const toolbarToolDot = useTheme.tv({
1951
1951
  base: [
1952
1952
  "absolute -top-[4px] -right-[4px] z-[2] pointer-events-none",
1953
1953
  "size-[13px] rounded-radius-full",
1954
1954
  "bg-bg-brand border-2 border-bg-canvas"
1955
1955
  ]
1956
1956
  });
1957
- const toolbarSegmented = appShell.tv({
1957
+ const toolbarSegmented = useTheme.tv({
1958
1958
  base: [
1959
1959
  "items-center gap-[2px] p-[3px]",
1960
1960
  "bg-bg-muted rounded-radius-lg",
@@ -1968,7 +1968,7 @@ const toolbarSegmented = appShell.tv({
1968
1968
  },
1969
1969
  defaultVariants: { fluid: false }
1970
1970
  });
1971
- const toolbarSegmentedButton = appShell.tv({
1971
+ const toolbarSegmentedButton = useTheme.tv({
1972
1972
  base: [
1973
1973
  "grid place-items-center",
1974
1974
  "h-[34px] min-w-[36px] px-pad-md",
@@ -1992,7 +1992,7 @@ const toolbarSegmentedButton = appShell.tv({
1992
1992
  },
1993
1993
  defaultVariants: { isActive: false, fluid: false }
1994
1994
  });
1995
- const toolbarTabs = appShell.tv({
1995
+ const toolbarTabs = useTheme.tv({
1996
1996
  base: [
1997
1997
  "items-center gap-[2px] p-[3px]",
1998
1998
  "bg-bg-muted rounded-radius-lg",
@@ -2007,7 +2007,7 @@ const toolbarTabs = appShell.tv({
2007
2007
  },
2008
2008
  defaultVariants: { fluid: false }
2009
2009
  });
2010
- const toolbarTabWrap = appShell.tv({
2010
+ const toolbarTabWrap = useTheme.tv({
2011
2011
  base: [
2012
2012
  "relative inline-flex items-center",
2013
2013
  "rounded-radius-md",
@@ -2025,7 +2025,7 @@ const toolbarTabWrap = appShell.tv({
2025
2025
  },
2026
2026
  defaultVariants: { isActive: false, fluid: false }
2027
2027
  });
2028
- const toolbarTabButton = appShell.tv({
2028
+ const toolbarTabButton = useTheme.tv({
2029
2029
  base: [
2030
2030
  "inline-flex items-center gap-gp-sm h-[34px] px-[14px]",
2031
2031
  "rounded-radius-md border-0 bg-transparent cursor-pointer outline-none",
@@ -2046,7 +2046,7 @@ const toolbarTabButton = appShell.tv({
2046
2046
  },
2047
2047
  defaultVariants: { isActive: false, fluid: false }
2048
2048
  });
2049
- const toolbarTabClose = appShell.tv({
2049
+ const toolbarTabClose = useTheme.tv({
2050
2050
  base: [
2051
2051
  "grid place-items-center size-[18px] -ml-[18px]",
2052
2052
  "rounded-radius-full border-0 bg-transparent text-fg-muted cursor-pointer",
@@ -2057,7 +2057,7 @@ const toolbarTabClose = appShell.tv({
2057
2057
  "[&_svg]:size-[11px]"
2058
2058
  ]
2059
2059
  });
2060
- const toolbarApplied = appShell.tv({
2060
+ const toolbarApplied = useTheme.tv({
2061
2061
  // Mobile: scroll horizontal (flex-nowrap + overflow-x-auto) em vez de quebrar
2062
2062
  // os chips em várias linhas e empurrar a tabela pra baixo. Scrollbar oculta.
2063
2063
  // sm+: volta ao flex-wrap normal.
@@ -2080,7 +2080,7 @@ const toolbarApplied = appShell.tv({
2080
2080
  separator: true
2081
2081
  }
2082
2082
  });
2083
- const toolbarAppliedChip = appShell.tv({
2083
+ const toolbarAppliedChip = useTheme.tv({
2084
2084
  base: [
2085
2085
  "inline-flex items-center gap-gp-md",
2086
2086
  "h-form-md pl-pad-sm pr-pad-lg",
@@ -2100,7 +2100,7 @@ const toolbarAppliedChip = appShell.tv({
2100
2100
  }
2101
2101
  }
2102
2102
  });
2103
- const toolbarAppliedChipRemove = appShell.tv({
2103
+ const toolbarAppliedChipRemove = useTheme.tv({
2104
2104
  base: [
2105
2105
  "grid place-items-center size-[18px] shrink-0",
2106
2106
  "rounded-radius-full border-0 bg-transparent text-fg-subtle cursor-pointer outline-none",
@@ -2110,13 +2110,13 @@ const toolbarAppliedChipRemove = appShell.tv({
2110
2110
  "[&_svg]:size-[14px]"
2111
2111
  ]
2112
2112
  });
2113
- const toolbarAppliedChipName = appShell.tv({
2113
+ const toolbarAppliedChipName = useTheme.tv({
2114
2114
  base: "font-semibold text-fg-default"
2115
2115
  });
2116
- const toolbarAppliedChipOp = appShell.tv({
2116
+ const toolbarAppliedChipOp = useTheme.tv({
2117
2117
  base: "text-fg-muted text-caption-sm"
2118
2118
  });
2119
- const toolbarAppliedChipValue = appShell.tv({
2119
+ const toolbarAppliedChipValue = useTheme.tv({
2120
2120
  base: [
2121
2121
  "inline-flex items-center h-[22px] px-pad-md",
2122
2122
  "rounded-radius-sm",
@@ -2124,7 +2124,7 @@ const toolbarAppliedChipValue = appShell.tv({
2124
2124
  "text-body-xs font-medium text-fg-default"
2125
2125
  ]
2126
2126
  });
2127
- const toolbarAppliedClearLink = appShell.tv({
2127
+ const toolbarAppliedClearLink = useTheme.tv({
2128
2128
  base: [
2129
2129
  "ml-pad-sm text-body-xs font-medium text-fg-brand cursor-pointer outline-none",
2130
2130
  "bg-transparent border-0 p-0",
@@ -2134,14 +2134,14 @@ const toolbarAppliedClearLink = appShell.tv({
2134
2134
  "disabled:opacity-50 disabled:pointer-events-none"
2135
2135
  ]
2136
2136
  });
2137
- const bulkBarRoot = appShell.tv({
2137
+ const bulkBarRoot = useTheme.tv({
2138
2138
  base: [
2139
2139
  "flex items-center flex-wrap gap-gp-xl",
2140
2140
  "py-[10px] px-[14px] rounded-radius-xl",
2141
2141
  "bg-bg-brand-subtle border border-border-brand text-fg-brand"
2142
2142
  ]
2143
2143
  });
2144
- const bulkBarCount = appShell.tv({
2144
+ const bulkBarCount = useTheme.tv({
2145
2145
  base: [
2146
2146
  "inline-flex items-center gap-gp-md shrink-0",
2147
2147
  "text-body-sm font-semibold",
@@ -2149,13 +2149,13 @@ const bulkBarCount = appShell.tv({
2149
2149
  "[&_svg]:size-[14px]"
2150
2150
  ]
2151
2151
  });
2152
- const bulkBarActions = appShell.tv({
2152
+ const bulkBarActions = useTheme.tv({
2153
2153
  base: [
2154
2154
  "flex items-center flex-wrap gap-gp-sm flex-1 min-w-0",
2155
2155
  "[&>*]:shrink-0"
2156
2156
  ]
2157
2157
  });
2158
- const bulkBarClear = appShell.tv({
2158
+ const bulkBarClear = useTheme.tv({
2159
2159
  base: [
2160
2160
  "shrink-0 ml-auto",
2161
2161
  "bg-transparent border-0 p-0 cursor-pointer outline-none",
@@ -2171,7 +2171,7 @@ function ToolbarDivider({ className, ...props }) {
2171
2171
  "span",
2172
2172
  {
2173
2173
  "aria-hidden": "true",
2174
- className: appShell.cn(toolbarDivider(), className),
2174
+ className: useTheme.cn(toolbarDivider(), className),
2175
2175
  ...props
2176
2176
  }
2177
2177
  );
@@ -2190,9 +2190,9 @@ function TableToolbar({
2190
2190
  className
2191
2191
  }) {
2192
2192
  if (bulkBar) {
2193
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn("w-full", className), children: bulkBar });
2193
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn("w-full", className), children: bulkBar });
2194
2194
  }
2195
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn(toolbarRoot(), className), children: [
2195
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn(toolbarRoot(), className), children: [
2196
2196
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: toolbarLeft(), children: [
2197
2197
  viewToggle,
2198
2198
  viewToggle && savedViews && /* @__PURE__ */ jsxRuntime.jsx(ToolbarDivider, {}),
@@ -2221,7 +2221,7 @@ const ToolbarSearch = React.forwardRef(
2221
2221
  }, ref2) => {
2222
2222
  const hasValue = Boolean(value);
2223
2223
  const expanded = autoExpand ? hasValue : false;
2224
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: appShell.cn(toolbarSearch({ expanded }), wrapperClassName), children: [
2224
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: useTheme.cn(toolbarSearch({ expanded }), wrapperClassName), children: [
2225
2225
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { strokeWidth: 1.8, "aria-hidden": "true" }),
2226
2226
  /* @__PURE__ */ jsxRuntime.jsx(
2227
2227
  "input",
@@ -2231,7 +2231,7 @@ const ToolbarSearch = React.forwardRef(
2231
2231
  value,
2232
2232
  placeholder: placeholder2,
2233
2233
  "aria-label": ariaLabel,
2234
- className: appShell.cn(toolbarSearchInput(), className),
2234
+ className: useTheme.cn(toolbarSearchInput(), className),
2235
2235
  ...inputProps
2236
2236
  }
2237
2237
  )
@@ -2252,7 +2252,7 @@ function ToolbarSegmented({
2252
2252
  {
2253
2253
  role: "radiogroup",
2254
2254
  "aria-label": ariaLabel,
2255
- className: appShell.cn(toolbarSegmented({ fluid }), className),
2255
+ className: useTheme.cn(toolbarSegmented({ fluid }), className),
2256
2256
  children: items.map((item) => {
2257
2257
  const isActive2 = item.value === value;
2258
2258
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -2289,13 +2289,13 @@ function ToolbarTabs({
2289
2289
  {
2290
2290
  role: "tablist",
2291
2291
  "aria-label": ariaLabel,
2292
- className: appShell.cn(toolbarTabs({ fluid }), className),
2292
+ className: useTheme.cn(toolbarTabs({ fluid }), className),
2293
2293
  children: tabs.map((tab2) => {
2294
2294
  const isActive2 = tab2.id === activeId;
2295
2295
  return /* @__PURE__ */ jsxRuntime.jsxs(
2296
2296
  "div",
2297
2297
  {
2298
- className: appShell.cn("group/wrap", toolbarTabWrap({ isActive: isActive2, fluid })),
2298
+ className: useTheme.cn("group/wrap", toolbarTabWrap({ isActive: isActive2, fluid })),
2299
2299
  children: [
2300
2300
  /* @__PURE__ */ jsxRuntime.jsx(
2301
2301
  "button",
@@ -2340,14 +2340,14 @@ const ToolbarToolButton = React.forwardRef(
2340
2340
  }, ref2) => {
2341
2341
  const iconOnly = !label;
2342
2342
  return /* @__PURE__ */ jsxRuntime.jsxs(
2343
- appShell.Button,
2343
+ useTheme.Button,
2344
2344
  {
2345
2345
  ref: ref2,
2346
2346
  color: isActive2 ? "primary" : "secondary",
2347
2347
  variant: isActive2 ? "soft" : "outline",
2348
2348
  size: iconOnly ? "icon-md" : "md",
2349
2349
  iconLeft: iconOnly ? void 0 : icon,
2350
- className: appShell.cn(
2350
+ className: useTheme.cn(
2351
2351
  "relative",
2352
2352
  // Active: Button primary soft não tem border — adicionamos brand
2353
2353
  isActive2 && "border-border-brand hover:border-border-brand",
@@ -2364,13 +2364,13 @@ const ToolbarToolButton = React.forwardRef(
2364
2364
  );
2365
2365
  ToolbarToolButton.displayName = "ToolbarToolButton";
2366
2366
  const ToolbarSaveButton = React.forwardRef(({ className, isOpen, children, ...rest }, ref2) => /* @__PURE__ */ jsxRuntime.jsx(
2367
- appShell.Button,
2367
+ useTheme.Button,
2368
2368
  {
2369
2369
  ref: ref2,
2370
2370
  color: "secondary",
2371
2371
  variant: "ghost",
2372
2372
  size: "icon-md",
2373
- className: appShell.cn(
2373
+ className: useTheme.cn(
2374
2374
  isOpen && "bg-bg-muted text-fg-default",
2375
2375
  className
2376
2376
  ),
@@ -2409,7 +2409,7 @@ function ToolbarApplied({
2409
2409
  }) {
2410
2410
  if (filters.length === 0) return null;
2411
2411
  const resolveOp = (op) => opLabels?.[op] ?? DEFAULT_OP_LABELS[op] ?? String(op);
2412
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn(toolbarApplied({ separator }), className), children: [
2412
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn(toolbarApplied({ separator }), className), children: [
2413
2413
  filters.map((f) => {
2414
2414
  const isPendingOpen = pendingOpenId === f.id;
2415
2415
  const defaultChip = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: toolbarAppliedChip({ interactive: !!renderChip }), children: [
@@ -2442,21 +2442,21 @@ function ToolbarApplied({
2442
2442
  {
2443
2443
  type: "button",
2444
2444
  onClick: onClearAll,
2445
- className: appShell.cn(toolbarAppliedClearLink(), "shrink-0"),
2445
+ className: useTheme.cn(toolbarAppliedClearLink(), "shrink-0"),
2446
2446
  children: clearLabel
2447
2447
  }
2448
2448
  )
2449
2449
  ] });
2450
2450
  }
2451
2451
  function MenuItem({ item, idx }) {
2452
- if (item.separator) return /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {});
2452
+ if (item.separator) return /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {});
2453
2453
  return /* @__PURE__ */ jsxRuntime.jsxs(
2454
- appShell.DropdownMenuItem,
2454
+ useTheme.DropdownMenuItem,
2455
2455
  {
2456
2456
  variant: item.destructive ? "destructive" : "default",
2457
2457
  disabled: item.disabled,
2458
2458
  onSelect: () => item.onClick?.(),
2459
- className: appShell.cn(item.active && "bg-bg-brand-subtle text-fg-brand"),
2459
+ className: useTheme.cn(item.active && "bg-bg-brand-subtle text-fg-brand"),
2460
2460
  children: [
2461
2461
  item.icon,
2462
2462
  item.label
@@ -2469,7 +2469,7 @@ function ActionInput({
2469
2469
  action,
2470
2470
  className
2471
2471
  }) {
2472
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: appShell.cn(toolbarSearch(), className), children: [
2472
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: useTheme.cn(toolbarSearch(), className), children: [
2473
2473
  action.icon,
2474
2474
  /* @__PURE__ */ jsxRuntime.jsx(
2475
2475
  "input",
@@ -2498,8 +2498,8 @@ function InlineAction({ action }) {
2498
2498
  );
2499
2499
  }
2500
2500
  if (action.kind === "dropdown") {
2501
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
2502
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2501
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
2502
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2503
2503
  ToolbarToolButton,
2504
2504
  {
2505
2505
  icon: action.icon,
@@ -2509,7 +2509,7 @@ function InlineAction({ action }) {
2509
2509
  ] })
2510
2510
  }
2511
2511
  ) }),
2512
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuContent, { align: "end", sideOffset: 4, children: action.items.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, i)) })
2512
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuContent, { align: "end", sideOffset: 4, children: action.items.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, i)) })
2513
2513
  ] });
2514
2514
  }
2515
2515
  return /* @__PURE__ */ jsxRuntime.jsx(ActionInput, { action });
@@ -2523,10 +2523,10 @@ function ToolbarActions({
2523
2523
  return null;
2524
2524
  }
2525
2525
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2526
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: appShell.cn("hidden items-center gap-gp-sm md:flex", className), children: [
2526
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: useTheme.cn("hidden items-center gap-gp-sm md:flex", className), children: [
2527
2527
  actions.map((a) => /* @__PURE__ */ jsxRuntime.jsx(InlineAction, { action: a }, a.id)),
2528
- extraItems && extraItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
2529
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2528
+ extraItems && extraItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
2529
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2530
2530
  ToolbarToolButton,
2531
2531
  {
2532
2532
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {}),
@@ -2534,11 +2534,11 @@ function ToolbarActions({
2534
2534
  title: "Mais ações"
2535
2535
  }
2536
2536
  ) }),
2537
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuContent, { align: "end", sideOffset: 4, children: extraItems.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, i)) })
2537
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuContent, { align: "end", sideOffset: 4, children: extraItems.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, i)) })
2538
2538
  ] })
2539
2539
  ] }),
2540
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex md:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
2541
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2540
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex md:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
2541
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
2542
2542
  ToolbarToolButton,
2543
2543
  {
2544
2544
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {}),
@@ -2547,7 +2547,7 @@ function ToolbarActions({
2547
2547
  }
2548
2548
  ) }),
2549
2549
  /* @__PURE__ */ jsxRuntime.jsxs(
2550
- appShell.DropdownMenuContent,
2550
+ useTheme.DropdownMenuContent,
2551
2551
  {
2552
2552
  align: "end",
2553
2553
  sideOffset: 4,
@@ -2572,17 +2572,17 @@ function ToolbarActions({
2572
2572
  }
2573
2573
  if (a.kind === "dropdown") {
2574
2574
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2575
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuLabel, { children: a.label }),
2575
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuLabel, { children: a.label }),
2576
2576
  a.items.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, i))
2577
2577
  ] }, a.id);
2578
2578
  }
2579
2579
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-pad-md py-pad-sm", children: [
2580
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuLabel, { className: "px-0 pb-pad-sm", children: a.label }),
2580
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuLabel, { className: "px-0 pb-pad-sm", children: a.label }),
2581
2581
  /* @__PURE__ */ jsxRuntime.jsx(ActionInput, { action: a, className: "w-full" })
2582
2582
  ] }, a.id);
2583
2583
  }),
2584
2584
  extraItems && extraItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2585
- actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}),
2585
+ actions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}),
2586
2586
  extraItems.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { item: it, idx: i }, `x${i}`))
2587
2587
  ] })
2588
2588
  ]
@@ -2624,7 +2624,7 @@ function BulkActionsBar({
2624
2624
  {
2625
2625
  role: "toolbar",
2626
2626
  "aria-label": "Ações em massa",
2627
- className: appShell.cn(bulkBarRoot(), className),
2627
+ className: useTheme.cn(bulkBarRoot(), className),
2628
2628
  children: [
2629
2629
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: bulkBarCount(), children: [
2630
2630
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { strokeWidth: 2.4 }),
@@ -2647,7 +2647,7 @@ function BulkActionButton({
2647
2647
  }) {
2648
2648
  const darkOverrides = variant === "danger" ? "border border-border-danger-muted" : "dark:bg-transparent dark:shadow-sh-none";
2649
2649
  return /* @__PURE__ */ jsxRuntime.jsx(
2650
- appShell.Button,
2650
+ useTheme.Button,
2651
2651
  {
2652
2652
  color: variant === "danger" ? "critical" : "primary",
2653
2653
  variant: variant === "danger" ? "soft" : "outline",
@@ -2656,7 +2656,7 @@ function BulkActionButton({
2656
2656
  iconLeft: icon,
2657
2657
  onClick,
2658
2658
  disabled,
2659
- className: appShell.cn(darkOverrides, className),
2659
+ className: useTheme.cn(darkOverrides, className),
2660
2660
  ...rest,
2661
2661
  children
2662
2662
  }
@@ -2671,10 +2671,10 @@ function MoreMenu({
2671
2671
  sideOffset = 6,
2672
2672
  className
2673
2673
  }) {
2674
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { open, onOpenChange, children: [
2675
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: trigger }),
2674
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { open, onOpenChange, children: [
2675
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: trigger }),
2676
2676
  /* @__PURE__ */ jsxRuntime.jsx(
2677
- appShell.DropdownMenuContent,
2677
+ useTheme.DropdownMenuContent,
2678
2678
  {
2679
2679
  align,
2680
2680
  sideOffset,
@@ -2764,7 +2764,7 @@ function ColsPanel({
2764
2764
  /* @__PURE__ */ jsxRuntime.jsx(
2765
2765
  "div",
2766
2766
  {
2767
- className: appShell.cn(
2767
+ className: useTheme.cn(
2768
2768
  "flex-1 min-h-0 overflow-y-auto p-[6px] flex flex-col gap-[2px]",
2769
2769
  "[scrollbar-width:thin] [scrollbar-color:var(--color-border-default)_transparent]",
2770
2770
  "[&::-webkit-scrollbar]:w-[6px]",
@@ -2787,7 +2787,7 @@ function ColsPanel({
2787
2787
  onDragOver: (e) => handleDragOver(e, index),
2788
2788
  onDrop: (e) => handleDrop(e, index),
2789
2789
  onDragEnd: handleDragEnd,
2790
- className: appShell.cn(
2790
+ className: useTheme.cn(
2791
2791
  "group/row flex items-center gap-gp-lg px-pad-md py-[4px] rounded-radius-md",
2792
2792
  "transition-[opacity,box-shadow] duration-150",
2793
2793
  "hover:bg-bg-muted",
@@ -2834,7 +2834,7 @@ function ColsPanel({
2834
2834
  "aria-pressed": isPinned,
2835
2835
  "aria-label": typeof col.label === "string" ? isPinned ? `Desfixar ${col.label}` : `Fixar ${col.label}` : void 0,
2836
2836
  title: isPinned ? "Desfixar coluna" : "Fixar coluna",
2837
- className: appShell.cn(
2837
+ className: useTheme.cn(
2838
2838
  "grid place-items-center size-[28px] shrink-0",
2839
2839
  "rounded-radius-md bg-transparent text-fg-muted",
2840
2840
  "transition-[opacity,background-color,color] duration-150",
@@ -2883,13 +2883,13 @@ function ColsPopover({
2883
2883
  className,
2884
2884
  ...panel
2885
2885
  }) {
2886
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange, children: [
2887
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: trigger }),
2886
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange, children: [
2887
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: trigger }),
2888
2888
  /* @__PURE__ */ jsxRuntime.jsx(
2889
- appShell.PopoverContent,
2889
+ useTheme.PopoverContent,
2890
2890
  {
2891
2891
  align,
2892
- className: appShell.cn(
2892
+ className: useTheme.cn(
2893
2893
  "w-[320px] max-w-[calc(100vw-32px)] max-h-[min(480px,calc(100vh-80px))] p-0 flex flex-col min-h-0 overflow-hidden",
2894
2894
  className
2895
2895
  ),
@@ -2938,7 +2938,7 @@ function SortPanel({
2938
2938
  /* @__PURE__ */ jsxRuntime.jsxs(
2939
2939
  "div",
2940
2940
  {
2941
- className: appShell.cn(
2941
+ className: useTheme.cn(
2942
2942
  "flex-1 min-h-0 overflow-y-auto",
2943
2943
  "[scrollbar-width:thin] [scrollbar-color:var(--color-border-default)_transparent]",
2944
2944
  "[&::-webkit-scrollbar]:w-[6px]",
@@ -2960,7 +2960,7 @@ function SortPanel({
2960
2960
  {
2961
2961
  type: "button",
2962
2962
  onClick: () => toggleDir(i),
2963
- className: appShell.cn(
2963
+ className: useTheme.cn(
2964
2964
  "inline-flex items-center gap-gp-xs h-[22px] px-pad-md shrink-0",
2965
2965
  "rounded-radius-sm bg-bg-muted text-fg-default text-caption-sm font-medium",
2966
2966
  "outline-none cursor-pointer",
@@ -2980,7 +2980,7 @@ function SortPanel({
2980
2980
  type: "button",
2981
2981
  onClick: () => remove(i),
2982
2982
  "aria-label": "Remover critério",
2983
- className: appShell.cn(
2983
+ className: useTheme.cn(
2984
2984
  "grid place-items-center size-[22px] shrink-0",
2985
2985
  "rounded-radius-sm bg-transparent text-fg-muted",
2986
2986
  "outline-none cursor-pointer",
@@ -3007,7 +3007,7 @@ function SortPanel({
3007
3007
  {
3008
3008
  type: "button",
3009
3009
  onClick: () => addSort(col.key),
3010
- className: appShell.cn(
3010
+ className: useTheme.cn(
3011
3011
  "group/add flex items-center gap-gp-md w-full",
3012
3012
  "px-pad-md py-pad-sm rounded-radius-md",
3013
3013
  "bg-transparent border-0 cursor-pointer outline-none text-left",
@@ -3052,13 +3052,13 @@ function SortPopover({
3052
3052
  className,
3053
3053
  ...panel
3054
3054
  }) {
3055
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange, children: [
3056
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: trigger }),
3055
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange, children: [
3056
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: trigger }),
3057
3057
  /* @__PURE__ */ jsxRuntime.jsx(
3058
- appShell.PopoverContent,
3058
+ useTheme.PopoverContent,
3059
3059
  {
3060
3060
  align,
3061
- className: appShell.cn(
3061
+ className: useTheme.cn(
3062
3062
  "w-[300px] max-w-[calc(100vw-32px)] max-h-[min(480px,calc(100vh-80px))] p-0 flex flex-col min-h-0 overflow-hidden",
3063
3063
  className
3064
3064
  ),
@@ -3101,15 +3101,15 @@ function ViewsPopover({
3101
3101
  return name.includes(q) || author.includes(q);
3102
3102
  });
3103
3103
  }, [views, tab2, search, myOwnerKey, hideTabs]);
3104
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange, children: [
3105
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: trigger }),
3104
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange, children: [
3105
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: trigger }),
3106
3106
  /* @__PURE__ */ jsxRuntime.jsxs(
3107
- appShell.PopoverContent,
3107
+ useTheme.PopoverContent,
3108
3108
  {
3109
3109
  align,
3110
3110
  role: "dialog",
3111
3111
  "aria-label": "Visualizações",
3112
- className: appShell.cn(
3112
+ className: useTheme.cn(
3113
3113
  "w-[280px] max-w-[calc(100vw-32px)] max-h-[min(480px,calc(100vh-80px))] p-0 flex flex-col min-h-0 overflow-hidden",
3114
3114
  className
3115
3115
  ),
@@ -3127,7 +3127,7 @@ function ViewsPopover({
3127
3127
  role: "tab",
3128
3128
  "aria-selected": tab2 === "all",
3129
3129
  onClick: () => setTab("all"),
3130
- className: appShell.cn(
3130
+ className: useTheme.cn(
3131
3131
  "flex-1 h-form-sm px-pad-lg rounded-radius-sm",
3132
3132
  "text-body-xs font-medium cursor-pointer outline-none focus-visible:shadow-sh-ring",
3133
3133
  "transition-[background-color,color,box-shadow] duration-150",
@@ -3143,7 +3143,7 @@ function ViewsPopover({
3143
3143
  role: "tab",
3144
3144
  "aria-selected": tab2 === "mine",
3145
3145
  onClick: () => setTab("mine"),
3146
- className: appShell.cn(
3146
+ className: useTheme.cn(
3147
3147
  "flex-1 h-form-sm px-pad-lg rounded-radius-sm",
3148
3148
  "text-body-xs font-medium cursor-pointer outline-none focus-visible:shadow-sh-ring",
3149
3149
  "transition-[background-color,color,box-shadow] duration-150",
@@ -3180,7 +3180,7 @@ function ViewsPopover({
3180
3180
  "div",
3181
3181
  {
3182
3182
  role: "list",
3183
- className: appShell.cn(
3183
+ className: useTheme.cn(
3184
3184
  "flex-1 min-h-0 overflow-y-auto p-pad-md flex flex-col gap-[2px]",
3185
3185
  "[scrollbar-width:thin] [scrollbar-color:var(--color-border-default)_transparent]",
3186
3186
  "[&::-webkit-scrollbar]:w-[6px]",
@@ -3194,7 +3194,7 @@ function ViewsPopover({
3194
3194
  "div",
3195
3195
  {
3196
3196
  role: "listitem",
3197
- className: appShell.cn(
3197
+ className: useTheme.cn(
3198
3198
  "group/view flex items-stretch gap-[2px] rounded-radius-md",
3199
3199
  isActive2 && "bg-bg-brand-subtle"
3200
3200
  ),
@@ -3204,7 +3204,7 @@ function ViewsPopover({
3204
3204
  {
3205
3205
  type: "button",
3206
3206
  onClick: () => onApply?.(view),
3207
- className: appShell.cn(
3207
+ className: useTheme.cn(
3208
3208
  "flex-1 flex items-center gap-gp-md min-w-0",
3209
3209
  "px-pad-md py-pad-sm rounded-radius-md",
3210
3210
  "bg-transparent border-0 cursor-pointer outline-none text-left",
@@ -3215,7 +3215,7 @@ function ViewsPopover({
3215
3215
  /* @__PURE__ */ jsxRuntime.jsx(
3216
3216
  "span",
3217
3217
  {
3218
- className: appShell.cn(
3218
+ className: useTheme.cn(
3219
3219
  "flex-1 text-body-sm font-normal truncate",
3220
3220
  isActive2 ? "font-semibold" : "font-medium"
3221
3221
  ),
@@ -3236,7 +3236,7 @@ function ViewsPopover({
3236
3236
  onClick: () => onDelete(view.id),
3237
3237
  "aria-label": typeof view.name === "string" ? `Excluir ${view.name}` : "Excluir",
3238
3238
  title: "Excluir",
3239
- className: appShell.cn(
3239
+ className: useTheme.cn(
3240
3240
  "grid place-items-center size-[28px] shrink-0 self-center",
3241
3241
  "mr-pad-sm",
3242
3242
  // respiro da borda direita (= sandbox)
@@ -3263,7 +3263,7 @@ function ViewsPopover({
3263
3263
  {
3264
3264
  type: "button",
3265
3265
  onClick: onCreate,
3266
- className: appShell.cn(
3266
+ className: useTheme.cn(
3267
3267
  "flex items-center justify-center gap-gp-sm w-full",
3268
3268
  "h-form-md px-pad-xl rounded-radius-lg",
3269
3269
  "bg-bg-surface dark:bg-bg-muted",
@@ -3287,7 +3287,7 @@ function ViewsPopover({
3287
3287
  )
3288
3288
  ] });
3289
3289
  }
3290
- const dialog = appShell.tv({
3290
+ const dialog = useTheme.tv({
3291
3291
  base: [
3292
3292
  // Override do DialogContent default (grid + p-pad-4xl + rounded-radius-base + shadow-sh-xl)
3293
3293
  "!gap-0 !p-0",
@@ -3301,7 +3301,7 @@ const dialog = appShell.tv({
3301
3301
  "flex flex-col overflow-hidden"
3302
3302
  ]
3303
3303
  });
3304
- const closeBtn = appShell.tv({
3304
+ const closeBtn = useTheme.tv({
3305
3305
  base: [
3306
3306
  "absolute top-[14px] right-[14px] z-[1]",
3307
3307
  "grid place-items-center size-[28px]",
@@ -3313,7 +3313,7 @@ const closeBtn = appShell.tv({
3313
3313
  "dark:hover:bg-bg-muted-hover"
3314
3314
  ]
3315
3315
  });
3316
- const head = appShell.tv({
3316
+ const head = useTheme.tv({
3317
3317
  base: [
3318
3318
  "flex items-center gap-[14px]",
3319
3319
  // sandbox 14px (não tem na escala)
@@ -3322,7 +3322,7 @@ const head = appShell.tv({
3322
3322
  "border-b border-border-default"
3323
3323
  ]
3324
3324
  });
3325
- const headIcon = appShell.tv({
3325
+ const headIcon = useTheme.tv({
3326
3326
  base: [
3327
3327
  "shrink-0 grid place-items-center size-form-lg",
3328
3328
  // 40×40 — sandbox
@@ -3331,7 +3331,7 @@ const headIcon = appShell.tv({
3331
3331
  "dark:bg-bg-accent dark:border-border-subtle"
3332
3332
  ]
3333
3333
  });
3334
- const headTitleWrap = appShell.tv({
3334
+ const headTitleWrap = useTheme.tv({
3335
3335
  base: [
3336
3336
  "flex-1 min-w-0",
3337
3337
  // Reserva espaço pro X close do DialogContent (absolute right-4 / size ~24px)
@@ -3339,7 +3339,7 @@ const headTitleWrap = appShell.tv({
3339
3339
  "pr-pad-3xl"
3340
3340
  ]
3341
3341
  });
3342
- const title = appShell.tv({
3342
+ const title = useTheme.tv({
3343
3343
  base: [
3344
3344
  "m-0 mb-[2px]",
3345
3345
  // leading-[1.3] balanceia o bloco verticalmente com o icon container 40px
@@ -3349,13 +3349,13 @@ const title = appShell.tv({
3349
3349
  "tracking-[-0.01em]"
3350
3350
  ]
3351
3351
  });
3352
- const sub = appShell.tv({
3352
+ const sub = useTheme.tv({
3353
3353
  base: "m-0 text-body-xs font-normal text-fg-muted leading-[1.45]"
3354
3354
  });
3355
- const body = appShell.tv({
3355
+ const body = useTheme.tv({
3356
3356
  base: "flex flex-col gap-[18px] px-pad-4xl py-[22px]"
3357
3357
  });
3358
- const toggleRow = appShell.tv({
3358
+ const toggleRow = useTheme.tv({
3359
3359
  base: [
3360
3360
  "flex items-center gap-gp-xl",
3361
3361
  // 12px — sandbox
@@ -3371,7 +3371,7 @@ const toggleRow = appShell.tv({
3371
3371
  }
3372
3372
  }
3373
3373
  });
3374
- const toggleIcon = appShell.tv({
3374
+ const toggleIcon = useTheme.tv({
3375
3375
  base: [
3376
3376
  "shrink-0 grid place-items-center size-form-md rounded-radius-lg",
3377
3377
  // 36×36 / radius-lg=10px
@@ -3385,16 +3385,16 @@ const toggleIcon = appShell.tv({
3385
3385
  }
3386
3386
  }
3387
3387
  });
3388
- const toggleText = appShell.tv({
3388
+ const toggleText = useTheme.tv({
3389
3389
  base: "flex-1 min-w-0 flex flex-col gap-[3px]"
3390
3390
  });
3391
- const toggleLabel = appShell.tv({
3391
+ const toggleLabel = useTheme.tv({
3392
3392
  base: "text-body-md font-semibold text-fg-default leading-[1.3]"
3393
3393
  });
3394
- const toggleDesc = appShell.tv({
3394
+ const toggleDesc = useTheme.tv({
3395
3395
  base: "text-body-xs font-normal text-fg-muted leading-[1.45]"
3396
3396
  });
3397
- const foot = appShell.tv({
3397
+ const foot = useTheme.tv({
3398
3398
  base: [
3399
3399
  "flex items-center justify-end gap-gp-lg",
3400
3400
  // 10px — sandbox
@@ -3417,13 +3417,13 @@ function AddViewModal({ open, onClose, onSubmit }) {
3417
3417
  await onSubmit?.({ name: trimmed, isPublic });
3418
3418
  onClose();
3419
3419
  };
3420
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(appShell.DialogContent, { className: dialog(), hideClose: true, children: [
3421
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DialogClose, { className: closeBtn(), "aria-label": "Fechar", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-icon-sm" }) }),
3420
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DialogContent, { className: dialog(), hideClose: true, children: [
3421
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DialogClose, { className: closeBtn(), "aria-label": "Fechar", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-icon-sm" }) }),
3422
3422
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: head(), children: [
3423
3423
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: headIcon(), "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-icon-md", strokeWidth: 1.7 }) }),
3424
3424
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: headTitleWrap(), children: [
3425
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { className: title(), children: "Adicionar nova visão" }) }),
3426
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DialogDescription, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: sub(), children: "Salve sua configuração atual de filtros e colunas" }) })
3425
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { className: title(), children: "Adicionar nova visão" }) }),
3426
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DialogDescription, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: sub(), children: "Salve sua configuração atual de filtros e colunas" }) })
3427
3427
  ] })
3428
3428
  ] }),
3429
3429
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: body(), children: [
@@ -3454,7 +3454,7 @@ function AddViewModal({ open, onClose, onSubmit }) {
3454
3454
  ] }),
3455
3455
  /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: foot(), children: [
3456
3456
  /* @__PURE__ */ jsxRuntime.jsx(
3457
- appShell.Button,
3457
+ useTheme.Button,
3458
3458
  {
3459
3459
  color: "secondary",
3460
3460
  variant: "outline",
@@ -3464,7 +3464,7 @@ function AddViewModal({ open, onClose, onSubmit }) {
3464
3464
  }
3465
3465
  ),
3466
3466
  /* @__PURE__ */ jsxRuntime.jsx(
3467
- appShell.Button,
3467
+ useTheme.Button,
3468
3468
  {
3469
3469
  color: "primary",
3470
3470
  variant: "filled",
@@ -3799,12 +3799,12 @@ function isFilterEntryActive(entry) {
3799
3799
  }
3800
3800
  return true;
3801
3801
  }
3802
- const FIELD_BASE = appShell.cn(
3802
+ const FIELD_BASE = useTheme.cn(
3803
3803
  "min-h-form-md h-form-md min-w-0 w-full",
3804
3804
  "rounded-radius-md",
3805
3805
  "text-body-sm font-normal"
3806
3806
  );
3807
- const INPUT_FIELD = appShell.cn(
3807
+ const INPUT_FIELD = useTheme.cn(
3808
3808
  FIELD_BASE,
3809
3809
  "px-pad-xl",
3810
3810
  "bg-bg-input dark:bg-bg-muted",
@@ -3845,7 +3845,7 @@ function FilterRowEditor({
3845
3845
  return /* @__PURE__ */ jsxRuntime.jsxs(
3846
3846
  "div",
3847
3847
  {
3848
- className: appShell.cn(
3848
+ className: useTheme.cn(
3849
3849
  // Mobile: vertical (1 select por linha). sm+: horizontal alinhado.
3850
3850
  "flex flex-col sm:flex-row sm:items-center gap-gp-md"
3851
3851
  ),
@@ -3864,7 +3864,7 @@ function FilterRowEditor({
3864
3864
  const nextOp = opValid2 ? filter.op : newOperators[0]?.id ?? filter.op;
3865
3865
  onChange({ ...filter, columnKey: v, op: nextOp, value: "" });
3866
3866
  },
3867
- className: appShell.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3867
+ className: useTheme.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3868
3868
  align: "start",
3869
3869
  "aria-label": "Campo",
3870
3870
  searchPlaceholder: "Buscar campo…",
@@ -3880,7 +3880,7 @@ function FilterRowEditor({
3880
3880
  /* @__PURE__ */ jsxRuntime.jsx(
3881
3881
  SelectTrigger,
3882
3882
  {
3883
- className: appShell.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3883
+ className: useTheme.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3884
3884
  "aria-label": "Operador",
3885
3885
  children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, {})
3886
3886
  }
@@ -3898,7 +3898,7 @@ function FilterRowEditor({
3898
3898
  /* @__PURE__ */ jsxRuntime.jsx(
3899
3899
  SelectTrigger,
3900
3900
  {
3901
- className: appShell.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3901
+ className: useTheme.cn(FIELD_BASE, "px-pad-xl gap-gp-md"),
3902
3902
  "aria-label": "Valor",
3903
3903
  children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, { placeholder: "Selecione…" })
3904
3904
  }
@@ -3918,7 +3918,7 @@ function FilterRowEditor({
3918
3918
  }
3919
3919
  ) }),
3920
3920
  /* @__PURE__ */ jsxRuntime.jsx(
3921
- appShell.Button,
3921
+ useTheme.Button,
3922
3922
  {
3923
3923
  color: "secondary",
3924
3924
  variant: "ghost",
@@ -4051,7 +4051,7 @@ function FilterPanel({
4051
4051
  role: "tab",
4052
4052
  "aria-selected": mode === "visual",
4053
4053
  onClick: () => setMode("visual"),
4054
- className: appShell.cn(
4054
+ className: useTheme.cn(
4055
4055
  "h-[30px] px-pad-lg rounded-radius-sm text-body-xs font-medium cursor-pointer outline-none focus-visible:shadow-sh-ring",
4056
4056
  "transition-[background-color,color,box-shadow] duration-150",
4057
4057
  mode === "visual" ? "bg-bg-accent text-fg-default font-semibold shadow-sh-sm" : "bg-transparent text-fg-muted hover:text-fg-default"
@@ -4066,7 +4066,7 @@ function FilterPanel({
4066
4066
  role: "tab",
4067
4067
  "aria-selected": mode === "advanced",
4068
4068
  onClick: () => setMode("advanced"),
4069
- className: appShell.cn(
4069
+ className: useTheme.cn(
4070
4070
  "h-[30px] px-pad-lg rounded-radius-sm text-body-xs font-medium cursor-pointer outline-none focus-visible:shadow-sh-ring",
4071
4071
  "transition-[background-color,color,box-shadow] duration-150",
4072
4072
  mode === "advanced" ? "bg-bg-accent text-fg-default font-semibold shadow-sh-sm" : "bg-transparent text-fg-muted hover:text-fg-default"
@@ -4093,7 +4093,7 @@ function FilterPanel({
4093
4093
  {
4094
4094
  type: "button",
4095
4095
  onClick: addRow,
4096
- className: appShell.cn(
4096
+ className: useTheme.cn(
4097
4097
  "inline-flex items-center gap-gp-sm h-form-md px-pad-2xl rounded-radius-lg",
4098
4098
  "bg-bg-brand text-fg-on-brand",
4099
4099
  "text-body-sm font-semibold cursor-pointer outline-none",
@@ -4111,7 +4111,7 @@ function FilterPanel({
4111
4111
  /* @__PURE__ */ jsxRuntime.jsx(
4112
4112
  "div",
4113
4113
  {
4114
- className: appShell.cn(
4114
+ className: useTheme.cn(
4115
4115
  "flex-1 min-h-0 overflow-y-auto",
4116
4116
  "[scrollbar-width:thin] [scrollbar-color:var(--color-border-default)_transparent]",
4117
4117
  "[&::-webkit-scrollbar]:w-[6px]",
@@ -4145,7 +4145,7 @@ function FilterPanel({
4145
4145
  {
4146
4146
  type: "button",
4147
4147
  onClick: addRow,
4148
- className: appShell.cn(
4148
+ className: useTheme.cn(
4149
4149
  "flex items-center justify-center gap-gp-sm w-full",
4150
4150
  "min-h-form-md px-pad-xl rounded-radius-md",
4151
4151
  "bg-transparent text-fg-muted",
@@ -4193,7 +4193,7 @@ function FilterPanel({
4193
4193
  placeholder: `-- Ex:
4194
4194
  status = "active"
4195
4195
  AND value > 1000`,
4196
- className: appShell.cn(
4196
+ className: useTheme.cn(
4197
4197
  "w-full px-pad-xl py-pad-md rounded-radius-md",
4198
4198
  "bg-bg-input dark:bg-bg-muted",
4199
4199
  "border",
@@ -4211,7 +4211,7 @@ AND value > 1000`,
4211
4211
  {
4212
4212
  type: "button",
4213
4213
  onClick: applyAdvanced,
4214
- className: appShell.cn(
4214
+ className: useTheme.cn(
4215
4215
  "self-end px-pad-xl h-form-md rounded-radius-md",
4216
4216
  "bg-bg-brand text-fg-on-brand",
4217
4217
  "text-body-xs font-semibold",
@@ -4229,7 +4229,7 @@ AND value > 1000`,
4229
4229
  type: "button",
4230
4230
  onClick: clearAll,
4231
4231
  disabled: filters.length === 0,
4232
- className: appShell.cn(
4232
+ className: useTheme.cn(
4233
4233
  "text-body-xs font-medium text-fg-brand bg-transparent border-0 p-0 cursor-pointer outline-none",
4234
4234
  "hover:underline focus-visible:underline underline-offset-2",
4235
4235
  "disabled:opacity-50 disabled:pointer-events-none disabled:no-underline"
@@ -4250,17 +4250,17 @@ function FilterPopover({
4250
4250
  className,
4251
4251
  ...panel
4252
4252
  }) {
4253
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange, children: [
4253
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange, children: [
4254
4254
  anchor ? (
4255
4255
  // Anchor mode: posiciona o popover mas NÃO dispara abertura — consumer
4256
4256
  // controla via prop `open` externa (split button pattern).
4257
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverAnchor, { asChild: true, children: anchor })
4258
- ) : /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: trigger }),
4257
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverAnchor, { asChild: true, children: anchor })
4258
+ ) : /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: trigger }),
4259
4259
  /* @__PURE__ */ jsxRuntime.jsx(
4260
- appShell.PopoverContent,
4260
+ useTheme.PopoverContent,
4261
4261
  {
4262
4262
  align,
4263
- className: appShell.cn(
4263
+ className: useTheme.cn(
4264
4264
  "w-[560px] max-w-[calc(100vw-32px)] max-h-[min(480px,calc(100vh-80px))] p-0 flex flex-col min-h-0 overflow-hidden",
4265
4265
  className
4266
4266
  ),
@@ -4269,7 +4269,7 @@ function FilterPopover({
4269
4269
  )
4270
4270
  ] });
4271
4271
  }
4272
- const MENU_ITEM = appShell.cn(
4272
+ const MENU_ITEM = useTheme.cn(
4273
4273
  "group/row relative flex items-center gap-pad-lg w-full",
4274
4274
  "px-pad-lg py-pad-md rounded-radius-sm",
4275
4275
  "bg-transparent border-0 cursor-pointer outline-none text-left",
@@ -4348,7 +4348,7 @@ function ToolbarSettingsMenu({
4348
4348
  mobileViews.onSelect(item.id);
4349
4349
  onBack();
4350
4350
  },
4351
- className: appShell.cn(
4351
+ className: useTheme.cn(
4352
4352
  MENU_ITEM,
4353
4353
  isActive2 && "bg-bg-brand-subtle text-fg-brand [&_svg]:text-fg-brand hover:bg-bg-brand-subtle hover:text-fg-brand"
4354
4354
  ),
@@ -4365,13 +4365,13 @@ function ToolbarSettingsMenu({
4365
4365
  }
4366
4366
  const active = entries.find((e) => e.view === view);
4367
4367
  const wide = view === "filter";
4368
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { open, onOpenChange: handleOpenChange, children: [
4369
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: trigger }),
4368
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { open, onOpenChange: handleOpenChange, children: [
4369
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: trigger }),
4370
4370
  /* @__PURE__ */ jsxRuntime.jsx(
4371
- appShell.PopoverContent,
4371
+ useTheme.PopoverContent,
4372
4372
  {
4373
4373
  align,
4374
- className: appShell.cn(
4374
+ className: useTheme.cn(
4375
4375
  "w-[320px] max-w-[calc(100vw-32px)] max-h-[min(520px,calc(100vh-80px))] p-0 flex flex-col min-h-0 overflow-hidden",
4376
4376
  wide && "md:w-[550px]",
4377
4377
  className
@@ -4390,7 +4390,7 @@ function ToolbarSettingsMenu({
4390
4390
  {
4391
4391
  type: "button",
4392
4392
  onClick: () => setView(e.view),
4393
- className: appShell.cn(MENU_ITEM, e.mobileOnly && "md:hidden"),
4393
+ className: useTheme.cn(MENU_ITEM, e.mobileOnly && "md:hidden"),
4394
4394
  children: [
4395
4395
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { strokeWidth: 1.8 }),
4396
4396
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 truncate", children: e.label }),
@@ -4403,17 +4403,17 @@ function ToolbarSettingsMenu({
4403
4403
  }),
4404
4404
  mobileViewToggle && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden flex flex-col", children: [
4405
4405
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_SEP }),
4406
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(MENU_LABEL, "pb-pad-lg"), children: viewToggleLabel }),
4406
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(MENU_LABEL, "pb-pad-lg"), children: viewToggleLabel }),
4407
4407
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_FIELD, children: mobileViewToggle })
4408
4408
  ] }),
4409
4409
  mobileDisplayToggle && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden flex flex-col", children: [
4410
4410
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_SEP }),
4411
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(MENU_LABEL, "pb-pad-lg"), children: mobileDisplayLabel }),
4411
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(MENU_LABEL, "pb-pad-lg"), children: mobileDisplayLabel }),
4412
4412
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_FIELD, children: mobileDisplayToggle })
4413
4413
  ] }),
4414
4414
  density && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
4415
4415
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_SEP }),
4416
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(MENU_LABEL, "pb-pad-lg"), children: densityLabel }),
4416
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(MENU_LABEL, "pb-pad-lg"), children: densityLabel }),
4417
4417
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: MENU_FIELD, children: density })
4418
4418
  ] })
4419
4419
  ] })
@@ -4422,7 +4422,7 @@ function ToolbarSettingsMenu({
4422
4422
  )
4423
4423
  ] });
4424
4424
  }
4425
- const floatingPanelStyles = appShell.tv({
4425
+ const floatingPanelStyles = useTheme.tv({
4426
4426
  slots: {
4427
4427
  root: [
4428
4428
  "fixed z-50 flex flex-col overflow-hidden",
@@ -4649,7 +4649,7 @@ function FloatingPanel({
4649
4649
  "aria-labelledby": title2 ? titleId : void 0,
4650
4650
  "aria-describedby": description ? descId : void 0,
4651
4651
  style: maximized ? void 0 : { width: widthValue },
4652
- className: appShell.cn(s.root(), className),
4652
+ className: useTheme.cn(s.root(), className),
4653
4653
  children: [
4654
4654
  resizable && !maximized && /* @__PURE__ */ jsxRuntime.jsx(
4655
4655
  "button",
@@ -4676,7 +4676,7 @@ function FloatingPanel({
4676
4676
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.headerActions(), children: [
4677
4677
  headerActions,
4678
4678
  maximizable && /* @__PURE__ */ jsxRuntime.jsx(
4679
- appShell.Button,
4679
+ useTheme.Button,
4680
4680
  {
4681
4681
  type: "button",
4682
4682
  variant: "soft",
@@ -4689,7 +4689,7 @@ function FloatingPanel({
4689
4689
  }
4690
4690
  ),
4691
4691
  !hideClose && /* @__PURE__ */ jsxRuntime.jsx(
4692
- appShell.Button,
4692
+ useTheme.Button,
4693
4693
  {
4694
4694
  type: "button",
4695
4695
  variant: "soft",
@@ -4711,7 +4711,7 @@ function FloatingPanel({
4711
4711
  document.body
4712
4712
  );
4713
4713
  }
4714
- const partStyles = appShell.tv({
4714
+ const partStyles = useTheme.tv({
4715
4715
  slots: {
4716
4716
  section: "border-b border-border-default last:border-b-0",
4717
4717
  head: [
@@ -4754,7 +4754,7 @@ function FloatingPanelSection({
4754
4754
  "aria-expanded": open,
4755
4755
  children: [
4756
4756
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: title2 }),
4757
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: appShell.cn(s.chev(), open && "rotate-180") })
4757
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: useTheme.cn(s.chev(), open && "rotate-180") })
4758
4758
  ]
4759
4759
  }
4760
4760
  ),
@@ -4803,7 +4803,7 @@ class ColumnTypeRegistry {
4803
4803
  }
4804
4804
  }
4805
4805
  const columnTypeRegistry = new ColumnTypeRegistry();
4806
- const FILTER_FIELD_CLASS = appShell.cn(
4806
+ const FILTER_FIELD_CLASS = useTheme.cn(
4807
4807
  // Box-model
4808
4808
  "flex min-h-form-md h-form-md w-full items-center justify-between gap-gp-md",
4809
4809
  "rounded-radius-md px-pad-xl",
@@ -4817,7 +4817,7 @@ const FILTER_FIELD_CLASS = appShell.cn(
4817
4817
  "focus-visible:border-border-brand focus-visible:shadow-sh-ring",
4818
4818
  "data-[state=open]:border-border-brand data-[state=open]:shadow-sh-ring"
4819
4819
  );
4820
- const FILTER_FIELD_SIZE = appShell.cn(
4820
+ const FILTER_FIELD_SIZE = useTheme.cn(
4821
4821
  "min-h-form-md h-form-md rounded-radius-md"
4822
4822
  );
4823
4823
  function FastSingleSelectList({
@@ -4836,7 +4836,7 @@ function FastSingleSelectList({
4836
4836
  role: "option",
4837
4837
  "aria-selected": isSel,
4838
4838
  onClick: () => onSelect(opt.value),
4839
- className: appShell.cn(
4839
+ className: useTheme.cn(
4840
4840
  "flex items-center gap-gp-md w-full px-pad-md py-pad-sm rounded-radius-md",
4841
4841
  "text-body-md text-fg-default text-left cursor-pointer",
4842
4842
  "hover:bg-bg-muted focus-visible:bg-bg-muted focus-visible:outline-none",
@@ -4846,7 +4846,7 @@ function FastSingleSelectList({
4846
4846
  /* @__PURE__ */ jsxRuntime.jsx(
4847
4847
  lucideReact.Check,
4848
4848
  {
4849
- className: appShell.cn(
4849
+ className: useTheme.cn(
4850
4850
  "size-icon-sm shrink-0 text-fg-brand",
4851
4851
  isSel ? "opacity-100" : "opacity-0"
4852
4852
  ),
@@ -5054,73 +5054,73 @@ function Calendar({
5054
5054
  reactDayPicker.DayPicker,
5055
5055
  {
5056
5056
  showOutsideDays,
5057
- className: appShell.cn(
5057
+ className: useTheme.cn(
5058
5058
  "group/calendar bg-transparent p-0 [--cell-size:2.5rem]",
5059
5059
  className
5060
5060
  ),
5061
5061
  captionLayout,
5062
5062
  classNames: {
5063
- root: appShell.cn("w-full", defaultClassNames.root),
5064
- months: appShell.cn("relative flex flex-col gap-gp-2xl sm:flex-row sm:gap-gp-4xl", defaultClassNames.months),
5065
- month: appShell.cn("flex w-full flex-col gap-gp-2xl", defaultClassNames.month),
5066
- nav: appShell.cn(
5063
+ root: useTheme.cn("w-full", defaultClassNames.root),
5064
+ months: useTheme.cn("relative flex flex-col gap-gp-2xl sm:flex-row sm:gap-gp-4xl", defaultClassNames.months),
5065
+ month: useTheme.cn("flex w-full flex-col gap-gp-2xl", defaultClassNames.month),
5066
+ nav: useTheme.cn(
5067
5067
  "absolute inset-x-0 top-0 flex w-full items-center justify-between",
5068
5068
  defaultClassNames.nav
5069
5069
  ),
5070
- button_previous: appShell.cn(
5070
+ button_previous: useTheme.cn(
5071
5071
  "inline-flex items-center justify-center size-[--cell-size] rounded-full text-fg-muted hover:bg-bg-muted transition-colors select-none aria-disabled:opacity-30",
5072
5072
  defaultClassNames.button_previous
5073
5073
  ),
5074
- button_next: appShell.cn(
5074
+ button_next: useTheme.cn(
5075
5075
  "inline-flex items-center justify-center size-[--cell-size] rounded-full text-fg-muted hover:bg-bg-muted transition-colors select-none aria-disabled:opacity-30",
5076
5076
  defaultClassNames.button_next
5077
5077
  ),
5078
- month_caption: appShell.cn(
5078
+ month_caption: useTheme.cn(
5079
5079
  "flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]",
5080
5080
  defaultClassNames.month_caption
5081
5081
  ),
5082
- caption_label: appShell.cn(
5082
+ caption_label: useTheme.cn(
5083
5083
  "text-body-md font-medium font-semibold select-none",
5084
5084
  captionLayout === "dropdown" ? "hidden" : "",
5085
5085
  defaultClassNames.caption_label
5086
5086
  ),
5087
- dropdowns: appShell.cn(
5087
+ dropdowns: useTheme.cn(
5088
5088
  "flex items-center gap-gp-md",
5089
5089
  defaultClassNames.dropdowns
5090
5090
  ),
5091
- dropdown: appShell.cn(
5091
+ dropdown: useTheme.cn(
5092
5092
  "cursor-pointer appearance-none bg-transparent text-body-md font-medium font-semibold text-fg-default outline-none",
5093
5093
  defaultClassNames.dropdown
5094
5094
  ),
5095
- months_dropdown: appShell.cn("", defaultClassNames.months_dropdown),
5096
- years_dropdown: appShell.cn("", defaultClassNames.years_dropdown),
5095
+ months_dropdown: useTheme.cn("", defaultClassNames.months_dropdown),
5096
+ years_dropdown: useTheme.cn("", defaultClassNames.years_dropdown),
5097
5097
  table: "w-full border-collapse",
5098
- weekdays: appShell.cn("flex", defaultClassNames.weekdays),
5099
- weekday: appShell.cn(
5098
+ weekdays: useTheme.cn("flex", defaultClassNames.weekdays),
5099
+ weekday: useTheme.cn(
5100
5100
  "flex-1 min-w-8 max-w-12 text-body-sm font-normal text-fg-muted select-none text-center",
5101
5101
  defaultClassNames.weekday
5102
5102
  ),
5103
- week: appShell.cn("mt-gp-md flex w-full", defaultClassNames.week),
5104
- day: appShell.cn(
5103
+ week: useTheme.cn("mt-gp-md flex w-full", defaultClassNames.week),
5104
+ day: useTheme.cn(
5105
5105
  // flex-1: cada dia ocupa 1/7 igual ao header de weekdays (que usa flex-1).
5106
5106
  // Sem isso o dia dimensionava por aspect-square e desalinhava das colunas.
5107
5107
  "group/day relative flex-1 aspect-square min-w-8 max-w-12 p-0 text-center select-none",
5108
5108
  defaultClassNames.day
5109
5109
  ),
5110
- range_start: appShell.cn("rounded-l-full", defaultClassNames.range_start),
5111
- range_end: appShell.cn("rounded-r-full", defaultClassNames.range_end),
5112
- range_middle: appShell.cn("", defaultClassNames.range_middle),
5113
- today: appShell.cn("", defaultClassNames.today),
5114
- outside: appShell.cn(
5110
+ range_start: useTheme.cn("rounded-l-full", defaultClassNames.range_start),
5111
+ range_end: useTheme.cn("rounded-r-full", defaultClassNames.range_end),
5112
+ range_middle: useTheme.cn("", defaultClassNames.range_middle),
5113
+ today: useTheme.cn("", defaultClassNames.today),
5114
+ outside: useTheme.cn(
5115
5115
  "text-fg-subtle opacity-40",
5116
5116
  defaultClassNames.outside
5117
5117
  ),
5118
- disabled: appShell.cn("text-fg-disabled opacity-50", defaultClassNames.disabled),
5119
- hidden: appShell.cn("invisible", defaultClassNames.hidden),
5118
+ disabled: useTheme.cn("text-fg-disabled opacity-50", defaultClassNames.disabled),
5119
+ hidden: useTheme.cn("invisible", defaultClassNames.hidden),
5120
5120
  ...classNames
5121
5121
  },
5122
5122
  components: {
5123
- Root: ({ className: rootCn, rootRef, ...rootProps }) => /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "calendar", ref: rootRef, className: appShell.cn(rootCn), ...rootProps }),
5123
+ Root: ({ className: rootCn, rootRef, ...rootProps }) => /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "calendar", ref: rootRef, className: useTheme.cn(rootCn), ...rootProps }),
5124
5124
  Chevron: ({ orientation }) => {
5125
5125
  if (orientation === "left") return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "size-4" });
5126
5126
  return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "size-4" });
@@ -5155,7 +5155,7 @@ function CalendarDayButton({
5155
5155
  "data-range-start": isRangeStart || void 0,
5156
5156
  "data-range-end": isRangeEnd || void 0,
5157
5157
  "data-range-middle": isRangeMiddle || void 0,
5158
- className: appShell.cn(
5158
+ className: useTheme.cn(
5159
5159
  "relative flex aspect-square w-full items-center justify-center text-body-md font-normal leading-none outline-none transition-colors",
5160
5160
  // Default shape
5161
5161
  "rounded-full",
@@ -5217,12 +5217,12 @@ const DateColumnType = {
5217
5217
  }
5218
5218
  return formatShort$1(value);
5219
5219
  })();
5220
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { children: [
5221
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
5220
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { children: [
5221
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
5222
5222
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: displayValue ? "truncate" : "text-fg-muted opacity-70 truncate", children: displayValue || (isRange ? "Selecione período" : "Selecione data") }),
5223
5223
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "size-icon-xs text-fg-muted shrink-0" })
5224
5224
  ] }) }),
5225
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverContent, { align: "start", className: "p-pad-md w-auto", children: isRange ? /* @__PURE__ */ jsxRuntime.jsx(
5225
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverContent, { align: "start", className: "p-pad-md w-auto", children: isRange ? /* @__PURE__ */ jsxRuntime.jsx(
5226
5226
  Calendar,
5227
5227
  {
5228
5228
  mode: "range",
@@ -5392,7 +5392,7 @@ function MultiSelectDropdown({
5392
5392
  return /* @__PURE__ */ jsxRuntime.jsxs(
5393
5393
  "label",
5394
5394
  {
5395
- className: appShell.cn(
5395
+ className: useTheme.cn(
5396
5396
  "flex items-center gap-gp-md w-full",
5397
5397
  "px-pad-md py-pad-sm rounded-radius-md",
5398
5398
  "text-body-md text-fg-default text-left cursor-pointer",
@@ -5425,13 +5425,13 @@ function MultiSelectFieldDropdown(props) {
5425
5425
  return opt?.label ?? String(v);
5426
5426
  });
5427
5427
  const display = labels.length === 0 ? "" : labels.length <= 2 ? labels.join(", ") : `${labels.length} selecionados`;
5428
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { children: [
5429
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
5428
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { children: [
5429
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
5430
5430
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: display ? "truncate" : "text-fg-muted opacity-70 truncate", children: display || "Selecione..." }),
5431
5431
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-icon-xs text-fg-muted shrink-0" })
5432
5432
  ] }) }),
5433
5433
  /* @__PURE__ */ jsxRuntime.jsx(
5434
- appShell.PopoverContent,
5434
+ useTheme.PopoverContent,
5435
5435
  {
5436
5436
  align: "start",
5437
5437
  mobileSheet: false,
@@ -6090,9 +6090,9 @@ const BadgeColumnType = {
6090
6090
  const opt = findOption(value, options);
6091
6091
  if (!opt) {
6092
6092
  if (value == null) return null;
6093
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.Chip, { size: "sm", children: String(value) });
6093
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.Chip, { size: "sm", children: String(value) });
6094
6094
  }
6095
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.Chip, { size: "sm", color: resolveChipColor(opt.color), children: opt.label });
6095
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.Chip, { size: "sm", color: resolveChipColor(opt.color), children: opt.label });
6096
6096
  },
6097
6097
  formatValue: (v) => v == null ? "" : String(v),
6098
6098
  defaultAlign: "left",
@@ -6125,12 +6125,12 @@ const TagsColumnType = {
6125
6125
  return opt?.label ?? v;
6126
6126
  });
6127
6127
  const display = labels.length === 0 ? "" : labels.length <= 2 ? labels.join(", ") : `${labels.length} selecionados`;
6128
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { children: [
6129
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
6128
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { children: [
6129
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
6130
6130
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: display ? "truncate" : "text-fg-muted opacity-70 truncate", children: display || "Selecione tags..." }),
6131
6131
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-icon-xs text-fg-muted shrink-0" })
6132
6132
  ] }) }),
6133
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverContent, { align: "start", className: "p-0 w-[var(--radix-popover-trigger-width)] min-w-[200px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-gp-2xs p-pad-md max-h-[240px] overflow-auto", children: (options ?? []).map((o) => /* @__PURE__ */ jsxRuntime.jsxs(
6133
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverContent, { align: "start", className: "p-0 w-[var(--radix-popover-trigger-width)] min-w-[200px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-gp-2xs p-pad-md max-h-[240px] overflow-auto", children: (options ?? []).map((o) => /* @__PURE__ */ jsxRuntime.jsxs(
6134
6134
  "label",
6135
6135
  {
6136
6136
  className: "flex items-center gap-gp-md p-pad-xs rounded-radius-sm hover:bg-bg-muted cursor-pointer",
@@ -6197,7 +6197,7 @@ const TagsColumnType = {
6197
6197
  if (arr.length === 0) return null;
6198
6198
  return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center flex-wrap gap-gp-2xs", children: arr.map((v) => {
6199
6199
  const opt = findOption(v, options);
6200
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.Chip, { size: "sm", color: resolveChipColor(opt?.color), children: opt?.label ?? v }, v);
6200
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.Chip, { size: "sm", color: resolveChipColor(opt?.color), children: opt?.label ?? v }, v);
6201
6201
  }) });
6202
6202
  },
6203
6203
  formatValue: (v) => toStringArray(v).join(", "),
@@ -6251,12 +6251,12 @@ const DatetimeColumnType = {
6251
6251
  }
6252
6252
  return formatShort(value);
6253
6253
  })();
6254
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { children: [
6255
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
6254
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { children: [
6255
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: FILTER_FIELD_CLASS, children: [
6256
6256
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: displayValue ? "truncate" : "text-fg-muted opacity-70 truncate", children: displayValue || (isRange ? "Selecione período" : "Selecione data") }),
6257
6257
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarClock, { className: "size-icon-xs text-fg-muted shrink-0" })
6258
6258
  ] }) }),
6259
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverContent, { align: "start", className: "p-pad-md w-auto", children: isRange ? /* @__PURE__ */ jsxRuntime.jsx(
6259
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverContent, { align: "start", className: "p-pad-md w-auto", children: isRange ? /* @__PURE__ */ jsxRuntime.jsx(
6260
6260
  Calendar,
6261
6261
  {
6262
6262
  mode: "range",
@@ -6479,7 +6479,7 @@ function ToolbarSimpleFilterDrawer({
6479
6479
  titleIcon: lucideReact.SlidersHorizontal,
6480
6480
  footer: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [
6481
6481
  /* @__PURE__ */ jsxRuntime.jsx(
6482
- appShell.Button,
6482
+ useTheme.Button,
6483
6483
  {
6484
6484
  variant: "ghost",
6485
6485
  color: "secondary",
@@ -6491,7 +6491,7 @@ function ToolbarSimpleFilterDrawer({
6491
6491
  }
6492
6492
  ),
6493
6493
  /* @__PURE__ */ jsxRuntime.jsx(
6494
- appShell.Button,
6494
+ useTheme.Button,
6495
6495
  {
6496
6496
  variant: "filled",
6497
6497
  color: "primary",
@@ -6539,7 +6539,7 @@ const Pagination = ({
6539
6539
  {
6540
6540
  role: "navigation",
6541
6541
  "aria-label": "Paginação",
6542
- className: appShell.cn("inline-flex items-center gap-gp-xs", className),
6542
+ className: useTheme.cn("inline-flex items-center gap-gp-xs", className),
6543
6543
  ...props
6544
6544
  }
6545
6545
  );
@@ -6548,7 +6548,7 @@ const PaginationContent = React__namespace.forwardRef(({ className, ...props },
6548
6548
  "ul",
6549
6549
  {
6550
6550
  ref: ref2,
6551
- className: appShell.cn(
6551
+ className: useTheme.cn(
6552
6552
  "inline-flex items-center gap-[2px]",
6553
6553
  "bg-bg-muted rounded-radius-lg p-[3px] mx-gp-sm h-form-md",
6554
6554
  className
@@ -6557,7 +6557,7 @@ const PaginationContent = React__namespace.forwardRef(({ className, ...props },
6557
6557
  }
6558
6558
  ));
6559
6559
  PaginationContent.displayName = "PaginationContent";
6560
- const PaginationItem = React__namespace.forwardRef(({ className, ...props }, ref2) => /* @__PURE__ */ jsxRuntime.jsx("li", { ref: ref2, className: appShell.cn("", className), ...props }));
6560
+ const PaginationItem = React__namespace.forwardRef(({ className, ...props }, ref2) => /* @__PURE__ */ jsxRuntime.jsx("li", { ref: ref2, className: useTheme.cn("", className), ...props }));
6561
6561
  PaginationItem.displayName = "PaginationItem";
6562
6562
  const paginationLinkVariants = classVarianceAuthority.cva(
6563
6563
  [
@@ -6584,7 +6584,7 @@ const PaginationLink = React__namespace.forwardRef(({ className, isActive: isAct
6584
6584
  ref: ref2,
6585
6585
  type,
6586
6586
  "aria-current": isActive2 ? "page" : void 0,
6587
- className: appShell.cn(paginationLinkVariants({ isActive: isActive2 }), className),
6587
+ className: useTheme.cn(paginationLinkVariants({ isActive: isActive2 }), className),
6588
6588
  ...props
6589
6589
  }
6590
6590
  ));
@@ -6606,7 +6606,7 @@ const PaginationPrevious = React__namespace.forwardRef(
6606
6606
  ref: ref2,
6607
6607
  type,
6608
6608
  "aria-label": ariaLabel ?? "Página anterior",
6609
- className: appShell.cn(paginationNavVariants(), className),
6609
+ className: useTheme.cn(paginationNavVariants(), className),
6610
6610
  ...props,
6611
6611
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, {})
6612
6612
  }
@@ -6620,7 +6620,7 @@ const PaginationNext = React__namespace.forwardRef(
6620
6620
  ref: ref2,
6621
6621
  type,
6622
6622
  "aria-label": ariaLabel ?? "Próxima página",
6623
- className: appShell.cn(paginationNavVariants(), className),
6623
+ className: useTheme.cn(paginationNavVariants(), className),
6624
6624
  ...props,
6625
6625
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, {})
6626
6626
  }
@@ -6634,7 +6634,7 @@ const PaginationFirst = React__namespace.forwardRef(
6634
6634
  ref: ref2,
6635
6635
  type,
6636
6636
  "aria-label": ariaLabel ?? "Primeira página",
6637
- className: appShell.cn(paginationNavVariants(), className),
6637
+ className: useTheme.cn(paginationNavVariants(), className),
6638
6638
  ...props,
6639
6639
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsLeft, {})
6640
6640
  }
@@ -6648,7 +6648,7 @@ const PaginationLast = React__namespace.forwardRef(
6648
6648
  ref: ref2,
6649
6649
  type,
6650
6650
  "aria-label": ariaLabel ?? "Última página",
6651
- className: appShell.cn(paginationNavVariants(), className),
6651
+ className: useTheme.cn(paginationNavVariants(), className),
6652
6652
  ...props,
6653
6653
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsRight, {})
6654
6654
  }
@@ -6662,7 +6662,7 @@ const PaginationEllipsis = ({
6662
6662
  "span",
6663
6663
  {
6664
6664
  "aria-hidden": "true",
6665
- className: appShell.cn(
6665
+ className: useTheme.cn(
6666
6666
  "inline-flex items-center justify-center min-w-[22px] h-[30px]",
6667
6667
  "text-body-sm font-normal text-fg-muted tracking-wider select-none",
6668
6668
  className
@@ -6709,7 +6709,7 @@ function FooterTable({
6709
6709
  return /* @__PURE__ */ jsxRuntime.jsxs(
6710
6710
  "footer",
6711
6711
  {
6712
- className: appShell.cn(
6712
+ className: useTheme.cn(
6713
6713
  // Mobile: só a paginação, centralizada (o bloco esquerdo some).
6714
6714
  "flex flex-col sm:flex-row max-sm:items-center sm:items-center sm:justify-between",
6715
6715
  "gap-gp-2xl",
@@ -6814,7 +6814,7 @@ function FooterTableSkeleton({
6814
6814
  {
6815
6815
  "aria-busy": "true",
6816
6816
  "aria-label": "Carregando paginação",
6817
- className: appShell.cn(
6817
+ className: useTheme.cn(
6818
6818
  "flex flex-col sm:flex-row sm:items-center sm:justify-between",
6819
6819
  "gap-gp-2xl",
6820
6820
  className
@@ -6835,36 +6835,36 @@ function FooterTableSkeleton({
6835
6835
  }
6836
6836
  );
6837
6837
  }
6838
- const root = appShell.tv({
6838
+ const root = useTheme.tv({
6839
6839
  base: [
6840
6840
  "flex flex-1 min-h-0 overflow-hidden"
6841
6841
  // Sem moldura outer — kanban assume a área disponível
6842
6842
  ]
6843
6843
  });
6844
- const board = appShell.tv({
6844
+ const board = useTheme.tv({
6845
6845
  base: [
6846
6846
  "flex flex-1 gap-gp-2xl p-0",
6847
6847
  "overflow-x-auto overflow-y-hidden scrollbar-thin"
6848
6848
  ]
6849
6849
  });
6850
- const column = appShell.tv({
6850
+ const column = useTheme.tv({
6851
6851
  base: [
6852
6852
  "flex flex-col w-[296px] shrink-0 max-h-full",
6853
6853
  "bg-bg-muted rounded-radius-xl",
6854
6854
  "overflow-hidden"
6855
6855
  ]
6856
6856
  });
6857
- const columnHead = appShell.tv({
6857
+ const columnHead = useTheme.tv({
6858
6858
  base: [
6859
6859
  "flex items-center gap-gp-md",
6860
6860
  "px-pad-xl pt-pad-xl pb-pad-sm",
6861
6861
  "bg-transparent"
6862
6862
  ]
6863
6863
  });
6864
- const columnDot = appShell.tv({
6864
+ const columnDot = useTheme.tv({
6865
6865
  base: "size-[8px] rounded-radius-full shrink-0"
6866
6866
  });
6867
- const columnTitle = appShell.tv({
6867
+ const columnTitle = useTheme.tv({
6868
6868
  base: [
6869
6869
  "m-0 text-body-md font-medium text-fg-default",
6870
6870
  // Não expande (badge fica grudado à direita do título)
@@ -6872,7 +6872,7 @@ const columnTitle = appShell.tv({
6872
6872
  "whitespace-nowrap overflow-hidden text-ellipsis"
6873
6873
  ]
6874
6874
  });
6875
- const columnCount = appShell.tv({
6875
+ const columnCount = useTheme.tv({
6876
6876
  base: [
6877
6877
  "inline-flex items-center justify-center shrink-0",
6878
6878
  "min-w-[20px] h-[20px] px-pad-sm",
@@ -6881,27 +6881,27 @@ const columnCount = appShell.tv({
6881
6881
  "[font-variant-numeric:tabular-nums]"
6882
6882
  ]
6883
6883
  });
6884
- const columnActionsSpacer = appShell.tv({
6884
+ const columnActionsSpacer = useTheme.tv({
6885
6885
  base: "ml-auto inline-flex items-center gap-gp-2xs"
6886
6886
  });
6887
- const columnBody = appShell.tv({
6887
+ const columnBody = useTheme.tv({
6888
6888
  base: [
6889
6889
  "flex flex-1 flex-col gap-gp-md min-h-0",
6890
6890
  "px-pad-md pt-sp-xs pb-pad-md",
6891
6891
  "overflow-y-auto overflow-x-hidden scrollbar-thin"
6892
6892
  ]
6893
6893
  });
6894
- const columnEmpty = appShell.tv({
6894
+ const columnEmpty = useTheme.tv({
6895
6895
  base: [
6896
6896
  "flex flex-1 flex-col items-center justify-center gap-gp-sm",
6897
6897
  "py-pad-3xl px-pad-xl",
6898
6898
  "text-center text-body-sm font-normal text-fg-subtle"
6899
6899
  ]
6900
6900
  });
6901
- const columnEmptyIcon = appShell.tv({
6901
+ const columnEmptyIcon = useTheme.tv({
6902
6902
  base: "size-icon-md text-fg-subtle opacity-70"
6903
6903
  });
6904
- const columnAdd = appShell.tv({
6904
+ const columnAdd = useTheme.tv({
6905
6905
  base: [
6906
6906
  "inline-flex items-center justify-center gap-gp-sm",
6907
6907
  "mx-pad-md mb-pad-md mt-sp-2xs",
@@ -6914,7 +6914,7 @@ const columnAdd = appShell.tv({
6914
6914
  "focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring-brand"
6915
6915
  ]
6916
6916
  });
6917
- const card = appShell.tv({
6917
+ const card = useTheme.tv({
6918
6918
  base: [
6919
6919
  "group/kanban-card",
6920
6920
  "relative flex flex-col gap-gp-md",
@@ -6958,7 +6958,7 @@ const card = appShell.tv({
6958
6958
  { selected: true, reserveCheck: true, class: "!pl-[36px]" }
6959
6959
  ]
6960
6960
  });
6961
- const cardCheck = appShell.tv({
6961
+ const cardCheck = useTheme.tv({
6962
6962
  base: [
6963
6963
  "absolute top-[18px] left-[12px] z-[1]",
6964
6964
  "opacity-0 transition-opacity duration-150",
@@ -6969,7 +6969,7 @@ const cardCheck = appShell.tv({
6969
6969
  selected: { true: "!opacity-100" }
6970
6970
  }
6971
6971
  });
6972
- const cardMenuSlot = appShell.tv({
6972
+ const cardMenuSlot = useTheme.tv({
6973
6973
  base: [
6974
6974
  "absolute top-[6px] right-[6px] z-[2]",
6975
6975
  "opacity-0",
@@ -6978,53 +6978,53 @@ const cardMenuSlot = appShell.tv({
6978
6978
  "group-focus-visible/kanban-card:opacity-100"
6979
6979
  ]
6980
6980
  });
6981
- const cardHead = appShell.tv({
6981
+ const cardHead = useTheme.tv({
6982
6982
  base: "flex items-center gap-gp-md pr-[28px]"
6983
6983
  });
6984
- const cardTitleWrap = appShell.tv({
6984
+ const cardTitleWrap = useTheme.tv({
6985
6985
  base: "flex-1 min-w-0 flex flex-col gap-gp-2xs"
6986
6986
  });
6987
- const cardTitle = appShell.tv({
6987
+ const cardTitle = useTheme.tv({
6988
6988
  base: [
6989
6989
  "text-body-md font-medium text-fg-default leading-[1.3]",
6990
6990
  "whitespace-nowrap overflow-hidden text-ellipsis"
6991
6991
  ]
6992
6992
  });
6993
- const cardSubtitle = appShell.tv({
6993
+ const cardSubtitle = useTheme.tv({
6994
6994
  base: "text-caption-sm text-fg-muted [font-variant-numeric:tabular-nums]"
6995
6995
  });
6996
- const cardDesc = appShell.tv({
6996
+ const cardDesc = useTheme.tv({
6997
6997
  base: [
6998
6998
  "m-0 text-body-sm font-normal leading-[1.45] text-fg-muted",
6999
6999
  "[display:-webkit-box] [-webkit-line-clamp:2] [-webkit-box-orient:vertical]",
7000
7000
  "overflow-hidden"
7001
7001
  ]
7002
7002
  });
7003
- const cardMeta = appShell.tv({
7003
+ const cardMeta = useTheme.tv({
7004
7004
  base: "flex items-center justify-between gap-gp-md"
7005
7005
  });
7006
- const cardValue = appShell.tv({
7006
+ const cardValue = useTheme.tv({
7007
7007
  base: "text-body-sm font-semibold text-fg-default [font-variant-numeric:tabular-nums]"
7008
7008
  });
7009
- const cardFoot = appShell.tv({
7009
+ const cardFoot = useTheme.tv({
7010
7010
  base: [
7011
7011
  "flex items-center justify-between gap-gp-md",
7012
7012
  "pt-pad-md border-t border-border-subtle"
7013
7013
  ]
7014
7014
  });
7015
- const cardDragging = appShell.tv({
7015
+ const cardDragging = useTheme.tv({
7016
7016
  base: "opacity-40 cursor-grabbing"
7017
7017
  });
7018
- const columnDropTarget = appShell.tv({
7018
+ const columnDropTarget = useTheme.tv({
7019
7019
  base: "outline outline-2 outline-offset-[-2px] outline-border-brand bg-bg-brand-subtle/30 transition-[outline,background-color] duration-150"
7020
7020
  });
7021
- const columnDropInvalidDimmed = appShell.tv({
7021
+ const columnDropInvalidDimmed = useTheme.tv({
7022
7022
  base: "opacity-50 transition-opacity duration-200"
7023
7023
  });
7024
- const columnDropInvalidOver = appShell.tv({
7024
+ const columnDropInvalidOver = useTheme.tv({
7025
7025
  base: "cursor-not-allowed"
7026
7026
  });
7027
- const dropPlaceholder = appShell.tv({
7027
+ const dropPlaceholder = useTheme.tv({
7028
7028
  base: [
7029
7029
  "h-[36px] flex items-center justify-center shrink-0",
7030
7030
  "rounded-radius-md border border-dashed border-border-brand",
@@ -7182,7 +7182,7 @@ function Kanban({
7182
7182
  col.id
7183
7183
  );
7184
7184
  }) });
7185
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(root(), className), role: "region", "aria-label": "Quadro Kanban", children: enableDnD ? /* @__PURE__ */ jsxRuntime.jsxs(
7185
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(root(), className), role: "region", "aria-label": "Quadro Kanban", children: enableDnD ? /* @__PURE__ */ jsxRuntime.jsxs(
7186
7186
  core.DndContext,
7187
7187
  {
7188
7188
  sensors,
@@ -7193,7 +7193,7 @@ function Kanban({
7193
7193
  onDragCancel: handleDragCancel,
7194
7194
  children: [
7195
7195
  boardContent,
7196
- /* @__PURE__ */ jsxRuntime.jsx(core.DragOverlay, { dropAnimation: null, children: activeCard && /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(card({ selected: false, open: false }), "rotate-2 opacity-90 shadow-sh-lg"), children: /* @__PURE__ */ jsxRuntime.jsx(
7196
+ /* @__PURE__ */ jsxRuntime.jsx(core.DragOverlay, { dropAnimation: null, children: activeCard && /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(card({ selected: false, open: false }), "rotate-2 opacity-90 shadow-sh-lg"), children: /* @__PURE__ */ jsxRuntime.jsx(
7197
7197
  KanbanCardContent,
7198
7198
  {
7199
7199
  card: activeCard,
@@ -7245,7 +7245,7 @@ function KanbanColumnInner({
7245
7245
  return /* @__PURE__ */ jsxRuntime.jsxs(
7246
7246
  "section",
7247
7247
  {
7248
- className: appShell.cn(
7248
+ className: useTheme.cn(
7249
7249
  column(),
7250
7250
  showInvalidDim && columnDropInvalidDimmed(),
7251
7251
  showInvalidOver && columnDropInvalidOver(),
@@ -7266,7 +7266,7 @@ function KanbanColumnInner({
7266
7266
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: columnCount(), children: count }),
7267
7267
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: columnActionsSpacer(), children: [
7268
7268
  onAddCard && /* @__PURE__ */ jsxRuntime.jsx(
7269
- appShell.Button,
7269
+ useTheme.Button,
7270
7270
  {
7271
7271
  variant: "ghost",
7272
7272
  color: "secondary",
@@ -7341,7 +7341,7 @@ function renderColumnMenu({
7341
7341
  }
7342
7342
  if (onColumnMenu) {
7343
7343
  return /* @__PURE__ */ jsxRuntime.jsx(
7344
- appShell.Button,
7344
+ useTheme.Button,
7345
7345
  {
7346
7346
  variant: "ghost",
7347
7347
  color: "secondary",
@@ -7401,7 +7401,7 @@ function KanbanCardOuter({
7401
7401
  "article",
7402
7402
  {
7403
7403
  ref: enableDnD ? setNodeRef : void 0,
7404
- className: appShell.cn(
7404
+ className: useTheme.cn(
7405
7405
  card({ selected, open, reserveCheck: showCheckbox }),
7406
7406
  isBeingDragged && cardDragging(),
7407
7407
  enableDnD && "cursor-grab active:cursor-grabbing"
@@ -7466,7 +7466,7 @@ function renderCardMenu({
7466
7466
  }
7467
7467
  if (onCardMenu) {
7468
7468
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cardMenuSlot(), onClick: handleStop, onPointerDown: handleStop, children: /* @__PURE__ */ jsxRuntime.jsx(
7469
- appShell.Button,
7469
+ useTheme.Button,
7470
7470
  {
7471
7471
  variant: "ghost",
7472
7472
  color: "secondary",
@@ -7488,9 +7488,9 @@ function KanbanAutoMenu({
7488
7488
  ariaLabel,
7489
7489
  title: title2
7490
7490
  }) {
7491
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
7492
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
7493
- appShell.Button,
7491
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
7492
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
7493
+ useTheme.Button,
7494
7494
  {
7495
7495
  variant: "ghost",
7496
7496
  color: "secondary",
@@ -7500,12 +7500,12 @@ function KanbanAutoMenu({
7500
7500
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {})
7501
7501
  }
7502
7502
  ) }),
7503
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuContent, { align: "end", sideOffset: 4, children: items.map((item, idx) => {
7503
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuContent, { align: "end", sideOffset: 4, children: items.map((item, idx) => {
7504
7504
  if (item.separator) {
7505
- return /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}, `sep-${idx}`);
7505
+ return /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}, `sep-${idx}`);
7506
7506
  }
7507
7507
  return /* @__PURE__ */ jsxRuntime.jsxs(
7508
- appShell.DropdownMenuItem,
7508
+ useTheme.DropdownMenuItem,
7509
7509
  {
7510
7510
  variant: item.destructive ? "destructive" : "default",
7511
7511
  disabled: item.disabled,
@@ -16278,7 +16278,7 @@ const ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (sta
16278
16278
  context: StoreContext,
16279
16279
  areStatePropsEqual: isStrictEqual
16280
16280
  })(Droppable);
16281
- const listStyles = appShell.tv({
16281
+ const listStyles = useTheme.tv({
16282
16282
  slots: {
16283
16283
  root: "flex flex-col",
16284
16284
  /* grupos */
@@ -16392,7 +16392,7 @@ function ListItem({
16392
16392
  ref: innerRef,
16393
16393
  role: "article",
16394
16394
  "aria-selected": state.selected || void 0,
16395
- className: appShell.cn(s.item(), className),
16395
+ className: useTheme.cn(s.item(), className),
16396
16396
  onClick: onClick ? handleClick : void 0,
16397
16397
  ...draggableProps,
16398
16398
  children: [
@@ -16425,7 +16425,7 @@ function ListItem({
16425
16425
  item.meta && item.meta.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.metaRow(), children: item.meta.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs(
16426
16426
  "div",
16427
16427
  {
16428
- className: appShell.cn(s.metaCol(), m.align === "end" && "items-end text-right"),
16428
+ className: useTheme.cn(s.metaCol(), m.align === "end" && "items-end text-right"),
16429
16429
  children: [
16430
16430
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.metaLabel(), children: m.label }),
16431
16431
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: s.metaValue(), children: m.value })
@@ -16441,11 +16441,11 @@ function ListItem({
16441
16441
  );
16442
16442
  }
16443
16443
  function ListAutoMenu({ items }) {
16444
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
16445
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(appShell.Button, { variant: "ghost", color: "secondary", size: "icon-2xs", "aria-label": "Ações", title: "Ações", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {}) }) }),
16446
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuContent, { align: "end", sideOffset: 4, children: items.map(
16447
- (item, idx) => item.separator ? /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}, `sep-${idx}`) : /* @__PURE__ */ jsxRuntime.jsxs(
16448
- appShell.DropdownMenuItem,
16444
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
16445
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(useTheme.Button, { variant: "ghost", color: "secondary", size: "icon-2xs", "aria-label": "Ações", title: "Ações", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {}) }) }),
16446
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuContent, { align: "end", sideOffset: 4, children: items.map(
16447
+ (item, idx) => item.separator ? /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}, `sep-${idx}`) : /* @__PURE__ */ jsxRuntime.jsxs(
16448
+ useTheme.DropdownMenuItem,
16449
16449
  {
16450
16450
  variant: item.destructive ? "destructive" : "default",
16451
16451
  disabled: item.disabled,
@@ -16542,7 +16542,7 @@ function StandardLayout({
16542
16542
  {
16543
16543
  ref: provided.innerRef,
16544
16544
  ...provided.droppableProps,
16545
- className: appShell.cn(s.root({ density }), snapshot.isDraggingOver && s.dropZoneActive()),
16545
+ className: useTheme.cn(s.root({ density }), snapshot.isDraggingOver && s.dropZoneActive()),
16546
16546
  children: [
16547
16547
  rows,
16548
16548
  provided.placeholder
@@ -16590,7 +16590,7 @@ function GroupSection({
16590
16590
  },
16591
16591
  item.id
16592
16592
  ));
16593
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: appShell.cn(s.group(), groupSurface && s.groupPanel()), children: [
16593
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: useTheme.cn(s.group(), groupSurface && s.groupPanel()), children: [
16594
16594
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: s.groupHeader(), children: [
16595
16595
  /* @__PURE__ */ jsxRuntime.jsx(
16596
16596
  "button",
@@ -16603,7 +16603,7 @@ function GroupSection({
16603
16603
  children: /* @__PURE__ */ jsxRuntime.jsx(
16604
16604
  lucideReact.ChevronDown,
16605
16605
  {
16606
- className: appShell.cn("size-[16px] transition-transform", !open && "-rotate-90")
16606
+ className: useTheme.cn("size-[16px] transition-transform", !open && "-rotate-90")
16607
16607
  }
16608
16608
  )
16609
16609
  }
@@ -16617,7 +16617,7 @@ function GroupSection({
16617
16617
  {
16618
16618
  ref: provided.innerRef,
16619
16619
  ...provided.droppableProps,
16620
- className: appShell.cn(
16620
+ className: useTheme.cn(
16621
16621
  s.groupBody({ density }),
16622
16622
  "min-h-[44px]",
16623
16623
  snapshot.isDraggingOver && s.dropZoneActive()
@@ -16877,7 +16877,7 @@ function NestedTree({
16877
16877
  isOpen && /* @__PURE__ */ jsxRuntime.jsx(
16878
16878
  "div",
16879
16879
  {
16880
- className: appShell.cn(
16880
+ className: useTheme.cn(
16881
16881
  "pl-pad-xl",
16882
16882
  branchContainer(branchHighlight, node.id, trail, subtree)
16883
16883
  ),
@@ -16938,7 +16938,7 @@ function ExpandToggle({
16938
16938
  children: /* @__PURE__ */ jsxRuntime.jsx(
16939
16939
  lucideReact.ChevronRight,
16940
16940
  {
16941
- className: appShell.cn("size-[16px] transition-transform", open && "rotate-90")
16941
+ className: useTheme.cn("size-[16px] transition-transform", open && "rotate-90")
16942
16942
  }
16943
16943
  )
16944
16944
  }
@@ -17106,13 +17106,13 @@ function List({
17106
17106
  [layout, onMove, onReorder]
17107
17107
  );
17108
17108
  if (loading) {
17109
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(s.root({ density }), className), children: Array.from({ length: skeletonCount }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.skeleton(), children: [
17110
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(s.skeletonBar(), "w-1/3 mb-gp-md") }),
17111
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(s.skeletonBar(), "w-2/3") })
17109
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(s.root({ density }), className), children: Array.from({ length: skeletonCount }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.skeleton(), children: [
17110
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(s.skeletonBar(), "w-1/3 mb-gp-md") }),
17111
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(s.skeletonBar(), "w-2/3") })
17112
17112
  ] }, i)) });
17113
17113
  }
17114
17114
  if (!items.length) {
17115
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(s.root({ density }), className), children: emptyState ?? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.emptyState(), children: [
17115
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(s.root({ density }), className), children: emptyState ?? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: s.emptyState(), children: [
17116
17116
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Inbox, { className: "size-icon-md opacity-70", "aria-hidden": true }),
17117
17117
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Nada por aqui ainda." })
17118
17118
  ] }) });
@@ -17169,11 +17169,11 @@ function List({
17169
17169
  }
17170
17170
  );
17171
17171
  if (!dndEnabled) {
17172
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn("w-full", className), children: layoutEl });
17172
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn("w-full", className), children: layoutEl });
17173
17173
  }
17174
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn("w-full", className), children: /* @__PURE__ */ jsxRuntime.jsx(DragDropContext, { onDragEnd: handleDragEnd, children: layoutEl }) });
17174
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn("w-full", className), children: /* @__PURE__ */ jsxRuntime.jsx(DragDropContext, { onDragEnd: handleDragEnd, children: layoutEl }) });
17175
17175
  }
17176
- const dataTableStyles = appShell.tv({
17176
+ const dataTableStyles = useTheme.tv({
17177
17177
  slots: {
17178
17178
  root: [
17179
17179
  // 16px (gp-2xl) entre toolbar e tabela
@@ -19105,7 +19105,7 @@ function DataTableNoResults({
19105
19105
  onClearFilters
19106
19106
  } = {}) {
19107
19107
  const resolvedAction = action ?? (onClearFilters ? /* @__PURE__ */ jsxRuntime.jsx(
19108
- appShell.Button,
19108
+ useTheme.Button,
19109
19109
  {
19110
19110
  size: "sm",
19111
19111
  variant: "outline",
@@ -19156,9 +19156,9 @@ function DataTableColumnMenu({
19156
19156
  const t = setTimeout(() => setKeepMounted(false), 200);
19157
19157
  return () => clearTimeout(t);
19158
19158
  }, [open, keepMounted]);
19159
- return /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { open, onOpenChange: setOpen, children: [
19160
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19161
- appShell.Button,
19159
+ return /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { open, onOpenChange: setOpen, children: [
19160
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19161
+ useTheme.Button,
19162
19162
  {
19163
19163
  size: "icon-2xs",
19164
19164
  variant: "ghost",
@@ -19171,9 +19171,9 @@ function DataTableColumnMenu({
19171
19171
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, {})
19172
19172
  }
19173
19173
  ) }),
19174
- /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuContent, { align: "end", onClick: (e) => e.stopPropagation(), children: [
19174
+ /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuContent, { align: "end", onClick: (e) => e.stopPropagation(), children: [
19175
19175
  /* @__PURE__ */ jsxRuntime.jsxs(
19176
- appShell.DropdownMenuItem,
19176
+ useTheme.DropdownMenuItem,
19177
19177
  {
19178
19178
  onClick: onSortAsc,
19179
19179
  disabled: sortDirection === "asc",
@@ -19184,7 +19184,7 @@ function DataTableColumnMenu({
19184
19184
  }
19185
19185
  ),
19186
19186
  /* @__PURE__ */ jsxRuntime.jsxs(
19187
- appShell.DropdownMenuItem,
19187
+ useTheme.DropdownMenuItem,
19188
19188
  {
19189
19189
  onClick: onSortDesc,
19190
19190
  disabled: sortDirection === "desc",
@@ -19194,34 +19194,34 @@ function DataTableColumnMenu({
19194
19194
  ]
19195
19195
  }
19196
19196
  ),
19197
- sortDirection !== null && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuItem, { onClick: onSortClear, children: [
19197
+ sortDirection !== null && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuItem, { onClick: onSortClear, children: [
19198
19198
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-icon-xs" }),
19199
19199
  "Limpar ordenação"
19200
19200
  ] }),
19201
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}),
19202
- pinned !== "left" && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuItem, { onClick: onPinLeft, children: [
19201
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}),
19202
+ pinned !== "left" && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuItem, { onClick: onPinLeft, children: [
19203
19203
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PinIcon, { className: "size-icon-xs" }),
19204
19204
  "Fixar à esquerda"
19205
19205
  ] }),
19206
- pinned !== "right" && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuItem, { onClick: onPinRight, children: [
19206
+ pinned !== "right" && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuItem, { onClick: onPinRight, children: [
19207
19207
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PinIcon, { className: "size-icon-xs" }),
19208
19208
  "Fixar à direita"
19209
19209
  ] }),
19210
- pinned !== null && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuItem, { onClick: onUnpin, children: [
19210
+ pinned !== null && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuItem, { onClick: onUnpin, children: [
19211
19211
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PinOff, { className: "size-icon-xs" }),
19212
19212
  "Remover fixação"
19213
19213
  ] }),
19214
19214
  canHide && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19215
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}),
19216
- /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenuItem, { onClick: onHide, children: [
19215
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}),
19216
+ /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenuItem, { onClick: onHide, children: [
19217
19217
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: "size-icon-xs" }),
19218
19218
  "Ocultar coluna"
19219
19219
  ] })
19220
19220
  ] }),
19221
19221
  extraItems && extraItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19222
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}),
19222
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}),
19223
19223
  extraItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
19224
- appShell.DropdownMenuItem,
19224
+ useTheme.DropdownMenuItem,
19225
19225
  {
19226
19226
  onClick: item.onSelect,
19227
19227
  disabled: item.disabled,
@@ -19254,7 +19254,7 @@ function DataTableActionsCell({
19254
19254
  };
19255
19255
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-gp-2xs justify-end w-full", children: [
19256
19256
  inlineActions.map((a) => /* @__PURE__ */ jsxRuntime.jsx(
19257
- appShell.Button,
19257
+ useTheme.Button,
19258
19258
  {
19259
19259
  size: "icon-2xs",
19260
19260
  variant: "ghost",
@@ -19270,9 +19270,9 @@ function DataTableActionsCell({
19270
19270
  },
19271
19271
  a.id
19272
19272
  )),
19273
- menuActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(appShell.DropdownMenu, { children: [
19274
- /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19275
- appShell.Button,
19273
+ menuActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(useTheme.DropdownMenu, { children: [
19274
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19275
+ useTheme.Button,
19276
19276
  {
19277
19277
  size: "icon-2xs",
19278
19278
  variant: "ghost",
@@ -19285,12 +19285,12 @@ function DataTableActionsCell({
19285
19285
  }
19286
19286
  ) }),
19287
19287
  /* @__PURE__ */ jsxRuntime.jsx(
19288
- appShell.DropdownMenuContent,
19288
+ useTheme.DropdownMenuContent,
19289
19289
  {
19290
19290
  align: "end",
19291
19291
  onClick: (e) => e.stopPropagation(),
19292
19292
  children: menuActions.map((a) => /* @__PURE__ */ jsxRuntime.jsxs(
19293
- appShell.DropdownMenuItem,
19293
+ useTheme.DropdownMenuItem,
19294
19294
  {
19295
19295
  onClick: () => a.onClick(row),
19296
19296
  disabled: resolveDisabled(a),
@@ -19387,7 +19387,7 @@ function DataTableTotalizerRow({
19387
19387
  "div",
19388
19388
  {
19389
19389
  role: "row",
19390
- className: appShell.cn(
19390
+ className: useTheme.cn(
19391
19391
  "flex w-max min-w-full",
19392
19392
  "sticky bottom-0 z-[8]",
19393
19393
  "bg-bg-table-head border-t border-border-table",
@@ -19631,7 +19631,7 @@ function DataTableTreeToggle({
19631
19631
  e.stopPropagation();
19632
19632
  onToggle();
19633
19633
  },
19634
- className: appShell.cn(
19634
+ className: useTheme.cn(
19635
19635
  "shrink-0 flex items-center justify-center",
19636
19636
  "size-icon-md rounded-radius-sm",
19637
19637
  "text-fg-muted hover:text-fg-strong hover:bg-bg-muted",
@@ -19641,7 +19641,7 @@ function DataTableTreeToggle({
19641
19641
  children: /* @__PURE__ */ jsxRuntime.jsx(
19642
19642
  lucideReact.ChevronRight,
19643
19643
  {
19644
- className: appShell.cn(
19644
+ className: useTheme.cn(
19645
19645
  "size-icon-sm transition-transform duration-150",
19646
19646
  isExpanded && "rotate-90"
19647
19647
  ),
@@ -19663,7 +19663,7 @@ function DataTableTreeToggle({
19663
19663
  }
19664
19664
  );
19665
19665
  }
19666
- const cellAddonsStyles = appShell.tv({
19666
+ const cellAddonsStyles = useTheme.tv({
19667
19667
  slots: {
19668
19668
  /** Wrapper raiz da célula com add-ons — `group` habilita reveal no hover. */
19669
19669
  root: "group/cell-addon flex items-center gap-gp-xs w-full min-w-0",
@@ -19712,8 +19712,8 @@ function DataTableReadMoreCell({
19712
19712
  }
19713
19713
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: styles$2.root(), children: [
19714
19714
  truncateNode,
19715
- /* @__PURE__ */ jsxRuntime.jsxs(appShell.Popover, { children: [
19716
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19715
+ /* @__PURE__ */ jsxRuntime.jsxs(useTheme.Popover, { children: [
19716
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
19717
19717
  "button",
19718
19718
  {
19719
19719
  type: "button",
@@ -19724,7 +19724,7 @@ function DataTableReadMoreCell({
19724
19724
  }
19725
19725
  ) }),
19726
19726
  /* @__PURE__ */ jsxRuntime.jsx(
19727
- appShell.PopoverContent,
19727
+ useTheme.PopoverContent,
19728
19728
  {
19729
19729
  align: "start",
19730
19730
  className: "p-0",
@@ -19888,7 +19888,7 @@ function DataTableRowInner({
19888
19888
  /* @__PURE__ */ jsxRuntime.jsx(
19889
19889
  lucideReact.ChevronRight,
19890
19890
  {
19891
- className: appShell.cn(
19891
+ className: useTheme.cn(
19892
19892
  "shrink-0 size-icon-sm text-fg-muted transition-transform duration-150",
19893
19893
  expanded && "rotate-90"
19894
19894
  ),
@@ -19963,7 +19963,7 @@ function DataTableGroupHeaderRow({
19963
19963
  "data-group-key": group.key,
19964
19964
  "aria-expanded": group.isExpanded,
19965
19965
  style: style2,
19966
- className: appShell.cn(
19966
+ className: useTheme.cn(
19967
19967
  "flex w-full min-w-full",
19968
19968
  "bg-bg-subtle",
19969
19969
  "border-b border-border-table",
@@ -19994,7 +19994,7 @@ function DataTableGroupHeaderRow({
19994
19994
  "data-group-key": group.key,
19995
19995
  "aria-expanded": group.isExpanded,
19996
19996
  style: style2,
19997
- className: appShell.cn(
19997
+ className: useTheme.cn(
19998
19998
  "flex w-max min-w-full h-[42px]",
19999
19999
  "bg-bg-subtle hover:bg-bg-muted",
20000
20000
  "border-b border-border-table",
@@ -20022,7 +20022,7 @@ function DataTableGroupHeaderRow({
20022
20022
  "div",
20023
20023
  {
20024
20024
  "data-field": field,
20025
- className: appShell.cn(
20025
+ className: useTheme.cn(
20026
20026
  "shrink-0 flex items-center px-pad-2xl gap-gp-md",
20027
20027
  "text-body-md font-medium text-fg-strong",
20028
20028
  isPinned && "sticky z-[5] bg-bg-subtle"
@@ -20071,7 +20071,7 @@ function DataTableGroupContentRow({
20071
20071
  "data-group-content": "true",
20072
20072
  "data-group-key": group.key,
20073
20073
  style: style2,
20074
- className: appShell.cn(
20074
+ className: useTheme.cn(
20075
20075
  "flex w-full min-w-full",
20076
20076
  "bg-bg-table",
20077
20077
  "border-b border-border-table",
@@ -20154,7 +20154,7 @@ function DataTableRowExpansion({
20154
20154
  role: "row",
20155
20155
  "data-row-expansion": "true",
20156
20156
  style: style2,
20157
- className: appShell.cn(
20157
+ className: useTheme.cn(
20158
20158
  "flex w-full min-w-full",
20159
20159
  "bg-bg-subtle",
20160
20160
  "border-b border-border-table",
@@ -21319,7 +21319,7 @@ function DataTableInternal(props, ref2) {
21319
21319
  icon: isActions ? void 0 : col.icon ?? (col.type ? columnTypeRegistry.get(col.type).defaultIcon : void 0),
21320
21320
  headMenu: !isActions ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21321
21321
  col.enableColumnFilter && /* @__PURE__ */ jsxRuntime.jsx(
21322
- appShell.Button,
21322
+ useTheme.Button,
21323
21323
  {
21324
21324
  size: "icon-2xs",
21325
21325
  variant: "ghost",
@@ -21483,7 +21483,7 @@ function DataTableInternal(props, ref2) {
21483
21483
  );
21484
21484
  const cardBp = props.cardBreakpoint ?? DEFAULT_CARD_BREAKPOINT;
21485
21485
  const cardModeQuery = cardBp === false ? "(max-width: 0px)" : `(max-width: ${cardBp - 1}px)`;
21486
- const isMobileViewport = appShell.useMediaQuery(cardModeQuery);
21486
+ const isMobileViewport = useTheme.useMediaQuery(cardModeQuery);
21487
21487
  const cardPossible = isMobileViewport && cardBp !== false && !isKanban;
21488
21488
  const [mobileDisplay, setMobileDisplay] = React.useState("table");
21489
21489
  const isCardMode = cardPossible && mobileDisplay === "card";
@@ -21553,7 +21553,7 @@ function DataTableInternal(props, ref2) {
21553
21553
  return /* @__PURE__ */ jsxRuntime.jsx(DataTableProvider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsxs(
21554
21554
  "div",
21555
21555
  {
21556
- className: appShell.cn(
21556
+ className: useTheme.cn(
21557
21557
  dataTableStyles({ fullscreen: isFullscreen }).root(),
21558
21558
  props.className
21559
21559
  ),
@@ -21769,7 +21769,7 @@ function DataTableInternal(props, ref2) {
21769
21769
  const isCsvDefault = fmt.id === "csv" && !fmt.onSelect;
21770
21770
  if (!isCsvDefault) {
21771
21771
  return /* @__PURE__ */ jsxRuntime.jsxs(
21772
- appShell.DropdownMenuItem,
21772
+ useTheme.DropdownMenuItem,
21773
21773
  {
21774
21774
  onSelect: fmt.onSelect,
21775
21775
  children: [
@@ -21781,7 +21781,7 @@ function DataTableInternal(props, ref2) {
21781
21781
  );
21782
21782
  }
21783
21783
  return isServerMode ? /* @__PURE__ */ jsxRuntime.jsxs(
21784
- appShell.DropdownMenuItem,
21784
+ useTheme.DropdownMenuItem,
21785
21785
  {
21786
21786
  onSelect: () => exporter.exportCsv("all"),
21787
21787
  children: [
@@ -21793,7 +21793,7 @@ function DataTableInternal(props, ref2) {
21793
21793
  fmt.id
21794
21794
  ) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "contents", children: [
21795
21795
  /* @__PURE__ */ jsxRuntime.jsxs(
21796
- appShell.DropdownMenuItem,
21796
+ useTheme.DropdownMenuItem,
21797
21797
  {
21798
21798
  onSelect: () => exporter.exportCsv("all"),
21799
21799
  children: [
@@ -21804,7 +21804,7 @@ function DataTableInternal(props, ref2) {
21804
21804
  }
21805
21805
  ),
21806
21806
  /* @__PURE__ */ jsxRuntime.jsxs(
21807
- appShell.DropdownMenuItem,
21807
+ useTheme.DropdownMenuItem,
21808
21808
  {
21809
21809
  onSelect: () => exporter.exportCsv("filtered"),
21810
21810
  children: [
@@ -21815,7 +21815,7 @@ function DataTableInternal(props, ref2) {
21815
21815
  }
21816
21816
  ),
21817
21817
  /* @__PURE__ */ jsxRuntime.jsxs(
21818
- appShell.DropdownMenuItem,
21818
+ useTheme.DropdownMenuItem,
21819
21819
  {
21820
21820
  onSelect: () => exporter.exportCsv("selected"),
21821
21821
  disabled: selection.selectedCount === 0,
@@ -21830,9 +21830,9 @@ function DataTableInternal(props, ref2) {
21830
21830
  )
21831
21831
  ] }, fmt.id);
21832
21832
  }),
21833
- exportConfig && toolbarConfig.moreMenu?.items?.length ? /* @__PURE__ */ jsxRuntime.jsx(appShell.DropdownMenuSeparator, {}) : null,
21833
+ exportConfig && toolbarConfig.moreMenu?.items?.length ? /* @__PURE__ */ jsxRuntime.jsx(useTheme.DropdownMenuSeparator, {}) : null,
21834
21834
  toolbarConfig.moreMenu?.items?.map((it) => /* @__PURE__ */ jsxRuntime.jsxs(
21835
- appShell.DropdownMenuItem,
21835
+ useTheme.DropdownMenuItem,
21836
21836
  {
21837
21837
  onSelect: it.onSelect,
21838
21838
  disabled: it.disabled,
@@ -21934,7 +21934,7 @@ function DataTableInternal(props, ref2) {
21934
21934
  }
21935
21935
  };
21936
21936
  return /* @__PURE__ */ jsxRuntime.jsxs(
21937
- appShell.Popover,
21937
+ useTheme.Popover,
21938
21938
  {
21939
21939
  open: isPendingOpen || openChipKey === f.id,
21940
21940
  onOpenChange: (o) => {
@@ -21945,8 +21945,8 @@ function DataTableInternal(props, ref2) {
21945
21945
  closeChip();
21946
21946
  },
21947
21947
  children: [
21948
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverTrigger, { asChild: true, children: defaultChip }),
21949
- /* @__PURE__ */ jsxRuntime.jsx(appShell.PopoverContent, { align: "start", className: "p-0", children: def.renderFastFilterInput({
21948
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverTrigger, { asChild: true, children: defaultChip }),
21949
+ /* @__PURE__ */ jsxRuntime.jsx(useTheme.PopoverContent, { align: "start", className: "p-0", children: def.renderFastFilterInput({
21950
21950
  value: currentValue,
21951
21951
  onChange: (v) => updateGroupValue(group.key, v),
21952
21952
  options,
@@ -22049,7 +22049,7 @@ function DataTableFloatingBulkBar({
22049
22049
  ] }),
22050
22050
  actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-gp-sm", children: actions }),
22051
22051
  /* @__PURE__ */ jsxRuntime.jsx(
22052
- appShell.Button,
22052
+ useTheme.Button,
22053
22053
  {
22054
22054
  size: "icon-xs",
22055
22055
  variant: "ghost",
@@ -22111,7 +22111,7 @@ const SheetPortal = SheetPrimitive__namespace.Portal;
22111
22111
  const SheetOverlay = React__namespace.forwardRef(({ className, ...props }, ref2) => /* @__PURE__ */ jsxRuntime.jsx(
22112
22112
  SheetPrimitive__namespace.Overlay,
22113
22113
  {
22114
- className: appShell.cn(
22114
+ className: useTheme.cn(
22115
22115
  "fixed inset-0 z-50 bg-overlay-scrim data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
22116
22116
  className
22117
22117
  ),
@@ -22142,7 +22142,7 @@ const SheetContent = React__namespace.forwardRef(({ side = "right", className, c
22142
22142
  SheetPrimitive__namespace.Content,
22143
22143
  {
22144
22144
  ref: ref2,
22145
- className: appShell.cn(sheetVariants({ side }), className),
22145
+ className: useTheme.cn(sheetVariants({ side }), className),
22146
22146
  ...props,
22147
22147
  children: [
22148
22148
  children,
@@ -22159,7 +22159,7 @@ const SheetTitle = React__namespace.forwardRef(({ className, ...props }, ref2) =
22159
22159
  SheetPrimitive__namespace.Title,
22160
22160
  {
22161
22161
  ref: ref2,
22162
- className: appShell.cn("text-body-lg font-medium font-semibold text-fg-default", className),
22162
+ className: useTheme.cn("text-body-lg font-medium font-semibold text-fg-default", className),
22163
22163
  ...props
22164
22164
  }
22165
22165
  ));
@@ -22168,12 +22168,12 @@ const SheetDescription = React__namespace.forwardRef(({ className, ...props }, r
22168
22168
  SheetPrimitive__namespace.Description,
22169
22169
  {
22170
22170
  ref: ref2,
22171
- className: appShell.cn("text-body-md text-fg-muted", className),
22171
+ className: useTheme.cn("text-body-md text-fg-muted", className),
22172
22172
  ...props
22173
22173
  }
22174
22174
  ));
22175
22175
  SheetDescription.displayName = SheetPrimitive__namespace.Description.displayName;
22176
- const panelContainer = appShell.tv({
22176
+ const panelContainer = useTheme.tv({
22177
22177
  base: [
22178
22178
  "flex flex-col overflow-hidden",
22179
22179
  "rounded-radius-xl border border-border-default",
@@ -22202,30 +22202,30 @@ const panelContainer = appShell.tv({
22202
22202
  }
22203
22203
  }
22204
22204
  });
22205
- const panelHeader = appShell.tv({
22205
+ const panelHeader = useTheme.tv({
22206
22206
  base: [
22207
22207
  "flex items-center justify-between gap-gp-xl flex-none",
22208
22208
  "px-[20px] py-[18px]",
22209
22209
  "border-b border-border-default"
22210
22210
  ]
22211
22211
  });
22212
- const panelHeaderText = appShell.tv({
22212
+ const panelHeaderText = useTheme.tv({
22213
22213
  base: "flex flex-col gap-gp-2xs min-w-0"
22214
22214
  });
22215
- const panelTitle = appShell.tv({
22215
+ const panelTitle = useTheme.tv({
22216
22216
  base: [
22217
22217
  "flex items-center gap-gp-md min-w-0",
22218
22218
  "text-body-lg font-bold text-fg-default tracking-[-0.01em]",
22219
22219
  "truncate"
22220
22220
  ]
22221
22221
  });
22222
- const panelTitleIcon = appShell.tv({
22222
+ const panelTitleIcon = useTheme.tv({
22223
22223
  base: "size-[18px] text-fg-brand shrink-0"
22224
22224
  });
22225
- const panelDescription = appShell.tv({
22225
+ const panelDescription = useTheme.tv({
22226
22226
  base: "text-body-md text-fg-muted"
22227
22227
  });
22228
- const panelClose = appShell.tv({
22228
+ const panelClose = useTheme.tv({
22229
22229
  base: [
22230
22230
  "grid place-items-center shrink-0",
22231
22231
  "w-form-sm h-form-sm rounded-radius-md",
@@ -22237,7 +22237,7 @@ const panelClose = appShell.tv({
22237
22237
  "dark:hover:bg-bg-muted-hover"
22238
22238
  ]
22239
22239
  });
22240
- const panelBody = appShell.tv({
22240
+ const panelBody = useTheme.tv({
22241
22241
  base: [
22242
22242
  // min-h-0 garante que o flex-1 encolha e o scroll ative (em vez de empurrar
22243
22243
  // header/footer). Scroll automático independente de viewport.
@@ -22249,7 +22249,7 @@ const panelBody = appShell.tv({
22249
22249
  "scrollbar-thin"
22250
22250
  ]
22251
22251
  });
22252
- const panelFooter = appShell.tv({
22252
+ const panelFooter = useTheme.tv({
22253
22253
  base: [
22254
22254
  // Botões fluidos lado a lado; quebram pra empilhados quando não cabem.
22255
22255
  "flex flex-wrap items-center gap-gp-md flex-none",
@@ -22265,7 +22265,7 @@ function PanelHeader({
22265
22265
  hideClose,
22266
22266
  className
22267
22267
  }) {
22268
- return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: appShell.cn(panelHeader(), className), children: [
22268
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: useTheme.cn(panelHeader(), className), children: [
22269
22269
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: panelHeaderText(), children: [
22270
22270
  title2 && /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: panelTitle(), children: [
22271
22271
  TitleIcon && /* @__PURE__ */ jsxRuntime.jsx(TitleIcon, { className: panelTitleIcon(), strokeWidth: 1.8 }),
@@ -22277,10 +22277,10 @@ function PanelHeader({
22277
22277
  ] });
22278
22278
  }
22279
22279
  function PanelBody({ children, className }) {
22280
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: appShell.cn(panelBody(), className), children });
22280
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: useTheme.cn(panelBody(), className), children });
22281
22281
  }
22282
22282
  function PanelFooter({ children, className }) {
22283
- return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: appShell.cn(panelFooter(), className), children });
22283
+ return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: useTheme.cn(panelFooter(), className), children });
22284
22284
  }
22285
22285
  const SIZE_MAP = {
22286
22286
  sm: "w-[320px]",
@@ -22302,7 +22302,7 @@ function slideAnimation(side) {
22302
22302
  bottom: "md:data-[state=closed]:slide-out-to-bottom-12 md:data-[state=open]:slide-in-from-bottom-12"
22303
22303
  }[side];
22304
22304
  const mobile = "max-md:data-[state=closed]:slide-out-to-bottom-12 max-md:data-[state=open]:slide-in-from-bottom-12";
22305
- return appShell.cn(
22305
+ return useTheme.cn(
22306
22306
  "ease-[cubic-bezier(0.4,0,0.2,1)]",
22307
22307
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
22308
22308
  "data-[state=closed]:duration-[220ms] data-[state=open]:duration-[220ms]",
@@ -22334,7 +22334,7 @@ function Panel({
22334
22334
  /* @__PURE__ */ jsxRuntime.jsxs(
22335
22335
  SheetPrimitive__namespace.Content,
22336
22336
  {
22337
- className: appShell.cn(
22337
+ className: useTheme.cn(
22338
22338
  "fixed z-50 bg-bg-surface dark:bg-bg-canvas text-fg-default shadow-sh-2xl",
22339
22339
  sizeClass,
22340
22340
  panelContainer({ side }),
@@ -22440,4 +22440,4 @@ exports.useColumnResize = useColumnResize;
22440
22440
  exports.useColumnWidths = useColumnWidths;
22441
22441
  exports.useDataTableContext = useDataTableContext;
22442
22442
  exports.useFloatingPanelResize = useFloatingPanelResize;
22443
- //# sourceMappingURL=panel-BOrETqXz.cjs.map
22443
+ //# sourceMappingURL=panel-DlyaLunw.cjs.map