@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.
- package/README.md +2 -2
- package/dist/analytics/AnalyticsCard.d.ts +10 -0
- package/dist/analytics/AnalyticsCard.d.ts.map +1 -0
- package/dist/analytics/AnalyticsControls.d.ts +18 -0
- package/dist/analytics/AnalyticsControls.d.ts.map +1 -0
- package/dist/analytics/AnalyticsGrid.d.ts +16 -0
- package/dist/analytics/AnalyticsGrid.d.ts.map +1 -0
- package/dist/analytics/context.d.ts +58 -0
- package/dist/analytics/context.d.ts.map +1 -0
- package/dist/analytics/derive.d.ts +81 -0
- package/dist/analytics/derive.d.ts.map +1 -0
- package/dist/analytics/index.d.ts +13 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/range.d.ts +22 -0
- package/dist/analytics/range.d.ts.map +1 -0
- package/dist/{chunk-PVIB724L.js → chunk-22EVFMS3.js} +5 -3
- package/dist/chunk-22EVFMS3.js.map +1 -0
- package/dist/{chunk-G6OKZ7WL.js → chunk-6V5MGYXH.js} +13 -9
- package/dist/chunk-6V5MGYXH.js.map +1 -0
- package/dist/{chunk-KV3MHB6N.js → chunk-H63TOSQ7.js} +196 -53
- package/dist/chunk-H63TOSQ7.js.map +1 -0
- package/dist/{chunk-OUPJDGKE.js → chunk-I6CPKAOD.js} +134 -37
- package/dist/chunk-I6CPKAOD.js.map +1 -0
- package/dist/{chunk-YRVE4FOD.js → chunk-OKZ6WQB3.js} +3 -3
- package/dist/chunk-OKZ6WQB3.js.map +1 -0
- package/dist/{chunk-S5KNM4D2.js → chunk-SEIY2F5F.js} +235 -107
- package/dist/chunk-SEIY2F5F.js.map +1 -0
- package/dist/{chunk-75EFDLST.js → chunk-VAKWUUVC.js} +157 -6
- package/dist/chunk-VAKWUUVC.js.map +1 -0
- package/dist/dashboard/OnboardingWidget.d.ts +2 -14
- package/dist/dashboard/OnboardingWidget.d.ts.map +1 -1
- package/dist/dashboard/SidebarOnboarding.d.ts +28 -0
- package/dist/dashboard/SidebarOnboarding.d.ts.map +1 -0
- package/dist/dashboard/index.d.ts +2 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -4
- package/dist/dashboard/types.d.ts +18 -0
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/dashboard/useOnboardingProgress.d.ts +28 -0
- package/dist/dashboard/useOnboardingProgress.d.ts.map +1 -0
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +960 -14
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.d.ts +14 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/ModulePage.d.ts +11 -2
- package/dist/layout/ModulePage.d.ts.map +1 -1
- package/dist/layout/Sidebar.d.ts +8 -1
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/index.js +4 -4
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/preset.d.ts +3 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/primitives/data-table.d.ts +19 -4
- package/dist/primitives/data-table.d.ts.map +1 -1
- package/dist/primitives/date-picker.d.ts +4 -2
- package/dist/primitives/date-picker.d.ts.map +1 -1
- package/dist/primitives/filter-chip.d.ts +26 -0
- package/dist/primitives/filter-chip.d.ts.map +1 -0
- package/dist/primitives/header-tabs.d.ts +32 -0
- package/dist/primitives/header-tabs.d.ts.map +1 -0
- package/dist/primitives/hint.d.ts +25 -0
- package/dist/primitives/hint.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +7 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -4
- package/dist/primitives/list-view.d.ts +14 -1
- package/dist/primitives/list-view.d.ts.map +1 -1
- package/dist/primitives/page-header.d.ts +23 -0
- package/dist/primitives/page-header.d.ts.map +1 -0
- package/dist/primitives/stat-tiles.d.ts +30 -0
- package/dist/primitives/stat-tiles.d.ts.map +1 -0
- package/dist/primitives/switch.d.ts +11 -0
- package/dist/primitives/switch.d.ts.map +1 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/page-header.store.d.ts +69 -0
- package/dist/stores/page-header.store.d.ts.map +1 -0
- package/package.json +4 -13
- package/dist/chunk-75EFDLST.js.map +0 -1
- package/dist/chunk-G6OKZ7WL.js.map +0 -1
- package/dist/chunk-KV3MHB6N.js.map +0 -1
- package/dist/chunk-OUPJDGKE.js.map +0 -1
- package/dist/chunk-PVIB724L.js.map +0 -1
- package/dist/chunk-S5KNM4D2.js.map +0 -1
- package/dist/chunk-YRVE4FOD.js.map +0 -1
- package/dist/utils/cn.d.ts.map +0 -1
- package/src/dashboard/ChartWidget.tsx +0 -50
- package/src/dashboard/ChartWidgetInner.tsx +0 -83
- package/src/dashboard/DashboardCanvas.tsx +0 -210
- package/src/dashboard/DashboardCustomizeMenu.tsx +0 -53
- package/src/dashboard/DashboardGrid.tsx +0 -35
- package/src/dashboard/DashboardRange.tsx +0 -62
- package/src/dashboard/GoldCard.tsx +0 -38
- package/src/dashboard/KpiCard.tsx +0 -238
- package/src/dashboard/OnboardingWidget.tsx +0 -140
- package/src/dashboard/TableWidget.tsx +0 -51
- package/src/dashboard/define.ts +0 -53
- package/src/dashboard/icon.ts +0 -13
- package/src/dashboard/index.ts +0 -38
- package/src/dashboard/layout.ts +0 -50
- package/src/dashboard/preferences.ts +0 -71
- package/src/dashboard/types.ts +0 -41
- package/src/icons.ts +0 -66
- package/src/index.ts +0 -238
- package/src/layout/AppShell.tsx +0 -987
- package/src/layout/ContentSplit.tsx +0 -153
- package/src/layout/ModulePage.tsx +0 -466
- package/src/layout/PageTransition.tsx +0 -57
- package/src/layout/SaveBar.tsx +0 -247
- package/src/layout/Sidebar.tsx +0 -535
- package/src/layout/Topbar.tsx +0 -462
- package/src/layout/index.ts +0 -39
- package/src/layout/useCrossModuleBack.ts +0 -30
- package/src/primitives/Avatar.tsx +0 -48
- package/src/primitives/SearchCombobox.tsx +0 -216
- package/src/primitives/badge.tsx +0 -68
- package/src/primitives/breadcrumb.tsx +0 -43
- package/src/primitives/button.tsx +0 -60
- package/src/primitives/card.tsx +0 -79
- package/src/primitives/checkbox.tsx +0 -53
- package/src/primitives/confirm-dialog.tsx +0 -125
- package/src/primitives/currency-input.tsx +0 -121
- package/src/primitives/data-table.tsx +0 -160
- package/src/primitives/date-picker.tsx +0 -225
- package/src/primitives/dropdown.tsx +0 -196
- package/src/primitives/index.ts +0 -87
- package/src/primitives/input.tsx +0 -50
- package/src/primitives/list-view.tsx +0 -252
- package/src/primitives/markdown-editor.tsx +0 -75
- package/src/primitives/markdown.tsx +0 -169
- package/src/primitives/modal.tsx +0 -156
- package/src/primitives/phone-link.tsx +0 -138
- package/src/primitives/popover.tsx +0 -30
- package/src/primitives/search-select.tsx +0 -314
- package/src/primitives/segmented-control.tsx +0 -66
- package/src/primitives/select.tsx +0 -157
- package/src/primitives/separator.tsx +0 -29
- package/src/primitives/sheet.tsx +0 -181
- package/src/primitives/skeleton.tsx +0 -46
- package/src/primitives/tabs.tsx +0 -53
- package/src/primitives/time-picker.tsx +0 -148
- package/src/primitives/toast.tsx +0 -46
- package/src/primitives/tooltip.tsx +0 -28
- package/src/stores/index.ts +0 -10
- package/src/stores/layout.store.ts +0 -31
- package/src/stores/theme.store.ts +0 -457
- package/src/styles.css +0 -461
- package/src/tailwind.ts +0 -43
- package/src/theme/index.ts +0 -94
- package/src/theme/preset.ts +0 -209
- package/src/theme/presets.ts +0 -106
- package/src/utils/cn.ts +0 -6
- /package/dist/{utils → lib}/cn.d.ts +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { useSaveBarVisible, useCrossModuleBack, useBackHandler } from './chunk-
|
|
2
|
-
import { DataTable, SegmentedControl } from './chunk-
|
|
3
|
-
import { cn, Button } from './chunk-
|
|
4
|
-
import * as
|
|
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,
|
|
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 =
|
|
20
|
+
var Input = React13.forwardRef(
|
|
21
21
|
({ className, type, error, description, id, ...props }, ref) => {
|
|
22
|
-
const inputId = id ??
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
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
|
-
|
|
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
|
-
|
|
797
|
+
DataTable,
|
|
680
798
|
{
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
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
|
|
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
|
|
863
|
-
/* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: value ? (variant === "
|
|
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] =
|
|
951
|
-
const [query, setQuery] =
|
|
952
|
-
const [results, setResults] =
|
|
953
|
-
const [loading, setLoading] =
|
|
954
|
-
const [creating, setCreating] =
|
|
955
|
-
const [selectedLabel, setSelectedLabel] =
|
|
956
|
-
const containerRef =
|
|
957
|
-
const inputRef =
|
|
958
|
-
const timerRef =
|
|
959
|
-
|
|
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
|
-
|
|
1063
|
+
React13.useEffect(() => {
|
|
969
1064
|
if (displayValue !== void 0) setSelectedLabel(displayValue);
|
|
970
1065
|
}, [displayValue]);
|
|
971
|
-
|
|
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 =
|
|
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(
|
|
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 =
|
|
1158
|
-
const [focused, setFocused] =
|
|
1159
|
-
const format =
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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] =
|
|
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-
|
|
1693
|
-
//# sourceMappingURL=chunk-
|
|
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
|