@motor-hero/ui-kit 0.51.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -600,15 +600,16 @@ function ColorPicker({
600
600
  // src/components/rating.tsx
601
601
  import * as ToggleGroup from "@radix-ui/react-toggle-group";
602
602
  import { Star } from "lucide-react";
603
- import { jsx as jsx8 } from "react/jsx-runtime";
603
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
604
604
  var MAX_STARS = 5;
605
605
  var sizeClasses2 = {
606
606
  sm: "h-4 w-4",
607
607
  md: "h-5 w-5",
608
608
  lg: "h-6 w-6"
609
609
  };
610
+ var formatNote = (value) => value.toLocaleString("pt-BR", { maximumFractionDigits: 1 });
610
611
  function defaultLabel(value) {
611
- return value > 0 ? `Avalia\xE7\xE3o: ${value} de ${MAX_STARS} estrelas` : "Avalia\xE7\xE3o: sem nota";
612
+ return value > 0 ? `Nota ${formatNote(value)} de ${MAX_STARS}` : "Avalia\xE7\xE3o: sem nota";
612
613
  }
613
614
  function Rating({
614
615
  value = 0,
@@ -627,17 +628,35 @@ function Rating({
627
628
  role: "img",
628
629
  "aria-label": label,
629
630
  className: cn("inline-flex items-center gap-0.5", className),
630
- children: Array.from({ length: MAX_STARS }, (_, index) => /* @__PURE__ */ jsx8(
631
- Star,
632
- {
633
- "aria-hidden": true,
634
- className: cn(
635
- sizeClasses2[size],
636
- index < clamped ? "fill-amber-400 text-amber-400" : "text-muted-foreground"
631
+ children: Array.from({ length: MAX_STARS }, (_, index) => {
632
+ const fill = Math.min(1, Math.max(0, clamped - index));
633
+ return /* @__PURE__ */ jsxs7("span", { className: "relative inline-flex", children: [
634
+ /* @__PURE__ */ jsx8(
635
+ Star,
636
+ {
637
+ "aria-hidden": true,
638
+ className: cn(sizeClasses2[size], "text-muted-foreground")
639
+ }
640
+ ),
641
+ fill > 0 && /* @__PURE__ */ jsx8(
642
+ "span",
643
+ {
644
+ className: "absolute inset-y-0 left-0 overflow-hidden",
645
+ style: { width: `${fill * 100}%` },
646
+ children: /* @__PURE__ */ jsx8(
647
+ Star,
648
+ {
649
+ "aria-hidden": true,
650
+ className: cn(
651
+ sizeClasses2[size],
652
+ "max-w-none fill-amber-400 text-amber-400"
653
+ )
654
+ }
655
+ )
656
+ }
637
657
  )
638
- },
639
- index
640
- ))
658
+ ] }, index);
659
+ })
641
660
  }
642
661
  );
643
662
  }
@@ -681,7 +700,7 @@ function Rating({
681
700
 
682
701
  // src/components/combobox.tsx
683
702
  import * as PopoverPrimitive2 from "@radix-ui/react-popover";
684
- import { Command as CommandPrimitive } from "cmdk";
703
+ import { Command as CommandPrimitive, defaultFilter } from "cmdk";
685
704
  import { Check, ChevronsUpDown as ChevronsUpDown2, Loader2, Plus, Search } from "lucide-react";
686
705
  import * as React5 from "react";
687
706
  import { Drawer as DrawerPrimitive2 } from "vaul";
@@ -726,7 +745,7 @@ function useInfiniteScrollSentinel({
726
745
  }
727
746
 
728
747
  // src/components/combobox.tsx
729
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
748
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
730
749
  function Combobox({
731
750
  options,
732
751
  value,
@@ -784,7 +803,7 @@ function Combobox({
784
803
  loading,
785
804
  onLoadMore
786
805
  });
787
- const trigger = /* @__PURE__ */ jsxs7(
806
+ const trigger = /* @__PURE__ */ jsxs8(
788
807
  "button",
789
808
  {
790
809
  type: "button",
@@ -799,18 +818,26 @@ function Combobox({
799
818
  className
800
819
  ),
801
820
  children: [
802
- /* @__PURE__ */ jsx9("span", { className: cn("truncate", !selected && "text-muted-foreground"), children: selected ? selected.label : placeholder }),
821
+ /* @__PURE__ */ jsx9(
822
+ "span",
823
+ {
824
+ title: selected?.description,
825
+ className: cn("truncate", !selected && "text-muted-foreground"),
826
+ children: selected ? selected.label : placeholder
827
+ }
828
+ ),
803
829
  /* @__PURE__ */ jsx9(ChevronsUpDown2, { className: "h-4 w-4 shrink-0 opacity-50" })
804
830
  ]
805
831
  }
806
832
  );
807
- const command = /* @__PURE__ */ jsxs7(
833
+ const command = /* @__PURE__ */ jsxs8(
808
834
  CommandPrimitive,
809
835
  {
810
836
  shouldFilter: !isServer,
837
+ filter: filterByKeywords,
811
838
  className: "flex h-full w-full flex-col overflow-hidden",
812
839
  children: [
813
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center border-b px-3", children: [
840
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center border-b px-3", children: [
814
841
  /* @__PURE__ */ jsx9(Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
815
842
  /* @__PURE__ */ jsx9(
816
843
  CommandPrimitive.Input,
@@ -821,17 +848,18 @@ function Combobox({
821
848
  }
822
849
  )
823
850
  ] }),
824
- /* @__PURE__ */ jsxs7(
851
+ /* @__PURE__ */ jsxs8(
825
852
  CommandPrimitive.List,
826
853
  {
827
854
  ref: listRef,
828
855
  className: "max-h-[50dvh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
829
856
  children: [
830
857
  !isServer && !showCreate && /* @__PURE__ */ jsx9(CommandPrimitive.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
831
- showCreate && /* @__PURE__ */ jsxs7(
858
+ showCreate && /* @__PURE__ */ jsxs8(
832
859
  CommandPrimitive.Item,
833
860
  {
834
861
  value: trimmedSearch,
862
+ keywords: [trimmedSearch],
835
863
  onSelect: () => handleSelect(trimmedSearch),
836
864
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground sm:py-1.5",
837
865
  children: [
@@ -842,11 +870,11 @@ function Combobox({
842
870
  ]
843
871
  }
844
872
  ),
845
- options.map((option) => /* @__PURE__ */ jsxs7(
873
+ options.map((option) => /* @__PURE__ */ jsxs8(
846
874
  CommandPrimitive.Item,
847
875
  {
848
- value: isServer ? option.value : option.label,
849
- keywords: option.description ? [option.description] : void 0,
876
+ value: option.value,
877
+ keywords: optionKeywords(option),
850
878
  disabled: option.disabled,
851
879
  onSelect: () => handleSelect(option.value),
852
880
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
@@ -876,7 +904,7 @@ function Combobox({
876
904
  }
877
905
  );
878
906
  if (isDesktop) {
879
- return /* @__PURE__ */ jsxs7(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
907
+ return /* @__PURE__ */ jsxs8(PopoverPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
880
908
  /* @__PURE__ */ jsx9(PopoverPrimitive2.Trigger, { asChild: true, children: trigger }),
881
909
  /* @__PURE__ */ jsx9(PopoverPrimitive2.Portal, { children: /* @__PURE__ */ jsx9(
882
910
  PopoverPrimitive2.Content,
@@ -890,11 +918,11 @@ function Combobox({
890
918
  ) })
891
919
  ] });
892
920
  }
893
- return /* @__PURE__ */ jsxs7(DrawerPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
921
+ return /* @__PURE__ */ jsxs8(DrawerPrimitive2.Root, { open, onOpenChange: handleOpenChange, children: [
894
922
  /* @__PURE__ */ jsx9(DrawerPrimitive2.Trigger, { asChild: true, children: trigger }),
895
- /* @__PURE__ */ jsxs7(DrawerPrimitive2.Portal, { children: [
923
+ /* @__PURE__ */ jsxs8(DrawerPrimitive2.Portal, { children: [
896
924
  /* @__PURE__ */ jsx9(DrawerPrimitive2.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
897
- /* @__PURE__ */ jsxs7(DrawerPrimitive2.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
925
+ /* @__PURE__ */ jsxs8(DrawerPrimitive2.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
898
926
  /* @__PURE__ */ jsx9(DrawerPrimitive2.Title, { className: "sr-only", children: placeholder }),
899
927
  /* @__PURE__ */ jsx9("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
900
928
  command
@@ -902,10 +930,12 @@ function Combobox({
902
930
  ] })
903
931
  ] });
904
932
  }
933
+ var filterByKeywords = (_value, search, keywords = []) => defaultFilter(keywords.join(" "), search);
934
+ var optionKeywords = (option) => option.description ? [option.label, option.description] : [option.label];
905
935
  function OptionText({ option }) {
906
936
  if (!option.description)
907
937
  return /* @__PURE__ */ jsx9("span", { className: "truncate", children: option.label });
908
- return /* @__PURE__ */ jsxs7("span", { className: "flex min-w-0 flex-col", children: [
938
+ return /* @__PURE__ */ jsxs8("span", { className: "flex min-w-0 flex-col", children: [
909
939
  /* @__PURE__ */ jsx9("span", { className: "truncate", children: option.label }),
910
940
  /* @__PURE__ */ jsx9(
911
941
  "span",
@@ -920,7 +950,7 @@ function OptionText({ option }) {
920
950
 
921
951
  // src/components/confirm-dialog.tsx
922
952
  import * as AlertDialog from "@radix-ui/react-alert-dialog";
923
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
953
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
924
954
  function ConfirmDialog({
925
955
  open,
926
956
  onOpenChange,
@@ -934,7 +964,7 @@ function ConfirmDialog({
934
964
  blurBackdrop = true,
935
965
  backdropClassName
936
966
  }) {
937
- return /* @__PURE__ */ jsx10(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs8(AlertDialog.Portal, { children: [
967
+ return /* @__PURE__ */ jsx10(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs9(AlertDialog.Portal, { children: [
938
968
  /* @__PURE__ */ jsx10(
939
969
  AlertDialog.Overlay,
940
970
  {
@@ -945,12 +975,12 @@ function ConfirmDialog({
945
975
  )
946
976
  }
947
977
  ),
948
- /* @__PURE__ */ jsxs8(AlertDialog.Content, { className: "fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", children: [
949
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
978
+ /* @__PURE__ */ jsxs9(AlertDialog.Content, { className: "fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", children: [
979
+ /* @__PURE__ */ jsxs9("div", { className: "flex flex-col space-y-2 text-center sm:text-left", children: [
950
980
  /* @__PURE__ */ jsx10(AlertDialog.Title, { className: "text-lg font-semibold", children: title }),
951
981
  /* @__PURE__ */ jsx10(AlertDialog.Description, { className: "text-sm text-muted-foreground", children: description })
952
982
  ] }),
953
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
983
+ /* @__PURE__ */ jsxs9("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
954
984
  /* @__PURE__ */ jsx10(AlertDialog.Cancel, { className: "inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-4 text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 cursor-pointer", children: cancelLabel }),
955
985
  /* @__PURE__ */ jsx10(
956
986
  AlertDialog.Action,
@@ -967,7 +997,7 @@ function ConfirmDialog({
967
997
  }
968
998
 
969
999
  // src/components/data-table-wrapper.tsx
970
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
1000
+ import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
971
1001
  function DataTableWrapper({
972
1002
  children,
973
1003
  isEmpty,
@@ -980,14 +1010,14 @@ function DataTableWrapper({
980
1010
  hasNextPage = false,
981
1011
  hasPreviousPage = false
982
1012
  }) {
983
- return /* @__PURE__ */ jsxs9("div", { className: "space-y-4", children: [
1013
+ return /* @__PURE__ */ jsxs10("div", { className: "space-y-4", children: [
984
1014
  /* @__PURE__ */ jsx11("div", { className: "overflow-x-auto rounded-md border", children }),
985
- !isLoading && isEmpty && /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
1015
+ !isLoading && isEmpty && /* @__PURE__ */ jsxs10("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
986
1016
  emptyIcon && /* @__PURE__ */ jsx11("div", { className: "mb-4 text-muted-foreground", children: emptyIcon }),
987
1017
  /* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold tracking-tight", children: emptyTitle }),
988
1018
  emptyDescription && /* @__PURE__ */ jsx11("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: emptyDescription })
989
1019
  ] }),
990
- page !== void 0 && onPageChange && /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-end gap-4", children: [
1020
+ page !== void 0 && onPageChange && /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-end gap-4", children: [
991
1021
  /* @__PURE__ */ jsx11(
992
1022
  "button",
993
1023
  {
@@ -998,7 +1028,7 @@ function DataTableWrapper({
998
1028
  children: "Anterior"
999
1029
  }
1000
1030
  ),
1001
- /* @__PURE__ */ jsxs9("span", { className: "text-sm text-muted-foreground", children: [
1031
+ /* @__PURE__ */ jsxs10("span", { className: "text-sm text-muted-foreground", children: [
1002
1032
  "P\xE1gina ",
1003
1033
  page
1004
1034
  ] }),
@@ -1025,7 +1055,7 @@ import { CalendarIcon, ChevronDown, ChevronLeft as ChevronLeft2, ChevronRight as
1025
1055
  import * as React6 from "react";
1026
1056
  import { DayPicker } from "react-day-picker";
1027
1057
  import { Drawer as DrawerPrimitive3 } from "vaul";
1028
- import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
1058
+ import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1029
1059
  var DATE_MASK = "__/__/____";
1030
1060
  var TIME_MASK = "__:__";
1031
1061
  var MASK_REPLACEMENT = { _: /\d/ };
@@ -1180,7 +1210,7 @@ function DatePickerImpl({
1180
1210
  }
1181
1211
  };
1182
1212
  const canApply = withTime && !!pendingDate && !!parseStrict(pendingTime, TIME_FORMAT);
1183
- const trigger = /* @__PURE__ */ jsxs10("div", { ref: triggerRef, className: "relative", children: [
1213
+ const trigger = /* @__PURE__ */ jsxs11("div", { ref: triggerRef, className: "relative", children: [
1184
1214
  /* @__PURE__ */ jsx12(
1185
1215
  InputMask,
1186
1216
  {
@@ -1215,7 +1245,7 @@ function DatePickerImpl({
1215
1245
  }
1216
1246
  )
1217
1247
  ] });
1218
- const content = /* @__PURE__ */ jsxs10("div", { className: withTime ? "p-3" : "", children: [
1248
+ const content = /* @__PURE__ */ jsxs11("div", { className: withTime ? "p-3" : "", children: [
1219
1249
  /* @__PURE__ */ jsx12(
1220
1250
  DayPicker,
1221
1251
  {
@@ -1234,8 +1264,8 @@ function DatePickerImpl({
1234
1264
  components: calendarComponents
1235
1265
  }
1236
1266
  ),
1237
- withTime && /* @__PURE__ */ jsxs10(Fragment5, { children: [
1238
- /* @__PURE__ */ jsxs10("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
1267
+ withTime && /* @__PURE__ */ jsxs11(Fragment5, { children: [
1268
+ /* @__PURE__ */ jsxs11("div", { className: "mt-2 flex items-center gap-2 border-t pt-3", children: [
1239
1269
  /* @__PURE__ */ jsx12("span", { className: "text-sm text-muted-foreground", children: "Hor\xE1rio" }),
1240
1270
  /* @__PURE__ */ jsx12(
1241
1271
  InputMask,
@@ -1263,7 +1293,7 @@ function DatePickerImpl({
1263
1293
  ] })
1264
1294
  ] });
1265
1295
  if (isDesktop) {
1266
- return /* @__PURE__ */ jsxs10(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1296
+ return /* @__PURE__ */ jsxs11(PopoverPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1267
1297
  /* @__PURE__ */ jsx12(PopoverPrimitive3.Anchor, { asChild: true, children: trigger }),
1268
1298
  /* @__PURE__ */ jsx12(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ jsx12(
1269
1299
  PopoverPrimitive3.Content,
@@ -1280,11 +1310,11 @@ function DatePickerImpl({
1280
1310
  ) })
1281
1311
  ] });
1282
1312
  }
1283
- return /* @__PURE__ */ jsxs10(DrawerPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1313
+ return /* @__PURE__ */ jsxs11(DrawerPrimitive3.Root, { open, onOpenChange: setOpen, children: [
1284
1314
  trigger,
1285
- /* @__PURE__ */ jsxs10(DrawerPrimitive3.Portal, { children: [
1315
+ /* @__PURE__ */ jsxs11(DrawerPrimitive3.Portal, { children: [
1286
1316
  /* @__PURE__ */ jsx12(DrawerPrimitive3.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1287
- /* @__PURE__ */ jsxs10(
1317
+ /* @__PURE__ */ jsxs11(
1288
1318
  DrawerPrimitive3.Content,
1289
1319
  {
1290
1320
  onOpenAutoFocus: (event) => event.preventDefault(),
@@ -1310,9 +1340,9 @@ function DateTimePicker(props) {
1310
1340
  }
1311
1341
 
1312
1342
  // src/components/empty-state.tsx
1313
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
1343
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1314
1344
  function EmptyState({ icon, title, description, action, className }) {
1315
- return /* @__PURE__ */ jsxs11("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
1345
+ return /* @__PURE__ */ jsxs12("div", { className: `flex flex-col items-center justify-center py-16 text-center ${className ?? ""}`, children: [
1316
1346
  icon && /* @__PURE__ */ jsx13("div", { className: "mb-4 text-muted-foreground", children: icon }),
1317
1347
  /* @__PURE__ */ jsx13("h3", { className: "text-lg font-semibold tracking-tight", children: title }),
1318
1348
  description && /* @__PURE__ */ jsx13("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description }),
@@ -1325,7 +1355,7 @@ import * as PopoverPrimitive4 from "@radix-ui/react-popover";
1325
1355
  import { ChevronDown as ChevronDown2, X as X3 } from "lucide-react";
1326
1356
  import * as React7 from "react";
1327
1357
  import { Drawer as DrawerPrimitive4 } from "vaul";
1328
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
1358
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1329
1359
  function FilterToolbar({
1330
1360
  children,
1331
1361
  isFilterActive = false,
@@ -1333,7 +1363,7 @@ function FilterToolbar({
1333
1363
  clearLabel = "Limpar filtros",
1334
1364
  className
1335
1365
  }) {
1336
- return /* @__PURE__ */ jsxs12(
1366
+ return /* @__PURE__ */ jsxs13(
1337
1367
  "div",
1338
1368
  {
1339
1369
  className: cn(
@@ -1342,7 +1372,7 @@ function FilterToolbar({
1342
1372
  ),
1343
1373
  children: [
1344
1374
  children,
1345
- isFilterActive && onClear && /* @__PURE__ */ jsxs12(
1375
+ isFilterActive && onClear && /* @__PURE__ */ jsxs13(
1346
1376
  "button",
1347
1377
  {
1348
1378
  type: "button",
@@ -1372,7 +1402,7 @@ function FilterPopover({
1372
1402
  const isDesktop = useIsDesktop();
1373
1403
  const close = React7.useCallback(() => setOpen(false), []);
1374
1404
  const content = typeof children === "function" ? children({ close }) : children;
1375
- const trigger = /* @__PURE__ */ jsxs12(
1405
+ const trigger = /* @__PURE__ */ jsxs13(
1376
1406
  "button",
1377
1407
  {
1378
1408
  type: "button",
@@ -1390,7 +1420,7 @@ function FilterPopover({
1390
1420
  }
1391
1421
  );
1392
1422
  if (isDesktop) {
1393
- return /* @__PURE__ */ jsxs12(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1423
+ return /* @__PURE__ */ jsxs13(PopoverPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1394
1424
  /* @__PURE__ */ jsx14(PopoverPrimitive4.Trigger, { asChild: true, children: trigger }),
1395
1425
  /* @__PURE__ */ jsx14(PopoverPrimitive4.Portal, { children: /* @__PURE__ */ jsx14(
1396
1426
  PopoverPrimitive4.Content,
@@ -1412,11 +1442,11 @@ function FilterPopover({
1412
1442
  ) })
1413
1443
  ] });
1414
1444
  }
1415
- return /* @__PURE__ */ jsxs12(DrawerPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1445
+ return /* @__PURE__ */ jsxs13(DrawerPrimitive4.Root, { open, onOpenChange: setOpen, children: [
1416
1446
  /* @__PURE__ */ jsx14(DrawerPrimitive4.Trigger, { asChild: true, children: trigger }),
1417
- /* @__PURE__ */ jsxs12(DrawerPrimitive4.Portal, { children: [
1447
+ /* @__PURE__ */ jsxs13(DrawerPrimitive4.Portal, { children: [
1418
1448
  /* @__PURE__ */ jsx14(DrawerPrimitive4.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1419
- /* @__PURE__ */ jsxs12(DrawerPrimitive4.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
1449
+ /* @__PURE__ */ jsxs13(DrawerPrimitive4.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
1420
1450
  /* @__PURE__ */ jsx14(DrawerPrimitive4.Title, { className: "sr-only", children: title ?? label }),
1421
1451
  /* @__PURE__ */ jsx14("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1422
1452
  /* @__PURE__ */ jsx14("div", { className: "overflow-y-auto p-2", children: content })
@@ -1443,10 +1473,10 @@ function FilterOptionList({
1443
1473
  selected.includes(optionValue) ? selected.filter((v) => v !== optionValue) : [...selected, optionValue]
1444
1474
  );
1445
1475
  };
1446
- return /* @__PURE__ */ jsxs12("div", { className: "flex flex-col p-1", children: [
1476
+ return /* @__PURE__ */ jsxs13("div", { className: "flex flex-col p-1", children: [
1447
1477
  options.map((option) => {
1448
1478
  const isChecked = selected.includes(option.value);
1449
- return /* @__PURE__ */ jsxs12(
1479
+ return /* @__PURE__ */ jsxs13(
1450
1480
  "button",
1451
1481
  {
1452
1482
  type: "button",
@@ -1482,7 +1512,7 @@ function FilterOptionList({
1482
1512
  }
1483
1513
 
1484
1514
  // src/components/form-dialog.tsx
1485
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
1515
+ import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
1486
1516
  function FormDialogLayout({
1487
1517
  title,
1488
1518
  children,
@@ -1493,10 +1523,10 @@ function FormDialogLayout({
1493
1523
  isSubmitting = false,
1494
1524
  isDisabled = false
1495
1525
  }) {
1496
- return /* @__PURE__ */ jsxs13("form", { onSubmit, children: [
1526
+ return /* @__PURE__ */ jsxs14("form", { onSubmit, children: [
1497
1527
  /* @__PURE__ */ jsx15("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left", children: /* @__PURE__ */ jsx15("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }) }),
1498
1528
  /* @__PURE__ */ jsx15("div", { className: "space-y-4 py-4", children }),
1499
- /* @__PURE__ */ jsxs13("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
1529
+ /* @__PURE__ */ jsxs14("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
1500
1530
  /* @__PURE__ */ jsx15(
1501
1531
  "button",
1502
1532
  {
@@ -1534,7 +1564,7 @@ function FormDialog({ onSubmit, ...rest }) {
1534
1564
 
1535
1565
  // src/components/form-field.tsx
1536
1566
  import { cloneElement, isValidElement, useId } from "react";
1537
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1567
+ import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
1538
1568
  function FormField({ label, htmlFor, error, required, children, className }) {
1539
1569
  const errorId = useId();
1540
1570
  const field = error && isValidElement(children) ? cloneElement(children, {
@@ -1544,8 +1574,8 @@ function FormField({ label, htmlFor, error, required, children, className }) {
1544
1574
  errorId
1545
1575
  ].filter(Boolean).join(" ")
1546
1576
  }) : children;
1547
- return /* @__PURE__ */ jsxs14("div", { className: `space-y-2 ${className ?? ""}`, children: [
1548
- /* @__PURE__ */ jsxs14(
1577
+ return /* @__PURE__ */ jsxs15("div", { className: `space-y-2 ${className ?? ""}`, children: [
1578
+ /* @__PURE__ */ jsxs15(
1549
1579
  "label",
1550
1580
  {
1551
1581
  htmlFor,
@@ -1588,7 +1618,7 @@ function HighlightPill({
1588
1618
 
1589
1619
  // src/components/mobile-card-list.tsx
1590
1620
  import { useRef as useRef4 } from "react";
1591
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1621
+ import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
1592
1622
  var SCROLL_THRESHOLD = 8;
1593
1623
  function MobileCardList({
1594
1624
  data,
@@ -1619,13 +1649,13 @@ function MobileCardList({
1619
1649
  }
1620
1650
  };
1621
1651
  if (isLoading) {
1622
- return /* @__PURE__ */ jsx18("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx18("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ jsxs15("div", { className: "space-y-3", children: [
1623
- /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
1652
+ return /* @__PURE__ */ jsx18("div", { className: `space-y-3 ${className ?? ""}`, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx18("div", { className: "rounded-xl border p-4", children: /* @__PURE__ */ jsxs16("div", { className: "space-y-3", children: [
1653
+ /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
1624
1654
  /* @__PURE__ */ jsx18("div", { className: "h-5 w-32 animate-pulse rounded bg-muted" }),
1625
1655
  /* @__PURE__ */ jsx18("div", { className: "h-5 w-16 animate-pulse rounded bg-muted" })
1626
1656
  ] }),
1627
1657
  /* @__PURE__ */ jsx18("div", { className: "h-4 w-48 animate-pulse rounded bg-muted" }),
1628
- /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
1658
+ /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
1629
1659
  /* @__PURE__ */ jsx18("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
1630
1660
  /* @__PURE__ */ jsx18("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })
1631
1661
  ] })
@@ -1733,11 +1763,11 @@ function useTheme() {
1733
1763
  }
1734
1764
 
1735
1765
  // src/components/mode-toggle.tsx
1736
- import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
1766
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1737
1767
  function ModeToggle() {
1738
1768
  const { setTheme } = useTheme();
1739
- return /* @__PURE__ */ jsxs16(DropdownMenu2.Root, { children: [
1740
- /* @__PURE__ */ jsx20(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs16(
1769
+ return /* @__PURE__ */ jsxs17(DropdownMenu2.Root, { children: [
1770
+ /* @__PURE__ */ jsx20(DropdownMenu2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
1741
1771
  "button",
1742
1772
  {
1743
1773
  type: "button",
@@ -1749,13 +1779,13 @@ function ModeToggle() {
1749
1779
  ]
1750
1780
  }
1751
1781
  ) }),
1752
- /* @__PURE__ */ jsx20(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs16(
1782
+ /* @__PURE__ */ jsx20(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs17(
1753
1783
  DropdownMenu2.Content,
1754
1784
  {
1755
1785
  align: "end",
1756
1786
  className: "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
1757
1787
  children: [
1758
- /* @__PURE__ */ jsxs16(
1788
+ /* @__PURE__ */ jsxs17(
1759
1789
  DropdownMenu2.Item,
1760
1790
  {
1761
1791
  className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
@@ -1766,7 +1796,7 @@ function ModeToggle() {
1766
1796
  ]
1767
1797
  }
1768
1798
  ),
1769
- /* @__PURE__ */ jsxs16(
1799
+ /* @__PURE__ */ jsxs17(
1770
1800
  DropdownMenu2.Item,
1771
1801
  {
1772
1802
  className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
@@ -1777,7 +1807,7 @@ function ModeToggle() {
1777
1807
  ]
1778
1808
  }
1779
1809
  ),
1780
- /* @__PURE__ */ jsxs16(
1810
+ /* @__PURE__ */ jsxs17(
1781
1811
  DropdownMenu2.Item,
1782
1812
  {
1783
1813
  className: "flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent",
@@ -1800,7 +1830,7 @@ import { Command as CommandPrimitive2 } from "cmdk";
1800
1830
  import { Check as Check2, ChevronsUpDown as ChevronsUpDown3, Loader2 as Loader22, Search as Search2, X as X4 } from "lucide-react";
1801
1831
  import * as React8 from "react";
1802
1832
  import { Drawer as DrawerPrimitive5 } from "vaul";
1803
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
1833
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
1804
1834
  function MultiCombobox({
1805
1835
  options,
1806
1836
  value,
@@ -1851,7 +1881,7 @@ function MultiCombobox({
1851
1881
  const removeValue = (optionValue) => {
1852
1882
  onChange(value.filter((v) => v !== optionValue));
1853
1883
  };
1854
- const trigger = /* @__PURE__ */ jsxs17(
1884
+ const trigger = /* @__PURE__ */ jsxs18(
1855
1885
  "div",
1856
1886
  {
1857
1887
  id,
@@ -1873,7 +1903,7 @@ function MultiCombobox({
1873
1903
  className
1874
1904
  ),
1875
1905
  children: [
1876
- selected.length === 0 ? /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ jsxs17(
1906
+ selected.length === 0 ? /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: placeholder }) : selected.map((option) => /* @__PURE__ */ jsxs18(
1877
1907
  "span",
1878
1908
  {
1879
1909
  title: option.description,
@@ -1903,13 +1933,14 @@ function MultiCombobox({
1903
1933
  ]
1904
1934
  }
1905
1935
  );
1906
- const command = /* @__PURE__ */ jsxs17(
1936
+ const command = /* @__PURE__ */ jsxs18(
1907
1937
  CommandPrimitive2,
1908
1938
  {
1909
1939
  shouldFilter: !isServer,
1940
+ filter: filterByKeywords,
1910
1941
  className: "flex h-full w-full flex-col overflow-hidden",
1911
1942
  children: [
1912
- /* @__PURE__ */ jsxs17("div", { className: "flex items-center border-b px-3", children: [
1943
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center border-b px-3", children: [
1913
1944
  /* @__PURE__ */ jsx21(Search2, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
1914
1945
  /* @__PURE__ */ jsx21(
1915
1946
  CommandPrimitive2.Input,
@@ -1920,18 +1951,18 @@ function MultiCombobox({
1920
1951
  }
1921
1952
  )
1922
1953
  ] }),
1923
- /* @__PURE__ */ jsxs17(
1954
+ /* @__PURE__ */ jsxs18(
1924
1955
  CommandPrimitive2.List,
1925
1956
  {
1926
1957
  ref: listRef,
1927
1958
  className: "max-h-[50dvh] overflow-y-auto overflow-x-hidden p-1 sm:max-h-60",
1928
1959
  children: [
1929
1960
  !isServer && /* @__PURE__ */ jsx21(CommandPrimitive2.Empty, { className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }),
1930
- options.map((option) => /* @__PURE__ */ jsxs17(
1961
+ options.map((option) => /* @__PURE__ */ jsxs18(
1931
1962
  CommandPrimitive2.Item,
1932
1963
  {
1933
- value: isServer ? option.value : option.label,
1934
- keywords: option.description ? [option.description] : void 0,
1964
+ value: option.value,
1965
+ keywords: optionKeywords(option),
1935
1966
  disabled: option.disabled,
1936
1967
  onSelect: () => toggleValue(option.value),
1937
1968
  className: "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2.5 text-sm outline-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 sm:py-1.5",
@@ -1960,7 +1991,7 @@ function MultiCombobox({
1960
1991
  }
1961
1992
  );
1962
1993
  if (isDesktop) {
1963
- return /* @__PURE__ */ jsxs17(PopoverPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
1994
+ return /* @__PURE__ */ jsxs18(PopoverPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
1964
1995
  /* @__PURE__ */ jsx21(PopoverPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
1965
1996
  /* @__PURE__ */ jsx21(PopoverPrimitive5.Portal, { children: /* @__PURE__ */ jsx21(
1966
1997
  PopoverPrimitive5.Content,
@@ -1974,11 +2005,11 @@ function MultiCombobox({
1974
2005
  ) })
1975
2006
  ] });
1976
2007
  }
1977
- return /* @__PURE__ */ jsxs17(DrawerPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
2008
+ return /* @__PURE__ */ jsxs18(DrawerPrimitive5.Root, { open, onOpenChange: handleOpenChange, children: [
1978
2009
  /* @__PURE__ */ jsx21(DrawerPrimitive5.Trigger, { asChild: true, disabled, children: trigger }),
1979
- /* @__PURE__ */ jsxs17(DrawerPrimitive5.Portal, { children: [
2010
+ /* @__PURE__ */ jsxs18(DrawerPrimitive5.Portal, { children: [
1980
2011
  /* @__PURE__ */ jsx21(DrawerPrimitive5.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
1981
- /* @__PURE__ */ jsxs17(DrawerPrimitive5.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
2012
+ /* @__PURE__ */ jsxs18(DrawerPrimitive5.Content, { className: "fixed inset-x-0 bottom-0 z-50 mt-24 flex max-h-[85dvh] flex-col rounded-t-2xl border bg-popover text-popover-foreground outline-none", children: [
1982
2013
  /* @__PURE__ */ jsx21(DrawerPrimitive5.Title, { className: "sr-only", children: placeholder }),
1983
2014
  /* @__PURE__ */ jsx21("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
1984
2015
  command
@@ -1988,14 +2019,14 @@ function MultiCombobox({
1988
2019
  }
1989
2020
 
1990
2021
  // src/components/page-header.tsx
1991
- import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
2022
+ import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
1992
2023
  function PageHeader({ title, description, action, className }) {
1993
- return /* @__PURE__ */ jsxs18(
2024
+ return /* @__PURE__ */ jsxs19(
1994
2025
  "div",
1995
2026
  {
1996
2027
  className: `flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between ${className ?? ""}`,
1997
2028
  children: [
1998
- /* @__PURE__ */ jsxs18("div", { className: "min-w-0", children: [
2029
+ /* @__PURE__ */ jsxs19("div", { className: "min-w-0", children: [
1999
2030
  /* @__PURE__ */ jsx22("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title }),
2000
2031
  description && /* @__PURE__ */ jsx22("p", { className: "text-sm text-muted-foreground", children: description })
2001
2032
  ] }),
@@ -2007,7 +2038,7 @@ function PageHeader({ title, description, action, className }) {
2007
2038
 
2008
2039
  // src/components/pagination.tsx
2009
2040
  import { useId as useId2, useState as useState11 } from "react";
2010
- import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
2041
+ import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
2011
2042
  var navButtonClass2 = "inline-flex h-8 max-sm:h-10 items-center justify-center rounded-md border border-input bg-background px-3 text-xs font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50";
2012
2043
  function Pagination({
2013
2044
  page,
@@ -2022,12 +2053,12 @@ function Pagination({
2022
2053
  pageSizeOptions,
2023
2054
  className
2024
2055
  }) {
2025
- return /* @__PURE__ */ jsxs19(
2056
+ return /* @__PURE__ */ jsxs20(
2026
2057
  "div",
2027
2058
  {
2028
2059
  className: `flex flex-wrap items-center ${showPageSizeSelector ? "justify-between" : "justify-end"} gap-x-4 gap-y-2 ${className ?? ""}`,
2029
2060
  children: [
2030
- showPageSizeSelector && /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
2061
+ showPageSizeSelector && /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
2031
2062
  /* @__PURE__ */ jsx23("label", { htmlFor: "pagination-page-size", className: "text-sm text-muted-foreground", children: "Itens por p\xE1gina" }),
2032
2063
  /* @__PURE__ */ jsx23(
2033
2064
  "select",
@@ -2040,7 +2071,7 @@ function Pagination({
2040
2071
  }
2041
2072
  )
2042
2073
  ] }),
2043
- /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-4", children: [
2074
+ /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-4", children: [
2044
2075
  /* @__PURE__ */ jsx23(
2045
2076
  "button",
2046
2077
  {
@@ -2051,7 +2082,7 @@ function Pagination({
2051
2082
  children: "Anterior"
2052
2083
  }
2053
2084
  ),
2054
- showPageJump && totalPages !== void 0 ? /* @__PURE__ */ jsx23(PageJumpInput, { page, totalPages, onPageChange }) : /* @__PURE__ */ jsxs19("span", { className: "text-sm text-muted-foreground", children: [
2085
+ showPageJump && totalPages !== void 0 ? /* @__PURE__ */ jsx23(PageJumpInput, { page, totalPages, onPageChange }) : /* @__PURE__ */ jsxs20("span", { className: "text-sm text-muted-foreground", children: [
2055
2086
  "P\xE1gina ",
2056
2087
  page,
2057
2088
  totalPages ? ` de ${totalPages}` : ""
@@ -2086,7 +2117,7 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
2086
2117
  const target = Math.max(1, Math.min(Number(draft), totalPages));
2087
2118
  if (target !== page) onPageChange(target);
2088
2119
  };
2089
- return /* @__PURE__ */ jsxs19("span", { className: "flex items-center gap-1.5 whitespace-nowrap text-sm text-muted-foreground", children: [
2120
+ return /* @__PURE__ */ jsxs20("span", { className: "flex items-center gap-1.5 whitespace-nowrap text-sm text-muted-foreground", children: [
2090
2121
  /* @__PURE__ */ jsx23("label", { htmlFor: inputId, className: "max-sm:sr-only", children: "P\xE1gina" }),
2091
2122
  /* @__PURE__ */ jsx23(
2092
2123
  "input",
@@ -2109,7 +2140,7 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
2109
2140
  className: "h-8 max-sm:h-10 rounded-md border border-input bg-background px-1.5 text-center text-xs font-medium tabular-nums text-foreground shadow-sm transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
2110
2141
  }
2111
2142
  ),
2112
- /* @__PURE__ */ jsxs19("span", { children: [
2143
+ /* @__PURE__ */ jsxs20("span", { children: [
2113
2144
  "de ",
2114
2145
  totalPages
2115
2146
  ] })
@@ -2119,10 +2150,10 @@ function PageJumpInput({ page, totalPages, onPageChange }) {
2119
2150
  // src/components/password-input.tsx
2120
2151
  import { Eye, EyeOff } from "lucide-react";
2121
2152
  import * as React9 from "react";
2122
- import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
2153
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
2123
2154
  var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props }, ref) => {
2124
2155
  const [visible, setVisible] = React9.useState(false);
2125
- return /* @__PURE__ */ jsxs20("div", { className: `relative ${containerClassName ?? ""}`, children: [
2156
+ return /* @__PURE__ */ jsxs21("div", { className: `relative ${containerClassName ?? ""}`, children: [
2126
2157
  /* @__PURE__ */ jsx24(
2127
2158
  "input",
2128
2159
  {
@@ -2148,7 +2179,7 @@ var PasswordInput = React9.forwardRef(({ containerClassName, className, ...props
2148
2179
  PasswordInput.displayName = "PasswordInput";
2149
2180
 
2150
2181
  // src/components/progress-bar.tsx
2151
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
2182
+ import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
2152
2183
  var sizeClasses3 = {
2153
2184
  sm: "h-1.5",
2154
2185
  md: "h-2"
@@ -2162,8 +2193,8 @@ function ProgressBar({
2162
2193
  indicatorClassName
2163
2194
  }) {
2164
2195
  const clamped = Math.min(100, Math.max(0, value));
2165
- return /* @__PURE__ */ jsxs21("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
2166
- (label || valueLabel) && /* @__PURE__ */ jsxs21("div", { className: "flex items-baseline justify-between gap-2", children: [
2196
+ return /* @__PURE__ */ jsxs22("div", { className: `space-y-1.5 ${className ?? ""}`, children: [
2197
+ (label || valueLabel) && /* @__PURE__ */ jsxs22("div", { className: "flex items-baseline justify-between gap-2", children: [
2167
2198
  label && /* @__PURE__ */ jsx25("span", { className: "text-sm text-muted-foreground", children: label }),
2168
2199
  valueLabel && /* @__PURE__ */ jsx25("span", { className: "text-sm font-semibold", children: valueLabel })
2169
2200
  ] }),
@@ -2184,7 +2215,7 @@ function ProgressBar({
2184
2215
  }
2185
2216
 
2186
2217
  // src/components/responsive-data-view.tsx
2187
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
2218
+ import { jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
2188
2219
  var BREAKPOINT_CLASSES = {
2189
2220
  md: { table: "md:block", cards: "md:hidden" },
2190
2221
  lg: { table: "lg:block", cards: "lg:hidden" },
@@ -2216,7 +2247,7 @@ function ResponsiveDataView({
2216
2247
  }
2217
2248
  const busyClass = isBusy && "pointer-events-none opacity-50";
2218
2249
  const visibility = BREAKPOINT_CLASSES[breakpoint];
2219
- return /* @__PURE__ */ jsxs22("div", { className: "space-y-4", children: [
2250
+ return /* @__PURE__ */ jsxs23("div", { className: "space-y-4", children: [
2220
2251
  /* @__PURE__ */ jsx26(
2221
2252
  "div",
2222
2253
  {
@@ -2239,7 +2270,7 @@ import * as DropdownMenu3 from "@radix-ui/react-dropdown-menu";
2239
2270
  import { ChevronRight as ChevronRight3, MoreVertical } from "lucide-react";
2240
2271
  import { useState as useState13 } from "react";
2241
2272
  import { Drawer as DrawerPrimitive6 } from "vaul";
2242
- import { Fragment as Fragment6, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
2273
+ import { Fragment as Fragment6, jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
2243
2274
  var triggerClass = "inline-flex h-8 w-8 max-sm:h-10 max-sm:w-10 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50";
2244
2275
  var itemClass2 = "flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
2245
2276
  var sheetItemClass2 = "flex w-full cursor-pointer select-none items-center gap-3 rounded-md px-3 py-3 text-base outline-none transition-colors hover:bg-accent active:bg-accent disabled:pointer-events-none disabled:opacity-50";
@@ -2264,7 +2295,7 @@ function RowActionsMenu({
2264
2295
  }
2265
2296
  );
2266
2297
  if (isDesktop) {
2267
- return /* @__PURE__ */ jsxs23(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
2298
+ return /* @__PURE__ */ jsxs24(DropdownMenu3.Root, { open, onOpenChange: setOpen, modal: false, children: [
2268
2299
  /* @__PURE__ */ jsx27(DropdownMenu3.Trigger, { asChild: true, children: trigger }),
2269
2300
  /* @__PURE__ */ jsx27(DropdownMenu3.Portal, { children: /* @__PURE__ */ jsx27(
2270
2301
  DropdownMenu3.Content,
@@ -2278,8 +2309,8 @@ function RowActionsMenu({
2278
2309
  action.destructive && "text-destructive focus:bg-destructive/10"
2279
2310
  );
2280
2311
  if (action.children?.length) {
2281
- return /* @__PURE__ */ jsxs23(DropdownMenu3.Sub, { children: [
2282
- /* @__PURE__ */ jsxs23(
2312
+ return /* @__PURE__ */ jsxs24(DropdownMenu3.Sub, { children: [
2313
+ /* @__PURE__ */ jsxs24(
2283
2314
  DropdownMenu3.SubTrigger,
2284
2315
  {
2285
2316
  className: cls,
@@ -2296,7 +2327,7 @@ function RowActionsMenu({
2296
2327
  {
2297
2328
  sideOffset: 4,
2298
2329
  className: "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95",
2299
- children: action.children.map((child) => /* @__PURE__ */ jsxs23(
2330
+ children: action.children.map((child) => /* @__PURE__ */ jsxs24(
2300
2331
  DropdownMenu3.Item,
2301
2332
  {
2302
2333
  className: cn(
@@ -2324,14 +2355,14 @@ function RowActionsMenu({
2324
2355
  children: renderLink({
2325
2356
  href: action.href,
2326
2357
  className: cls,
2327
- children: /* @__PURE__ */ jsxs23(Fragment6, { children: [
2358
+ children: /* @__PURE__ */ jsxs24(Fragment6, { children: [
2328
2359
  action.icon,
2329
2360
  action.label
2330
2361
  ] })
2331
2362
  })
2332
2363
  },
2333
2364
  action.label
2334
- ) : /* @__PURE__ */ jsxs23(
2365
+ ) : /* @__PURE__ */ jsxs24(
2335
2366
  DropdownMenu3.Item,
2336
2367
  {
2337
2368
  className: cls,
@@ -2349,11 +2380,11 @@ function RowActionsMenu({
2349
2380
  ) })
2350
2381
  ] });
2351
2382
  }
2352
- return /* @__PURE__ */ jsxs23(DrawerPrimitive6.Root, { open, onOpenChange: setOpen, children: [
2383
+ return /* @__PURE__ */ jsxs24(DrawerPrimitive6.Root, { open, onOpenChange: setOpen, children: [
2353
2384
  /* @__PURE__ */ jsx27(DrawerPrimitive6.Trigger, { asChild: true, children: trigger }),
2354
- /* @__PURE__ */ jsxs23(DrawerPrimitive6.Portal, { children: [
2385
+ /* @__PURE__ */ jsxs24(DrawerPrimitive6.Portal, { children: [
2355
2386
  /* @__PURE__ */ jsx27(DrawerPrimitive6.Overlay, { className: "fixed inset-0 z-50 bg-black/80" }),
2356
- /* @__PURE__ */ jsxs23(DrawerPrimitive6.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
2387
+ /* @__PURE__ */ jsxs24(DrawerPrimitive6.Content, { className: "fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border bg-popover p-2 pb-[max(0.5rem,env(safe-area-inset-bottom))] text-popover-foreground outline-none", children: [
2357
2388
  /* @__PURE__ */ jsx27(DrawerPrimitive6.Title, { className: "sr-only", children: label }),
2358
2389
  /* @__PURE__ */ jsx27("div", { className: "mx-auto my-3 h-1.5 w-12 shrink-0 rounded-full bg-muted" }),
2359
2390
  actions.map((action) => {
@@ -2361,18 +2392,18 @@ function RowActionsMenu({
2361
2392
  sheetItemClass2,
2362
2393
  action.destructive && "text-destructive"
2363
2394
  );
2364
- const inner = /* @__PURE__ */ jsxs23(Fragment6, { children: [
2395
+ const inner = /* @__PURE__ */ jsxs24(Fragment6, { children: [
2365
2396
  action.icon,
2366
2397
  action.label
2367
2398
  ] });
2368
2399
  if (action.children?.length) {
2369
- return /* @__PURE__ */ jsxs23("div", { children: [
2400
+ return /* @__PURE__ */ jsxs24("div", { children: [
2370
2401
  /* @__PURE__ */ jsx27("div", { className: "mx-3 my-1 h-px bg-border" }),
2371
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-3 px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground", children: [
2402
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3 px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground", children: [
2372
2403
  action.icon,
2373
2404
  action.label
2374
2405
  ] }),
2375
- action.children.map((child) => /* @__PURE__ */ jsxs23(
2406
+ action.children.map((child) => /* @__PURE__ */ jsxs24(
2376
2407
  "button",
2377
2408
  {
2378
2409
  type: "button",
@@ -2429,11 +2460,11 @@ function RowActionsMenu({
2429
2460
 
2430
2461
  // src/components/search-input.tsx
2431
2462
  import * as React10 from "react";
2432
- import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
2463
+ import { jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
2433
2464
  var SearchInput = React10.forwardRef(
2434
2465
  ({ containerClassName, className, ...props }, ref) => {
2435
- return /* @__PURE__ */ jsxs24("div", { className: cn("relative flex-1", containerClassName), children: [
2436
- /* @__PURE__ */ jsxs24(
2466
+ return /* @__PURE__ */ jsxs25("div", { className: cn("relative flex-1", containerClassName), children: [
2467
+ /* @__PURE__ */ jsxs25(
2437
2468
  "svg",
2438
2469
  {
2439
2470
  xmlns: "http://www.w3.org/2000/svg",
@@ -2471,11 +2502,11 @@ var SearchInput = React10.forwardRef(
2471
2502
  SearchInput.displayName = "SearchInput";
2472
2503
 
2473
2504
  // src/components/stat-card.tsx
2474
- import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
2505
+ import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
2475
2506
  function StatCard({ label, value, detail, icon, isLoading }) {
2476
2507
  if (isLoading) {
2477
- return /* @__PURE__ */ jsxs25("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2478
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between pb-2", children: [
2508
+ return /* @__PURE__ */ jsxs26("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2509
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between pb-2", children: [
2479
2510
  /* @__PURE__ */ jsx29("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }),
2480
2511
  /* @__PURE__ */ jsx29("div", { className: "h-4 w-4 animate-pulse rounded bg-muted" })
2481
2512
  ] }),
@@ -2483,8 +2514,8 @@ function StatCard({ label, value, detail, icon, isLoading }) {
2483
2514
  /* @__PURE__ */ jsx29("div", { className: "mt-1 h-4 w-20 animate-pulse rounded bg-muted" })
2484
2515
  ] });
2485
2516
  }
2486
- return /* @__PURE__ */ jsxs25("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2487
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between pb-2", children: [
2517
+ return /* @__PURE__ */ jsxs26("div", { className: "rounded-lg border bg-card p-6 shadow-sm", children: [
2518
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between pb-2", children: [
2488
2519
  /* @__PURE__ */ jsx29("span", { className: "text-sm font-medium text-muted-foreground", children: label }),
2489
2520
  icon && /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: icon })
2490
2521
  ] }),
@@ -2494,7 +2525,7 @@ function StatCard({ label, value, detail, icon, isLoading }) {
2494
2525
  }
2495
2526
 
2496
2527
  // src/components/status-badge.tsx
2497
- import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
2528
+ import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
2498
2529
  var variantClasses = {
2499
2530
  neutral: {
2500
2531
  badge: "bg-[var(--status-neutral-surface,#f3f4f6)] text-[var(--status-neutral-text,#374151)]",
@@ -2524,7 +2555,7 @@ function StatusBadge({
2524
2555
  children
2525
2556
  }) {
2526
2557
  const classes = variantClasses[variant];
2527
- return /* @__PURE__ */ jsxs26(
2558
+ return /* @__PURE__ */ jsxs27(
2528
2559
  "span",
2529
2560
  {
2530
2561
  className: `inline-flex items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium ${classes.badge} ${className ?? ""}`,
@@ -2542,9 +2573,9 @@ function StatusBadge({
2542
2573
  }
2543
2574
 
2544
2575
  // src/components/status-dot.tsx
2545
- import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
2576
+ import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
2546
2577
  function StatusDot({ active, label, className }) {
2547
- return /* @__PURE__ */ jsxs27("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
2578
+ return /* @__PURE__ */ jsxs28("span", { className: `inline-flex items-center gap-2 ${className ?? ""}`, children: [
2548
2579
  /* @__PURE__ */ jsx31(
2549
2580
  "span",
2550
2581
  {
@@ -2639,7 +2670,7 @@ function useVersionCheck({
2639
2670
  }
2640
2671
 
2641
2672
  // src/components/update-banner.tsx
2642
- import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
2673
+ import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
2643
2674
  function UpdateBanner({
2644
2675
  title = "Nova vers\xE3o dispon\xEDvel",
2645
2676
  description = "Atualize para continuar na vers\xE3o mais recente.",
@@ -2649,7 +2680,7 @@ function UpdateBanner({
2649
2680
  }) {
2650
2681
  const { updateAvailable, reload } = useVersionCheck(options);
2651
2682
  if (!updateAvailable) return null;
2652
- return /* @__PURE__ */ jsxs28(
2683
+ return /* @__PURE__ */ jsxs29(
2653
2684
  "div",
2654
2685
  {
2655
2686
  role: "status",
@@ -2660,7 +2691,7 @@ function UpdateBanner({
2660
2691
  className
2661
2692
  ),
2662
2693
  children: [
2663
- /* @__PURE__ */ jsxs28("span", { className: "flex min-w-0 items-center gap-2", children: [
2694
+ /* @__PURE__ */ jsxs29("span", { className: "flex min-w-0 items-center gap-2", children: [
2664
2695
  /* @__PURE__ */ jsx34(RefreshCw, { className: "h-4 w-4 shrink-0 animate-spin [animation-duration:3s]", "aria-hidden": true }),
2665
2696
  /* @__PURE__ */ jsx34("span", { className: "font-medium", children: title }),
2666
2697
  /* @__PURE__ */ jsx34("span", { className: "hidden truncate opacity-80 sm:inline", children: description })