@fayz-ai/ui 0.9.0 → 0.10.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 (156) hide show
  1. package/README.md +2 -2
  2. package/dist/analytics/AnalyticsCard.d.ts +10 -0
  3. package/dist/analytics/AnalyticsCard.d.ts.map +1 -0
  4. package/dist/analytics/AnalyticsControls.d.ts +18 -0
  5. package/dist/analytics/AnalyticsControls.d.ts.map +1 -0
  6. package/dist/analytics/AnalyticsGrid.d.ts +16 -0
  7. package/dist/analytics/AnalyticsGrid.d.ts.map +1 -0
  8. package/dist/analytics/context.d.ts +58 -0
  9. package/dist/analytics/context.d.ts.map +1 -0
  10. package/dist/analytics/derive.d.ts +81 -0
  11. package/dist/analytics/derive.d.ts.map +1 -0
  12. package/dist/analytics/index.d.ts +13 -0
  13. package/dist/analytics/index.d.ts.map +1 -0
  14. package/dist/analytics/range.d.ts +22 -0
  15. package/dist/analytics/range.d.ts.map +1 -0
  16. package/dist/{chunk-PVIB724L.js → chunk-22EVFMS3.js} +5 -3
  17. package/dist/chunk-22EVFMS3.js.map +1 -0
  18. package/dist/{chunk-G6OKZ7WL.js → chunk-6V5MGYXH.js} +13 -9
  19. package/dist/chunk-6V5MGYXH.js.map +1 -0
  20. package/dist/{chunk-KV3MHB6N.js → chunk-H63TOSQ7.js} +196 -53
  21. package/dist/chunk-H63TOSQ7.js.map +1 -0
  22. package/dist/{chunk-OUPJDGKE.js → chunk-I6CPKAOD.js} +134 -37
  23. package/dist/chunk-I6CPKAOD.js.map +1 -0
  24. package/dist/{chunk-YRVE4FOD.js → chunk-OKZ6WQB3.js} +3 -3
  25. package/dist/chunk-OKZ6WQB3.js.map +1 -0
  26. package/dist/{chunk-S5KNM4D2.js → chunk-SEIY2F5F.js} +235 -107
  27. package/dist/chunk-SEIY2F5F.js.map +1 -0
  28. package/dist/{chunk-75EFDLST.js → chunk-VAKWUUVC.js} +157 -6
  29. package/dist/chunk-VAKWUUVC.js.map +1 -0
  30. package/dist/dashboard/OnboardingWidget.d.ts +2 -14
  31. package/dist/dashboard/OnboardingWidget.d.ts.map +1 -1
  32. package/dist/dashboard/SidebarOnboarding.d.ts +28 -0
  33. package/dist/dashboard/SidebarOnboarding.d.ts.map +1 -0
  34. package/dist/dashboard/index.d.ts +2 -0
  35. package/dist/dashboard/index.d.ts.map +1 -1
  36. package/dist/dashboard/index.js +4 -4
  37. package/dist/dashboard/types.d.ts +18 -0
  38. package/dist/dashboard/types.d.ts.map +1 -1
  39. package/dist/dashboard/useOnboardingProgress.d.ts +28 -0
  40. package/dist/dashboard/useOnboardingProgress.d.ts.map +1 -0
  41. package/dist/icons.js +1 -1
  42. package/dist/index.d.ts +5 -4
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +960 -14
  45. package/dist/index.js.map +1 -1
  46. package/dist/layout/AppShell.d.ts +14 -1
  47. package/dist/layout/AppShell.d.ts.map +1 -1
  48. package/dist/layout/ModulePage.d.ts +11 -2
  49. package/dist/layout/ModulePage.d.ts.map +1 -1
  50. package/dist/layout/Sidebar.d.ts +8 -1
  51. package/dist/layout/Sidebar.d.ts.map +1 -1
  52. package/dist/layout/index.js +4 -4
  53. package/dist/lib/cn.d.ts.map +1 -0
  54. package/dist/preset.d.ts +3 -0
  55. package/dist/preset.d.ts.map +1 -0
  56. package/dist/primitives/data-table.d.ts +19 -4
  57. package/dist/primitives/data-table.d.ts.map +1 -1
  58. package/dist/primitives/date-picker.d.ts +4 -2
  59. package/dist/primitives/date-picker.d.ts.map +1 -1
  60. package/dist/primitives/filter-chip.d.ts +26 -0
  61. package/dist/primitives/filter-chip.d.ts.map +1 -0
  62. package/dist/primitives/header-tabs.d.ts +32 -0
  63. package/dist/primitives/header-tabs.d.ts.map +1 -0
  64. package/dist/primitives/hint.d.ts +25 -0
  65. package/dist/primitives/hint.d.ts.map +1 -0
  66. package/dist/primitives/index.d.ts +7 -0
  67. package/dist/primitives/index.d.ts.map +1 -1
  68. package/dist/primitives/index.js +4 -4
  69. package/dist/primitives/list-view.d.ts +14 -1
  70. package/dist/primitives/list-view.d.ts.map +1 -1
  71. package/dist/primitives/page-header.d.ts +23 -0
  72. package/dist/primitives/page-header.d.ts.map +1 -0
  73. package/dist/primitives/stat-tiles.d.ts +30 -0
  74. package/dist/primitives/stat-tiles.d.ts.map +1 -0
  75. package/dist/primitives/switch.d.ts +11 -0
  76. package/dist/primitives/switch.d.ts.map +1 -0
  77. package/dist/stores/index.d.ts +1 -0
  78. package/dist/stores/index.d.ts.map +1 -1
  79. package/dist/stores/page-header.store.d.ts +69 -0
  80. package/dist/stores/page-header.store.d.ts.map +1 -0
  81. package/package.json +4 -13
  82. package/dist/chunk-75EFDLST.js.map +0 -1
  83. package/dist/chunk-G6OKZ7WL.js.map +0 -1
  84. package/dist/chunk-KV3MHB6N.js.map +0 -1
  85. package/dist/chunk-OUPJDGKE.js.map +0 -1
  86. package/dist/chunk-PVIB724L.js.map +0 -1
  87. package/dist/chunk-S5KNM4D2.js.map +0 -1
  88. package/dist/chunk-YRVE4FOD.js.map +0 -1
  89. package/dist/utils/cn.d.ts.map +0 -1
  90. package/src/dashboard/ChartWidget.tsx +0 -50
  91. package/src/dashboard/ChartWidgetInner.tsx +0 -83
  92. package/src/dashboard/DashboardCanvas.tsx +0 -210
  93. package/src/dashboard/DashboardCustomizeMenu.tsx +0 -53
  94. package/src/dashboard/DashboardGrid.tsx +0 -35
  95. package/src/dashboard/DashboardRange.tsx +0 -62
  96. package/src/dashboard/GoldCard.tsx +0 -38
  97. package/src/dashboard/KpiCard.tsx +0 -238
  98. package/src/dashboard/OnboardingWidget.tsx +0 -140
  99. package/src/dashboard/TableWidget.tsx +0 -51
  100. package/src/dashboard/define.ts +0 -53
  101. package/src/dashboard/icon.ts +0 -13
  102. package/src/dashboard/index.ts +0 -38
  103. package/src/dashboard/layout.ts +0 -50
  104. package/src/dashboard/preferences.ts +0 -71
  105. package/src/dashboard/types.ts +0 -41
  106. package/src/icons.ts +0 -66
  107. package/src/index.ts +0 -238
  108. package/src/layout/AppShell.tsx +0 -987
  109. package/src/layout/ContentSplit.tsx +0 -153
  110. package/src/layout/ModulePage.tsx +0 -466
  111. package/src/layout/PageTransition.tsx +0 -57
  112. package/src/layout/SaveBar.tsx +0 -247
  113. package/src/layout/Sidebar.tsx +0 -535
  114. package/src/layout/Topbar.tsx +0 -462
  115. package/src/layout/index.ts +0 -39
  116. package/src/layout/useCrossModuleBack.ts +0 -30
  117. package/src/primitives/Avatar.tsx +0 -48
  118. package/src/primitives/SearchCombobox.tsx +0 -216
  119. package/src/primitives/badge.tsx +0 -68
  120. package/src/primitives/breadcrumb.tsx +0 -43
  121. package/src/primitives/button.tsx +0 -60
  122. package/src/primitives/card.tsx +0 -79
  123. package/src/primitives/checkbox.tsx +0 -53
  124. package/src/primitives/confirm-dialog.tsx +0 -125
  125. package/src/primitives/currency-input.tsx +0 -121
  126. package/src/primitives/data-table.tsx +0 -160
  127. package/src/primitives/date-picker.tsx +0 -225
  128. package/src/primitives/dropdown.tsx +0 -196
  129. package/src/primitives/index.ts +0 -87
  130. package/src/primitives/input.tsx +0 -50
  131. package/src/primitives/list-view.tsx +0 -252
  132. package/src/primitives/markdown-editor.tsx +0 -75
  133. package/src/primitives/markdown.tsx +0 -169
  134. package/src/primitives/modal.tsx +0 -156
  135. package/src/primitives/phone-link.tsx +0 -138
  136. package/src/primitives/popover.tsx +0 -30
  137. package/src/primitives/search-select.tsx +0 -314
  138. package/src/primitives/segmented-control.tsx +0 -66
  139. package/src/primitives/select.tsx +0 -157
  140. package/src/primitives/separator.tsx +0 -29
  141. package/src/primitives/sheet.tsx +0 -181
  142. package/src/primitives/skeleton.tsx +0 -46
  143. package/src/primitives/tabs.tsx +0 -53
  144. package/src/primitives/time-picker.tsx +0 -148
  145. package/src/primitives/toast.tsx +0 -46
  146. package/src/primitives/tooltip.tsx +0 -28
  147. package/src/stores/index.ts +0 -10
  148. package/src/stores/layout.store.ts +0 -31
  149. package/src/stores/theme.store.ts +0 -457
  150. package/src/styles.css +0 -461
  151. package/src/tailwind.ts +0 -43
  152. package/src/theme/index.ts +0 -94
  153. package/src/theme/preset.ts +0 -209
  154. package/src/theme/presets.ts +0 -106
  155. package/src/utils/cn.ts +0 -6
  156. /package/dist/{utils → lib}/cn.d.ts +0 -0
@@ -1,12 +1,12 @@
1
- import { useSaveBarVisible, useCrossModuleBack, useBackHandler } from './chunk-75EFDLST.js';
2
- import { DataTable, SegmentedControl } from './chunk-G6OKZ7WL.js';
3
- import { cn, Button } from './chunk-YRVE4FOD.js';
4
- import * as React11 from 'react';
1
+ import { useSaveBarVisible, useCrossModuleBack, useBackHandler, HeaderTabs } from './chunk-VAKWUUVC.js';
2
+ import { Card, DataTable, Dropdown, DropdownTrigger, DropdownContent, DropdownItem, SegmentedControl } from './chunk-6V5MGYXH.js';
3
+ import { cn, Button } from './chunk-OKZ6WQB3.js';
4
+ import * as React13 from 'react';
5
5
  import { useState, useRef, useEffect, useMemo, useCallback } from 'react';
6
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
7
  import { cva } from 'class-variance-authority';
8
8
  import * as DialogPrimitive from '@radix-ui/react-dialog';
9
- import { X, Check, ChevronDown, ChevronUp, ArrowLeft, Clock, Search, Plus, ChevronLeft, ChevronRight, Calendar, Loader2, CheckCircle2, AlertTriangle, XCircle, Info } from 'lucide-react';
9
+ import { X, Check, ChevronDown, ChevronUp, ArrowLeft, Clock, Plus, Search, RefreshCw, Download, ChevronLeft, ChevronRight, Calendar, Loader2, CheckCircle2, AlertTriangle, XCircle, Info } from 'lucide-react';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import { Toaster } from 'sonner';
12
12
  export { toast } from 'sonner';
@@ -17,9 +17,9 @@ import { createPortal } from 'react-dom';
17
17
  import { useTranslation, getCurrentLocale } from '@fayz-ai/core';
18
18
  import * as PopoverPrimitive from '@radix-ui/react-popover';
19
19
 
20
- var Input = React11.forwardRef(
20
+ var Input = React13.forwardRef(
21
21
  ({ className, type, error, description, id, ...props }, ref) => {
22
- const inputId = id ?? React11.useId();
22
+ const inputId = id ?? React13.useId();
23
23
  const descriptionId = description ? `${inputId}-description` : void 0;
24
24
  const errorId = error ? `${inputId}-error` : void 0;
25
25
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
@@ -107,7 +107,7 @@ var Modal = DialogPrimitive.Root;
107
107
  var ModalTrigger = DialogPrimitive.Trigger;
108
108
  var ModalClose = DialogPrimitive.Close;
109
109
  var ModalPortal = DialogPrimitive.Portal;
110
- var ModalOverlay = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
110
+ var ModalOverlay = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
111
111
  DialogPrimitive.Overlay,
112
112
  {
113
113
  ref,
@@ -120,7 +120,7 @@ var ModalOverlay = React11.forwardRef(({ className, ...props }, ref) => /* @__PU
120
120
  }
121
121
  ));
122
122
  ModalOverlay.displayName = "ModalOverlay";
123
- var ModalContent = React11.forwardRef(({ className, children, size = "lg", hideClose, noPadding, onPointerDownOutside, onInteractOutside, onCloseAutoFocus, ...props }, ref) => /* @__PURE__ */ jsx(ModalPortal, { children: /* @__PURE__ */ jsx(ModalOverlay, { children: /* @__PURE__ */ jsxs(
123
+ var ModalContent = React13.forwardRef(({ className, children, size = "lg", hideClose, noPadding, onPointerDownOutside, onInteractOutside, onCloseAutoFocus, ...props }, ref) => /* @__PURE__ */ jsx(ModalPortal, { children: /* @__PURE__ */ jsx(ModalOverlay, { children: /* @__PURE__ */ jsxs(
124
124
  DialogPrimitive.Content,
125
125
  {
126
126
  ref,
@@ -172,9 +172,9 @@ function ModalBody({ className, ...props }) {
172
172
  function ModalFooter({ className, ...props }) {
173
173
  return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 shrink-0", className), ...props });
174
174
  }
175
- var ModalTitle = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
175
+ var ModalTitle = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
176
176
  ModalTitle.displayName = "ModalTitle";
177
- var ModalDescription = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
177
+ var ModalDescription = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
178
178
  ModalDescription.displayName = "ModalDescription";
179
179
  var COLOR_CLASSES = {
180
180
  primary: "border-primary bg-primary text-primary-foreground",
@@ -182,7 +182,7 @@ var COLOR_CLASSES = {
182
182
  warning: "border-warning bg-warning text-white",
183
183
  destructive: "border-destructive bg-destructive text-destructive-foreground"
184
184
  };
185
- var Checkbox = React11.forwardRef(
185
+ var Checkbox = React13.forwardRef(
186
186
  ({ checked = false, onChange, disabled, className, color = "primary", id, ...props }, ref) => {
187
187
  return /* @__PURE__ */ jsx(
188
188
  "button",
@@ -211,7 +211,7 @@ Checkbox.displayName = "Checkbox";
211
211
  var Select = SelectPrimitive.Root;
212
212
  var SelectGroup = SelectPrimitive.Group;
213
213
  var SelectValue = SelectPrimitive.Value;
214
- var SelectTrigger = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
214
+ var SelectTrigger = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
215
215
  SelectPrimitive.Trigger,
216
216
  {
217
217
  ref,
@@ -227,7 +227,7 @@ var SelectTrigger = React11.forwardRef(({ className, children, ...props }, ref)
227
227
  }
228
228
  ));
229
229
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
230
- var SelectScrollUpButton = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
230
+ var SelectScrollUpButton = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
231
231
  SelectPrimitive.ScrollUpButton,
232
232
  {
233
233
  ref,
@@ -240,7 +240,7 @@ var SelectScrollUpButton = React11.forwardRef(({ className, ...props }, ref) =>
240
240
  }
241
241
  ));
242
242
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
243
- var SelectScrollDownButton = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
243
+ var SelectScrollDownButton = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
244
244
  SelectPrimitive.ScrollDownButton,
245
245
  {
246
246
  ref,
@@ -253,7 +253,7 @@ var SelectScrollDownButton = React11.forwardRef(({ className, ...props }, ref) =
253
253
  }
254
254
  ));
255
255
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
256
- var SelectContent = React11.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
256
+ var SelectContent = React13.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
257
257
  SelectPrimitive.Content,
258
258
  {
259
259
  ref,
@@ -281,7 +281,7 @@ var SelectContent = React11.forwardRef(({ className, children, position = "poppe
281
281
  }
282
282
  ) }));
283
283
  SelectContent.displayName = SelectPrimitive.Content.displayName;
284
- var SelectLabel = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
284
+ var SelectLabel = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
285
285
  SelectPrimitive.Label,
286
286
  {
287
287
  ref,
@@ -290,7 +290,7 @@ var SelectLabel = React11.forwardRef(({ className, ...props }, ref) => /* @__PUR
290
290
  }
291
291
  ));
292
292
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
293
- var SelectItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
293
+ var SelectItem = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
294
294
  SelectPrimitive.Item,
295
295
  {
296
296
  ref,
@@ -306,7 +306,7 @@ var SelectItem = React11.forwardRef(({ className, children, ...props }, ref) =>
306
306
  }
307
307
  ));
308
308
  SelectItem.displayName = SelectPrimitive.Item.displayName;
309
- var SelectSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
309
+ var SelectSeparator = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
310
310
  SelectPrimitive.Separator,
311
311
  {
312
312
  ref,
@@ -344,7 +344,7 @@ function ToastProvider({
344
344
  );
345
345
  }
346
346
  var Tabs = TabsPrimitive.Root;
347
- var TabsList = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
347
+ var TabsList = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
348
348
  TabsPrimitive.List,
349
349
  {
350
350
  ref,
@@ -356,7 +356,7 @@ var TabsList = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__
356
356
  }
357
357
  ));
358
358
  TabsList.displayName = TabsPrimitive.List.displayName;
359
- var TabsTrigger = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
359
+ var TabsTrigger = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
360
360
  TabsPrimitive.Trigger,
361
361
  {
362
362
  ref,
@@ -368,7 +368,7 @@ var TabsTrigger = React11.forwardRef(({ className, ...props }, ref) => /* @__PUR
368
368
  }
369
369
  ));
370
370
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
371
- var TabsContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
371
+ var TabsContent = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
372
372
  TabsPrimitive.Content,
373
373
  {
374
374
  ref,
@@ -380,7 +380,7 @@ var TabsContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PUR
380
380
  }
381
381
  ));
382
382
  TabsContent.displayName = TabsPrimitive.Content.displayName;
383
- var Separator2 = React11.forwardRef(
383
+ var Separator2 = React13.forwardRef(
384
384
  ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
385
385
  SeparatorPrimitive.Root,
386
386
  {
@@ -431,7 +431,7 @@ function formatPhone(digits, fallback, countryCode) {
431
431
  const tail = rest.length === 9 ? rest.slice(5) : rest.slice(4);
432
432
  return `+55 (${ddd}) ${head}-${tail}`;
433
433
  }
434
- var PhoneLink = React11.forwardRef(
434
+ var PhoneLink = React13.forwardRef(
435
435
  ({ phone, message, countryCode, raw, className, children, ...props }, ref) => {
436
436
  const { e164, display } = normalizePhone(phone, countryCode);
437
437
  const label = children ?? (raw ? phone ?? "" : display);
@@ -480,7 +480,7 @@ function Breadcrumb({ parent, current, onBack }) {
480
480
  var TooltipProvider = TooltipPrimitive.Provider;
481
481
  var Tooltip = TooltipPrimitive.Root;
482
482
  var TooltipTrigger = TooltipPrimitive.Trigger;
483
- var TooltipContent = React11.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
483
+ var TooltipContent = React13.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
484
484
  TooltipPrimitive.Content,
485
485
  {
486
486
  ref,
@@ -493,6 +493,88 @@ var TooltipContent = React11.forwardRef(({ className, sideOffset = 4, ...props }
493
493
  }
494
494
  ));
495
495
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
496
+ function StatTiles({ tiles, loading, className }) {
497
+ if (tiles.length === 0) return null;
498
+ return /* @__PURE__ */ jsx("div", { className: cn("grid gap-4 sm:grid-cols-2 lg:grid-cols-4", className), children: tiles.map((tile) => {
499
+ const Icon2 = tile.icon;
500
+ return /* @__PURE__ */ jsxs(Card, { className: "p-4", children: [
501
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
502
+ /* @__PURE__ */ jsx("p", { className: "min-w-0 truncate text-[13px] text-muted-foreground", title: tile.hint ?? tile.label, children: tile.label }),
503
+ Icon2 ? /* @__PURE__ */ jsx(Icon2, { className: "h-4 w-4 shrink-0 text-muted-foreground" }) : null
504
+ ] }),
505
+ /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-end justify-between gap-2", children: [
506
+ loading && tile.value === void 0 && !tile.pending ? /* @__PURE__ */ jsx("div", { className: "h-7 w-16 animate-pulse rounded bg-muted" }) : tile.pending ? /* @__PURE__ */ jsx("span", { className: "text-2xl font-semibold text-muted-foreground/50", children: "\u2014" }) : /* @__PURE__ */ jsx("span", { className: "truncate text-2xl font-semibold tabular-nums", children: tile.value }),
507
+ tile.pending && /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-full bg-muted px-2 py-0.5 text-[11px] font-medium text-muted-foreground", children: tile.pending })
508
+ ] })
509
+ ] }, tile.id);
510
+ }) });
511
+ }
512
+ var TRACK = {
513
+ sm: "h-4 w-7",
514
+ md: "h-5 w-9"
515
+ };
516
+ var THUMB = {
517
+ sm: "h-3 w-3 data-[on=true]:translate-x-3",
518
+ md: "h-4 w-4 data-[on=true]:translate-x-4"
519
+ };
520
+ var Switch = React13.forwardRef(function Switch2({ checked, onCheckedChange, size = "sm", label, className, disabled, ...rest }, ref) {
521
+ const control = /* @__PURE__ */ jsx(
522
+ "button",
523
+ {
524
+ ref,
525
+ type: "button",
526
+ role: "switch",
527
+ "aria-checked": checked,
528
+ disabled,
529
+ onClick: (e) => {
530
+ e.stopPropagation();
531
+ rest.onClick?.(e);
532
+ if (!disabled) onCheckedChange(!checked);
533
+ },
534
+ className: cn(
535
+ "relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-colors",
536
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
537
+ "disabled:cursor-not-allowed disabled:opacity-50",
538
+ TRACK[size],
539
+ checked ? "bg-primary" : "bg-muted-foreground/30",
540
+ className
541
+ ),
542
+ ...rest,
543
+ children: /* @__PURE__ */ jsx(
544
+ "span",
545
+ {
546
+ "data-on": checked,
547
+ className: cn(
548
+ "pointer-events-none ml-0.5 inline-block rounded-full bg-background shadow-sm transition-transform",
549
+ THUMB[size]
550
+ )
551
+ }
552
+ )
553
+ }
554
+ );
555
+ if (label == null) return control;
556
+ return /* @__PURE__ */ jsxs(
557
+ "label",
558
+ {
559
+ className: cn(
560
+ "inline-flex items-center gap-2 text-xs text-muted-foreground",
561
+ disabled ? "cursor-not-allowed" : "cursor-pointer"
562
+ ),
563
+ onClick: (e) => e.stopPropagation(),
564
+ children: [
565
+ control,
566
+ /* @__PURE__ */ jsx("span", { children: label })
567
+ ]
568
+ }
569
+ );
570
+ });
571
+ var Hint = React13.forwardRef(function Hint2({ label, children, side = "top", delayDuration = 0, ...rest }, ref) {
572
+ if (!label) return React13.cloneElement(children, { ...rest, ref });
573
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { delayDuration, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
574
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, ...rest, ref, children }),
575
+ /* @__PURE__ */ jsx(TooltipContent, { side, className: "px-2 py-1 text-xs font-medium", children: label })
576
+ ] }) });
577
+ });
496
578
  function formatTime12(h, m) {
497
579
  const period = h >= 12 ? "pm" : "am";
498
580
  const h12 = h % 12 || 12;
@@ -608,6 +690,8 @@ function TimePicker({ value, onChange, interval = 15, min = "00:00", max = "23:4
608
690
  )
609
691
  ] });
610
692
  }
693
+ var ALL_TAG = "__all__";
694
+ var ICON_BTN = "flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground";
611
695
  function ListView({
612
696
  columns,
613
697
  data,
@@ -632,6 +716,12 @@ function ListView({
632
716
  pageSize = 25,
633
717
  onPageChange,
634
718
  toolbar,
719
+ filters,
720
+ headerActions,
721
+ onExport,
722
+ exportLabel = "Export",
723
+ onRefresh,
724
+ refreshLabel = "Refresh",
635
725
  className
636
726
  }) {
637
727
  const [internalSearch, setInternalSearch] = useState(controlledSearch ?? "");
@@ -653,66 +743,69 @@ function ListView({
653
743
  const showPagination = onPageChange && totalItems > pageSize;
654
744
  const showSearch = !!onSearchChange;
655
745
  const showTags = tags && tags.length > 0 && onTagChange;
656
- const showToolbar = showSearch || onNew || showTags;
746
+ const showHeader = showTags || onNew && newLabel || headerActions;
747
+ const headerTabs = showTags ? [{ value: ALL_TAG, label: allTagLabel }, ...tags.map((t) => ({ value: t.value, label: t.label }))] : null;
748
+ const emptyState = /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-1 py-6", children: [
749
+ EmptyIcon && /* @__PURE__ */ jsx(EmptyIcon, { className: "mb-2 h-9 w-9 text-muted-foreground/40" }),
750
+ /* @__PURE__ */ jsx("p", { className: "text-base font-semibold text-foreground", children: emptyMessage }),
751
+ emptyActionLabel && onEmptyAction && /* @__PURE__ */ jsxs(Button, { variant: "default", className: "mt-3", onClick: onEmptyAction, children: [
752
+ /* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }),
753
+ emptyActionLabel
754
+ ] })
755
+ ] });
657
756
  return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", className), children: [
658
- showToolbar && /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row gap-3 sm:items-center sm:justify-between", children: [
659
- showSearch && /* @__PURE__ */ jsxs("div", { className: "relative flex-1 max-w-sm", children: [
660
- /* @__PURE__ */ jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground" }),
661
- /* @__PURE__ */ jsx(
662
- "input",
663
- {
664
- type: "text",
665
- placeholder: searchPlaceholder,
666
- value: internalSearch,
667
- onChange: (e) => handleSearchChange(e.target.value),
668
- className: "w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] pl-8 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
669
- }
670
- )
671
- ] }),
672
- onNew && newLabel && /* @__PURE__ */ jsxs(Button, { variant: "default", size: "default", onClick: onNew, className: "shrink-0", children: [
673
- /* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }),
674
- newLabel
757
+ showHeader && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
758
+ headerTabs ? /* @__PURE__ */ jsx(
759
+ HeaderTabs,
760
+ {
761
+ tabs: headerTabs,
762
+ value: activeTag ?? ALL_TAG,
763
+ onChange: (next) => onTagChange(next === ALL_TAG ? void 0 : next)
764
+ }
765
+ ) : /* @__PURE__ */ jsx("div", {}),
766
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
767
+ headerActions,
768
+ onNew && newLabel && /* @__PURE__ */ jsxs(Button, { variant: "default", size: "default", onClick: onNew, className: "shrink-0", children: [
769
+ /* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }),
770
+ newLabel
771
+ ] })
675
772
  ] })
676
773
  ] }),
677
- showTags && /* @__PURE__ */ jsxs("div", { className: "flex gap-1.5 flex-wrap", children: [
774
+ toolbar,
775
+ /* @__PURE__ */ jsxs(Card, { className: "overflow-hidden", children: [
776
+ (showSearch || filters || onRefresh || onExport) && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2 border-b border-border px-3 py-2", children: [
777
+ showSearch && /* @__PURE__ */ jsxs("div", { className: "relative min-w-0 flex-1", children: [
778
+ /* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }),
779
+ /* @__PURE__ */ jsx(
780
+ "input",
781
+ {
782
+ type: "text",
783
+ placeholder: searchPlaceholder,
784
+ value: internalSearch,
785
+ onChange: (e) => handleSearchChange(e.target.value),
786
+ className: "w-full bg-transparent py-1.5 pl-8 pr-3 text-sm placeholder:text-muted-foreground focus:outline-none"
787
+ }
788
+ )
789
+ ] }),
790
+ (filters || onRefresh || onExport) && /* @__PURE__ */ jsxs("div", { className: "ml-auto flex flex-wrap items-center justify-end gap-2", children: [
791
+ filters,
792
+ onRefresh && /* @__PURE__ */ jsx("button", { type: "button", "aria-label": refreshLabel, title: refreshLabel, onClick: onRefresh, className: ICON_BTN, children: /* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" }) }),
793
+ onExport && /* @__PURE__ */ jsx("button", { type: "button", "aria-label": exportLabel, title: exportLabel, onClick: onExport, className: ICON_BTN, children: /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" }) })
794
+ ] })
795
+ ] }),
678
796
  /* @__PURE__ */ jsx(
679
- "button",
797
+ DataTable,
680
798
  {
681
- onClick: () => onTagChange(void 0),
682
- className: cn(
683
- "rounded-full px-2.5 py-1 text-xs font-medium transition-colors",
684
- !activeTag ? "bg-primary text-primary-foreground" : "bg-muted/50 text-muted-foreground hover:bg-muted"
685
- ),
686
- children: allTagLabel
799
+ variant: "bare",
800
+ columns,
801
+ data: loading ? [] : data,
802
+ loading,
803
+ skeletonRows: loading ? 3 : void 0,
804
+ emptyMessage: emptyState,
805
+ onRowClick
687
806
  }
688
- ),
689
- tags.map((tag) => /* @__PURE__ */ jsx(
690
- "button",
691
- {
692
- onClick: () => onTagChange(tag.value),
693
- className: cn(
694
- "rounded-full px-2.5 py-1 text-xs font-medium transition-colors",
695
- activeTag === tag.value ? "bg-primary text-primary-foreground" : "bg-muted/50 text-muted-foreground hover:bg-muted"
696
- ),
697
- children: tag.label
698
- },
699
- tag.value
700
- ))
807
+ )
701
808
  ] }),
702
- toolbar,
703
- loading ? /* @__PURE__ */ jsx(DataTable, { columns, data: [], loading: true, variant: "card" }) : data.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted", children: [
704
- EmptyIcon && /* @__PURE__ */ jsx(EmptyIcon, { className: "h-8 w-8 text-muted-foreground/30 mb-2" }),
705
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage }),
706
- emptyActionLabel && onEmptyAction && /* @__PURE__ */ jsx("button", { onClick: onEmptyAction, className: "text-xs text-primary hover:underline mt-1", children: emptyActionLabel })
707
- ] }) : /* @__PURE__ */ jsx(
708
- DataTable,
709
- {
710
- columns,
711
- data,
712
- onRowClick,
713
- variant: "card"
714
- }
715
- ),
716
809
  showPagination && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-1", children: [
717
810
  /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
718
811
  (page - 1) * pageSize + 1,
@@ -783,7 +876,9 @@ function parseDate(s) {
783
876
  }
784
877
  var TRIGGER_VARIANT = {
785
878
  input: "rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm w-full",
786
- toolbar: "h-[26px] rounded-button border border-border bg-card shadow-button px-2.5 text-xs font-medium"
879
+ toolbar: "h-[26px] rounded-button border border-border bg-card shadow-button px-2.5 text-xs font-medium",
880
+ // Mesmas medidas e cores de FilterChip.
881
+ chip: "rounded-full border border-transparent bg-muted/70 px-2.5 py-1 text-xs font-medium text-muted-foreground hover:bg-muted hover:text-foreground"
787
882
  };
788
883
  function DatePicker({ value, onChange, className, variant = "input", defaultOpen, onOpenChange }) {
789
884
  const t = useTranslation();
@@ -857,10 +952,10 @@ function DatePicker({ value, onChange, className, variant = "input", defaultOpen
857
952
  ref: triggerRef,
858
953
  type: "button",
859
954
  onClick: () => setOpen((p) => !p),
860
- className: `flex items-center gap-2 text-left transition-colors hover:bg-muted/30 ${TRIGGER_VARIANT[variant]}`,
955
+ className: `flex items-center text-left transition-colors ${variant === "chip" ? "gap-1" : "gap-2 hover:bg-muted/30"} ${TRIGGER_VARIANT[variant]}`,
861
956
  children: [
862
- /* @__PURE__ */ jsx(Calendar, { className: `shrink-0 text-muted-foreground ${variant === "toolbar" ? "h-3 w-3" : "h-3.5 w-3.5"}` }),
863
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: value ? (variant === "toolbar" ? formatDateCompact : formatDate)(selectedDate, locale) : t("common.selectDate") })
957
+ /* @__PURE__ */ jsx(Calendar, { className: `shrink-0 ${variant === "input" ? "h-3.5 w-3.5 text-muted-foreground" : "h-3 w-3 opacity-70"}` }),
958
+ /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: value ? (variant === "input" ? formatDate : formatDateCompact)(selectedDate, locale) : t("common.selectDate") })
864
959
  ]
865
960
  }
866
961
  ),
@@ -947,16 +1042,16 @@ function SearchSelect({
947
1042
  className,
948
1043
  disabled
949
1044
  }) {
950
- const [open, setOpen] = React11.useState(false);
951
- const [query, setQuery] = React11.useState("");
952
- const [results, setResults] = React11.useState([]);
953
- const [loading, setLoading] = React11.useState(false);
954
- const [creating, setCreating] = React11.useState(false);
955
- const [selectedLabel, setSelectedLabel] = React11.useState(displayValue ?? "");
956
- const containerRef = React11.useRef(null);
957
- const inputRef = React11.useRef(null);
958
- const timerRef = React11.useRef();
959
- React11.useEffect(() => {
1045
+ const [open, setOpen] = React13.useState(false);
1046
+ const [query, setQuery] = React13.useState("");
1047
+ const [results, setResults] = React13.useState([]);
1048
+ const [loading, setLoading] = React13.useState(false);
1049
+ const [creating, setCreating] = React13.useState(false);
1050
+ const [selectedLabel, setSelectedLabel] = React13.useState(displayValue ?? "");
1051
+ const containerRef = React13.useRef(null);
1052
+ const inputRef = React13.useRef(null);
1053
+ const timerRef = React13.useRef();
1054
+ React13.useEffect(() => {
960
1055
  function handler(e) {
961
1056
  if (containerRef.current && !containerRef.current.contains(e.target)) {
962
1057
  setOpen(false);
@@ -965,10 +1060,10 @@ function SearchSelect({
965
1060
  document.addEventListener("mousedown", handler);
966
1061
  return () => document.removeEventListener("mousedown", handler);
967
1062
  }, []);
968
- React11.useEffect(() => {
1063
+ React13.useEffect(() => {
969
1064
  if (displayValue !== void 0) setSelectedLabel(displayValue);
970
1065
  }, [displayValue]);
971
- React11.useEffect(() => {
1066
+ React13.useEffect(() => {
972
1067
  if (open && loadOnOpen && query.length === 0 && results.length === 0 && !loading) {
973
1068
  setLoading(true);
974
1069
  Promise.resolve(onSearch("")).then(setResults).catch(() => setResults([])).finally(() => setLoading(false));
@@ -1026,7 +1121,7 @@ function SearchSelect({
1026
1121
  setResults([]);
1027
1122
  setTimeout(() => inputRef.current?.focus(), 0);
1028
1123
  }
1029
- const groups = React11.useMemo(() => {
1124
+ const groups = React13.useMemo(() => {
1030
1125
  const map = /* @__PURE__ */ new Map();
1031
1126
  for (const opt of results) {
1032
1127
  const group = opt.group ?? "";
@@ -1103,7 +1198,7 @@ function SearchSelect({
1103
1198
  }
1104
1199
  )
1105
1200
  ] }) : /* @__PURE__ */ jsxs("div", { className: "max-h-64 overflow-auto py-1", children: [
1106
- [...groups.entries()].map(([group, options]) => /* @__PURE__ */ jsxs(React11.Fragment, { children: [
1201
+ [...groups.entries()].map(([group, options]) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
1107
1202
  group && /* @__PURE__ */ jsx("div", { className: "sticky top-0 bg-muted/50 px-3 py-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children: group }),
1108
1203
  options.map((opt) => /* @__PURE__ */ jsx(
1109
1204
  "button",
@@ -1154,9 +1249,9 @@ function CurrencyInput({
1154
1249
  className,
1155
1250
  disabled
1156
1251
  }) {
1157
- const inputRef = React11.useRef(null);
1158
- const [focused, setFocused] = React11.useState(false);
1159
- const format = React11.useCallback((v) => {
1252
+ const inputRef = React13.useRef(null);
1253
+ const [focused, setFocused] = React13.useState(false);
1254
+ const format = React13.useCallback((v) => {
1160
1255
  return new Intl.NumberFormat(locale, {
1161
1256
  minimumFractionDigits: 2,
1162
1257
  maximumFractionDigits: 2
@@ -1265,7 +1360,7 @@ function ConfirmDialog({
1265
1360
  }) {
1266
1361
  const config = VARIANT_CONFIG[variant];
1267
1362
  const Icon2 = config.icon;
1268
- React11.useEffect(() => {
1363
+ React13.useEffect(() => {
1269
1364
  if (!open) return;
1270
1365
  function handleKey(e) {
1271
1366
  if (e.key === "Escape") onCancel();
@@ -1312,7 +1407,7 @@ function ConfirmDialog({
1312
1407
  }
1313
1408
  var Popover = PopoverPrimitive.Root;
1314
1409
  var PopoverTrigger = PopoverPrimitive.Trigger;
1315
- var PopoverContent = React11.forwardRef(({ className, align = "start", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1410
+ var PopoverContent = React13.forwardRef(({ className, align = "start", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1316
1411
  PopoverPrimitive.Content,
1317
1412
  {
1318
1413
  ref,
@@ -1327,6 +1422,39 @@ var PopoverContent = React11.forwardRef(({ className, align = "start", sideOffse
1327
1422
  }
1328
1423
  ) }));
1329
1424
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1425
+ function FilterChip({ allLabel, options, value, onChange, label, icon: Icon2, className }) {
1426
+ const active = value != null && value !== "";
1427
+ const current = options.find((o) => o.value === value);
1428
+ return /* @__PURE__ */ jsxs(Dropdown, { children: [
1429
+ /* @__PURE__ */ jsx(DropdownTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
1430
+ "button",
1431
+ {
1432
+ type: "button",
1433
+ "aria-label": label,
1434
+ className: cn(
1435
+ "inline-flex shrink-0 items-center gap-1 rounded-full border px-2.5 py-1 text-xs font-medium transition-colors",
1436
+ active ? "border-primary/30 bg-primary/10 text-primary hover:bg-primary/15" : "border-transparent bg-muted/70 text-muted-foreground hover:bg-muted hover:text-foreground",
1437
+ className
1438
+ ),
1439
+ children: [
1440
+ Icon2 && /* @__PURE__ */ jsx(Icon2, { className: "h-3 w-3 shrink-0 opacity-70" }),
1441
+ /* @__PURE__ */ jsx("span", { className: "max-w-[12rem] truncate", children: current?.label ?? allLabel }),
1442
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0 opacity-60" })
1443
+ ]
1444
+ }
1445
+ ) }),
1446
+ /* @__PURE__ */ jsxs(DropdownContent, { align: "start", children: [
1447
+ /* @__PURE__ */ jsxs(DropdownItem, { onClick: () => onChange(void 0), children: [
1448
+ allLabel,
1449
+ !active && /* @__PURE__ */ jsx(Check, { className: "ml-auto h-3.5 w-3.5 shrink-0 pl-1" })
1450
+ ] }),
1451
+ options.map((o) => /* @__PURE__ */ jsxs(DropdownItem, { onClick: () => onChange(o.value), children: [
1452
+ o.label,
1453
+ value === o.value && /* @__PURE__ */ jsx(Check, { className: "ml-auto h-3.5 w-3.5 shrink-0 pl-1" })
1454
+ ] }, o.value))
1455
+ ] })
1456
+ ] });
1457
+ }
1330
1458
  var INLINE_TOKEN = /(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g;
1331
1459
  function renderInline(text, keyPrefix) {
1332
1460
  return text.split(INLINE_TOKEN).map((part, i) => {
@@ -1340,7 +1468,7 @@ function renderInline(text, keyPrefix) {
1340
1468
  if (part.startsWith("`") && part.endsWith("`") && part.length > 2) {
1341
1469
  return /* @__PURE__ */ jsx("code", { className: "rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]", children: part.slice(1, -1) }, key);
1342
1470
  }
1343
- return part === "" ? null : /* @__PURE__ */ jsx(React11.Fragment, { children: part }, key);
1471
+ return part === "" ? null : /* @__PURE__ */ jsx(React13.Fragment, { children: part }, key);
1344
1472
  });
1345
1473
  }
1346
1474
  function parseBlocks(source) {
@@ -1424,7 +1552,7 @@ function renderMarkdown(source) {
1424
1552
  case "ol":
1425
1553
  return /* @__PURE__ */ jsx("ol", { className: "list-decimal space-y-1 pl-5", children: block.items.map((item, li) => /* @__PURE__ */ jsx("li", { children: renderInline(item, `${key}-${li}`) }, `${key}-${li}`)) }, key);
1426
1554
  case "p":
1427
- return /* @__PURE__ */ jsx("p", { children: block.lines.map((l, li) => /* @__PURE__ */ jsxs(React11.Fragment, { children: [
1555
+ return /* @__PURE__ */ jsx("p", { children: block.lines.map((l, li) => /* @__PURE__ */ jsxs(React13.Fragment, { children: [
1428
1556
  li > 0 && /* @__PURE__ */ jsx("br", {}),
1429
1557
  renderInline(l, `${key}-${li}`)
1430
1558
  ] }, `${key}-${li}`)) }, key);
@@ -1445,7 +1573,7 @@ function MarkdownEditor({
1445
1573
  renderPreview,
1446
1574
  className
1447
1575
  }) {
1448
- const [mode, setMode] = React11.useState(
1576
+ const [mode, setMode] = React13.useState(
1449
1577
  defaultMode === "preview" && value.trim() === "" ? "edit" : defaultMode
1450
1578
  );
1451
1579
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
@@ -1688,6 +1816,6 @@ function SearchCombobox({
1688
1816
  ] });
1689
1817
  }
1690
1818
 
1691
- export { Badge, Breadcrumb, Checkbox, ConfirmDialog, CurrencyInput, DatePicker, Input, ListView, Markdown, MarkdownEditor, Modal, ModalBody, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalPortal, ModalTitle, ModalTrigger, PhoneLink, Popover, PopoverContent, PopoverTrigger, SearchCombobox, SearchSelect, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Tabs, TabsContent, TabsList, TabsTrigger, TimePicker, ToastProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, normalizePhone, renderMarkdown };
1692
- //# sourceMappingURL=chunk-S5KNM4D2.js.map
1693
- //# sourceMappingURL=chunk-S5KNM4D2.js.map
1819
+ export { Badge, Breadcrumb, Checkbox, ConfirmDialog, CurrencyInput, DatePicker, FilterChip, Hint, Input, ListView, Markdown, MarkdownEditor, Modal, ModalBody, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalPortal, ModalTitle, ModalTrigger, PhoneLink, Popover, PopoverContent, PopoverTrigger, SearchCombobox, SearchSelect, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, StatTiles, Switch, Tabs, TabsContent, TabsList, TabsTrigger, TimePicker, ToastProvider, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, normalizePhone, renderMarkdown };
1820
+ //# sourceMappingURL=chunk-SEIY2F5F.js.map
1821
+ //# sourceMappingURL=chunk-SEIY2F5F.js.map