@fayz-ai/ui 0.6.0 → 0.7.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 (88) hide show
  1. package/dist/chunk-75EFDLST.js +274 -0
  2. package/dist/chunk-75EFDLST.js.map +1 -0
  3. package/dist/{chunk-YB5ZJKNG.cjs → chunk-7PTRAWHO.cjs} +263 -225
  4. package/dist/chunk-7PTRAWHO.cjs.map +1 -0
  5. package/dist/{chunk-CZ6X6PZT.js → chunk-COC5DDFG.js} +313 -44
  6. package/dist/chunk-COC5DDFG.js.map +1 -0
  7. package/dist/{chunk-MYZT2OG7.js → chunk-FY7OZNKU.js} +24 -68
  8. package/dist/chunk-FY7OZNKU.js.map +1 -0
  9. package/dist/chunk-H6OULCHF.cjs +81 -0
  10. package/dist/chunk-H6OULCHF.cjs.map +1 -0
  11. package/dist/{chunk-GE6XUREM.cjs → chunk-HG5RH3B3.cjs} +339 -68
  12. package/dist/chunk-HG5RH3B3.cjs.map +1 -0
  13. package/dist/{chunk-7TBDPNLY.cjs → chunk-NWPMNPGR.cjs} +76 -47
  14. package/dist/chunk-NWPMNPGR.cjs.map +1 -0
  15. package/dist/{chunk-D6SXPF4F.cjs → chunk-ODY3GZ3Y.cjs} +41 -87
  16. package/dist/chunk-ODY3GZ3Y.cjs.map +1 -0
  17. package/dist/{chunk-22J2RTMN.js → chunk-OTUH4K4B.js} +196 -150
  18. package/dist/chunk-OTUH4K4B.js.map +1 -0
  19. package/dist/chunk-OW73RZOU.cjs +313 -0
  20. package/dist/chunk-OW73RZOU.cjs.map +1 -0
  21. package/dist/{chunk-GFH5HOCO.js → chunk-W5O2X277.js} +42 -14
  22. package/dist/chunk-W5O2X277.js.map +1 -0
  23. package/dist/chunk-YRVE4FOD.js +57 -0
  24. package/dist/chunk-YRVE4FOD.js.map +1 -0
  25. package/dist/dashboard/DashboardCanvas.d.ts +5 -1
  26. package/dist/dashboard/DashboardCanvas.d.ts.map +1 -1
  27. package/dist/dashboard/GoldCard.d.ts +19 -0
  28. package/dist/dashboard/GoldCard.d.ts.map +1 -0
  29. package/dist/dashboard/KpiCard.d.ts.map +1 -1
  30. package/dist/dashboard/index.cjs +30 -26
  31. package/dist/dashboard/index.d.ts +1 -0
  32. package/dist/dashboard/index.d.ts.map +1 -1
  33. package/dist/dashboard/index.js +3 -3
  34. package/dist/index.cjs +198 -174
  35. package/dist/index.d.ts +3 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +7 -7
  38. package/dist/layout/AppShell.d.ts +27 -6
  39. package/dist/layout/AppShell.d.ts.map +1 -1
  40. package/dist/layout/ContentSplit.d.ts +32 -0
  41. package/dist/layout/ContentSplit.d.ts.map +1 -0
  42. package/dist/layout/Sidebar.d.ts.map +1 -1
  43. package/dist/layout/Topbar.d.ts.map +1 -1
  44. package/dist/layout/index.cjs +31 -23
  45. package/dist/layout/index.d.ts +2 -1
  46. package/dist/layout/index.d.ts.map +1 -1
  47. package/dist/layout/index.js +3 -3
  48. package/dist/primitives/index.cjs +126 -114
  49. package/dist/primitives/index.d.ts +2 -0
  50. package/dist/primitives/index.d.ts.map +1 -1
  51. package/dist/primitives/index.js +4 -4
  52. package/dist/primitives/markdown-editor.d.ts +23 -0
  53. package/dist/primitives/markdown-editor.d.ts.map +1 -0
  54. package/dist/primitives/markdown.d.ts +9 -0
  55. package/dist/primitives/markdown.d.ts.map +1 -0
  56. package/package.json +3 -3
  57. package/src/dashboard/DashboardCanvas.tsx +13 -2
  58. package/src/dashboard/GoldCard.tsx +38 -0
  59. package/src/dashboard/KpiCard.tsx +4 -2
  60. package/src/dashboard/index.ts +1 -0
  61. package/src/index.ts +15 -0
  62. package/src/layout/AppShell.tsx +240 -20
  63. package/src/layout/ContentSplit.tsx +153 -0
  64. package/src/layout/ModulePage.tsx +2 -2
  65. package/src/layout/Sidebar.tsx +71 -20
  66. package/src/layout/Topbar.tsx +47 -17
  67. package/src/layout/index.ts +15 -1
  68. package/src/primitives/dropdown.tsx +4 -4
  69. package/src/primitives/index.ts +2 -0
  70. package/src/primitives/markdown-editor.tsx +75 -0
  71. package/src/primitives/markdown.tsx +169 -0
  72. package/src/primitives/select.tsx +1 -1
  73. package/dist/chunk-22J2RTMN.js.map +0 -1
  74. package/dist/chunk-7TBDPNLY.cjs.map +0 -1
  75. package/dist/chunk-CZ6X6PZT.js.map +0 -1
  76. package/dist/chunk-D6SXPF4F.cjs.map +0 -1
  77. package/dist/chunk-DNYVEOAX.js +0 -11
  78. package/dist/chunk-DNYVEOAX.js.map +0 -1
  79. package/dist/chunk-E526FHZ4.js +0 -169
  80. package/dist/chunk-E526FHZ4.js.map +0 -1
  81. package/dist/chunk-GE6XUREM.cjs.map +0 -1
  82. package/dist/chunk-GFH5HOCO.js.map +0 -1
  83. package/dist/chunk-MYZT2OG7.js.map +0 -1
  84. package/dist/chunk-VVVZO2LE.cjs +0 -13
  85. package/dist/chunk-VVVZO2LE.cjs.map +0 -1
  86. package/dist/chunk-W4XXXJRW.cjs +0 -196
  87. package/dist/chunk-W4XXXJRW.cjs.map +0 -1
  88. package/dist/chunk-YB5ZJKNG.cjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkW4XXXJRW_cjs = require('./chunk-W4XXXJRW.cjs');
4
- var chunkD6SXPF4F_cjs = require('./chunk-D6SXPF4F.cjs');
5
- var chunkVVVZO2LE_cjs = require('./chunk-VVVZO2LE.cjs');
6
- var React11 = require('react');
3
+ var chunkOW73RZOU_cjs = require('./chunk-OW73RZOU.cjs');
4
+ var chunkODY3GZ3Y_cjs = require('./chunk-ODY3GZ3Y.cjs');
5
+ var chunkH6OULCHF_cjs = require('./chunk-H6OULCHF.cjs');
6
+ var React10 = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
  var classVarianceAuthority = require('class-variance-authority');
9
9
  var DialogPrimitive = require('@radix-ui/react-dialog');
@@ -35,7 +35,7 @@ function _interopNamespace(e) {
35
35
  return Object.freeze(n);
36
36
  }
37
37
 
38
- var React11__namespace = /*#__PURE__*/_interopNamespace(React11);
38
+ var React10__namespace = /*#__PURE__*/_interopNamespace(React10);
39
39
  var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
40
40
  var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
41
41
  var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
@@ -43,9 +43,9 @@ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrim
43
43
  var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
44
44
  var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
45
45
 
46
- var Input = React11__namespace.forwardRef(
46
+ var Input = React10__namespace.forwardRef(
47
47
  ({ className, type, error, description, id, ...props }, ref) => {
48
- const inputId = id ?? React11__namespace.useId();
48
+ const inputId = id ?? React10__namespace.useId();
49
49
  const descriptionId = description ? `${inputId}-description` : void 0;
50
50
  const errorId = error ? `${inputId}-error` : void 0;
51
51
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
@@ -54,7 +54,7 @@ var Input = React11__namespace.forwardRef(
54
54
  {
55
55
  type,
56
56
  id: inputId,
57
- className: chunkVVVZO2LE_cjs.cn(
57
+ className: chunkH6OULCHF_cjs.cn(
58
58
  "flex h-8 w-full rounded-input border border-input bg-card px-2 py-1 text-sm text-foreground shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
59
59
  error && "border-destructive focus-visible:ring-destructive",
60
60
  className
@@ -109,7 +109,7 @@ var DOT_COLOR = {
109
109
  function Badge({ className, variant, dot, children, ...props }) {
110
110
  const v = variant ?? "default";
111
111
  const showDot = dot ?? VARIANTS_WITH_DOT.has(v);
112
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkVVVZO2LE_cjs.cn(badgeVariants({ variant }), className), ...props, children: [
112
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkH6OULCHF_cjs.cn(badgeVariants({ variant }), className), ...props, children: [
113
113
  showDot && /* @__PURE__ */ jsxRuntime.jsx(
114
114
  "span",
115
115
  {
@@ -133,11 +133,11 @@ var Modal = DialogPrimitive__namespace.Root;
133
133
  var ModalTrigger = DialogPrimitive__namespace.Trigger;
134
134
  var ModalClose = DialogPrimitive__namespace.Close;
135
135
  var ModalPortal = DialogPrimitive__namespace.Portal;
136
- var ModalOverlay = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
136
+ var ModalOverlay = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
137
137
  DialogPrimitive__namespace.Overlay,
138
138
  {
139
139
  ref,
140
- className: chunkVVVZO2LE_cjs.cn(
140
+ className: chunkH6OULCHF_cjs.cn(
141
141
  "fayz-modal-overlay saas-mdl-ov fixed inset-0 z-50",
142
142
  "flex items-center justify-center p-0 sm:p-6",
143
143
  className
@@ -146,7 +146,7 @@ var ModalOverlay = React11__namespace.forwardRef(({ className, ...props }, ref)
146
146
  }
147
147
  ));
148
148
  ModalOverlay.displayName = "ModalOverlay";
149
- var ModalContent = React11__namespace.forwardRef(({ className, children, size = "lg", hideClose, noPadding, onPointerDownOutside, onInteractOutside, onCloseAutoFocus, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(ModalPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(ModalOverlay, { children: /* @__PURE__ */ jsxRuntime.jsxs(
149
+ var ModalContent = React10__namespace.forwardRef(({ className, children, size = "lg", hideClose, noPadding, onPointerDownOutside, onInteractOutside, onCloseAutoFocus, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(ModalPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(ModalOverlay, { children: /* @__PURE__ */ jsxRuntime.jsxs(
150
150
  DialogPrimitive__namespace.Content,
151
151
  {
152
152
  ref,
@@ -168,7 +168,7 @@ var ModalContent = React11__namespace.forwardRef(({ className, children, size =
168
168
  }
169
169
  onInteractOutside?.(e);
170
170
  },
171
- className: chunkVVVZO2LE_cjs.cn(
171
+ className: chunkH6OULCHF_cjs.cn(
172
172
  "fayz-glass-surface fayz-modal-content saas-mdl-ct relative z-50 flex flex-col w-full outline-none",
173
173
  // Mobile fullscreen
174
174
  "h-full rounded-none border-0",
@@ -190,17 +190,17 @@ var ModalContent = React11__namespace.forwardRef(({ className, children, size =
190
190
  ) }) }));
191
191
  ModalContent.displayName = "ModalContent";
192
192
  function ModalHeader({ className, ...props }) {
193
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkVVVZO2LE_cjs.cn("flex flex-col space-y-1.5 text-center sm:text-left shrink-0", className), ...props });
193
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkH6OULCHF_cjs.cn("flex flex-col space-y-1.5 text-center sm:text-left shrink-0", className), ...props });
194
194
  }
195
195
  function ModalBody({ className, ...props }) {
196
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkVVVZO2LE_cjs.cn("flex-1 overflow-y-auto min-h-0", className), ...props });
196
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkH6OULCHF_cjs.cn("flex-1 overflow-y-auto min-h-0", className), ...props });
197
197
  }
198
198
  function ModalFooter({ className, ...props }) {
199
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkVVVZO2LE_cjs.cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 shrink-0", className), ...props });
199
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkH6OULCHF_cjs.cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 shrink-0", className), ...props });
200
200
  }
201
- var ModalTitle = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Title, { ref, className: chunkVVVZO2LE_cjs.cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
201
+ var ModalTitle = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Title, { ref, className: chunkH6OULCHF_cjs.cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
202
202
  ModalTitle.displayName = "ModalTitle";
203
- var ModalDescription = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Description, { ref, className: chunkVVVZO2LE_cjs.cn("text-sm text-muted-foreground", className), ...props }));
203
+ var ModalDescription = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Description, { ref, className: chunkH6OULCHF_cjs.cn("text-sm text-muted-foreground", className), ...props }));
204
204
  ModalDescription.displayName = "ModalDescription";
205
205
  var COLOR_CLASSES = {
206
206
  primary: "border-primary bg-primary text-primary-foreground",
@@ -208,7 +208,7 @@ var COLOR_CLASSES = {
208
208
  warning: "border-warning bg-warning text-white",
209
209
  destructive: "border-destructive bg-destructive text-destructive-foreground"
210
210
  };
211
- var Checkbox = React11__namespace.forwardRef(
211
+ var Checkbox = React10__namespace.forwardRef(
212
212
  ({ checked = false, onChange, disabled, className, color = "primary", id, ...props }, ref) => {
213
213
  return /* @__PURE__ */ jsxRuntime.jsx(
214
214
  "button",
@@ -220,7 +220,7 @@ var Checkbox = React11__namespace.forwardRef(
220
220
  "aria-checked": checked,
221
221
  disabled,
222
222
  onClick: () => onChange?.(!checked),
223
- className: chunkVVVZO2LE_cjs.cn(
223
+ className: chunkH6OULCHF_cjs.cn(
224
224
  "peer inline-flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded-[5px] border-2 transition-all duration-150",
225
225
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
226
226
  "disabled:cursor-not-allowed disabled:opacity-50",
@@ -234,118 +234,14 @@ var Checkbox = React11__namespace.forwardRef(
234
234
  }
235
235
  );
236
236
  Checkbox.displayName = "Checkbox";
237
- var STYLE_ID = "saas-sheet-styles";
238
- if (typeof document !== "undefined" && !document.getElementById(STYLE_ID)) {
239
- const style = document.createElement("style");
240
- style.id = STYLE_ID;
241
- style.textContent = `
242
- @keyframes saas-sheet-fade-in { from { opacity: 0 } to { opacity: 1 } }
243
- @keyframes saas-sheet-fade-out { from { opacity: 1 } to { opacity: 0 } }
244
- @keyframes saas-sheet-slide-in { from { transform: translateX(100%) } to { transform: translateX(0) } }
245
- @keyframes saas-sheet-slide-out { from { transform: translateX(0) } to { transform: translateX(100%) } }
246
- .saas-sheet-overlay[data-state="open"] { animation: saas-sheet-fade-in 200ms ease-out }
247
- .saas-sheet-overlay[data-state="closed"] { animation: saas-sheet-fade-out 150ms ease-in }
248
- .saas-sheet-content[data-state="open"] { animation: saas-sheet-slide-in 280ms cubic-bezier(0.16, 1, 0.3, 1) }
249
- .saas-sheet-content[data-state="closed"] { animation: saas-sheet-slide-out 200ms ease-in }
250
- `;
251
- document.head.appendChild(style);
252
- }
253
- var Sheet = DialogPrimitive__namespace.Root;
254
- var SheetTrigger = DialogPrimitive__namespace.Trigger;
255
- var SheetClose = DialogPrimitive__namespace.Close;
256
- var SheetPortal = DialogPrimitive__namespace.Portal;
257
- var SheetOverlay = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
258
- DialogPrimitive__namespace.Overlay,
259
- {
260
- ref,
261
- className: chunkVVVZO2LE_cjs.cn(
262
- "saas-sheet-overlay fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px]",
263
- className
264
- ),
265
- ...props
266
- }
267
- ));
268
- SheetOverlay.displayName = "SheetOverlay";
269
- var SheetContent = React11__namespace.forwardRef(({ className, children, width, hideClose, overlay = "blur", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(SheetPortal, { children: [
270
- /* @__PURE__ */ jsxRuntime.jsx(SheetOverlay, { className: overlay === "none" ? "bg-transparent backdrop-blur-0" : overlay === "dim" ? "backdrop-blur-0" : void 0 }),
271
- /* @__PURE__ */ jsxRuntime.jsxs(
272
- DialogPrimitive__namespace.Content,
273
- {
274
- ref,
275
- className: chunkVVVZO2LE_cjs.cn(
276
- "fayz-glass-surface saas-sheet-content fixed inset-y-0 right-0 z-50 flex flex-col border-l bg-card shadow-2xl outline-none",
277
- "w-full",
278
- width ?? "max-w-md",
279
- className
280
- ),
281
- ...props,
282
- children: [
283
- children,
284
- !hideClose && /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Close, { className: "absolute right-4 top-4 z-10 flex h-7 w-7 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring", children: [
285
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
286
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
287
- ] })
288
- ]
289
- }
290
- )
291
- ] }));
292
- SheetContent.displayName = "SheetContent";
293
- function SheetHeader({ className, ...props }) {
294
- return /* @__PURE__ */ jsxRuntime.jsx(
295
- "div",
296
- {
297
- className: chunkVVVZO2LE_cjs.cn("flex flex-col gap-1 px-5 py-4 border-b shrink-0", className),
298
- ...props
299
- }
300
- );
301
- }
302
- SheetHeader.displayName = "SheetHeader";
303
- function SheetFooter({ className, ...props }) {
304
- return /* @__PURE__ */ jsxRuntime.jsx(
305
- "div",
306
- {
307
- className: chunkVVVZO2LE_cjs.cn("flex items-center gap-2 px-5 py-3 border-t shrink-0", className),
308
- ...props
309
- }
310
- );
311
- }
312
- SheetFooter.displayName = "SheetFooter";
313
- var SheetTitle = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
314
- DialogPrimitive__namespace.Title,
315
- {
316
- ref,
317
- className: chunkVVVZO2LE_cjs.cn("text-sm font-semibold leading-none tracking-tight", className),
318
- ...props
319
- }
320
- ));
321
- SheetTitle.displayName = "SheetTitle";
322
- var SheetDescription = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
323
- DialogPrimitive__namespace.Description,
324
- {
325
- ref,
326
- className: chunkVVVZO2LE_cjs.cn("text-xs text-muted-foreground", className),
327
- ...props
328
- }
329
- ));
330
- SheetDescription.displayName = "SheetDescription";
331
- function SheetBody({ className, ...props }) {
332
- return /* @__PURE__ */ jsxRuntime.jsx(
333
- "div",
334
- {
335
- className: chunkVVVZO2LE_cjs.cn("flex-1 overflow-y-auto px-5 py-5", className),
336
- ...props
337
- }
338
- );
339
- }
340
- SheetBody.displayName = "SheetBody";
341
237
  var Select = SelectPrimitive__namespace.Root;
342
238
  var SelectGroup = SelectPrimitive__namespace.Group;
343
239
  var SelectValue = SelectPrimitive__namespace.Value;
344
- var SelectTrigger = React11__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
240
+ var SelectTrigger = React10__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
345
241
  SelectPrimitive__namespace.Trigger,
346
242
  {
347
243
  ref,
348
- className: chunkVVVZO2LE_cjs.cn(
244
+ className: chunkH6OULCHF_cjs.cn(
349
245
  "flex h-10 w-full items-center justify-between rounded-input border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
350
246
  className
351
247
  ),
@@ -357,11 +253,11 @@ var SelectTrigger = React11__namespace.forwardRef(({ className, children, ...pro
357
253
  }
358
254
  ));
359
255
  SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
360
- var SelectScrollUpButton = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
256
+ var SelectScrollUpButton = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
361
257
  SelectPrimitive__namespace.ScrollUpButton,
362
258
  {
363
259
  ref,
364
- className: chunkVVVZO2LE_cjs.cn(
260
+ className: chunkH6OULCHF_cjs.cn(
365
261
  "flex cursor-default items-center justify-center py-1",
366
262
  className
367
263
  ),
@@ -370,11 +266,11 @@ var SelectScrollUpButton = React11__namespace.forwardRef(({ className, ...props
370
266
  }
371
267
  ));
372
268
  SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
373
- var SelectScrollDownButton = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
269
+ var SelectScrollDownButton = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
374
270
  SelectPrimitive__namespace.ScrollDownButton,
375
271
  {
376
272
  ref,
377
- className: chunkVVVZO2LE_cjs.cn(
273
+ className: chunkH6OULCHF_cjs.cn(
378
274
  "flex cursor-default items-center justify-center py-1",
379
275
  className
380
276
  ),
@@ -383,11 +279,11 @@ var SelectScrollDownButton = React11__namespace.forwardRef(({ className, ...prop
383
279
  }
384
280
  ));
385
281
  SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
386
- var SelectContent = React11__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
282
+ var SelectContent = React10__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
387
283
  SelectPrimitive__namespace.Content,
388
284
  {
389
285
  ref,
390
- className: chunkVVVZO2LE_cjs.cn(
286
+ className: chunkH6OULCHF_cjs.cn(
391
287
  "fayz-glass-surface relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-card border bg-popover text-popover-foreground shadow-md",
392
288
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
393
289
  className
@@ -399,7 +295,7 @@ var SelectContent = React11__namespace.forwardRef(({ className, children, positi
399
295
  /* @__PURE__ */ jsxRuntime.jsx(
400
296
  SelectPrimitive__namespace.Viewport,
401
297
  {
402
- className: chunkVVVZO2LE_cjs.cn(
298
+ className: chunkH6OULCHF_cjs.cn(
403
299
  "p-1",
404
300
  position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
405
301
  ),
@@ -411,21 +307,21 @@ var SelectContent = React11__namespace.forwardRef(({ className, children, positi
411
307
  }
412
308
  ) }));
413
309
  SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
414
- var SelectLabel = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
310
+ var SelectLabel = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
415
311
  SelectPrimitive__namespace.Label,
416
312
  {
417
313
  ref,
418
- className: chunkVVVZO2LE_cjs.cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
314
+ className: chunkH6OULCHF_cjs.cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
419
315
  ...props
420
316
  }
421
317
  ));
422
318
  SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
423
- var SelectItem = React11__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
319
+ var SelectItem = React10__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
424
320
  SelectPrimitive__namespace.Item,
425
321
  {
426
322
  ref,
427
- className: chunkVVVZO2LE_cjs.cn(
428
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[highlighted]:bg-muted focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
323
+ className: chunkH6OULCHF_cjs.cn(
324
+ "relative flex w-full cursor-default select-none items-center rounded-button py-1.5 pl-8 pr-2 text-sm outline-none data-[highlighted]:bg-muted focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
429
325
  className
430
326
  ),
431
327
  ...props,
@@ -436,11 +332,11 @@ var SelectItem = React11__namespace.forwardRef(({ className, children, ...props
436
332
  }
437
333
  ));
438
334
  SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
439
- var SelectSeparator = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
335
+ var SelectSeparator = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
440
336
  SelectPrimitive__namespace.Separator,
441
337
  {
442
338
  ref,
443
- className: chunkVVVZO2LE_cjs.cn("-mx-1 my-1 h-px bg-muted", className),
339
+ className: chunkH6OULCHF_cjs.cn("-mx-1 my-1 h-px bg-muted", className),
444
340
  ...props
445
341
  }
446
342
  ));
@@ -449,7 +345,7 @@ function ToastProvider({
449
345
  position = "bottom-center",
450
346
  theme = "system"
451
347
  }) {
452
- const saveBarVisible = chunkW4XXXJRW_cjs.useSaveBarVisible();
348
+ const saveBarVisible = chunkOW73RZOU_cjs.useSaveBarVisible();
453
349
  const bottomOffset = position.startsWith("bottom") && saveBarVisible ? 84 : 24;
454
350
  return /* @__PURE__ */ jsxRuntime.jsx(
455
351
  sonner.Toaster,
@@ -474,11 +370,11 @@ function ToastProvider({
474
370
  );
475
371
  }
476
372
  var Tabs = TabsPrimitive__namespace.Root;
477
- var TabsList = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
373
+ var TabsList = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
478
374
  TabsPrimitive__namespace.List,
479
375
  {
480
376
  ref,
481
- className: chunkVVVZO2LE_cjs.cn(
377
+ className: chunkH6OULCHF_cjs.cn(
482
378
  "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
483
379
  className
484
380
  ),
@@ -486,11 +382,11 @@ var TabsList = React11__namespace.forwardRef(({ className, ...props }, ref) => /
486
382
  }
487
383
  ));
488
384
  TabsList.displayName = TabsPrimitive__namespace.List.displayName;
489
- var TabsTrigger = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
385
+ var TabsTrigger = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
490
386
  TabsPrimitive__namespace.Trigger,
491
387
  {
492
388
  ref,
493
- className: chunkVVVZO2LE_cjs.cn(
389
+ className: chunkH6OULCHF_cjs.cn(
494
390
  "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
495
391
  className
496
392
  ),
@@ -498,11 +394,11 @@ var TabsTrigger = React11__namespace.forwardRef(({ className, ...props }, ref) =
498
394
  }
499
395
  ));
500
396
  TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
501
- var TabsContent = React11__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
397
+ var TabsContent = React10__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
502
398
  TabsPrimitive__namespace.Content,
503
399
  {
504
400
  ref,
505
- className: chunkVVVZO2LE_cjs.cn(
401
+ className: chunkH6OULCHF_cjs.cn(
506
402
  "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
507
403
  className
508
404
  ),
@@ -510,14 +406,14 @@ var TabsContent = React11__namespace.forwardRef(({ className, ...props }, ref) =
510
406
  }
511
407
  ));
512
408
  TabsContent.displayName = TabsPrimitive__namespace.Content.displayName;
513
- var Separator2 = React11__namespace.forwardRef(
409
+ var Separator2 = React10__namespace.forwardRef(
514
410
  ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
515
411
  SeparatorPrimitive__namespace.Root,
516
412
  {
517
413
  ref,
518
414
  decorative,
519
415
  orientation,
520
- className: chunkVVVZO2LE_cjs.cn(
416
+ className: chunkH6OULCHF_cjs.cn(
521
417
  "shrink-0 bg-border",
522
418
  orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
523
419
  className
@@ -528,8 +424,8 @@ var Separator2 = React11__namespace.forwardRef(
528
424
  );
529
425
  Separator2.displayName = SeparatorPrimitive__namespace.Root.displayName;
530
426
  function Breadcrumb({ parent, current, onBack }) {
531
- const { onBack: effectiveOnBack, parentLabel: effectiveParent } = chunkW4XXXJRW_cjs.useCrossModuleBack(onBack, parent);
532
- chunkW4XXXJRW_cjs.useBackHandler(effectiveOnBack);
427
+ const { onBack: effectiveOnBack, parentLabel: effectiveParent } = chunkOW73RZOU_cjs.useCrossModuleBack(onBack, parent);
428
+ chunkOW73RZOU_cjs.useBackHandler(effectiveOnBack);
533
429
  return /* @__PURE__ */ jsxRuntime.jsxs("nav", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
534
430
  /* @__PURE__ */ jsxRuntime.jsxs(
535
431
  "button",
@@ -552,12 +448,12 @@ function Breadcrumb({ parent, current, onBack }) {
552
448
  var TooltipProvider = TooltipPrimitive__namespace.Provider;
553
449
  var Tooltip = TooltipPrimitive__namespace.Root;
554
450
  var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
555
- var TooltipContent = React11__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
451
+ var TooltipContent = React10__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
556
452
  TooltipPrimitive__namespace.Content,
557
453
  {
558
454
  ref,
559
455
  sideOffset,
560
- className: chunkVVVZO2LE_cjs.cn(
456
+ className: chunkH6OULCHF_cjs.cn(
561
457
  "fayz-glass-surface z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
562
458
  className
563
459
  ),
@@ -574,17 +470,17 @@ function formatTime24(h, m) {
574
470
  return `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`;
575
471
  }
576
472
  function TimePicker({ value, onChange, interval = 15, min = "00:00", max = "23:45", use12h = false, readOnly, className, defaultOpen, onOpenChange }) {
577
- const [open, setOpen] = React11.useState(defaultOpen ?? false);
578
- const ref = React11.useRef(null);
579
- const triggerRef = React11.useRef(null);
580
- const listRef = React11.useRef(null);
581
- const [pos, setPos] = React11.useState({ top: 0, left: 0, width: 0 });
582
- React11.useEffect(() => {
473
+ const [open, setOpen] = React10.useState(defaultOpen ?? false);
474
+ const ref = React10.useRef(null);
475
+ const triggerRef = React10.useRef(null);
476
+ const listRef = React10.useRef(null);
477
+ const [pos, setPos] = React10.useState({ top: 0, left: 0, width: 0 });
478
+ React10.useEffect(() => {
583
479
  if (!open || !triggerRef.current) return;
584
480
  const rect = triggerRef.current.getBoundingClientRect();
585
481
  setPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, 120) });
586
482
  }, [open]);
587
- React11.useEffect(() => {
483
+ React10.useEffect(() => {
588
484
  if (!open) return;
589
485
  const handler = (e) => {
590
486
  const target = e.target;
@@ -596,12 +492,12 @@ function TimePicker({ value, onChange, interval = 15, min = "00:00", max = "23:4
596
492
  document.addEventListener("mousedown", handler);
597
493
  return () => document.removeEventListener("mousedown", handler);
598
494
  }, [open]);
599
- React11.useEffect(() => {
495
+ React10.useEffect(() => {
600
496
  if (!open || !listRef.current || !value) return;
601
497
  const el = listRef.current.querySelector('[data-selected="true"]');
602
498
  if (el) el.scrollIntoView({ block: "center" });
603
499
  }, [open, value]);
604
- const slots = React11.useMemo(() => {
500
+ const slots = React10.useMemo(() => {
605
501
  const [minH, minM] = min.split(":").map(Number);
606
502
  const [maxH, maxM] = max.split(":").map(Number);
607
503
  const minTotal = minH * 60 + minM;
@@ -617,7 +513,7 @@ function TimePicker({ value, onChange, interval = 15, min = "00:00", max = "23:4
617
513
  }
618
514
  return result;
619
515
  }, [interval, min, max, use12h]);
620
- const displayValue = React11.useMemo(() => {
516
+ const displayValue = React10.useMemo(() => {
621
517
  if (!value) return "";
622
518
  const [h, m] = value.split(":").map(Number);
623
519
  return use12h ? formatTime12(h, m) : formatTime24(h, m);
@@ -687,7 +583,7 @@ function Skeleton({
687
583
  return /* @__PURE__ */ jsxRuntime.jsx(
688
584
  "div",
689
585
  {
690
- className: chunkVVVZO2LE_cjs.cn("animate-pulse rounded-md bg-muted", className),
586
+ className: chunkH6OULCHF_cjs.cn("animate-pulse rounded-md bg-muted", className),
691
587
  ...props
692
588
  }
693
589
  );
@@ -698,7 +594,7 @@ function TableSkeleton({ columns = 4, rows = 2 }) {
698
594
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y", children: Array.from({ length: rows }).map((_, r) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4 px-4 py-3.5", children: Array.from({ length: columns }).map((_2, c) => /* @__PURE__ */ jsxRuntime.jsx(
699
595
  Skeleton,
700
596
  {
701
- className: chunkVVVZO2LE_cjs.cn(
597
+ className: chunkH6OULCHF_cjs.cn(
702
598
  "h-3 rounded",
703
599
  c === 0 ? "flex-[2]" : "flex-1"
704
600
  )
@@ -733,12 +629,12 @@ function ListView({
733
629
  toolbar,
734
630
  className
735
631
  }) {
736
- const [internalSearch, setInternalSearch] = React11.useState(controlledSearch ?? "");
737
- const debounceRef = React11.useRef();
738
- React11.useEffect(() => {
632
+ const [internalSearch, setInternalSearch] = React10.useState(controlledSearch ?? "");
633
+ const debounceRef = React10.useRef();
634
+ React10.useEffect(() => {
739
635
  if (controlledSearch !== void 0) setInternalSearch(controlledSearch);
740
636
  }, [controlledSearch]);
741
- const handleSearchChange = React11.useCallback((value) => {
637
+ const handleSearchChange = React10.useCallback((value) => {
742
638
  setInternalSearch(value);
743
639
  if (searchDebounce === 0) {
744
640
  onSearchChange?.(value);
@@ -753,7 +649,7 @@ function ListView({
753
649
  const showSearch = !!onSearchChange;
754
650
  const showTags = tags && tags.length > 0 && onTagChange;
755
651
  const showToolbar = showSearch || onNew || showTags;
756
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkVVVZO2LE_cjs.cn("space-y-4", className), children: [
652
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkH6OULCHF_cjs.cn("space-y-4", className), children: [
757
653
  showToolbar && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row gap-3 sm:items-center sm:justify-between", children: [
758
654
  showSearch && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 max-w-sm", children: [
759
655
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground" }),
@@ -768,7 +664,7 @@ function ListView({
768
664
  }
769
665
  )
770
666
  ] }),
771
- onNew && newLabel && /* @__PURE__ */ jsxRuntime.jsxs(chunkD6SXPF4F_cjs.Button, { variant: "default", size: "default", onClick: onNew, className: "shrink-0", children: [
667
+ onNew && newLabel && /* @__PURE__ */ jsxRuntime.jsxs(chunkH6OULCHF_cjs.Button, { variant: "default", size: "default", onClick: onNew, className: "shrink-0", children: [
772
668
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "h-3.5 w-3.5" }),
773
669
  newLabel
774
670
  ] })
@@ -778,7 +674,7 @@ function ListView({
778
674
  "button",
779
675
  {
780
676
  onClick: () => onTagChange(void 0),
781
- className: chunkVVVZO2LE_cjs.cn(
677
+ className: chunkH6OULCHF_cjs.cn(
782
678
  "rounded-full px-2.5 py-1 text-xs font-medium transition-colors",
783
679
  !activeTag ? "bg-primary text-primary-foreground" : "bg-muted/50 text-muted-foreground hover:bg-muted"
784
680
  ),
@@ -789,7 +685,7 @@ function ListView({
789
685
  "button",
790
686
  {
791
687
  onClick: () => onTagChange(tag.value),
792
- className: chunkVVVZO2LE_cjs.cn(
688
+ className: chunkH6OULCHF_cjs.cn(
793
689
  "rounded-full px-2.5 py-1 text-xs font-medium transition-colors",
794
690
  activeTag === tag.value ? "bg-primary text-primary-foreground" : "bg-muted/50 text-muted-foreground hover:bg-muted"
795
691
  ),
@@ -799,12 +695,12 @@ function ListView({
799
695
  ))
800
696
  ] }),
801
697
  toolbar,
802
- loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkD6SXPF4F_cjs.DataTable, { columns, data: [], loading: true, variant: "card" }) : data.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted", children: [
698
+ loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkODY3GZ3Y_cjs.DataTable, { columns, data: [], loading: true, variant: "card" }) : data.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted", children: [
803
699
  EmptyIcon && /* @__PURE__ */ jsxRuntime.jsx(EmptyIcon, { className: "h-8 w-8 text-muted-foreground/30 mb-2" }),
804
700
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage }),
805
701
  emptyActionLabel && onEmptyAction && /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: onEmptyAction, className: "text-xs text-primary hover:underline mt-1", children: emptyActionLabel })
806
702
  ] }) : /* @__PURE__ */ jsxRuntime.jsx(
807
- chunkD6SXPF4F_cjs.DataTable,
703
+ chunkODY3GZ3Y_cjs.DataTable,
808
704
  {
809
705
  columns,
810
706
  data,
@@ -875,16 +771,16 @@ function parseDate(s) {
875
771
  function DatePicker({ value, onChange, className, defaultOpen, onOpenChange }) {
876
772
  const t = core.useTranslation();
877
773
  const locale = core.getCurrentLocale();
878
- const [open, setOpen] = React11.useState(defaultOpen ?? false);
879
- const ref = React11.useRef(null);
880
- const triggerRef = React11.useRef(null);
881
- const dropdownRef = React11.useRef(null);
774
+ const [open, setOpen] = React10.useState(defaultOpen ?? false);
775
+ const ref = React10.useRef(null);
776
+ const triggerRef = React10.useRef(null);
777
+ const dropdownRef = React10.useRef(null);
882
778
  const selectedDate = value ? parseDate(value) : /* @__PURE__ */ new Date();
883
- const [viewMonth, setViewMonth] = React11.useState(new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1));
884
- const [pos, setPos] = React11.useState({ top: 0, left: 0 });
779
+ const [viewMonth, setViewMonth] = React10.useState(new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1));
780
+ const [pos, setPos] = React10.useState({ top: 0, left: 0 });
885
781
  const dayLabels = DAY_LABELS[locale] ?? DAY_LABELS.en;
886
782
  const dateLocale = toDateLocale(locale);
887
- React11.useEffect(() => {
783
+ React10.useEffect(() => {
888
784
  if (!open || !triggerRef.current) return;
889
785
  const rect = triggerRef.current.getBoundingClientRect();
890
786
  const dropW = 260;
@@ -893,7 +789,7 @@ function DatePicker({ value, onChange, className, defaultOpen, onOpenChange }) {
893
789
  if (left < 8) left = 8;
894
790
  setPos({ top: rect.bottom + 4, left });
895
791
  }, [open]);
896
- React11.useEffect(() => {
792
+ React10.useEffect(() => {
897
793
  if (!open) return;
898
794
  const handler = (e) => {
899
795
  const target = e.target;
@@ -905,14 +801,14 @@ function DatePicker({ value, onChange, className, defaultOpen, onOpenChange }) {
905
801
  document.addEventListener("mousedown", handler);
906
802
  return () => document.removeEventListener("mousedown", handler);
907
803
  }, [open, onOpenChange]);
908
- React11.useEffect(() => {
804
+ React10.useEffect(() => {
909
805
  if (value) {
910
806
  const d = parseDate(value);
911
807
  setViewMonth(new Date(d.getFullYear(), d.getMonth(), 1));
912
808
  }
913
809
  }, [value]);
914
810
  const monthLabel = viewMonth.toLocaleDateString(dateLocale, { month: "long", year: "numeric" });
915
- const weeks = React11.useMemo(() => {
811
+ const weeks = React10.useMemo(() => {
916
812
  const year = viewMonth.getFullYear();
917
813
  const month = viewMonth.getMonth();
918
814
  const firstDay = new Date(year, month, 1);
@@ -1034,16 +930,16 @@ function SearchSelect({
1034
930
  className,
1035
931
  disabled
1036
932
  }) {
1037
- const [open, setOpen] = React11__namespace.useState(false);
1038
- const [query, setQuery] = React11__namespace.useState("");
1039
- const [results, setResults] = React11__namespace.useState([]);
1040
- const [loading, setLoading] = React11__namespace.useState(false);
1041
- const [creating, setCreating] = React11__namespace.useState(false);
1042
- const [selectedLabel, setSelectedLabel] = React11__namespace.useState(displayValue ?? "");
1043
- const containerRef = React11__namespace.useRef(null);
1044
- const inputRef = React11__namespace.useRef(null);
1045
- const timerRef = React11__namespace.useRef();
1046
- React11__namespace.useEffect(() => {
933
+ const [open, setOpen] = React10__namespace.useState(false);
934
+ const [query, setQuery] = React10__namespace.useState("");
935
+ const [results, setResults] = React10__namespace.useState([]);
936
+ const [loading, setLoading] = React10__namespace.useState(false);
937
+ const [creating, setCreating] = React10__namespace.useState(false);
938
+ const [selectedLabel, setSelectedLabel] = React10__namespace.useState(displayValue ?? "");
939
+ const containerRef = React10__namespace.useRef(null);
940
+ const inputRef = React10__namespace.useRef(null);
941
+ const timerRef = React10__namespace.useRef();
942
+ React10__namespace.useEffect(() => {
1047
943
  function handler(e) {
1048
944
  if (containerRef.current && !containerRef.current.contains(e.target)) {
1049
945
  setOpen(false);
@@ -1052,10 +948,10 @@ function SearchSelect({
1052
948
  document.addEventListener("mousedown", handler);
1053
949
  return () => document.removeEventListener("mousedown", handler);
1054
950
  }, []);
1055
- React11__namespace.useEffect(() => {
951
+ React10__namespace.useEffect(() => {
1056
952
  if (displayValue !== void 0) setSelectedLabel(displayValue);
1057
953
  }, [displayValue]);
1058
- React11__namespace.useEffect(() => {
954
+ React10__namespace.useEffect(() => {
1059
955
  if (open && loadOnOpen && query.length === 0 && results.length === 0 && !loading) {
1060
956
  setLoading(true);
1061
957
  Promise.resolve(onSearch("")).then(setResults).catch(() => setResults([])).finally(() => setLoading(false));
@@ -1112,7 +1008,7 @@ function SearchSelect({
1112
1008
  setQuery("");
1113
1009
  setTimeout(() => inputRef.current?.focus(), 0);
1114
1010
  }
1115
- const groups = React11__namespace.useMemo(() => {
1011
+ const groups = React10__namespace.useMemo(() => {
1116
1012
  const map = /* @__PURE__ */ new Map();
1117
1013
  for (const opt of results) {
1118
1014
  const group = opt.group ?? "";
@@ -1123,7 +1019,7 @@ function SearchSelect({
1123
1019
  }, [results]);
1124
1020
  const hasValue = !!value && !!selectedLabel;
1125
1021
  const showDropdown = open && query.length >= minChars;
1126
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: chunkVVVZO2LE_cjs.cn("relative", className), children: [
1022
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: chunkH6OULCHF_cjs.cn("relative", className), children: [
1127
1023
  label && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "text-xs font-medium text-muted-foreground", children: [
1128
1024
  label,
1129
1025
  required && " *"
@@ -1131,7 +1027,7 @@ function SearchSelect({
1131
1027
  /* @__PURE__ */ jsxRuntime.jsxs(
1132
1028
  "div",
1133
1029
  {
1134
- className: chunkVVVZO2LE_cjs.cn(
1030
+ className: chunkH6OULCHF_cjs.cn(
1135
1031
  "mt-1 flex items-center gap-2 rounded-lg border bg-background transition-colors",
1136
1032
  open ? "ring-2 ring-primary/20" : "hover:bg-muted/30",
1137
1033
  disabled && "opacity-50 cursor-not-allowed"
@@ -1193,14 +1089,14 @@ function SearchSelect({
1193
1089
  }
1194
1090
  )
1195
1091
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-h-64 overflow-auto py-1", children: [
1196
- [...groups.entries()].map(([group, options]) => /* @__PURE__ */ jsxRuntime.jsxs(React11__namespace.Fragment, { children: [
1092
+ [...groups.entries()].map(([group, options]) => /* @__PURE__ */ jsxRuntime.jsxs(React10__namespace.Fragment, { children: [
1197
1093
  group && /* @__PURE__ */ jsxRuntime.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 }),
1198
1094
  options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(
1199
1095
  "button",
1200
1096
  {
1201
1097
  onClick: () => handleSelect(opt),
1202
1098
  disabled: opt.disabled,
1203
- className: chunkVVVZO2LE_cjs.cn(
1099
+ className: chunkH6OULCHF_cjs.cn(
1204
1100
  "w-full text-left px-3 py-2 hover:bg-muted/50 transition-colors flex items-center gap-2.5",
1205
1101
  opt.disabled && "opacity-40 cursor-not-allowed",
1206
1102
  opt.id === value && "bg-muted/30"
@@ -1244,9 +1140,9 @@ function CurrencyInput({
1244
1140
  className,
1245
1141
  disabled
1246
1142
  }) {
1247
- const inputRef = React11__namespace.useRef(null);
1248
- const [focused, setFocused] = React11__namespace.useState(false);
1249
- const format = React11__namespace.useCallback((v) => {
1143
+ const inputRef = React10__namespace.useRef(null);
1144
+ const [focused, setFocused] = React10__namespace.useState(false);
1145
+ const format = React10__namespace.useCallback((v) => {
1250
1146
  return new Intl.NumberFormat(locale, {
1251
1147
  minimumFractionDigits: 2,
1252
1148
  maximumFractionDigits: 2
@@ -1283,7 +1179,7 @@ function CurrencyInput({
1283
1179
  /* @__PURE__ */ jsxRuntime.jsxs(
1284
1180
  "div",
1285
1181
  {
1286
- className: chunkVVVZO2LE_cjs.cn(
1182
+ className: chunkH6OULCHF_cjs.cn(
1287
1183
  "flex items-center rounded-lg border border-input bg-background ring-offset-background transition-colors cursor-text",
1288
1184
  label && "mt-1",
1289
1185
  focused && "border-ring ring-2 ring-ring ring-offset-2",
@@ -1355,7 +1251,7 @@ function ConfirmDialog({
1355
1251
  }) {
1356
1252
  const config = VARIANT_CONFIG[variant];
1357
1253
  const Icon2 = config.icon;
1358
- React11__namespace.useEffect(() => {
1254
+ React10__namespace.useEffect(() => {
1359
1255
  if (!open) return;
1360
1256
  function handleKey(e) {
1361
1257
  if (e.key === "Escape") onCancel();
@@ -1383,15 +1279,15 @@ function ConfirmDialog({
1383
1279
  "aria-describedby": description ? "confirm-desc" : void 0,
1384
1280
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6", children: [
1385
1281
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-4", children: [
1386
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkVVVZO2LE_cjs.cn("flex h-10 w-10 items-center justify-center rounded-full shrink-0", config.iconBg), children: /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: chunkVVVZO2LE_cjs.cn("h-5 w-5", config.iconColor) }) }),
1282
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkH6OULCHF_cjs.cn("flex h-10 w-10 items-center justify-center rounded-full shrink-0", config.iconBg), children: /* @__PURE__ */ jsxRuntime.jsx(Icon2, { className: chunkH6OULCHF_cjs.cn("h-5 w-5", config.iconColor) }) }),
1387
1283
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 pt-0.5", children: [
1388
1284
  /* @__PURE__ */ jsxRuntime.jsx("h3", { id: "confirm-title", className: "text-sm font-semibold text-foreground", children: title }),
1389
1285
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { id: "confirm-desc", className: "text-xs text-muted-foreground mt-1 leading-relaxed", children: description })
1390
1286
  ] })
1391
1287
  ] }),
1392
1288
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 mt-5", children: [
1393
- /* @__PURE__ */ jsxRuntime.jsx(chunkD6SXPF4F_cjs.Button, { variant: "outline", size: "sm", onClick: onCancel, disabled: loading, children: cancelLabel }),
1394
- /* @__PURE__ */ jsxRuntime.jsx(chunkD6SXPF4F_cjs.Button, { variant: config.buttonVariant, size: "sm", onClick: onConfirm, disabled: loading, children: loading ? "Processing..." : confirmLabel })
1289
+ /* @__PURE__ */ jsxRuntime.jsx(chunkH6OULCHF_cjs.Button, { variant: "outline", size: "sm", onClick: onCancel, disabled: loading, children: cancelLabel }),
1290
+ /* @__PURE__ */ jsxRuntime.jsx(chunkH6OULCHF_cjs.Button, { variant: config.buttonVariant, size: "sm", onClick: onConfirm, disabled: loading, children: loading ? "Processing..." : confirmLabel })
1395
1291
  ] })
1396
1292
  ] })
1397
1293
  }
@@ -1402,13 +1298,13 @@ function ConfirmDialog({
1402
1298
  }
1403
1299
  var Popover = PopoverPrimitive__namespace.Root;
1404
1300
  var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
1405
- var PopoverContent = React11__namespace.forwardRef(({ className, align = "start", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
1301
+ var PopoverContent = React10__namespace.forwardRef(({ className, align = "start", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
1406
1302
  PopoverPrimitive__namespace.Content,
1407
1303
  {
1408
1304
  ref,
1409
1305
  align,
1410
1306
  sideOffset,
1411
- className: chunkVVVZO2LE_cjs.cn(
1307
+ className: chunkH6OULCHF_cjs.cn(
1412
1308
  "fayz-glass-surface z-[110] w-72 rounded-xl border bg-popover p-0 text-popover-foreground shadow-lg outline-none",
1413
1309
  "data-[state=open]:animate-zoom-in data-[state=closed]:animate-zoom-out",
1414
1310
  className
@@ -1417,6 +1313,156 @@ var PopoverContent = React11__namespace.forwardRef(({ className, align = "start"
1417
1313
  }
1418
1314
  ) }));
1419
1315
  PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
1316
+ var INLINE_TOKEN = /(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g;
1317
+ function renderInline(text, keyPrefix) {
1318
+ return text.split(INLINE_TOKEN).map((part, i) => {
1319
+ const key = `${keyPrefix}-${i}`;
1320
+ if (part.startsWith("**") && part.endsWith("**") && part.length > 4) {
1321
+ return /* @__PURE__ */ jsxRuntime.jsx("strong", { children: part.slice(2, -2) }, key);
1322
+ }
1323
+ if (part.startsWith("*") && part.endsWith("*") && part.length > 2) {
1324
+ return /* @__PURE__ */ jsxRuntime.jsx("em", { children: part.slice(1, -1) }, key);
1325
+ }
1326
+ if (part.startsWith("`") && part.endsWith("`") && part.length > 2) {
1327
+ return /* @__PURE__ */ jsxRuntime.jsx("code", { className: "rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]", children: part.slice(1, -1) }, key);
1328
+ }
1329
+ return part === "" ? null : /* @__PURE__ */ jsxRuntime.jsx(React10__namespace.Fragment, { children: part }, key);
1330
+ });
1331
+ }
1332
+ function parseBlocks(source) {
1333
+ const lines = source.replace(/\r\n/g, "\n").split("\n");
1334
+ const blocks = [];
1335
+ let i = 0;
1336
+ while (i < lines.length) {
1337
+ const line = lines[i];
1338
+ const trimmed = line.trim();
1339
+ if (trimmed === "") {
1340
+ i++;
1341
+ continue;
1342
+ }
1343
+ const heading = /^(#{1,3})\s+(.*)$/.exec(trimmed);
1344
+ if (heading) {
1345
+ blocks.push({ type: "heading", level: heading[1].length, text: heading[2] });
1346
+ i++;
1347
+ continue;
1348
+ }
1349
+ if (/^(-{3,}|\*{3,})$/.test(trimmed)) {
1350
+ blocks.push({ type: "hr" });
1351
+ i++;
1352
+ continue;
1353
+ }
1354
+ if (trimmed.startsWith(">")) {
1355
+ const quote = [];
1356
+ while (i < lines.length && lines[i].trim().startsWith(">")) {
1357
+ quote.push(lines[i].trim().replace(/^>\s?/, ""));
1358
+ i++;
1359
+ }
1360
+ blocks.push({ type: "blockquote", lines: quote });
1361
+ continue;
1362
+ }
1363
+ if (/^[-*]\s+/.test(trimmed)) {
1364
+ const items = [];
1365
+ while (i < lines.length && /^[-*]\s+/.test(lines[i].trim())) {
1366
+ items.push(lines[i].trim().replace(/^[-*]\s+/, ""));
1367
+ i++;
1368
+ }
1369
+ blocks.push({ type: "ul", items });
1370
+ continue;
1371
+ }
1372
+ if (/^\d+[.)]\s+/.test(trimmed)) {
1373
+ const items = [];
1374
+ while (i < lines.length && /^\d+[.)]\s+/.test(lines[i].trim())) {
1375
+ items.push(lines[i].trim().replace(/^\d+[.)]\s+/, ""));
1376
+ i++;
1377
+ }
1378
+ blocks.push({ type: "ol", items });
1379
+ continue;
1380
+ }
1381
+ const para = [];
1382
+ while (i < lines.length && lines[i].trim() !== "" && !/^(#{1,3}\s|>|[-*]\s|\d+[.)]\s|-{3,}$|\*{3,}$)/.test(lines[i].trim())) {
1383
+ para.push(lines[i].trim());
1384
+ i++;
1385
+ }
1386
+ blocks.push({ type: "p", lines: para });
1387
+ }
1388
+ return blocks;
1389
+ }
1390
+ var HEADING_CLASS = {
1391
+ 1: "text-xl font-semibold tracking-tight",
1392
+ 2: "text-base font-semibold tracking-tight",
1393
+ 3: "text-sm font-semibold"
1394
+ };
1395
+ function renderMarkdown(source) {
1396
+ const blocks = parseBlocks(source);
1397
+ return blocks.map((block, bi) => {
1398
+ const key = `md-${bi}`;
1399
+ switch (block.type) {
1400
+ case "heading": {
1401
+ const Tag = `h${block.level}`;
1402
+ return /* @__PURE__ */ jsxRuntime.jsx(Tag, { className: HEADING_CLASS[block.level], children: renderInline(block.text, key) }, key);
1403
+ }
1404
+ case "hr":
1405
+ return /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-border" }, key);
1406
+ case "blockquote":
1407
+ return /* @__PURE__ */ jsxRuntime.jsx("blockquote", { className: "border-l-2 border-border pl-3 text-muted-foreground", children: block.lines.map((l, li) => /* @__PURE__ */ jsxRuntime.jsx("p", { children: renderInline(l, `${key}-${li}`) }, `${key}-${li}`)) }, key);
1408
+ case "ul":
1409
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc space-y-1 pl-5", children: block.items.map((item, li) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: renderInline(item, `${key}-${li}`) }, `${key}-${li}`)) }, key);
1410
+ case "ol":
1411
+ return /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "list-decimal space-y-1 pl-5", children: block.items.map((item, li) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: renderInline(item, `${key}-${li}`) }, `${key}-${li}`)) }, key);
1412
+ case "p":
1413
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { children: block.lines.map((l, li) => /* @__PURE__ */ jsxRuntime.jsxs(React10__namespace.Fragment, { children: [
1414
+ li > 0 && /* @__PURE__ */ jsxRuntime.jsx("br", {}),
1415
+ renderInline(l, `${key}-${li}`)
1416
+ ] }, `${key}-${li}`)) }, key);
1417
+ }
1418
+ });
1419
+ }
1420
+ function Markdown({ source, className }) {
1421
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkH6OULCHF_cjs.cn("space-y-3 text-sm leading-relaxed text-foreground", className), children: renderMarkdown(source) });
1422
+ }
1423
+ function MarkdownEditor({
1424
+ value,
1425
+ onChange,
1426
+ placeholder,
1427
+ minRows = 16,
1428
+ defaultMode = "preview",
1429
+ editLabel = "Edit",
1430
+ previewLabel = "Preview",
1431
+ renderPreview,
1432
+ className
1433
+ }) {
1434
+ const [mode, setMode] = React10__namespace.useState(
1435
+ defaultMode === "preview" && value.trim() === "" ? "edit" : defaultMode
1436
+ );
1437
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkH6OULCHF_cjs.cn("flex flex-col gap-2", className), children: [
1438
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
1439
+ chunkODY3GZ3Y_cjs.SegmentedControl,
1440
+ {
1441
+ "aria-label": "Markdown mode",
1442
+ options: [
1443
+ { value: "edit", label: editLabel },
1444
+ { value: "preview", label: previewLabel }
1445
+ ],
1446
+ value: mode,
1447
+ onChange: (m) => setMode(m)
1448
+ }
1449
+ ) }),
1450
+ mode === "edit" ? /* @__PURE__ */ jsxRuntime.jsx(
1451
+ "textarea",
1452
+ {
1453
+ value,
1454
+ onChange: (e) => onChange(e.target.value),
1455
+ placeholder,
1456
+ rows: Math.max(minRows, value.split("\n").length + 1),
1457
+ className: chunkH6OULCHF_cjs.cn(
1458
+ "w-full resize-y rounded-md border border-border bg-card p-3",
1459
+ "font-mono text-[13px] leading-relaxed text-foreground",
1460
+ "placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring"
1461
+ )
1462
+ }
1463
+ ) : renderPreview ? renderPreview(value) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-border bg-card p-4", children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { source: value }) })
1464
+ ] });
1465
+ }
1420
1466
 
1421
1467
  Object.defineProperty(exports, "toast", {
1422
1468
  enumerable: true,
@@ -1430,6 +1476,8 @@ exports.CurrencyInput = CurrencyInput;
1430
1476
  exports.DatePicker = DatePicker;
1431
1477
  exports.Input = Input;
1432
1478
  exports.ListView = ListView;
1479
+ exports.Markdown = Markdown;
1480
+ exports.MarkdownEditor = MarkdownEditor;
1433
1481
  exports.Modal = Modal;
1434
1482
  exports.ModalBody = ModalBody;
1435
1483
  exports.ModalClose = ModalClose;
@@ -1456,17 +1504,6 @@ exports.SelectSeparator = SelectSeparator;
1456
1504
  exports.SelectTrigger = SelectTrigger;
1457
1505
  exports.SelectValue = SelectValue;
1458
1506
  exports.Separator = Separator2;
1459
- exports.Sheet = Sheet;
1460
- exports.SheetBody = SheetBody;
1461
- exports.SheetClose = SheetClose;
1462
- exports.SheetContent = SheetContent;
1463
- exports.SheetDescription = SheetDescription;
1464
- exports.SheetFooter = SheetFooter;
1465
- exports.SheetHeader = SheetHeader;
1466
- exports.SheetOverlay = SheetOverlay;
1467
- exports.SheetPortal = SheetPortal;
1468
- exports.SheetTitle = SheetTitle;
1469
- exports.SheetTrigger = SheetTrigger;
1470
1507
  exports.Skeleton = Skeleton;
1471
1508
  exports.TableSkeleton = TableSkeleton;
1472
1509
  exports.Tabs = Tabs;
@@ -1480,5 +1517,6 @@ exports.TooltipContent = TooltipContent;
1480
1517
  exports.TooltipProvider = TooltipProvider;
1481
1518
  exports.TooltipTrigger = TooltipTrigger;
1482
1519
  exports.badgeVariants = badgeVariants;
1483
- //# sourceMappingURL=chunk-YB5ZJKNG.cjs.map
1484
- //# sourceMappingURL=chunk-YB5ZJKNG.cjs.map
1520
+ exports.renderMarkdown = renderMarkdown;
1521
+ //# sourceMappingURL=chunk-7PTRAWHO.cjs.map
1522
+ //# sourceMappingURL=chunk-7PTRAWHO.cjs.map