hazo_ui 4.9.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { clsx } from 'clsx';
3
3
  import { twMerge } from 'tailwind-merge';
4
- import * as React26 from 'react';
5
- import React26__default, { lazy, useRef, useState, useCallback, useEffect, useMemo, Fragment, Suspense } from 'react';
4
+ import * as React27 from 'react';
5
+ import React27__default, { lazy, useRef, useState, useCallback, useEffect, useMemo, Fragment, Suspense } from 'react';
6
6
  import { generateRequestId } from 'hazo_core';
7
7
  import { withContext, setBrowserCorrelationId } from 'hazo_core/client';
8
8
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
9
9
  import { Slot } from '@radix-ui/react-slot';
10
10
  import { cva } from 'class-variance-authority';
11
11
  import * as DialogPrimitive from '@radix-ui/react-dialog';
12
- import { X, ChevronDown, ChevronUp, Check, Circle, ChevronRight, Sun, Moon, ChevronLeft, Filter, Plus, ArrowUpDown, Loader2, AlertTriangle, OctagonAlert, CheckCircle2, ChevronsUpDown, Download, Share2, Copy, GripVertical, ArrowUp, ArrowDown, Pencil, Calendar as Calendar$1 } from 'lucide-react';
12
+ import { X, ChevronDown, ChevronUp, Check, Circle, ChevronRight, ChevronLeft, Filter, Plus, ArrowUpDown, icons, Loader2, AlertTriangle, OctagonAlert, CheckCircle2, ChevronsUpDown, Download, Share2, Copy, GripVertical, ArrowUp, ArrowDown, Pencil, Calendar as Calendar$1 } from 'lucide-react';
13
13
  import * as PopoverPrimitive from '@radix-ui/react-popover';
14
14
  import * as SelectPrimitive from '@radix-ui/react-select';
15
15
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
@@ -30,6 +30,7 @@ import * as IoIcons from 'react-icons/io5';
30
30
  import * as RiIcons from 'react-icons/ri';
31
31
  import * as TbIcons from 'react-icons/tb';
32
32
  import * as CiIcons from 'react-icons/ci';
33
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
33
34
  import { ReactNodeViewRenderer, NodeViewWrapper, useEditor, EditorContent } from '@tiptap/react';
34
35
  import StarterKit from '@tiptap/starter-kit';
35
36
  import { TextStyle } from '@tiptap/extension-text-style';
@@ -53,7 +54,6 @@ import TaskItem from '@tiptap/extension-task-item';
53
54
  import { LuBold, LuItalic, LuUnderline, LuAlignLeft, LuAlignCenter, LuAlignRight, LuAlignVerticalJustifyStart, LuAlignVerticalJustifyCenter, LuAlignVerticalJustifyEnd, LuList, LuUndo2, LuRedo2, LuMinus, LuPlus, LuStrikethrough, LuSubscript, LuSuperscript, LuLink, LuRemoveFormatting, LuPalette, LuHighlighter, LuAlignJustify, LuListOrdered, LuListChecks, LuIndentDecrease, LuIndentIncrease, LuTable, LuTableRowsSplit, LuTableColumnsSplit, LuTrash2, LuGrid3X3, LuVariable, LuPaperclip, LuX, LuImage, LuFileText, LuFileCode, LuFile } from 'react-icons/lu';
54
55
  import { RxDividerHorizontal } from 'react-icons/rx';
55
56
  import { Extension, Node, mergeAttributes } from '@tiptap/core';
56
- import * as TabsPrimitive from '@radix-ui/react-tabs';
57
57
  import { commands } from '@uiw/react-md-editor';
58
58
  import '@uiw/react-md-editor/markdown-editor.css';
59
59
  import '@uiw/react-markdown-preview/markdown.css';
@@ -77,6 +77,7 @@ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
77
77
  import { Toaster, toast } from 'sonner';
78
78
  export { toast as rawToast } from 'sonner';
79
79
  import { useHazoState } from 'hazo_state/client';
80
+ export { HazoThemeProvider, ThemeScript, ThemeSetPicker, ThemeToggle, useTheme } from 'hazo_theme/client';
80
81
 
81
82
  var __create = Object.create;
82
83
  var __defProp = Object.defineProperty;
@@ -138,16 +139,28 @@ var require_objectWithoutPropertiesLoose = __commonJS({
138
139
  function cn(...inputs) {
139
140
  return twMerge(clsx(inputs));
140
141
  }
142
+ function safeHref(url) {
143
+ if (!url) return void 0;
144
+ const trimmed = url.trim();
145
+ const lower = trimmed.toLowerCase();
146
+ if (lower.startsWith("http://") || lower.startsWith("https://") || lower.startsWith("mailto:")) {
147
+ return trimmed;
148
+ }
149
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
150
+ return trimmed;
151
+ }
152
+ return void 0;
153
+ }
141
154
  function HazoContextProvider({
142
155
  correlationId,
143
156
  userId,
144
157
  children
145
158
  }) {
146
- const id = React26.useMemo(
159
+ const id = React27.useMemo(
147
160
  () => correlationId ?? generateRequestId(),
148
161
  [correlationId]
149
162
  );
150
- React26.useEffect(() => {
163
+ React27.useEffect(() => {
151
164
  withContext({ correlationId: id, userId }, () => {
152
165
  setBrowserCorrelationId(id);
153
166
  });
@@ -231,7 +244,7 @@ var buttonVariants = cva(
231
244
  }
232
245
  }
233
246
  );
234
- var Button = React26.forwardRef(
247
+ var Button = React27.forwardRef(
235
248
  ({ className, variant, size, asChild = false, style, ...props }, ref) => {
236
249
  const Comp = asChild ? Slot : "button";
237
250
  return /* @__PURE__ */ jsx(
@@ -250,7 +263,7 @@ var Dialog = DialogPrimitive.Root;
250
263
  var DialogTrigger = DialogPrimitive.Trigger;
251
264
  var DialogPortal = DialogPrimitive.Portal;
252
265
  var DialogClose = DialogPrimitive.Close;
253
- var DialogOverlay = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
266
+ var DialogOverlay = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
254
267
  DialogPrimitive.Overlay,
255
268
  {
256
269
  ref,
@@ -262,7 +275,7 @@ var DialogOverlay = React26.forwardRef(({ className, ...props }, ref) => /* @__P
262
275
  }
263
276
  ));
264
277
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
265
- var DialogContent = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
278
+ var DialogContent = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
266
279
  /* @__PURE__ */ jsx(DialogOverlay, {}),
267
280
  /* @__PURE__ */ jsxs(
268
281
  DialogPrimitive.Content,
@@ -312,7 +325,7 @@ var DialogFooter = ({
312
325
  }
313
326
  );
314
327
  DialogFooter.displayName = "DialogFooter";
315
- var DialogTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
328
+ var DialogTitle = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
316
329
  DialogPrimitive.Title,
317
330
  {
318
331
  ref,
@@ -325,7 +338,7 @@ var DialogTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PUR
325
338
  }
326
339
  ));
327
340
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
328
- var DialogDescription = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
341
+ var DialogDescription = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
329
342
  DialogPrimitive.Description,
330
343
  {
331
344
  ref,
@@ -334,7 +347,7 @@ var DialogDescription = React26.forwardRef(({ className, ...props }, ref) => /*
334
347
  }
335
348
  ));
336
349
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
337
- var Command = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
350
+ var Command = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
338
351
  "div",
339
352
  {
340
353
  ref,
@@ -346,7 +359,7 @@ var Command = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__
346
359
  }
347
360
  ));
348
361
  Command.displayName = "Command";
349
- var CommandInput = React26.forwardRef(({ className, onValueChange, onChange, ...props }, ref) => /* @__PURE__ */ jsx(
362
+ var CommandInput = React27.forwardRef(({ className, onValueChange, onChange, ...props }, ref) => /* @__PURE__ */ jsx(
350
363
  "input",
351
364
  {
352
365
  ref,
@@ -362,7 +375,7 @@ var CommandInput = React26.forwardRef(({ className, onValueChange, onChange, ...
362
375
  }
363
376
  ));
364
377
  CommandInput.displayName = "CommandInput";
365
- var CommandList = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
378
+ var CommandList = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
366
379
  "div",
367
380
  {
368
381
  ref,
@@ -371,7 +384,7 @@ var CommandList = React26.forwardRef(({ className, ...props }, ref) => /* @__PUR
371
384
  }
372
385
  ));
373
386
  CommandList.displayName = "CommandList";
374
- var CommandEmpty = React26.forwardRef((props, ref) => /* @__PURE__ */ jsx(
387
+ var CommandEmpty = React27.forwardRef((props, ref) => /* @__PURE__ */ jsx(
375
388
  "div",
376
389
  {
377
390
  ref,
@@ -380,7 +393,7 @@ var CommandEmpty = React26.forwardRef((props, ref) => /* @__PURE__ */ jsx(
380
393
  }
381
394
  ));
382
395
  CommandEmpty.displayName = "CommandEmpty";
383
- var CommandGroup = React26.forwardRef(({ className, heading, children, ...props }, ref) => /* @__PURE__ */ jsxs(
396
+ var CommandGroup = React27.forwardRef(({ className, heading, children, ...props }, ref) => /* @__PURE__ */ jsxs(
384
397
  "div",
385
398
  {
386
399
  ref,
@@ -396,7 +409,7 @@ var CommandGroup = React26.forwardRef(({ className, heading, children, ...props
396
409
  }
397
410
  ));
398
411
  CommandGroup.displayName = "CommandGroup";
399
- var CommandItem = React26.forwardRef(({ className, onSelect, value, selected, style, ...props }, ref) => {
412
+ var CommandItem = React27.forwardRef(({ className, onSelect, value, selected, style, ...props }, ref) => {
400
413
  const handleClick = () => {
401
414
  if (onSelect && value) {
402
415
  onSelect(value);
@@ -427,7 +440,7 @@ var CommandItem = React26.forwardRef(({ className, onSelect, value, selected, st
427
440
  CommandItem.displayName = "CommandItem";
428
441
  var Popover = PopoverPrimitive.Root;
429
442
  var PopoverTrigger = PopoverPrimitive.Trigger;
430
- var PopoverContent = React26.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
443
+ var PopoverContent = React27.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
431
444
  PopoverPrimitive.Content,
432
445
  {
433
446
  ref,
@@ -441,7 +454,7 @@ var PopoverContent = React26.forwardRef(({ className, align = "center", sideOffs
441
454
  }
442
455
  ) }));
443
456
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
444
- var Input = React26.forwardRef(
457
+ var Input = React27.forwardRef(
445
458
  ({ className, type, ...props }, ref) => {
446
459
  return /* @__PURE__ */ jsx(
447
460
  "input",
@@ -461,7 +474,7 @@ Input.displayName = "Input";
461
474
  var Select = SelectPrimitive.Root;
462
475
  var SelectGroup = SelectPrimitive.Group;
463
476
  var SelectValue = SelectPrimitive.Value;
464
- var SelectTrigger = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
477
+ var SelectTrigger = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
465
478
  SelectPrimitive.Trigger,
466
479
  {
467
480
  ref,
@@ -477,7 +490,7 @@ var SelectTrigger = React26.forwardRef(({ className, children, ...props }, ref)
477
490
  }
478
491
  ));
479
492
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
480
- var SelectScrollUpButton = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
493
+ var SelectScrollUpButton = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
481
494
  SelectPrimitive.ScrollUpButton,
482
495
  {
483
496
  ref,
@@ -490,7 +503,7 @@ var SelectScrollUpButton = React26.forwardRef(({ className, ...props }, ref) =>
490
503
  }
491
504
  ));
492
505
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
493
- var SelectScrollDownButton = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
506
+ var SelectScrollDownButton = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
494
507
  SelectPrimitive.ScrollDownButton,
495
508
  {
496
509
  ref,
@@ -503,7 +516,7 @@ var SelectScrollDownButton = React26.forwardRef(({ className, ...props }, ref) =
503
516
  }
504
517
  ));
505
518
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
506
- var SelectContent = React26.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
519
+ var SelectContent = React27.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
507
520
  SelectPrimitive.Content,
508
521
  {
509
522
  ref,
@@ -531,7 +544,7 @@ var SelectContent = React26.forwardRef(({ className, children, position = "poppe
531
544
  }
532
545
  ) }));
533
546
  SelectContent.displayName = SelectPrimitive.Content.displayName;
534
- var SelectLabel = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
547
+ var SelectLabel = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
535
548
  SelectPrimitive.Label,
536
549
  {
537
550
  ref,
@@ -540,7 +553,7 @@ var SelectLabel = React26.forwardRef(({ className, ...props }, ref) => /* @__PUR
540
553
  }
541
554
  ));
542
555
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
543
- var SelectItem = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
556
+ var SelectItem = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
544
557
  SelectPrimitive.Item,
545
558
  {
546
559
  ref,
@@ -556,7 +569,7 @@ var SelectItem = React26.forwardRef(({ className, children, ...props }, ref) =>
556
569
  }
557
570
  ));
558
571
  SelectItem.displayName = SelectPrimitive.Item.displayName;
559
- var SelectSeparator = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
572
+ var SelectSeparator = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
560
573
  SelectPrimitive.Separator,
561
574
  {
562
575
  ref,
@@ -568,7 +581,7 @@ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
568
581
  var TooltipProvider = TooltipPrimitive.Provider;
569
582
  var Tooltip = TooltipPrimitive.Root;
570
583
  var TooltipTrigger = TooltipPrimitive.Trigger;
571
- var TooltipContent = React26.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
584
+ var TooltipContent = React27.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
572
585
  TooltipPrimitive.Content,
573
586
  {
574
587
  ref,
@@ -1430,7 +1443,7 @@ function HazoUiMultiSortDialog({
1430
1443
  ] })
1431
1444
  ] });
1432
1445
  }
1433
- var RadioGroup = React26.forwardRef(({ className, ...props }, ref) => {
1446
+ var RadioGroup = React27.forwardRef(({ className, ...props }, ref) => {
1434
1447
  return /* @__PURE__ */ jsx(
1435
1448
  RadioGroupPrimitive.Root,
1436
1449
  {
@@ -1441,7 +1454,7 @@ var RadioGroup = React26.forwardRef(({ className, ...props }, ref) => {
1441
1454
  );
1442
1455
  });
1443
1456
  RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
1444
- var RadioGroupItem = React26.forwardRef(({ className, ...props }, ref) => {
1457
+ var RadioGroupItem = React27.forwardRef(({ className, ...props }, ref) => {
1445
1458
  return /* @__PURE__ */ jsx(
1446
1459
  RadioGroupPrimitive.Item,
1447
1460
  {
@@ -1804,6 +1817,368 @@ function HazoUiPillRadio({
1804
1817
  }
1805
1818
  ) });
1806
1819
  }
1820
+ var Tabs = TabsPrimitive.Root;
1821
+ var TabsList = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1822
+ TabsPrimitive.List,
1823
+ {
1824
+ ref,
1825
+ className: cn(
1826
+ "inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
1827
+ className
1828
+ ),
1829
+ ...props
1830
+ }
1831
+ ));
1832
+ TabsList.displayName = TabsPrimitive.List.displayName;
1833
+ var TabsTrigger = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1834
+ TabsPrimitive.Trigger,
1835
+ {
1836
+ ref,
1837
+ className: cn(
1838
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 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",
1839
+ className
1840
+ ),
1841
+ ...props
1842
+ }
1843
+ ));
1844
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
1845
+ var TabsContent = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1846
+ TabsPrimitive.Content,
1847
+ {
1848
+ ref,
1849
+ className: cn(
1850
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1851
+ className
1852
+ ),
1853
+ ...props
1854
+ }
1855
+ ));
1856
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
1857
+ function isLucideValue(value) {
1858
+ return value.startsWith("lucide:");
1859
+ }
1860
+ function get_lucide_component(name) {
1861
+ return icons[name] || null;
1862
+ }
1863
+ function HazoUiIcon({ value, size = 18, className }) {
1864
+ if (isLucideValue(value)) {
1865
+ const name = value.slice("lucide:".length);
1866
+ const Cmp = get_lucide_component(name);
1867
+ if (!Cmp) return null;
1868
+ return /* @__PURE__ */ jsx(Cmp, { size, className });
1869
+ }
1870
+ return /* @__PURE__ */ jsx("span", { className: cn("cls_hazo_ui_icon_emoji", className), style: { fontSize: size }, children: value });
1871
+ }
1872
+ var TOOLS_ICONS = [
1873
+ "Wrench",
1874
+ "Hammer",
1875
+ "Drill",
1876
+ "ToolCase",
1877
+ "PaintRoller",
1878
+ "PaintBucket",
1879
+ "Ruler",
1880
+ "Cog",
1881
+ "Bolt",
1882
+ "Pipette",
1883
+ "Wind",
1884
+ "Plug",
1885
+ "Lightbulb",
1886
+ "Axe",
1887
+ "Shovel"
1888
+ ];
1889
+ var HOME_ICONS = [
1890
+ "House",
1891
+ "DoorOpen",
1892
+ "Bath",
1893
+ "ShowerHead",
1894
+ "Sofa",
1895
+ "Bed",
1896
+ "Refrigerator",
1897
+ "WashingMachine",
1898
+ "Fence",
1899
+ "Key",
1900
+ "Lock",
1901
+ "Warehouse"
1902
+ ];
1903
+ var WEATHER_ICONS = [
1904
+ "Sun",
1905
+ "CloudRain",
1906
+ "Snowflake",
1907
+ "Thermometer",
1908
+ "Wind",
1909
+ "Droplet",
1910
+ "Flame",
1911
+ "CloudSnow",
1912
+ "Zap"
1913
+ ];
1914
+ var NATURE_ICONS = ["Leaf", "TreePine", "Trees", "Flower", "Sprout", "Bug", "Sun", "Droplets"];
1915
+ var SYMBOLS_ICONS = [
1916
+ "Star",
1917
+ "Heart",
1918
+ "Check",
1919
+ "Circle",
1920
+ "Square",
1921
+ "Triangle",
1922
+ "Hexagon",
1923
+ "Tag",
1924
+ "Bell",
1925
+ "Settings",
1926
+ "Wrench"
1927
+ ];
1928
+ var LUCIDE_GROUPS = [
1929
+ { key: "tools", label: "Tools", icons: TOOLS_ICONS },
1930
+ { key: "home", label: "Home", icons: HOME_ICONS },
1931
+ { key: "weather", label: "Weather", icons: WEATHER_ICONS },
1932
+ { key: "nature", label: "Nature", icons: NATURE_ICONS },
1933
+ { key: "symbols", label: "Symbols", icons: SYMBOLS_ICONS }
1934
+ ];
1935
+ var EMOJI_ITEMS = [
1936
+ // Faces
1937
+ "\u{1F600}",
1938
+ "\u{1F603}",
1939
+ "\u{1F604}",
1940
+ "\u{1F601}",
1941
+ "\u{1F606}",
1942
+ "\u{1F605}",
1943
+ "\u{1F642}",
1944
+ "\u{1F609}",
1945
+ "\u{1F60A}",
1946
+ "\u{1F60D}",
1947
+ "\u{1F914}",
1948
+ "\u{1F610}",
1949
+ "\u{1F634}",
1950
+ "\u{1F60E}",
1951
+ "\u{1F917}",
1952
+ "\u{1F973}",
1953
+ "\u{1F607}",
1954
+ "\u{1F643}",
1955
+ "\u{1F62C}",
1956
+ "\u{1F929}",
1957
+ // People / hands
1958
+ "\u{1F44D}",
1959
+ "\u{1F44E}",
1960
+ "\u{1F44F}",
1961
+ "\u{1F64C}",
1962
+ "\u{1F91D}",
1963
+ "\u{1F44B}",
1964
+ "\u{1F4AA}",
1965
+ "\u{1F64F}",
1966
+ "\u{1F440}",
1967
+ "\u{1F9D1}\u200D\u{1F527}",
1968
+ // Objects / tools
1969
+ "\u{1F527}",
1970
+ "\u{1F528}",
1971
+ "\u{1F6E0}\uFE0F",
1972
+ "\u2699\uFE0F",
1973
+ "\u{1FA9B}",
1974
+ "\u{1FA9A}",
1975
+ "\u{1F9F0}",
1976
+ "\u{1F529}",
1977
+ "\u26CF\uFE0F",
1978
+ "\u{1F9F1}",
1979
+ "\u{1F511}",
1980
+ "\u{1F512}",
1981
+ "\u{1F50B}",
1982
+ "\u{1F4A1}",
1983
+ "\u{1F50C}",
1984
+ "\u{1F9EF}",
1985
+ "\u{1FA9C}",
1986
+ "\u{1F9F2}",
1987
+ "\u{1F4CF}",
1988
+ "\u{1F4D0}",
1989
+ // Home
1990
+ "\u{1F3E0}",
1991
+ "\u{1F3E1}",
1992
+ "\u{1F3E2}",
1993
+ "\u{1F3ED}",
1994
+ "\u{1F6AA}",
1995
+ "\u{1F6CB}\uFE0F",
1996
+ "\u{1F6C1}",
1997
+ "\u{1F6BF}",
1998
+ "\u{1F6CF}\uFE0F",
1999
+ "\u{1FA9F}",
2000
+ // Weather / nature
2001
+ "\u2600\uFE0F",
2002
+ "\u{1F324}\uFE0F",
2003
+ "\u26C5",
2004
+ "\u{1F327}\uFE0F",
2005
+ "\u26C8\uFE0F",
2006
+ "\u{1F329}\uFE0F",
2007
+ "\u2744\uFE0F",
2008
+ "\u{1F32C}\uFE0F",
2009
+ "\u{1F4A7}",
2010
+ "\u{1F525}",
2011
+ "\u{1F308}",
2012
+ "\u{1F30A}",
2013
+ "\u{1F331}",
2014
+ "\u{1F333}",
2015
+ "\u{1F332}",
2016
+ "\u{1F343}",
2017
+ "\u{1F338}",
2018
+ "\u{1F33B}",
2019
+ "\u{1F342}",
2020
+ "\u{1F335}",
2021
+ // Transport
2022
+ "\u{1F697}",
2023
+ "\u{1F69A}",
2024
+ "\u{1F69B}",
2025
+ "\u{1F69C}",
2026
+ "\u{1F6B2}",
2027
+ "\u2708\uFE0F",
2028
+ "\u{1F680}",
2029
+ "\u26F5",
2030
+ // Symbols
2031
+ "\u2B50",
2032
+ "\u2764\uFE0F",
2033
+ "\u2705",
2034
+ "\u274C",
2035
+ "\u26A0\uFE0F",
2036
+ "\u{1F534}",
2037
+ "\u{1F7E2}",
2038
+ "\u{1F535}",
2039
+ "\u{1F7E1}",
2040
+ "\u2B1B",
2041
+ "\u2B1C",
2042
+ "\u{1F53A}",
2043
+ "\u{1F536}",
2044
+ "\u{1F537}",
2045
+ "\u{1F4AF}",
2046
+ "\u{1F514}",
2047
+ "\u{1F4CC}",
2048
+ "\u{1F4CD}",
2049
+ "\u{1F3F7}\uFE0F",
2050
+ "\u{1F3AF}",
2051
+ // Misc
2052
+ "\u{1F4E6}",
2053
+ "\u{1F4C5}",
2054
+ "\u{1F4C8}",
2055
+ "\u{1F4DD}",
2056
+ "\u{1F4B0}",
2057
+ "\u{1F4B3}",
2058
+ "\u{1F389}",
2059
+ "\u{1F381}",
2060
+ "\u2615",
2061
+ "\u{1F37D}\uFE0F",
2062
+ "\u{1F9FE}",
2063
+ "\u{1F4DE}",
2064
+ "\u2709\uFE0F",
2065
+ "\u{1F310}"
2066
+ ];
2067
+ function HazoUiIconPicker({
2068
+ value,
2069
+ onChange,
2070
+ disabled,
2071
+ className,
2072
+ triggerClassName,
2073
+ align = "start"
2074
+ }) {
2075
+ const [open, set_open] = React27.useState(false);
2076
+ const [search, set_search] = React27.useState("");
2077
+ const handle_select = React27.useCallback(
2078
+ (next_value) => {
2079
+ onChange(next_value);
2080
+ set_open(false);
2081
+ },
2082
+ [onChange]
2083
+ );
2084
+ const filtered_search_results = React27.useMemo(() => {
2085
+ const query = search.trim().toLowerCase();
2086
+ if (!query) return [];
2087
+ return Object.keys(icons).filter((name) => name.toLowerCase().includes(query)).slice(0, 60);
2088
+ }, [search]);
2089
+ const has_search = search.trim().length > 0;
2090
+ return /* @__PURE__ */ jsx("div", { className: cn("cls_hazo_ui_icon_picker", className), children: /* @__PURE__ */ jsxs(
2091
+ Popover,
2092
+ {
2093
+ open,
2094
+ onOpenChange: (next_open) => {
2095
+ set_open(next_open);
2096
+ if (!next_open) set_search("");
2097
+ },
2098
+ children: [
2099
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
2100
+ "button",
2101
+ {
2102
+ type: "button",
2103
+ disabled,
2104
+ className: cn(
2105
+ "cls_hazo_ui_icon_picker_trigger",
2106
+ "flex h-9 w-9 items-center justify-center rounded-md border border-input bg-card",
2107
+ "text-foreground transition-colors hover:bg-accent/50",
2108
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
2109
+ "disabled:cursor-not-allowed disabled:opacity-50",
2110
+ triggerClassName
2111
+ ),
2112
+ children: /* @__PURE__ */ jsx(HazoUiIcon, { value })
2113
+ }
2114
+ ) }),
2115
+ /* @__PURE__ */ jsxs(PopoverContent, { align, className: "w-72 p-2", children: [
2116
+ /* @__PURE__ */ jsx(
2117
+ "input",
2118
+ {
2119
+ type: "text",
2120
+ value: search,
2121
+ onChange: (e) => set_search(e.target.value),
2122
+ placeholder: "Search icons...",
2123
+ className: cn(
2124
+ "cls_hazo_ui_icon_picker_search",
2125
+ "mb-2 flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm",
2126
+ "placeholder:text-muted-foreground",
2127
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2128
+ )
2129
+ }
2130
+ ),
2131
+ has_search ? /* @__PURE__ */ jsxs("div", { className: "cls_hazo_ui_icon_picker_search_results grid max-h-56 grid-cols-8 gap-1 overflow-y-auto", children: [
2132
+ filtered_search_results.map((name) => {
2133
+ const Cmp = icons[name];
2134
+ return /* @__PURE__ */ jsx(
2135
+ "button",
2136
+ {
2137
+ type: "button",
2138
+ title: name,
2139
+ onClick: () => handle_select(`lucide:${name}`),
2140
+ className: "flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2141
+ children: /* @__PURE__ */ jsx(Cmp, { size: 16 })
2142
+ },
2143
+ name
2144
+ );
2145
+ }),
2146
+ filtered_search_results.length === 0 && /* @__PURE__ */ jsx("p", { className: "col-span-8 py-4 text-center text-sm text-muted-foreground", children: "No icons found" })
2147
+ ] }) : /* @__PURE__ */ jsxs(Tabs, { defaultValue: "emoji", children: [
2148
+ /* @__PURE__ */ jsxs(TabsList, { className: "grid w-full grid-cols-6", children: [
2149
+ /* @__PURE__ */ jsx(TabsTrigger, { value: "emoji", children: "Emoji" }),
2150
+ LUCIDE_GROUPS.map((group) => /* @__PURE__ */ jsx(TabsTrigger, { value: group.key, children: group.label }, group.key))
2151
+ ] }),
2152
+ /* @__PURE__ */ jsx(TabsContent, { value: "emoji", children: /* @__PURE__ */ jsx("div", { className: "grid max-h-56 grid-cols-8 gap-1 overflow-y-auto", children: EMOJI_ITEMS.map((emoji, index) => /* @__PURE__ */ jsx(
2153
+ "button",
2154
+ {
2155
+ type: "button",
2156
+ onClick: () => handle_select(emoji),
2157
+ className: "flex h-8 w-8 items-center justify-center rounded-md text-lg hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2158
+ children: emoji
2159
+ },
2160
+ `${emoji}-${index}`
2161
+ )) }) }),
2162
+ LUCIDE_GROUPS.map((group) => /* @__PURE__ */ jsx(TabsContent, { value: group.key, children: /* @__PURE__ */ jsx("div", { className: "grid max-h-56 grid-cols-8 gap-1 overflow-y-auto", children: group.icons.map((name) => {
2163
+ const Cmp = icons[name];
2164
+ return /* @__PURE__ */ jsx(
2165
+ "button",
2166
+ {
2167
+ type: "button",
2168
+ title: name,
2169
+ onClick: () => handle_select(`lucide:${name}`),
2170
+ className: "flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2171
+ children: /* @__PURE__ */ jsx(Cmp, { size: 16 })
2172
+ },
2173
+ name
2174
+ );
2175
+ }) }) }, group.key))
2176
+ ] })
2177
+ ] })
2178
+ ]
2179
+ }
2180
+ ) });
2181
+ }
1807
2182
  function validateInput(value, input_type, text_len_min, text_len_max, num_min, num_max, regex, num_decimals) {
1808
2183
  if (value === "") {
1809
2184
  return { isValid: true };
@@ -1898,7 +2273,7 @@ function filterInputValue(value, input_type, num_decimals) {
1898
2273
  }
1899
2274
  }
1900
2275
  }
1901
- var HazoUiFlexInput = React26.forwardRef(
2276
+ var HazoUiFlexInput = React27.forwardRef(
1902
2277
  ({
1903
2278
  className,
1904
2279
  input_type = "mixed",
@@ -1915,13 +2290,13 @@ var HazoUiFlexInput = React26.forwardRef(
1915
2290
  onBlur,
1916
2291
  ...props
1917
2292
  }, ref) => {
1918
- const [internalValue, setInternalValue] = React26.useState(
2293
+ const [internalValue, setInternalValue] = React27.useState(
1919
2294
  typeof controlledValue === "string" ? controlledValue : typeof controlledValue === "number" ? String(controlledValue) : ""
1920
2295
  );
1921
- const [errorMessage, setErrorMessage] = React26.useState();
2296
+ const [errorMessage, setErrorMessage] = React27.useState();
1922
2297
  const isControlled = controlledValue !== void 0;
1923
2298
  const currentValue = isControlled ? typeof controlledValue === "string" ? controlledValue : String(controlledValue || "") : internalValue;
1924
- React26.useEffect(() => {
2299
+ React27.useEffect(() => {
1925
2300
  if (isControlled) {
1926
2301
  const newValue = typeof controlledValue === "string" ? controlledValue : String(controlledValue || "");
1927
2302
  if (newValue !== internalValue) {
@@ -2001,7 +2376,7 @@ var HazoUiFlexInput = React26.forwardRef(
2001
2376
  }
2002
2377
  );
2003
2378
  HazoUiFlexInput.displayName = "HazoUiFlexInput";
2004
- var ToolbarButton = React26.forwardRef(
2379
+ var ToolbarButton = React27.forwardRef(
2005
2380
  ({ onClick, is_active = false, disabled = false, tooltip, className, children }, ref) => {
2006
2381
  const button = /* @__PURE__ */ jsx(
2007
2382
  "button",
@@ -2270,7 +2645,7 @@ var getRelativePosition = (node, event) => {
2270
2645
  };
2271
2646
  };
2272
2647
  var _excluded = ["prefixCls", "className", "onMove", "onDown"];
2273
- var Interactive = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2648
+ var Interactive = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2274
2649
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-interactive" : _props$prefixCls, className = props.className, onMove = props.onMove, onDown = props.onDown, reset = (0, import_objectWithoutPropertiesLoose.default)(props, _excluded);
2275
2650
  var container = useRef(null);
2276
2651
  var hasTouched = useRef(false);
@@ -2358,7 +2733,7 @@ var Pointer = (_ref) => {
2358
2733
  }), [top, left, color2, className, prefixCls]);
2359
2734
  };
2360
2735
  var _excluded2 = ["prefixCls", "radius", "pointer", "className", "hue", "style", "hsva", "onChange"];
2361
- var Saturation = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2736
+ var Saturation = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2362
2737
  var _hsva$h;
2363
2738
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-saturation" : _props$prefixCls, _props$radius = props.radius, radius = _props$radius === void 0 ? 0 : _props$radius, pointer = props.pointer, className = props.className, _props$hue = props.hue, hue = _props$hue === void 0 ? 0 : _props$hue, style = props.style, hsva = props.hsva, onChange = props.onChange, other = (0, import_objectWithoutPropertiesLoose2.default)(props, _excluded2);
2364
2739
  var containerStyle = (0, import_extends3.default)({
@@ -2507,7 +2882,7 @@ var Pointer2 = (_ref) => {
2507
2882
  };
2508
2883
  var _excluded4 = ["prefixCls", "className", "hsva", "background", "bgProps", "innerProps", "pointerProps", "radius", "width", "height", "direction", "reverse", "style", "onChange", "pointer"];
2509
2884
  var BACKGROUND_IMG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==";
2510
- var Alpha = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2885
+ var Alpha = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2511
2886
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-alpha" : _props$prefixCls, className = props.className, hsva = props.hsva, background = props.background, _props$bgProps = props.bgProps, bgProps = _props$bgProps === void 0 ? {} : _props$bgProps, _props$innerProps = props.innerProps, innerProps = _props$innerProps === void 0 ? {} : _props$innerProps, _props$pointerProps = props.pointerProps, pointerProps = _props$pointerProps === void 0 ? {} : _props$pointerProps, _props$radius = props.radius, radius = _props$radius === void 0 ? 0 : _props$radius, width = props.width, _props$height = props.height, height = _props$height === void 0 ? 16 : _props$height, _props$direction = props.direction, direction = _props$direction === void 0 ? "horizontal" : _props$direction, _props$reverse = props.reverse, reverse = _props$reverse === void 0 ? false : _props$reverse, style = props.style, onChange = props.onChange, pointer = props.pointer, other = (0, import_objectWithoutPropertiesLoose4.default)(props, _excluded4);
2512
2887
  var offsetToAlpha = useCallback((offset) => {
2513
2888
  var value = direction === "horizontal" ? offset.left : offset.top;
@@ -2643,7 +3018,7 @@ var import_objectWithoutPropertiesLoose5 = __toESM(require_objectWithoutProperti
2643
3018
  var _excluded5 = ["prefixCls", "placement", "label", "value", "className", "style", "labelStyle", "inputStyle", "onChange", "onBlur", "renderInput"];
2644
3019
  var validHex2 = (hex) => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);
2645
3020
  var getNumberValue = (value) => Number(String(value).replace(/%/g, ""));
2646
- var EditableInput = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
3021
+ var EditableInput = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2647
3022
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-editable-input" : _props$prefixCls, _props$placement = props.placement, placement = _props$placement === void 0 ? "bottom" : _props$placement, label = props.label, initValue = props.value, className = props.className, style = props.style, labelStyle = props.labelStyle, inputStyle = props.inputStyle, onChange = props.onChange, onBlur = props.onBlur, renderInput = props.renderInput, other = (0, import_objectWithoutPropertiesLoose5.default)(props, _excluded5);
2648
3023
  var _useState = useState(initValue), value = _useState[0], setValue = _useState[1];
2649
3024
  var isFocus = useRef(false);
@@ -2740,7 +3115,7 @@ var esm_default4 = EditableInput;
2740
3115
  var import_extends7 = __toESM(require_extends());
2741
3116
  var import_objectWithoutPropertiesLoose6 = __toESM(require_objectWithoutPropertiesLoose());
2742
3117
  var _excluded6 = ["prefixCls", "hsva", "placement", "rProps", "gProps", "bProps", "aProps", "className", "style", "onChange"];
2743
- var EditableInputRGBA = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
3118
+ var EditableInputRGBA = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2744
3119
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-editable-input-rgba" : _props$prefixCls, hsva = props.hsva, _props$placement = props.placement, placement = _props$placement === void 0 ? "bottom" : _props$placement, _props$rProps = props.rProps, rProps = _props$rProps === void 0 ? {} : _props$rProps, _props$gProps = props.gProps, gProps = _props$gProps === void 0 ? {} : _props$gProps, _props$bProps = props.bProps, bProps = _props$bProps === void 0 ? {} : _props$bProps, _props$aProps = props.aProps, aProps = _props$aProps === void 0 ? {} : _props$aProps, className = props.className, style = props.style, onChange = props.onChange, other = (0, import_objectWithoutPropertiesLoose6.default)(props, _excluded6);
2745
3120
  var rgba = hsva ? hsvaToRgba(hsva) : {};
2746
3121
  function handleBlur(evn) {
@@ -2854,7 +3229,7 @@ var import_objectWithoutPropertiesLoose7 = __toESM(require_objectWithoutProperti
2854
3229
  var _excluded7 = ["prefixCls", "className", "hue", "onChange", "direction", "reverse"];
2855
3230
  var NORMAL_COLORS = "rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%";
2856
3231
  var REVERSED_COLORS = "rgb(255, 0, 0) 0%, rgb(255, 0, 255) 17%, rgb(0, 0, 255) 33%, rgb(0, 255, 255) 50%, rgb(0, 255, 0) 67%, rgb(255, 255, 0) 83%, rgb(255, 0, 0) 100%";
2857
- var Hue = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
3232
+ var Hue = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2858
3233
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-hue" : _props$prefixCls, className = props.className, _props$hue = props.hue, hue = _props$hue === void 0 ? 0 : _props$hue, _onChange = props.onChange, _props$direction = props.direction, direction = _props$direction === void 0 ? "horizontal" : _props$direction, _props$reverse = props.reverse, reverse = _props$reverse === void 0 ? false : _props$reverse, other = (0, import_objectWithoutPropertiesLoose7.default)(props, _excluded7);
2859
3234
  var getGradientBackground = useCallback(() => {
2860
3235
  if (direction === "horizontal") {
@@ -2905,7 +3280,7 @@ var esm_default6 = Hue;
2905
3280
  var import_extends9 = __toESM(require_extends());
2906
3281
  var import_objectWithoutPropertiesLoose8 = __toESM(require_objectWithoutPropertiesLoose());
2907
3282
  var _excluded8 = ["prefixCls", "className", "color", "colors", "style", "rectProps", "onChange", "addonAfter", "addonBefore", "rectRender"];
2908
- var Swatch = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
3283
+ var Swatch = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2909
3284
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-swatch" : _props$prefixCls, className = props.className, color2 = props.color, _props$colors = props.colors, colors = _props$colors === void 0 ? [] : _props$colors, style = props.style, _props$rectProps = props.rectProps, rectProps = _props$rectProps === void 0 ? {} : _props$rectProps, onChange = props.onChange, addonAfter = props.addonAfter, addonBefore = props.addonBefore, rectRender = props.rectRender, other = (0, import_objectWithoutPropertiesLoose8.default)(props, _excluded8);
2910
3285
  var rectStyle = (0, import_extends9.default)({
2911
3286
  "--swatch-background-color": "rgb(144, 19, 254)",
@@ -2931,7 +3306,7 @@ var Swatch = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2931
3306
  flexWrap: "wrap",
2932
3307
  position: "relative"
2933
3308
  }, style),
2934
- children: [addonBefore && /* @__PURE__ */ React26__default.isValidElement(addonBefore) && addonBefore, colors && Array.isArray(colors) && colors.map((item, idx) => {
3309
+ children: [addonBefore && /* @__PURE__ */ React27__default.isValidElement(addonBefore) && addonBefore, colors && Array.isArray(colors) && colors.map((item, idx) => {
2935
3310
  var title = "";
2936
3311
  var background = "";
2937
3312
  if (typeof item === "string") {
@@ -2957,7 +3332,7 @@ var Swatch = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2957
3332
  children: render
2958
3333
  }, idx);
2959
3334
  }
2960
- var child = rectProps.children && /* @__PURE__ */ React26__default.isValidElement(rectProps.children) ? /* @__PURE__ */ React26__default.cloneElement(rectProps.children, {
3335
+ var child = rectProps.children && /* @__PURE__ */ React27__default.isValidElement(rectProps.children) ? /* @__PURE__ */ React27__default.cloneElement(rectProps.children, {
2961
3336
  color: background,
2962
3337
  checked
2963
3338
  }) : null;
@@ -2971,7 +3346,7 @@ var Swatch = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
2971
3346
  background
2972
3347
  })
2973
3348
  }), idx);
2974
- }), addonAfter && /* @__PURE__ */ React26__default.isValidElement(addonAfter) && addonAfter]
3349
+ }), addonAfter && /* @__PURE__ */ React27__default.isValidElement(addonAfter) && addonAfter]
2975
3350
  }));
2976
3351
  });
2977
3352
  Swatch.displayName = "Swatch";
@@ -2990,7 +3365,7 @@ var Bar = (props) => /* @__PURE__ */ jsx("div", {
2990
3365
  backgroundColor: "#fff"
2991
3366
  }
2992
3367
  });
2993
- var Sketch = /* @__PURE__ */ React26__default.forwardRef((props, ref) => {
3368
+ var Sketch = /* @__PURE__ */ React27__default.forwardRef((props, ref) => {
2994
3369
  var _props$prefixCls = props.prefixCls, prefixCls = _props$prefixCls === void 0 ? "w-color-sketch" : _props$prefixCls, className = props.className, onChange = props.onChange, _props$width = props.width, width = _props$width === void 0 ? 218 : _props$width, _props$presetColors = props.presetColors, presetColors = _props$presetColors === void 0 ? PRESET_COLORS : _props$presetColors, color2 = props.color, _props$editableDisabl = props.editableDisable, editableDisable = _props$editableDisabl === void 0 ? true : _props$editableDisabl, _props$disableAlpha = props.disableAlpha, disableAlpha = _props$disableAlpha === void 0 ? false : _props$disableAlpha, style = props.style, other = (0, import_objectWithoutPropertiesLoose9.default)(props, _excluded9);
2995
3370
  var _useState = useState({
2996
3371
  h: 209,
@@ -3259,19 +3634,19 @@ var Toolbar = ({
3259
3634
  toolbar,
3260
3635
  font_families
3261
3636
  }) => {
3262
- const [link_url, set_link_url] = React26.useState("https://");
3263
- const [link_popover_open, set_link_popover_open] = React26.useState(false);
3264
- const [text_color_open, set_text_color_open] = React26.useState(false);
3265
- const [highlight_color_open, set_highlight_color_open] = React26.useState(false);
3266
- const [variables_menu_open, set_variables_menu_open] = React26.useState(false);
3267
- const [table_menu_open, set_table_menu_open] = React26.useState(false);
3268
- const [text_color, set_text_color] = React26.useState("#000000");
3269
- const [highlight_color, set_highlight_color] = React26.useState("#ffff00");
3270
- const [table_rows, set_table_rows] = React26.useState(3);
3271
- const [table_cols, set_table_cols] = React26.useState(3);
3272
- const [hovered_cell, set_hovered_cell] = React26.useState(null);
3273
- const file_input_ref = React26.useRef(null);
3274
- const image_input_ref = React26.useRef(null);
3637
+ const [link_url, set_link_url] = React27.useState("https://");
3638
+ const [link_popover_open, set_link_popover_open] = React27.useState(false);
3639
+ const [text_color_open, set_text_color_open] = React27.useState(false);
3640
+ const [highlight_color_open, set_highlight_color_open] = React27.useState(false);
3641
+ const [variables_menu_open, set_variables_menu_open] = React27.useState(false);
3642
+ const [table_menu_open, set_table_menu_open] = React27.useState(false);
3643
+ const [text_color, set_text_color] = React27.useState("#000000");
3644
+ const [highlight_color, set_highlight_color] = React27.useState("#ffff00");
3645
+ const [table_rows, set_table_rows] = React27.useState(3);
3646
+ const [table_cols, set_table_cols] = React27.useState(3);
3647
+ const [hovered_cell, set_hovered_cell] = React27.useState(null);
3648
+ const file_input_ref = React27.useRef(null);
3649
+ const image_input_ref = React27.useRef(null);
3275
3650
  if (!editor) {
3276
3651
  return null;
3277
3652
  }
@@ -4085,7 +4460,7 @@ var Toolbar = ({
4085
4460
  disabled && "opacity-50 pointer-events-none"
4086
4461
  ),
4087
4462
  children: [
4088
- sections.map((items, i) => /* @__PURE__ */ jsxs(React26.Fragment, { children: [
4463
+ sections.map((items, i) => /* @__PURE__ */ jsxs(React27.Fragment, { children: [
4089
4464
  i > 0 && /* @__PURE__ */ jsx(ToolbarSeparator, {}),
4090
4465
  items
4091
4466
  ] }, i)),
@@ -4337,43 +4712,6 @@ var VariableExtension = Node.create({
4337
4712
  };
4338
4713
  }
4339
4714
  });
4340
- var Tabs = TabsPrimitive.Root;
4341
- var TabsList = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4342
- TabsPrimitive.List,
4343
- {
4344
- ref,
4345
- className: cn(
4346
- "inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
4347
- className
4348
- ),
4349
- ...props
4350
- }
4351
- ));
4352
- TabsList.displayName = TabsPrimitive.List.displayName;
4353
- var TabsTrigger = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4354
- TabsPrimitive.Trigger,
4355
- {
4356
- ref,
4357
- className: cn(
4358
- "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 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",
4359
- className
4360
- ),
4361
- ...props
4362
- }
4363
- ));
4364
- TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
4365
- var TabsContent = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4366
- TabsPrimitive.Content,
4367
- {
4368
- ref,
4369
- className: cn(
4370
- "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4371
- className
4372
- ),
4373
- ...props
4374
- }
4375
- ));
4376
- TabsContent.displayName = TabsPrimitive.Content.displayName;
4377
4715
  function debounce_fn(func, wait) {
4378
4716
  let timeout_id = null;
4379
4717
  return (output) => {
@@ -4399,14 +4737,14 @@ var HazoUiRte = ({
4399
4737
  toolbar,
4400
4738
  font_families
4401
4739
  }) => {
4402
- const [attachments, set_attachments] = React26.useState(
4740
+ const [attachments, set_attachments] = React27.useState(
4403
4741
  initial_attachments
4404
4742
  );
4405
- const [active_tab, set_active_tab] = React26.useState("html");
4743
+ const [active_tab, set_active_tab] = React27.useState("html");
4406
4744
  const is_view_only = active_tab !== "html";
4407
- const attachments_ref = React26.useRef(attachments);
4745
+ const attachments_ref = React27.useRef(attachments);
4408
4746
  attachments_ref.current = attachments;
4409
- const debounced_on_change = React26.useMemo(
4747
+ const debounced_on_change = React27.useMemo(
4410
4748
  () => debounce_fn((output) => {
4411
4749
  if (on_change) {
4412
4750
  on_change(output);
@@ -4505,7 +4843,7 @@ var HazoUiRte = ({
4505
4843
  debounced_on_change(output);
4506
4844
  }
4507
4845
  });
4508
- React26.useEffect(() => {
4846
+ React27.useEffect(() => {
4509
4847
  if (editor && html !== void 0) {
4510
4848
  const current_html = editor.getHTML();
4511
4849
  if (html !== current_html && !editor.isFocused) {
@@ -4513,21 +4851,21 @@ var HazoUiRte = ({
4513
4851
  }
4514
4852
  }
4515
4853
  }, [html, editor]);
4516
- React26.useEffect(() => {
4854
+ React27.useEffect(() => {
4517
4855
  if (editor) {
4518
4856
  editor.setEditable(!disabled);
4519
4857
  }
4520
4858
  }, [disabled, editor]);
4521
- const attachments_from_props_ref = React26.useRef(false);
4522
- const prev_initial_attachments_ref = React26.useRef(initial_attachments);
4523
- React26.useEffect(() => {
4859
+ const attachments_from_props_ref = React27.useRef(false);
4860
+ const prev_initial_attachments_ref = React27.useRef(initial_attachments);
4861
+ React27.useEffect(() => {
4524
4862
  if (JSON.stringify(initial_attachments) !== JSON.stringify(prev_initial_attachments_ref.current)) {
4525
4863
  prev_initial_attachments_ref.current = initial_attachments;
4526
4864
  attachments_from_props_ref.current = true;
4527
4865
  set_attachments(initial_attachments);
4528
4866
  }
4529
4867
  }, [initial_attachments]);
4530
- React26.useEffect(() => {
4868
+ React27.useEffect(() => {
4531
4869
  if (attachments_from_props_ref.current) {
4532
4870
  attachments_from_props_ref.current = false;
4533
4871
  return;
@@ -5340,12 +5678,12 @@ var CommandPopover = ({
5340
5678
  on_selection_change: _on_selection_change,
5341
5679
  prefix_color
5342
5680
  }) => {
5343
- const container_ref = React26.useRef(null);
5344
- const grouped_commands = React26.useMemo(
5681
+ const container_ref = React27.useRef(null);
5682
+ const grouped_commands = React27.useMemo(
5345
5683
  () => group_commands(commands),
5346
5684
  [commands]
5347
5685
  );
5348
- React26.useEffect(() => {
5686
+ React27.useEffect(() => {
5349
5687
  const handle_click_outside = (e) => {
5350
5688
  if (container_ref.current && !container_ref.current.contains(e.target)) {
5351
5689
  on_close();
@@ -5358,8 +5696,8 @@ var CommandPopover = ({
5358
5696
  };
5359
5697
  }
5360
5698
  }, [is_open, on_close]);
5361
- const [mounted, set_mounted] = React26.useState(false);
5362
- React26.useEffect(() => {
5699
+ const [mounted, set_mounted] = React27.useState(false);
5700
+ React27.useEffect(() => {
5363
5701
  set_mounted(true);
5364
5702
  }, []);
5365
5703
  if (!is_open || !mounted) return null;
@@ -5669,21 +6007,21 @@ var HazoUiTextbox = ({
5669
6007
  on_command_change,
5670
6008
  on_command_remove
5671
6009
  }) => {
5672
- const generated_instance_id = React26.useId();
6010
+ const generated_instance_id = React27.useId();
5673
6011
  const instance_id = provided_instance_id || generated_instance_id;
5674
- const [suggestion_state, set_suggestion_state] = React26.useState(null);
5675
- const [selected_index, set_selected_index] = React26.useState(0);
5676
- const [popover_position, set_popover_position] = React26.useState({ top: 0, left: 0 });
5677
- const [edit_context, set_edit_context] = React26.useState(null);
5678
- const [edit_selected_index, set_edit_selected_index] = React26.useState(0);
6012
+ const [suggestion_state, set_suggestion_state] = React27.useState(null);
6013
+ const [selected_index, set_selected_index] = React27.useState(0);
6014
+ const [popover_position, set_popover_position] = React27.useState({ top: 0, left: 0 });
6015
+ const [edit_context, set_edit_context] = React27.useState(null);
6016
+ const [edit_selected_index, set_edit_selected_index] = React27.useState(0);
5679
6017
  const is_controlled = value !== void 0;
5680
- const editor_container_ref = React26.useRef(null);
5681
- const edit_popover_ref = React26.useRef(null);
5682
- const [mounted, set_mounted] = React26.useState(false);
5683
- React26.useEffect(() => {
6018
+ const editor_container_ref = React27.useRef(null);
6019
+ const edit_popover_ref = React27.useRef(null);
6020
+ const [mounted, set_mounted] = React27.useState(false);
6021
+ React27.useEffect(() => {
5684
6022
  set_mounted(true);
5685
6023
  }, []);
5686
- const suggestion_extensions = React26.useMemo(() => {
6024
+ const suggestion_extensions = React27.useMemo(() => {
5687
6025
  return create_command_suggestion_extension({
5688
6026
  prefixes,
5689
6027
  instance_id,
@@ -5734,7 +6072,7 @@ var HazoUiTextbox = ({
5734
6072
  }
5735
6073
  }
5736
6074
  });
5737
- React26.useEffect(() => {
6075
+ React27.useEffect(() => {
5738
6076
  if (suggestion_state?.is_active && editor) {
5739
6077
  requestAnimationFrame(() => {
5740
6078
  const { from } = suggestion_state.range;
@@ -5758,7 +6096,7 @@ var HazoUiTextbox = ({
5758
6096
  });
5759
6097
  }
5760
6098
  }, [suggestion_state, editor]);
5761
- React26.useEffect(() => {
6099
+ React27.useEffect(() => {
5762
6100
  if (is_controlled && editor && !editor.isFocused) {
5763
6101
  const current_text = editor.getText();
5764
6102
  if (value !== current_text) {
@@ -5767,12 +6105,12 @@ var HazoUiTextbox = ({
5767
6105
  }
5768
6106
  }
5769
6107
  }, [value, editor, is_controlled, prefixes, pill_variant]);
5770
- React26.useEffect(() => {
6108
+ React27.useEffect(() => {
5771
6109
  if (editor) {
5772
6110
  editor.setEditable(!disabled);
5773
6111
  }
5774
6112
  }, [disabled, editor]);
5775
- const handle_command_select = React26.useCallback(
6113
+ const handle_command_select = React27.useCallback(
5776
6114
  (command) => {
5777
6115
  if (!editor || !suggestion_state) return;
5778
6116
  const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);
@@ -5792,15 +6130,15 @@ var HazoUiTextbox = ({
5792
6130
  },
5793
6131
  [editor, suggestion_state, pill_variant, on_command_insert, prefixes]
5794
6132
  );
5795
- const handle_popover_close = React26.useCallback(() => {
6133
+ const handle_popover_close = React27.useCallback(() => {
5796
6134
  set_suggestion_state(null);
5797
6135
  editor?.commands.focus();
5798
6136
  }, [editor]);
5799
- const handle_edit_close = React26.useCallback(() => {
6137
+ const handle_edit_close = React27.useCallback(() => {
5800
6138
  set_edit_context(null);
5801
6139
  editor?.commands.focus();
5802
6140
  }, [editor]);
5803
- const handle_command_update = React26.useCallback(
6141
+ const handle_command_update = React27.useCallback(
5804
6142
  (new_command) => {
5805
6143
  if (!editor || !edit_context) return;
5806
6144
  const old_command = edit_context.command;
@@ -5816,7 +6154,7 @@ var HazoUiTextbox = ({
5816
6154
  },
5817
6155
  [editor, edit_context, on_command_change]
5818
6156
  );
5819
- const handle_command_remove = React26.useCallback(() => {
6157
+ const handle_command_remove = React27.useCallback(() => {
5820
6158
  if (!editor || !edit_context) return;
5821
6159
  const command = edit_context.command;
5822
6160
  editor.state.doc.descendants((node, pos) => {
@@ -5830,7 +6168,7 @@ var HazoUiTextbox = ({
5830
6168
  }
5831
6169
  set_edit_context(null);
5832
6170
  }, [editor, edit_context, on_command_remove]);
5833
- const filtered_commands = React26.useMemo(() => {
6171
+ const filtered_commands = React27.useMemo(() => {
5834
6172
  if (!suggestion_state) return [];
5835
6173
  const query = suggestion_state.query.toLowerCase();
5836
6174
  if (!query) return suggestion_state.commands;
@@ -5838,7 +6176,7 @@ var HazoUiTextbox = ({
5838
6176
  (cmd) => cmd.action_label.toLowerCase().includes(query) || cmd.action.toLowerCase().includes(query) || cmd.action_description?.toLowerCase().includes(query)
5839
6177
  );
5840
6178
  }, [suggestion_state]);
5841
- React26.useEffect(() => {
6179
+ React27.useEffect(() => {
5842
6180
  if (!suggestion_state?.is_active) return;
5843
6181
  const handle_keydown = (e) => {
5844
6182
  switch (e.key) {
@@ -5873,7 +6211,7 @@ var HazoUiTextbox = ({
5873
6211
  handle_command_select,
5874
6212
  handle_popover_close
5875
6213
  ]);
5876
- React26.useEffect(() => {
6214
+ React27.useEffect(() => {
5877
6215
  if (!edit_context) return;
5878
6216
  const handle_click_outside = (e) => {
5879
6217
  if (edit_popover_ref.current && !edit_popover_ref.current.contains(e.target)) {
@@ -5888,12 +6226,12 @@ var HazoUiTextbox = ({
5888
6226
  document.removeEventListener("mousedown", handle_click_outside);
5889
6227
  };
5890
6228
  }, [edit_context]);
5891
- const edit_commands = React26.useMemo(() => {
6229
+ const edit_commands = React27.useMemo(() => {
5892
6230
  if (!edit_context) return [];
5893
6231
  const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);
5894
6232
  return prefix_config?.commands || [];
5895
6233
  }, [edit_context, prefixes]);
5896
- React26.useEffect(() => {
6234
+ React27.useEffect(() => {
5897
6235
  if (!edit_context) return;
5898
6236
  const handle_keydown = (e) => {
5899
6237
  switch (e.key) {
@@ -5931,7 +6269,7 @@ var HazoUiTextbox = ({
5931
6269
  handle_command_remove,
5932
6270
  handle_edit_close
5933
6271
  ]);
5934
- React26.useEffect(() => {
6272
+ React27.useEffect(() => {
5935
6273
  const handle_pill_click = (e) => {
5936
6274
  const detail = e.detail;
5937
6275
  const { id, prefix, action, action_label, node_pos } = detail;
@@ -6216,22 +6554,22 @@ var HazoUiTextarea = ({
6216
6554
  on_command_change,
6217
6555
  on_command_remove
6218
6556
  }) => {
6219
- const generated_instance_id = React26.useId();
6557
+ const generated_instance_id = React27.useId();
6220
6558
  const instance_id = provided_instance_id || generated_instance_id;
6221
- const [suggestion_state, set_suggestion_state] = React26.useState(null);
6222
- const [selected_index, set_selected_index] = React26.useState(0);
6223
- const [popover_position, set_popover_position] = React26.useState({ top: 0, left: 0 });
6224
- const [edit_context, set_edit_context] = React26.useState(null);
6225
- const [edit_selected_index, set_edit_selected_index] = React26.useState(0);
6559
+ const [suggestion_state, set_suggestion_state] = React27.useState(null);
6560
+ const [selected_index, set_selected_index] = React27.useState(0);
6561
+ const [popover_position, set_popover_position] = React27.useState({ top: 0, left: 0 });
6562
+ const [edit_context, set_edit_context] = React27.useState(null);
6563
+ const [edit_selected_index, set_edit_selected_index] = React27.useState(0);
6226
6564
  const is_controlled = value !== void 0;
6227
- const editor_container_ref = React26.useRef(null);
6228
- const edit_popover_ref = React26.useRef(null);
6229
- const [mounted, set_mounted] = React26.useState(false);
6230
- React26.useEffect(() => {
6565
+ const editor_container_ref = React27.useRef(null);
6566
+ const edit_popover_ref = React27.useRef(null);
6567
+ const [mounted, set_mounted] = React27.useState(false);
6568
+ React27.useEffect(() => {
6231
6569
  set_mounted(true);
6232
6570
  }, []);
6233
6571
  const calculated_min_height = rows ? `${rows * 1.5}em` : min_height;
6234
- const suggestion_extensions = React26.useMemo(() => {
6572
+ const suggestion_extensions = React27.useMemo(() => {
6235
6573
  return create_command_suggestion_extension({
6236
6574
  prefixes,
6237
6575
  instance_id,
@@ -6280,7 +6618,7 @@ var HazoUiTextarea = ({
6280
6618
  }
6281
6619
  }
6282
6620
  });
6283
- React26.useEffect(() => {
6621
+ React27.useEffect(() => {
6284
6622
  if (suggestion_state?.is_active && editor) {
6285
6623
  requestAnimationFrame(() => {
6286
6624
  const { from } = suggestion_state.range;
@@ -6304,7 +6642,7 @@ var HazoUiTextarea = ({
6304
6642
  });
6305
6643
  }
6306
6644
  }, [suggestion_state, editor]);
6307
- React26.useEffect(() => {
6645
+ React27.useEffect(() => {
6308
6646
  if (is_controlled && editor && !editor.isFocused) {
6309
6647
  const current_text = editor.getText();
6310
6648
  if (value !== current_text) {
@@ -6317,12 +6655,12 @@ var HazoUiTextarea = ({
6317
6655
  }
6318
6656
  }
6319
6657
  }, [value, editor, is_controlled, prefixes, pill_variant]);
6320
- React26.useEffect(() => {
6658
+ React27.useEffect(() => {
6321
6659
  if (editor) {
6322
6660
  editor.setEditable(!disabled);
6323
6661
  }
6324
6662
  }, [disabled, editor]);
6325
- const handle_command_select = React26.useCallback(
6663
+ const handle_command_select = React27.useCallback(
6326
6664
  (command) => {
6327
6665
  if (!editor || !suggestion_state) return;
6328
6666
  const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);
@@ -6342,15 +6680,15 @@ var HazoUiTextarea = ({
6342
6680
  },
6343
6681
  [editor, suggestion_state, pill_variant, on_command_insert, prefixes]
6344
6682
  );
6345
- const handle_popover_close = React26.useCallback(() => {
6683
+ const handle_popover_close = React27.useCallback(() => {
6346
6684
  set_suggestion_state(null);
6347
6685
  editor?.commands.focus();
6348
6686
  }, [editor]);
6349
- const handle_edit_close = React26.useCallback(() => {
6687
+ const handle_edit_close = React27.useCallback(() => {
6350
6688
  set_edit_context(null);
6351
6689
  editor?.commands.focus();
6352
6690
  }, [editor]);
6353
- const handle_command_update = React26.useCallback(
6691
+ const handle_command_update = React27.useCallback(
6354
6692
  (new_command) => {
6355
6693
  if (!editor || !edit_context) return;
6356
6694
  const old_command = edit_context.command;
@@ -6366,7 +6704,7 @@ var HazoUiTextarea = ({
6366
6704
  },
6367
6705
  [editor, edit_context, on_command_change]
6368
6706
  );
6369
- const handle_command_remove = React26.useCallback(() => {
6707
+ const handle_command_remove = React27.useCallback(() => {
6370
6708
  if (!editor || !edit_context) return;
6371
6709
  const command = edit_context.command;
6372
6710
  editor.state.doc.descendants((node, pos) => {
@@ -6380,7 +6718,7 @@ var HazoUiTextarea = ({
6380
6718
  }
6381
6719
  set_edit_context(null);
6382
6720
  }, [editor, edit_context, on_command_remove]);
6383
- const filtered_commands = React26.useMemo(() => {
6721
+ const filtered_commands = React27.useMemo(() => {
6384
6722
  if (!suggestion_state) return [];
6385
6723
  const query = suggestion_state.query.toLowerCase();
6386
6724
  if (!query) return suggestion_state.commands;
@@ -6388,7 +6726,7 @@ var HazoUiTextarea = ({
6388
6726
  (cmd) => cmd.action_label.toLowerCase().includes(query) || cmd.action.toLowerCase().includes(query) || cmd.action_description?.toLowerCase().includes(query)
6389
6727
  );
6390
6728
  }, [suggestion_state]);
6391
- React26.useEffect(() => {
6729
+ React27.useEffect(() => {
6392
6730
  if (!suggestion_state?.is_active) return;
6393
6731
  const handle_keydown = (e) => {
6394
6732
  switch (e.key) {
@@ -6423,7 +6761,7 @@ var HazoUiTextarea = ({
6423
6761
  handle_command_select,
6424
6762
  handle_popover_close
6425
6763
  ]);
6426
- React26.useEffect(() => {
6764
+ React27.useEffect(() => {
6427
6765
  if (!edit_context) return;
6428
6766
  const handle_click_outside = (e) => {
6429
6767
  if (edit_popover_ref.current && !edit_popover_ref.current.contains(e.target)) {
@@ -6438,12 +6776,12 @@ var HazoUiTextarea = ({
6438
6776
  document.removeEventListener("mousedown", handle_click_outside);
6439
6777
  };
6440
6778
  }, [edit_context]);
6441
- const edit_commands = React26.useMemo(() => {
6779
+ const edit_commands = React27.useMemo(() => {
6442
6780
  if (!edit_context) return [];
6443
6781
  const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);
6444
6782
  return prefix_config?.commands || [];
6445
6783
  }, [edit_context, prefixes]);
6446
- React26.useEffect(() => {
6784
+ React27.useEffect(() => {
6447
6785
  if (!edit_context) return;
6448
6786
  const handle_keydown = (e) => {
6449
6787
  switch (e.key) {
@@ -6481,7 +6819,7 @@ var HazoUiTextarea = ({
6481
6819
  handle_command_remove,
6482
6820
  handle_edit_close
6483
6821
  ]);
6484
- React26.useEffect(() => {
6822
+ React27.useEffect(() => {
6485
6823
  const handle_pill_click = (e) => {
6486
6824
  const detail = e.detail;
6487
6825
  const { id, prefix, action, action_label, node_pos } = detail;
@@ -6697,39 +7035,47 @@ function resolve_animation_classes(open_anim = "zoom", close_anim = "zoom") {
6697
7035
  }
6698
7036
  var VARIANT_PRESETS = {
6699
7037
  info: {
6700
- header_background_color: "rgb(191, 219, 254)",
6701
- description_background_color: "rgb(219, 234, 254)",
6702
- header_text_color: "rgb(30, 58, 138)",
6703
- border_color: "rgb(59, 130, 246)",
6704
- accent_color: "rgb(59, 130, 246)",
7038
+ header_background_color: "var(--dialog-info-bg)",
7039
+ description_background_color: "var(--dialog-info-bg)",
7040
+ header_text_color: "var(--dialog-info-fg)",
7041
+ border_color: "var(--dialog-info-fg)",
7042
+ accent_color: "var(--dialog-info-fg)",
6705
7043
  overlay_class_name: "bg-blue-950/50"
6706
7044
  },
6707
7045
  success: {
6708
- header_background_color: "rgb(187, 247, 208)",
6709
- description_background_color: "rgb(220, 252, 231)",
6710
- header_text_color: "rgb(22, 101, 52)",
6711
- border_color: "rgb(34, 197, 94)",
6712
- accent_color: "rgb(34, 197, 94)",
7046
+ header_background_color: "var(--dialog-success-bg)",
7047
+ description_background_color: "var(--dialog-success-bg)",
7048
+ header_text_color: "var(--dialog-success-fg)",
7049
+ border_color: "var(--dialog-success-fg)",
7050
+ accent_color: "var(--dialog-success-fg)",
6713
7051
  overlay_class_name: "bg-green-950/50"
6714
7052
  },
6715
7053
  warning: {
6716
- header_background_color: "rgb(253, 230, 138)",
6717
- description_background_color: "rgb(254, 249, 195)",
6718
- header_text_color: "rgb(113, 63, 18)",
6719
- border_color: "rgb(234, 179, 8)",
6720
- accent_color: "rgb(234, 179, 8)",
7054
+ header_background_color: "var(--dialog-warning-bg)",
7055
+ description_background_color: "var(--dialog-warning-bg)",
7056
+ header_text_color: "var(--dialog-warning-fg)",
7057
+ border_color: "var(--dialog-warning-fg)",
7058
+ accent_color: "var(--dialog-warning-fg)",
6721
7059
  overlay_class_name: "bg-yellow-950/50"
6722
7060
  },
6723
7061
  destructive: {
6724
- header_background_color: "rgb(254, 202, 202)",
6725
- description_background_color: "rgb(254, 226, 226)",
6726
- header_text_color: "rgb(127, 29, 29)",
6727
- border_color: "rgb(239, 68, 68)",
6728
- accent_color: "rgb(239, 68, 68)",
7062
+ header_background_color: "var(--dialog-destructive-bg)",
7063
+ description_background_color: "var(--dialog-destructive-bg)",
7064
+ header_text_color: "var(--dialog-destructive-fg)",
7065
+ border_color: "var(--dialog-destructive-fg)",
7066
+ accent_color: "var(--dialog-destructive-fg)",
6729
7067
  overlay_class_name: "bg-red-950/50",
6730
7068
  action_button_variant: "destructive"
6731
7069
  }
6732
7070
  };
7071
+ var NEUTRAL_VARIANT_PRESET = {
7072
+ header_background_color: "hsl(var(--dialog-border) / 0.12)",
7073
+ description_background_color: "hsl(var(--dialog-border) / 0.12)",
7074
+ header_text_color: "hsl(var(--dialog-fg))",
7075
+ border_color: "hsl(var(--dialog-border))",
7076
+ accent_color: "hsl(var(--dialog-border))",
7077
+ overlay_class_name: "bg-black/50"
7078
+ };
6733
7079
  function HazoUiDialog({
6734
7080
  open,
6735
7081
  onOpenChange,
@@ -6738,13 +7084,13 @@ function HazoUiDialog({
6738
7084
  onCancel,
6739
7085
  title = "Action required",
6740
7086
  description,
6741
- actionButtonText = "Confirm",
7087
+ actionButtonText: actionButtonTextProp,
6742
7088
  actionButtonVariant,
6743
7089
  cancelButtonText = "Cancel",
6744
- showCancelButton = true,
7090
+ showCancelButton: showCancelButtonProp,
6745
7091
  showActionButton = true,
6746
- closeOnConfirm = false,
6747
- actionButtonLoading = false,
7092
+ closeOnConfirm: closeOnConfirmProp,
7093
+ actionButtonLoading: actionButtonLoadingProp,
6748
7094
  actionButtonDisabled = false,
6749
7095
  actionButtonIcon,
6750
7096
  footerContent,
@@ -6764,18 +7110,46 @@ function HazoUiDialog({
6764
7110
  borderColor,
6765
7111
  accentColor,
6766
7112
  headerBar = false,
6767
- headerBarColor = "#1e293b",
7113
+ headerBarColor,
6768
7114
  className,
6769
7115
  contentClassName,
6770
7116
  overlayClassName,
6771
7117
  headerClassName,
6772
7118
  footerClassName,
6773
- showCloseButton = true
7119
+ showCloseButton = true,
7120
+ kind
6774
7121
  }) {
6775
7122
  const config = get_hazo_ui_config();
6776
- const variant_preset = variant !== "default" ? VARIANT_PRESETS[variant] : void 0;
7123
+ const is_confirm_kind = kind === "confirm";
7124
+ const is_status_kind = kind === "status";
7125
+ const [internal_confirm_loading, set_internal_confirm_loading] = React27.useState(false);
7126
+ const cancel_ref = React27.useRef(null);
7127
+ const variant_preset = variant !== "default" ? VARIANT_PRESETS[variant] : is_status_kind || is_confirm_kind ? NEUTRAL_VARIANT_PRESET : void 0;
6777
7128
  const resolved_action_button_variant = actionButtonVariant ?? variant_preset?.action_button_variant ?? "default";
7129
+ const showCancelButton = showCancelButtonProp ?? (is_status_kind ? false : true);
7130
+ const closeOnConfirm = closeOnConfirmProp ?? (is_status_kind || is_confirm_kind ? true : false);
7131
+ const actionButtonText = actionButtonTextProp ?? (is_status_kind ? "OK" : is_confirm_kind ? showCancelButton ? "Confirm" : "OK" : "Confirm");
7132
+ const actionButtonLoading = actionButtonLoadingProp ?? (is_confirm_kind ? internal_confirm_loading : false);
6778
7133
  const handleConfirm = () => {
7134
+ if (is_confirm_kind) {
7135
+ try {
7136
+ const result = onConfirm?.();
7137
+ if (result instanceof Promise) {
7138
+ if (actionButtonLoadingProp === void 0) set_internal_confirm_loading(true);
7139
+ result.then(() => {
7140
+ if (closeOnConfirm) onOpenChange?.(false);
7141
+ }).catch(() => {
7142
+ }).finally(() => {
7143
+ if (actionButtonLoadingProp === void 0) set_internal_confirm_loading(false);
7144
+ });
7145
+ return;
7146
+ }
7147
+ } catch {
7148
+ return;
7149
+ }
7150
+ if (closeOnConfirm) onOpenChange?.(false);
7151
+ return;
7152
+ }
6779
7153
  onConfirm?.();
6780
7154
  if (closeOnConfirm) {
6781
7155
  onOpenChange?.(false);
@@ -6795,12 +7169,14 @@ function HazoUiDialog({
6795
7169
  const finalHeaderBackgroundColor = headerBackgroundColor ?? variant_preset?.header_background_color ?? config.header_background_color;
6796
7170
  const finalDescriptionBgColor = descriptionBackgroundColor ?? variant_preset?.description_background_color;
6797
7171
  const finalHeaderTextColor = headerTextColor ?? variant_preset?.header_text_color ?? config.header_text_color;
6798
- const is_variant_active = variant !== "default";
7172
+ const is_variant_active = variant !== "default" || is_status_kind;
6799
7173
  const has_split_header = splitHeader && !headerBar && !!finalDescriptionBgColor && !!description;
6800
7174
  const has_merged_variant_header = !splitHeader && is_variant_active && !headerBar && !!description;
7175
+ const resolvedHeaderBarColor = headerBarColor ?? (variant !== "default" && variant_preset ? variant_preset.header_text_color : "var(--dialog-header-bar-bg)");
6801
7176
  const headerStyles = {
6802
7177
  ...headerBar && {
6803
- backgroundColor: headerBarColor,
7178
+ backgroundColor: resolvedHeaderBarColor,
7179
+ color: "var(--dialog-header-bar-fg)",
6804
7180
  paddingTop: compact ? "0.625rem" : "1.5rem",
6805
7181
  paddingBottom: compact ? "0.625rem" : "1.5rem",
6806
7182
  paddingLeft: "1.5rem",
@@ -6810,15 +7186,19 @@ function HazoUiDialog({
6810
7186
  ...!has_split_header && finalHeaderTextColor && { color: finalHeaderTextColor }
6811
7187
  };
6812
7188
  const titleClassName = cn(
6813
- "cls_dialog_title",
6814
- headerBar && "!text-white"
7189
+ "cls_dialog_title"
6815
7190
  );
6816
7191
  const descriptionClassName = cn(
6817
- "cls_dialog_description",
6818
- headerBar && "!text-white/80"
7192
+ "cls_dialog_description"
6819
7193
  );
6820
7194
  const bodyStyles = {
6821
- ...bodyBackgroundColor && { backgroundColor: bodyBackgroundColor }
7195
+ ...bodyBackgroundColor && { backgroundColor: bodyBackgroundColor },
7196
+ // kind="form" gets a comfortable body/label typography scale via the
7197
+ // hazo_theme --dialog-body-size token. --dialog-label-size is intentionally
7198
+ // not re-applied here: CSS custom properties inherit, so a consumer's own
7199
+ // <label> elements inside `children` can reference var(--dialog-label-size)
7200
+ // directly without any extra plumbing from this component.
7201
+ ...kind === "form" && { fontSize: "var(--dialog-body-size)" }
6822
7202
  };
6823
7203
  const footerStyles = {
6824
7204
  ...footerBackgroundColor && { backgroundColor: footerBackgroundColor }
@@ -6842,6 +7222,86 @@ function HazoUiDialog({
6842
7222
  ...finalCancelTextColor && { color: finalCancelTextColor },
6843
7223
  ...finalCancelBorderColor && { borderColor: finalCancelBorderColor }
6844
7224
  };
7225
+ if (is_confirm_kind) {
7226
+ const top_border_color = resolved_border_color ?? "hsl(var(--dialog-border))";
7227
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPortal, { children: [
7228
+ /* @__PURE__ */ jsx(
7229
+ DialogOverlay,
7230
+ {
7231
+ className: cn(
7232
+ "cls_confirm_dialog_overlay",
7233
+ overlayClassName ?? variant_preset?.overlay_class_name
7234
+ ),
7235
+ style: { backdropFilter: "blur(4px)" }
7236
+ }
7237
+ ),
7238
+ /* @__PURE__ */ jsxs(
7239
+ DialogPrimitive.Content,
7240
+ {
7241
+ className: cn(
7242
+ "cls_confirm_dialog_content",
7243
+ "fixed left-[50%] top-[50%] z-50",
7244
+ "translate-x-[-50%] translate-y-[-50%]",
7245
+ "bg-background shadow-lg",
7246
+ "duration-200",
7247
+ animationClasses,
7248
+ "overflow-hidden",
7249
+ className
7250
+ ),
7251
+ style: {
7252
+ width: "min(90vw, 420px)",
7253
+ borderRadius: "12px",
7254
+ borderTop: `4px solid ${top_border_color}`,
7255
+ boxShadow: "0 20px 60px rgba(0,0,0,0.15)",
7256
+ outline: "none"
7257
+ },
7258
+ onOpenAutoFocus: (e) => {
7259
+ if ((variant === "destructive" || variant === "warning") && showCancelButton && cancel_ref.current) {
7260
+ e.preventDefault();
7261
+ cancel_ref.current.focus();
7262
+ }
7263
+ },
7264
+ children: [
7265
+ /* @__PURE__ */ jsxs("div", { className: "cls_confirm_dialog_body px-6 pt-7 pb-5", children: [
7266
+ /* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5", children: title }),
7267
+ children ? /* @__PURE__ */ jsx(DialogPrimitive.Description, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "cls_confirm_dialog_children text-sm text-muted-foreground leading-relaxed", children }) }) : description ? /* @__PURE__ */ jsx(DialogPrimitive.Description, { className: "cls_confirm_dialog_description text-sm text-muted-foreground leading-relaxed", children: description }) : null
7268
+ ] }),
7269
+ /* @__PURE__ */ jsx("div", { className: "cls_confirm_dialog_separator border-t border-border" }),
7270
+ /* @__PURE__ */ jsxs("div", { className: "cls_confirm_dialog_actions px-6 py-4 flex justify-end gap-3", children: [
7271
+ showCancelButton && /* @__PURE__ */ jsx(
7272
+ Button,
7273
+ {
7274
+ ref: cancel_ref,
7275
+ type: "button",
7276
+ className: "cls_confirm_cancel_button focus-visible:ring-0 focus-visible:ring-offset-0",
7277
+ variant: "outline",
7278
+ onClick: handleCancel,
7279
+ disabled: actionButtonLoading,
7280
+ style: cancelButtonStyles,
7281
+ children: cancelButtonText
7282
+ }
7283
+ ),
7284
+ showActionButton && /* @__PURE__ */ jsxs(
7285
+ Button,
7286
+ {
7287
+ type: "button",
7288
+ className: "cls_confirm_action_button",
7289
+ variant: resolved_action_button_variant,
7290
+ onClick: handleConfirm,
7291
+ disabled: actionButtonLoading || actionButtonDisabled,
7292
+ style: actionButtonStyles,
7293
+ children: [
7294
+ actionButtonLoading && /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
7295
+ actionButtonText
7296
+ ]
7297
+ }
7298
+ )
7299
+ ] })
7300
+ ]
7301
+ }
7302
+ )
7303
+ ] }) });
7304
+ }
6845
7305
  return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPortal, { children: [
6846
7306
  /* @__PURE__ */ jsx(
6847
7307
  DialogOverlay,
@@ -6916,10 +7376,17 @@ function HazoUiDialog({
6916
7376
  style: headerStyles,
6917
7377
  children: [
6918
7378
  /* @__PURE__ */ jsx(DialogTitle, { className: titleClassName, children: title }),
6919
- description && /* @__PURE__ */ jsx(DialogDescription, { className: cn(
6920
- descriptionClassName,
6921
- has_merged_variant_header && "italic text-xs mt-1"
6922
- ), children: description })
7379
+ description && /* @__PURE__ */ jsx(
7380
+ DialogDescription,
7381
+ {
7382
+ className: cn(
7383
+ descriptionClassName,
7384
+ has_merged_variant_header && "italic text-xs mt-1"
7385
+ ),
7386
+ style: headerBar ? { opacity: 0.8 } : void 0,
7387
+ children: description
7388
+ }
7389
+ )
6923
7390
  ]
6924
7391
  }
6925
7392
  )
@@ -6985,7 +7452,7 @@ function HazoUiDialog({
6985
7452
  DialogPrimitive.Close,
6986
7453
  {
6987
7454
  className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
6988
- style: headerBar ? { color: "white" } : finalHeaderTextColor ? { color: finalHeaderTextColor } : void 0,
7455
+ style: headerBar ? { color: "var(--dialog-header-bar-fg)" } : finalHeaderTextColor ? { color: finalHeaderTextColor } : void 0,
6989
7456
  children: [
6990
7457
  /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
6991
7458
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
@@ -6997,28 +7464,6 @@ function HazoUiDialog({
6997
7464
  )
6998
7465
  ] }) });
6999
7466
  }
7000
- var CONFIRM_VARIANT_PRESETS = {
7001
- destructive: {
7002
- accent_color: "rgb(220, 38, 38)",
7003
- confirm_button_color: "rgb(220, 38, 38)",
7004
- overlay_class_name: "bg-red-950/50"
7005
- },
7006
- warning: {
7007
- accent_color: "rgb(245, 158, 11)",
7008
- confirm_button_color: "rgb(245, 158, 11)",
7009
- overlay_class_name: "bg-yellow-950/50"
7010
- },
7011
- info: {
7012
- accent_color: "rgb(37, 99, 235)",
7013
- confirm_button_color: "rgb(37, 99, 235)",
7014
- overlay_class_name: "bg-blue-950/50"
7015
- },
7016
- success: {
7017
- accent_color: "rgb(22, 163, 74)",
7018
- confirm_button_color: "rgb(22, 163, 74)",
7019
- overlay_class_name: "bg-green-950/50"
7020
- }
7021
- };
7022
7467
  function HazoUiConfirmDialog({
7023
7468
  open,
7024
7469
  onOpenChange,
@@ -7031,128 +7476,39 @@ function HazoUiConfirmDialog({
7031
7476
  showCancelButton = true,
7032
7477
  onConfirm,
7033
7478
  onCancel,
7034
- loading: external_loading,
7479
+ loading,
7035
7480
  disabled = false,
7036
7481
  accentColor,
7037
7482
  confirmButtonColor,
7038
7483
  openAnimation = "zoom",
7039
7484
  closeAnimation = "zoom"
7040
7485
  }) {
7041
- const [internal_loading, set_internal_loading] = React26.useState(false);
7042
- const config = get_hazo_ui_config();
7043
- const variant_preset = variant !== "default" ? CONFIRM_VARIANT_PRESETS[variant] : void 0;
7044
- const is_loading = external_loading ?? internal_loading;
7045
- const resolved_confirm_label = confirmLabel ?? (showCancelButton ? "Confirm" : "OK");
7046
- const resolved_accent_color = accentColor ?? variant_preset?.accent_color ?? "rgb(148, 163, 184)";
7047
- const resolved_confirm_button_color = confirmButtonColor ?? variant_preset?.confirm_button_color ?? config.submit_button_background_color;
7048
- const cancel_button_styles = {
7049
- ...config.cancel_button_background_color && { backgroundColor: config.cancel_button_background_color },
7050
- ...config.cancel_button_text_color && { color: config.cancel_button_text_color },
7051
- ...config.cancel_button_border_color && { borderColor: config.cancel_button_border_color }
7052
- };
7053
- const confirm_button_styles = {
7054
- ...resolved_confirm_button_color && {
7055
- backgroundColor: resolved_confirm_button_color,
7056
- borderColor: resolved_confirm_button_color,
7057
- color: "white"
7058
- }
7059
- };
7060
- const animation_classes = resolve_animation_classes(openAnimation, closeAnimation);
7061
- const handle_confirm = async () => {
7062
- try {
7063
- const result = onConfirm();
7064
- if (result instanceof Promise) {
7065
- set_internal_loading(true);
7066
- await result;
7067
- }
7068
- onOpenChange(false);
7069
- } catch {
7070
- } finally {
7071
- set_internal_loading(false);
7486
+ const resolved_accent_color = confirmButtonColor ?? accentColor;
7487
+ return /* @__PURE__ */ jsx(
7488
+ HazoUiDialog,
7489
+ {
7490
+ kind: "confirm",
7491
+ open,
7492
+ onOpenChange,
7493
+ title,
7494
+ description,
7495
+ variant,
7496
+ actionButtonText: confirmLabel,
7497
+ cancelButtonText: cancelLabel,
7498
+ showCancelButton,
7499
+ onConfirm,
7500
+ onCancel,
7501
+ actionButtonLoading: loading,
7502
+ actionButtonDisabled: disabled,
7503
+ accentColor: resolved_accent_color,
7504
+ openAnimation,
7505
+ closeAnimation,
7506
+ closeOnConfirm: true,
7507
+ children
7072
7508
  }
7073
- };
7074
- const handle_cancel = () => {
7075
- onCancel?.();
7076
- onOpenChange(false);
7077
- };
7078
- const cancel_ref = React26.useRef(null);
7079
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogPortal, { children: [
7080
- /* @__PURE__ */ jsx(
7081
- DialogOverlay,
7082
- {
7083
- className: cn(
7084
- "cls_confirm_dialog_overlay",
7085
- variant_preset?.overlay_class_name
7086
- ),
7087
- style: { backdropFilter: "blur(4px)" }
7088
- }
7089
- ),
7090
- /* @__PURE__ */ jsxs(
7091
- DialogPrimitive.Content,
7092
- {
7093
- className: cn(
7094
- "cls_confirm_dialog_content",
7095
- "fixed left-[50%] top-[50%] z-50",
7096
- "translate-x-[-50%] translate-y-[-50%]",
7097
- "bg-background shadow-lg",
7098
- "duration-200",
7099
- animation_classes,
7100
- "overflow-hidden"
7101
- ),
7102
- style: {
7103
- width: "min(90vw, 420px)",
7104
- borderRadius: "12px",
7105
- borderTop: `4px solid ${resolved_accent_color}`,
7106
- boxShadow: "0 20px 60px rgba(0,0,0,0.15)",
7107
- outline: "none"
7108
- },
7109
- onOpenAutoFocus: (e) => {
7110
- if ((variant === "destructive" || variant === "warning") && showCancelButton && cancel_ref.current) {
7111
- e.preventDefault();
7112
- cancel_ref.current.focus();
7113
- }
7114
- },
7115
- children: [
7116
- /* @__PURE__ */ jsxs("div", { className: "cls_confirm_dialog_body px-6 pt-7 pb-5", children: [
7117
- /* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5", children: title }),
7118
- children ? /* @__PURE__ */ jsx(DialogPrimitive.Description, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "cls_confirm_dialog_children text-sm text-muted-foreground leading-relaxed", children }) }) : description ? /* @__PURE__ */ jsx(DialogPrimitive.Description, { className: "cls_confirm_dialog_description text-sm text-muted-foreground leading-relaxed", children: description }) : null
7119
- ] }),
7120
- /* @__PURE__ */ jsx("div", { className: "cls_confirm_dialog_separator border-t border-border" }),
7121
- /* @__PURE__ */ jsxs("div", { className: "cls_confirm_dialog_actions px-6 py-4 flex justify-end gap-3", children: [
7122
- showCancelButton && /* @__PURE__ */ jsx(
7123
- Button,
7124
- {
7125
- ref: cancel_ref,
7126
- type: "button",
7127
- className: "cls_confirm_cancel_button focus-visible:ring-0 focus-visible:ring-offset-0",
7128
- variant: "outline",
7129
- onClick: handle_cancel,
7130
- disabled: is_loading,
7131
- style: cancel_button_styles,
7132
- children: cancelLabel
7133
- }
7134
- ),
7135
- /* @__PURE__ */ jsxs(
7136
- Button,
7137
- {
7138
- type: "button",
7139
- className: "cls_confirm_action_button",
7140
- onClick: handle_confirm,
7141
- disabled: is_loading || disabled,
7142
- style: confirm_button_styles,
7143
- children: [
7144
- is_loading && /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
7145
- resolved_confirm_label
7146
- ]
7147
- }
7148
- )
7149
- ] })
7150
- ]
7151
- }
7152
- )
7153
- ] }) });
7509
+ );
7154
7510
  }
7155
- var Slider = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
7511
+ var Slider = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
7156
7512
  SliderPrimitive.Root,
7157
7513
  {
7158
7514
  ref,
@@ -7205,7 +7561,7 @@ async function getCroppedImg(imageSrc, areaPixels, outputSize, quality) {
7205
7561
  );
7206
7562
  });
7207
7563
  }
7208
- var HazoUiImageCropper = React26.forwardRef(function HazoUiImageCropper2({
7564
+ var HazoUiImageCropper = React27.forwardRef(function HazoUiImageCropper2({
7209
7565
  imageSrc,
7210
7566
  onCropped,
7211
7567
  outputSize = 512,
@@ -7213,19 +7569,19 @@ var HazoUiImageCropper = React26.forwardRef(function HazoUiImageCropper2({
7213
7569
  zoomLabel = "Zoom",
7214
7570
  className
7215
7571
  }, ref) {
7216
- const [crop, set_crop] = React26.useState({
7572
+ const [crop, set_crop] = React27.useState({
7217
7573
  x: 0,
7218
7574
  y: 0
7219
7575
  });
7220
- const [zoom, set_zoom] = React26.useState(1);
7221
- const cropped_area_pixels_ref = React26.useRef(null);
7222
- const handle_crop_complete = React26.useCallback(
7576
+ const [zoom, set_zoom] = React27.useState(1);
7577
+ const cropped_area_pixels_ref = React27.useRef(null);
7578
+ const handle_crop_complete = React27.useCallback(
7223
7579
  (_croppedArea, croppedAreaPixels) => {
7224
7580
  cropped_area_pixels_ref.current = croppedAreaPixels;
7225
7581
  },
7226
7582
  []
7227
7583
  );
7228
- React26.useImperativeHandle(
7584
+ React27.useImperativeHandle(
7229
7585
  ref,
7230
7586
  () => ({
7231
7587
  getCroppedBlob: async () => {
@@ -7305,10 +7661,10 @@ function HazoUiImageCropperDialog({
7305
7661
  outputSize = 512,
7306
7662
  quality = 0.9
7307
7663
  }) {
7308
- const cropper_ref = React26.useRef(null);
7309
- const [image_src, set_image_src] = React26.useState(null);
7310
- const [is_confirming, set_is_confirming] = React26.useState(false);
7311
- React26.useEffect(() => {
7664
+ const cropper_ref = React27.useRef(null);
7665
+ const [image_src, set_image_src] = React27.useState(null);
7666
+ const [is_confirming, set_is_confirming] = React27.useState(false);
7667
+ React27.useEffect(() => {
7312
7668
  if (!file) {
7313
7669
  set_image_src(null);
7314
7670
  return;
@@ -7364,7 +7720,7 @@ Drawer.displayName = "Drawer";
7364
7720
  var DrawerTrigger = Drawer$1.Trigger;
7365
7721
  var DrawerPortal = Drawer$1.Portal;
7366
7722
  var DrawerClose = Drawer$1.Close;
7367
- var DrawerOverlay = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7723
+ var DrawerOverlay = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7368
7724
  Drawer$1.Overlay,
7369
7725
  {
7370
7726
  ref,
@@ -7376,7 +7732,7 @@ var DrawerOverlay = React26.forwardRef(({ className, ...props }, ref) => /* @__P
7376
7732
  }
7377
7733
  ));
7378
7734
  DrawerOverlay.displayName = "DrawerOverlay";
7379
- var DrawerContent = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DrawerPortal, { children: [
7735
+ var DrawerContent = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DrawerPortal, { children: [
7380
7736
  /* @__PURE__ */ jsx(DrawerOverlay, {}),
7381
7737
  /* @__PURE__ */ jsxs(
7382
7738
  Drawer$1.Content,
@@ -7417,7 +7773,7 @@ var DrawerFooter = ({
7417
7773
  }
7418
7774
  );
7419
7775
  DrawerFooter.displayName = "DrawerFooter";
7420
- var DrawerTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7776
+ var DrawerTitle = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7421
7777
  Drawer$1.Title,
7422
7778
  {
7423
7779
  ref,
@@ -7429,7 +7785,7 @@ var DrawerTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PUR
7429
7785
  }
7430
7786
  ));
7431
7787
  DrawerTitle.displayName = "DrawerTitle";
7432
- var DrawerDescription = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7788
+ var DrawerDescription = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7433
7789
  Drawer$1.Description,
7434
7790
  {
7435
7791
  ref,
@@ -7439,14 +7795,14 @@ var DrawerDescription = React26.forwardRef(({ className, ...props }, ref) => /*
7439
7795
  ));
7440
7796
  DrawerDescription.displayName = "DrawerDescription";
7441
7797
  function useMediaQuery(query) {
7442
- const get_match = React26.useCallback(() => {
7798
+ const get_match = React27.useCallback(() => {
7443
7799
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
7444
7800
  return false;
7445
7801
  }
7446
7802
  return window.matchMedia(query).matches;
7447
7803
  }, [query]);
7448
- const [matches, set_matches] = React26.useState(false);
7449
- React26.useEffect(() => {
7804
+ const [matches, set_matches] = React27.useState(false);
7805
+ React27.useEffect(() => {
7450
7806
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
7451
7807
  return;
7452
7808
  }
@@ -7463,7 +7819,7 @@ function useMediaQuery(query) {
7463
7819
  return matches;
7464
7820
  }
7465
7821
  var Accordion = AccordionPrimitive.Root;
7466
- var AccordionItem = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7822
+ var AccordionItem = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7467
7823
  AccordionPrimitive.Item,
7468
7824
  {
7469
7825
  ref,
@@ -7472,7 +7828,7 @@ var AccordionItem = React26.forwardRef(({ className, ...props }, ref) => /* @__P
7472
7828
  }
7473
7829
  ));
7474
7830
  AccordionItem.displayName = "AccordionItem";
7475
- var AccordionTrigger = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
7831
+ var AccordionTrigger = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
7476
7832
  AccordionPrimitive.Trigger,
7477
7833
  {
7478
7834
  ref,
@@ -7488,7 +7844,7 @@ var AccordionTrigger = React26.forwardRef(({ className, children, ...props }, re
7488
7844
  }
7489
7845
  ) }));
7490
7846
  AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
7491
- var AccordionContent = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
7847
+ var AccordionContent = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
7492
7848
  AccordionPrimitive.Content,
7493
7849
  {
7494
7850
  ref,
@@ -7498,7 +7854,7 @@ var AccordionContent = React26.forwardRef(({ className, children, ...props }, re
7498
7854
  }
7499
7855
  ));
7500
7856
  AccordionContent.displayName = AccordionPrimitive.Content.displayName;
7501
- var Checkbox = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7857
+ var Checkbox = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7502
7858
  CheckboxPrimitive.Root,
7503
7859
  {
7504
7860
  ref,
@@ -7523,7 +7879,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
7523
7879
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
7524
7880
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
7525
7881
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
7526
- var DropdownMenuSubTrigger = React26.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
7882
+ var DropdownMenuSubTrigger = React27.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
7527
7883
  DropdownMenuPrimitive.SubTrigger,
7528
7884
  {
7529
7885
  ref,
@@ -7540,7 +7896,7 @@ var DropdownMenuSubTrigger = React26.forwardRef(({ className, inset, children, .
7540
7896
  }
7541
7897
  ));
7542
7898
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
7543
- var DropdownMenuSubContent = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7899
+ var DropdownMenuSubContent = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7544
7900
  DropdownMenuPrimitive.SubContent,
7545
7901
  {
7546
7902
  ref,
@@ -7552,7 +7908,7 @@ var DropdownMenuSubContent = React26.forwardRef(({ className, ...props }, ref) =
7552
7908
  }
7553
7909
  ));
7554
7910
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
7555
- var DropdownMenuContent = React26.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
7911
+ var DropdownMenuContent = React27.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
7556
7912
  DropdownMenuPrimitive.Content,
7557
7913
  {
7558
7914
  ref,
@@ -7565,7 +7921,7 @@ var DropdownMenuContent = React26.forwardRef(({ className, sideOffset = 4, ...pr
7565
7921
  }
7566
7922
  ) }));
7567
7923
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
7568
- var DropdownMenuItem = React26.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
7924
+ var DropdownMenuItem = React27.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
7569
7925
  DropdownMenuPrimitive.Item,
7570
7926
  {
7571
7927
  ref,
@@ -7578,7 +7934,7 @@ var DropdownMenuItem = React26.forwardRef(({ className, inset, ...props }, ref)
7578
7934
  }
7579
7935
  ));
7580
7936
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
7581
- var DropdownMenuCheckboxItem = React26.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
7937
+ var DropdownMenuCheckboxItem = React27.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
7582
7938
  DropdownMenuPrimitive.CheckboxItem,
7583
7939
  {
7584
7940
  ref,
@@ -7595,7 +7951,7 @@ var DropdownMenuCheckboxItem = React26.forwardRef(({ className, children, checke
7595
7951
  }
7596
7952
  ));
7597
7953
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
7598
- var DropdownMenuRadioItem = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
7954
+ var DropdownMenuRadioItem = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
7599
7955
  DropdownMenuPrimitive.RadioItem,
7600
7956
  {
7601
7957
  ref,
@@ -7611,7 +7967,7 @@ var DropdownMenuRadioItem = React26.forwardRef(({ className, children, ...props
7611
7967
  }
7612
7968
  ));
7613
7969
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
7614
- var DropdownMenuLabel = React26.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
7970
+ var DropdownMenuLabel = React27.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
7615
7971
  DropdownMenuPrimitive.Label,
7616
7972
  {
7617
7973
  ref,
@@ -7624,7 +7980,7 @@ var DropdownMenuLabel = React26.forwardRef(({ className, inset, ...props }, ref)
7624
7980
  }
7625
7981
  ));
7626
7982
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
7627
- var DropdownMenuSeparator = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7983
+ var DropdownMenuSeparator = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7628
7984
  DropdownMenuPrimitive.Separator,
7629
7985
  {
7630
7986
  ref,
@@ -7648,7 +8004,7 @@ var DropdownMenuShortcut = ({
7648
8004
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
7649
8005
  var HoverCard = HoverCardPrimitive.Root;
7650
8006
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
7651
- var HoverCardContent = React26.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
8007
+ var HoverCardContent = React27.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
7652
8008
  HoverCardPrimitive.Content,
7653
8009
  {
7654
8010
  ref,
@@ -7662,7 +8018,7 @@ var HoverCardContent = React26.forwardRef(({ className, align = "center", sideOf
7662
8018
  }
7663
8019
  ));
7664
8020
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
7665
- var Label3 = React26.forwardRef(
8021
+ var Label3 = React27.forwardRef(
7666
8022
  ({ className, ...props }, ref) => {
7667
8023
  return /* @__PURE__ */ jsx(
7668
8024
  "label",
@@ -7678,7 +8034,7 @@ var Label3 = React26.forwardRef(
7678
8034
  }
7679
8035
  );
7680
8036
  Label3.displayName = "Label";
7681
- var Switch = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8037
+ var Switch = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7682
8038
  SwitchPrimitives.Root,
7683
8039
  {
7684
8040
  className: cn(
@@ -7698,7 +8054,7 @@ var Switch = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
7698
8054
  }
7699
8055
  ));
7700
8056
  Switch.displayName = SwitchPrimitives.Root.displayName;
7701
- var Textarea = React26.forwardRef(
8057
+ var Textarea = React27.forwardRef(
7702
8058
  ({ className, ...props }, ref) => {
7703
8059
  return /* @__PURE__ */ jsx(
7704
8060
  "textarea",
@@ -7718,7 +8074,7 @@ var Textarea = React26.forwardRef(
7718
8074
  }
7719
8075
  );
7720
8076
  Textarea.displayName = "Textarea";
7721
- var Separator3 = React26.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
8077
+ var Separator3 = React27.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
7722
8078
  SeparatorPrimitive.Root,
7723
8079
  {
7724
8080
  ref,
@@ -7736,7 +8092,7 @@ Separator3.displayName = SeparatorPrimitive.Root.displayName;
7736
8092
  var Collapsible = CollapsiblePrimitive.Root;
7737
8093
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
7738
8094
  var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
7739
- var ScrollArea = React26.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
8095
+ var ScrollArea = React27.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
7740
8096
  ScrollAreaPrimitive.Root,
7741
8097
  {
7742
8098
  ref,
@@ -7750,7 +8106,7 @@ var ScrollArea = React26.forwardRef(({ className, children, ...props }, ref) =>
7750
8106
  }
7751
8107
  ));
7752
8108
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
7753
- var ScrollBar = React26.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx(
8109
+ var ScrollBar = React27.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx(
7754
8110
  ScrollAreaPrimitive.ScrollAreaScrollbar,
7755
8111
  {
7756
8112
  ref,
@@ -7766,27 +8122,27 @@ var ScrollBar = React26.forwardRef(({ className, orientation = "vertical", ...pr
7766
8122
  }
7767
8123
  ));
7768
8124
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
7769
- var Card = React26.forwardRef(
8125
+ var Card = React27.forwardRef(
7770
8126
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("rounded-lg border bg-card text-card-foreground shadow-sm", className), ...props })
7771
8127
  );
7772
8128
  Card.displayName = "Card";
7773
- var CardHeader = React26.forwardRef(
8129
+ var CardHeader = React27.forwardRef(
7774
8130
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
7775
8131
  );
7776
8132
  CardHeader.displayName = "CardHeader";
7777
- var CardTitle = React26.forwardRef(
8133
+ var CardTitle = React27.forwardRef(
7778
8134
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
7779
8135
  );
7780
8136
  CardTitle.displayName = "CardTitle";
7781
- var CardDescription = React26.forwardRef(
8137
+ var CardDescription = React27.forwardRef(
7782
8138
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
7783
8139
  );
7784
8140
  CardDescription.displayName = "CardDescription";
7785
- var CardContent = React26.forwardRef(
8141
+ var CardContent = React27.forwardRef(
7786
8142
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props })
7787
8143
  );
7788
8144
  CardContent.displayName = "CardContent";
7789
- var CardFooter = React26.forwardRef(
8145
+ var CardFooter = React27.forwardRef(
7790
8146
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
7791
8147
  );
7792
8148
  CardFooter.displayName = "CardFooter";
@@ -7819,16 +8175,16 @@ var toggleVariants = cva(
7819
8175
  defaultVariants: { variant: "default", size: "default" }
7820
8176
  }
7821
8177
  );
7822
- var Toggle = React26.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx(TogglePrimitive.Root, { ref, className: cn(toggleVariants({ variant, size, className })), ...props }));
8178
+ var Toggle = React27.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx(TogglePrimitive.Root, { ref, className: cn(toggleVariants({ variant, size, className })), ...props }));
7823
8179
  Toggle.displayName = TogglePrimitive.Root.displayName;
7824
- var ToggleGroupContext = React26.createContext({
8180
+ var ToggleGroupContext = React27.createContext({
7825
8181
  size: "default",
7826
8182
  variant: "default"
7827
8183
  });
7828
- var ToggleGroup = React26.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx(ToggleGroupPrimitive.Root, { ref, className: cn("flex items-center justify-center gap-1", className), ...props, children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size }, children }) }));
8184
+ var ToggleGroup = React27.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx(ToggleGroupPrimitive.Root, { ref, className: cn("flex items-center justify-center gap-1", className), ...props, children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size }, children }) }));
7829
8185
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
7830
- var ToggleGroupItem = React26.forwardRef(({ className, children, variant, size, ...props }, ref) => {
7831
- const context = React26.useContext(ToggleGroupContext);
8186
+ var ToggleGroupItem = React27.forwardRef(({ className, children, variant, size, ...props }, ref) => {
8187
+ const context = React27.useContext(ToggleGroupContext);
7832
8188
  return /* @__PURE__ */ jsx(
7833
8189
  ToggleGroupPrimitive.Item,
7834
8190
  {
@@ -7843,7 +8199,7 @@ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
7843
8199
  var AlertDialog = AlertDialogPrimitive.Root;
7844
8200
  var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
7845
8201
  var AlertDialogPortal = AlertDialogPrimitive.Portal;
7846
- var AlertDialogOverlay = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8202
+ var AlertDialogOverlay = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7847
8203
  AlertDialogPrimitive.Overlay,
7848
8204
  {
7849
8205
  ref,
@@ -7852,7 +8208,7 @@ var AlertDialogOverlay = React26.forwardRef(({ className, ...props }, ref) => /*
7852
8208
  }
7853
8209
  ));
7854
8210
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
7855
- var AlertDialogContent = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
8211
+ var AlertDialogContent = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
7856
8212
  /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
7857
8213
  /* @__PURE__ */ jsx(
7858
8214
  AlertDialogPrimitive.Content,
@@ -7868,13 +8224,13 @@ var AlertDialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div",
7868
8224
  AlertDialogHeader.displayName = "AlertDialogHeader";
7869
8225
  var AlertDialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
7870
8226
  AlertDialogFooter.displayName = "AlertDialogFooter";
7871
- var AlertDialogTitle = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Title, { ref, className: cn("text-lg font-semibold", className), ...props }));
8227
+ var AlertDialogTitle = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Title, { ref, className: cn("text-lg font-semibold", className), ...props }));
7872
8228
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
7873
- var AlertDialogDescription = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
8229
+ var AlertDialogDescription = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
7874
8230
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
7875
- var AlertDialogAction = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Action, { ref, className: cn(buttonVariants(), className), ...props }));
8231
+ var AlertDialogAction = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Action, { ref, className: cn(buttonVariants(), className), ...props }));
7876
8232
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
7877
- var AlertDialogCancel = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Cancel, { ref, className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className), ...props }));
8233
+ var AlertDialogCancel = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(AlertDialogPrimitive.Cancel, { ref, className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className), ...props }));
7878
8234
  AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
7879
8235
  var buttonGroupVariants = cva(
7880
8236
  "flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10",
@@ -7902,7 +8258,7 @@ function ButtonGroupText({ className, asChild = false, ...props }) {
7902
8258
  function ButtonGroupSeparator({ className, orientation = "vertical", ...props }) {
7903
8259
  return /* @__PURE__ */ jsx(Separator3, { orientation, className: cn("bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto", className), ...props });
7904
8260
  }
7905
- var InputAffix = React26.forwardRef(
8261
+ var InputAffix = React27.forwardRef(
7906
8262
  ({ className, containerClassName, prefix, suffix, type = "text", ...props }, ref) => {
7907
8263
  return /* @__PURE__ */ jsxs(
7908
8264
  "div",
@@ -7934,7 +8290,7 @@ var InputAffix = React26.forwardRef(
7934
8290
  }
7935
8291
  );
7936
8292
  InputAffix.displayName = "InputAffix";
7937
- var SkeletonBase = React26.forwardRef(
8293
+ var SkeletonBase = React27.forwardRef(
7938
8294
  ({ className, ...rest }, ref) => /* @__PURE__ */ jsx(
7939
8295
  "div",
7940
8296
  {
@@ -8110,8 +8466,8 @@ function LoadingTimeout({
8110
8466
  firm: thresholds?.firm ?? 15e3,
8111
8467
  expired: thresholds?.expired ?? 3e4
8112
8468
  };
8113
- const [phase, setPhase] = React26.useState(active ? "silent" : "idle");
8114
- React26.useEffect(() => {
8469
+ const [phase, setPhase] = React27.useState(active ? "silent" : "idle");
8470
+ React27.useEffect(() => {
8115
8471
  if (!active) {
8116
8472
  setPhase("idle");
8117
8473
  return;
@@ -8170,7 +8526,7 @@ function ProgressiveImage({
8170
8526
  onLoad,
8171
8527
  onError
8172
8528
  }) {
8173
- const [loaded, setLoaded] = React26.useState(false);
8529
+ const [loaded, setLoaded] = React27.useState(false);
8174
8530
  return /* @__PURE__ */ jsxs(
8175
8531
  "div",
8176
8532
  {
@@ -8323,7 +8679,7 @@ function NotificationPanel({
8323
8679
  loading = false,
8324
8680
  className
8325
8681
  }) {
8326
- const hasChildren = React26.Children.count(children) > 0 && children !== null && children !== void 0;
8682
+ const hasChildren = React27.Children.count(children) > 0 && children !== null && children !== void 0;
8327
8683
  return /* @__PURE__ */ jsxs(
8328
8684
  "div",
8329
8685
  {
@@ -8674,6 +9030,9 @@ function KanbanCard({
8674
9030
  tabIndex: 0,
8675
9031
  "aria-roledescription": "draggable card",
8676
9032
  "aria-grabbed": isDragging,
9033
+ onDoubleClick: () => {
9034
+ if (showEdit && onEditRequest && !dragging) onEditRequest(item);
9035
+ },
8677
9036
  children: [
8678
9037
  showEdit && onEditRequest && !dragging && /* @__PURE__ */ jsx(
8679
9038
  "button",
@@ -8780,29 +9139,29 @@ function KanbanEditor({
8780
9139
  onSave,
8781
9140
  onClose
8782
9141
  }) {
8783
- const [draft, set_draft] = React26.useState(item);
8784
- const [saving, set_saving] = React26.useState(false);
8785
- const [error, set_error] = React26.useState(null);
9142
+ const [draft, set_draft] = React27.useState(item);
9143
+ const [saving, set_saving] = React27.useState(false);
9144
+ const [error, set_error] = React27.useState(null);
8786
9145
  const item_id = item?.id ?? null;
8787
- React26.useEffect(() => {
9146
+ React27.useEffect(() => {
8788
9147
  set_draft(item);
8789
9148
  set_error(null);
8790
9149
  set_saving(false);
8791
9150
  }, [item_id]);
8792
9151
  const resolved_columns = columns ?? [];
8793
9152
  const resolved_priorities = priorities ?? DEFAULT_PRIORITIES;
8794
- const resolved_fields = React26.useMemo(() => {
9153
+ const resolved_fields = React27.useMemo(() => {
8795
9154
  if (fields) return fields;
8796
9155
  if (!item) return [];
8797
9156
  return auto_detect_fields(item, resolved_columns);
8798
9157
  }, [fields, item, resolved_columns]);
8799
- const required_keys = React26.useMemo(
9158
+ const required_keys = React27.useMemo(
8800
9159
  () => resolved_fields.filter(
8801
9160
  (f) => f.required && (f.type === "text" || f.type === "textarea" || f.type === "number")
8802
9161
  ).map((f) => f.key),
8803
9162
  [resolved_fields]
8804
9163
  );
8805
- const all_required_filled = React26.useMemo(() => {
9164
+ const all_required_filled = React27.useMemo(() => {
8806
9165
  if (!draft) return false;
8807
9166
  for (const key of required_keys) {
8808
9167
  const v = draft[key];
@@ -8811,7 +9170,7 @@ function KanbanEditor({
8811
9170
  }
8812
9171
  return true;
8813
9172
  }, [draft, required_keys]);
8814
- const is_dirty = React26.useMemo(() => {
9173
+ const is_dirty = React27.useMemo(() => {
8815
9174
  if (!draft || !item) return false;
8816
9175
  try {
8817
9176
  return JSON.stringify(draft) !== JSON.stringify(item);
@@ -8819,7 +9178,7 @@ function KanbanEditor({
8819
9178
  return draft !== item;
8820
9179
  }
8821
9180
  }, [draft, item]);
8822
- const handle_save = React26.useCallback(async () => {
9181
+ const handle_save = React27.useCallback(async () => {
8823
9182
  if (!draft || !item) return;
8824
9183
  if (saving) return;
8825
9184
  set_error(null);
@@ -8944,6 +9303,15 @@ function KanbanEditorFieldRow({
8944
9303
  onChange: (e) => set_value(e.target.value)
8945
9304
  }
8946
9305
  ),
9306
+ field.type === "richtext" && /* @__PURE__ */ jsx(
9307
+ HazoUiRte,
9308
+ {
9309
+ html: typeof value === "string" ? value : "",
9310
+ min_height: "180px",
9311
+ placeholder: field.placeholder,
9312
+ on_change: (out) => set_value(out.html)
9313
+ }
9314
+ ),
8947
9315
  field.type === "textarea" && /* @__PURE__ */ jsx(
8948
9316
  Textarea,
8949
9317
  {
@@ -9038,11 +9406,11 @@ function HazoUiKanbanFilter({
9038
9406
  className
9039
9407
  }) {
9040
9408
  const is_controlled = value !== void 0;
9041
- const [internal, set_internal] = React26.useState(
9409
+ const [internal, set_internal] = React27.useState(
9042
9410
  defaultValue ?? EMPTY_FILTER
9043
9411
  );
9044
9412
  const current = is_controlled ? value : internal;
9045
- const update = React26.useCallback(
9413
+ const update = React27.useCallback(
9046
9414
  (next) => {
9047
9415
  if (!is_controlled) set_internal(next);
9048
9416
  onChange?.(next);
@@ -9205,29 +9573,29 @@ function HazoUiKanban({
9205
9573
  onCardSave,
9206
9574
  disableEdit = false
9207
9575
  }) {
9208
- const label_fn = React26.useCallback(
9576
+ const label_fn = React27.useCallback(
9209
9577
  (item) => itemLabel ? itemLabel(item) : item.id,
9210
9578
  [itemLabel]
9211
9579
  );
9212
- const dnd_context_id = React26.useId();
9213
- const [overlay, set_overlay] = React26.useState(
9580
+ const dnd_context_id = React27.useId();
9581
+ const [overlay, set_overlay] = React27.useState(
9214
9582
  /* @__PURE__ */ new Map()
9215
9583
  );
9216
- const [active_id, set_active_id] = React26.useState(null);
9217
- const [active_tab, set_active_tab] = React26.useState(columns[0]?.key ?? "");
9218
- const [editing_item, set_editing_item] = React26.useState(null);
9584
+ const [active_id, set_active_id] = React27.useState(null);
9585
+ const [active_tab, set_active_tab] = React27.useState(columns[0]?.key ?? "");
9586
+ const [editing_item, set_editing_item] = React27.useState(null);
9219
9587
  const show_edit = !disableEdit && typeof onCardSave === "function";
9220
- const handle_edit_request = React26.useCallback(
9588
+ const handle_edit_request = React27.useCallback(
9221
9589
  (it) => {
9222
9590
  const typed = items.find((x) => x.id === it.id);
9223
9591
  if (typed) set_editing_item(typed);
9224
9592
  },
9225
9593
  [items]
9226
9594
  );
9227
- const handle_editor_close = React26.useCallback(() => {
9595
+ const handle_editor_close = React27.useCallback(() => {
9228
9596
  set_editing_item(null);
9229
9597
  }, []);
9230
- React26.useEffect(() => {
9598
+ React27.useEffect(() => {
9231
9599
  if (overlay.size === 0) return;
9232
9600
  set_overlay((prev) => {
9233
9601
  let changed = false;
@@ -9242,11 +9610,11 @@ function HazoUiKanban({
9242
9610
  return changed ? next : prev;
9243
9611
  });
9244
9612
  }, [items, overlay]);
9245
- const grouped = React26.useMemo(
9613
+ const grouped = React27.useMemo(
9246
9614
  () => group_items_by_column(items, overlay, columns),
9247
9615
  [items, overlay, columns]
9248
9616
  );
9249
- const find_item = React26.useCallback(
9617
+ const find_item = React27.useCallback(
9250
9618
  (id) => items.find((i) => i.id === id),
9251
9619
  [items]
9252
9620
  );
@@ -9254,7 +9622,7 @@ function HazoUiKanban({
9254
9622
  useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),
9255
9623
  useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })
9256
9624
  );
9257
- const merged_announcements = React26.useMemo(() => {
9625
+ const merged_announcements = React27.useMemo(() => {
9258
9626
  const defaults = default_announcements(label_fn);
9259
9627
  return {
9260
9628
  onDragStart: announcements?.onDragStart ?? defaults.onDragStart,
@@ -9263,7 +9631,7 @@ function HazoUiKanban({
9263
9631
  onDragCancel: announcements?.onDragCancel ?? defaults.onDragCancel
9264
9632
  };
9265
9633
  }, [announcements, label_fn]);
9266
- const dnd_announcements = React26.useMemo(
9634
+ const dnd_announcements = React27.useMemo(
9267
9635
  () => ({
9268
9636
  onDragStart({ active }) {
9269
9637
  const id = String(active.id);
@@ -9321,10 +9689,10 @@ function HazoUiKanban({
9321
9689
  }),
9322
9690
  [find_item, columns, grouped, merged_announcements]
9323
9691
  );
9324
- const handle_drag_start = React26.useCallback((event) => {
9692
+ const handle_drag_start = React27.useCallback((event) => {
9325
9693
  set_active_id(String(event.active.id));
9326
9694
  }, []);
9327
- const make_revert_handle = React26.useCallback(
9695
+ const make_revert_handle = React27.useCallback(
9328
9696
  (item_id) => ({
9329
9697
  revert: () => {
9330
9698
  set_overlay((prev) => {
@@ -9337,7 +9705,7 @@ function HazoUiKanban({
9337
9705
  }),
9338
9706
  []
9339
9707
  );
9340
- const handle_drag_end = React26.useCallback(
9708
+ const handle_drag_end = React27.useCallback(
9341
9709
  (event) => {
9342
9710
  const active_id_str = String(event.active.id);
9343
9711
  set_active_id(null);
@@ -9399,7 +9767,7 @@ function HazoUiKanban({
9399
9767
  },
9400
9768
  [find_item, columns, grouped, onMove, onReorder, make_revert_handle]
9401
9769
  );
9402
- const handle_drag_cancel = React26.useCallback(() => {
9770
+ const handle_drag_cancel = React27.useCallback(() => {
9403
9771
  set_active_id(null);
9404
9772
  }, []);
9405
9773
  const active_item = active_id ? find_item(active_id) : null;
@@ -9490,7 +9858,7 @@ function HazoUiKanban({
9490
9858
  }
9491
9859
  );
9492
9860
  }
9493
- var Table2 = React26.forwardRef(
9861
+ var Table2 = React27.forwardRef(
9494
9862
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "cls_table_wrap relative w-full overflow-auto", children: /* @__PURE__ */ jsx(
9495
9863
  "table",
9496
9864
  {
@@ -9501,11 +9869,11 @@ var Table2 = React26.forwardRef(
9501
9869
  ) })
9502
9870
  );
9503
9871
  Table2.displayName = "Table";
9504
- var TableHeader2 = React26.forwardRef(
9872
+ var TableHeader2 = React27.forwardRef(
9505
9873
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
9506
9874
  );
9507
9875
  TableHeader2.displayName = "TableHeader";
9508
- var TableBody = React26.forwardRef(
9876
+ var TableBody = React27.forwardRef(
9509
9877
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9510
9878
  "tbody",
9511
9879
  {
@@ -9516,7 +9884,7 @@ var TableBody = React26.forwardRef(
9516
9884
  )
9517
9885
  );
9518
9886
  TableBody.displayName = "TableBody";
9519
- var TableFooter = React26.forwardRef(
9887
+ var TableFooter = React27.forwardRef(
9520
9888
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9521
9889
  "tfoot",
9522
9890
  {
@@ -9527,7 +9895,7 @@ var TableFooter = React26.forwardRef(
9527
9895
  )
9528
9896
  );
9529
9897
  TableFooter.displayName = "TableFooter";
9530
- var TableRow2 = React26.forwardRef(
9898
+ var TableRow2 = React27.forwardRef(
9531
9899
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9532
9900
  "tr",
9533
9901
  {
@@ -9541,7 +9909,7 @@ var TableRow2 = React26.forwardRef(
9541
9909
  )
9542
9910
  );
9543
9911
  TableRow2.displayName = "TableRow";
9544
- var TableHead = React26.forwardRef(
9912
+ var TableHead = React27.forwardRef(
9545
9913
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9546
9914
  "th",
9547
9915
  {
@@ -9555,7 +9923,7 @@ var TableHead = React26.forwardRef(
9555
9923
  )
9556
9924
  );
9557
9925
  TableHead.displayName = "TableHead";
9558
- var TableCell2 = React26.forwardRef(
9926
+ var TableCell2 = React27.forwardRef(
9559
9927
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9560
9928
  "td",
9561
9929
  {
@@ -9566,7 +9934,7 @@ var TableCell2 = React26.forwardRef(
9566
9934
  )
9567
9935
  );
9568
9936
  TableCell2.displayName = "TableCell";
9569
- var TableCaption = React26.forwardRef(
9937
+ var TableCaption = React27.forwardRef(
9570
9938
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9571
9939
  "caption",
9572
9940
  {
@@ -10138,18 +10506,18 @@ function Toolbar2(props) {
10138
10506
  enableFilterDialog,
10139
10507
  searchPlaceholder
10140
10508
  } = props;
10141
- const sortFields = React26.useMemo(
10509
+ const sortFields = React27.useMemo(
10142
10510
  () => deriveSortFields(columns),
10143
10511
  [columns]
10144
10512
  );
10145
- const filterFields = React26.useMemo(
10513
+ const filterFields = React27.useMemo(
10146
10514
  () => deriveFilterFields(columns),
10147
10515
  [columns]
10148
10516
  );
10149
- const [searchValue, setSearchValue] = React26.useState(
10517
+ const [searchValue, setSearchValue] = React27.useState(
10150
10518
  filter.search ?? ""
10151
10519
  );
10152
- React26.useEffect(() => {
10520
+ React27.useEffect(() => {
10153
10521
  setSearchValue(filter.search ?? "");
10154
10522
  }, [filter.search]);
10155
10523
  return /* @__PURE__ */ jsxs("div", { className: "cls_hazo_ui_table_toolbar flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [
@@ -10510,13 +10878,13 @@ function FunnelChart({
10510
10878
  showTooltip = true,
10511
10879
  className
10512
10880
  }) {
10513
- const [hover_idx, set_hover_idx] = React26.useState(null);
10881
+ const [hover_idx, set_hover_idx] = React27.useState(null);
10514
10882
  const fmt = valueFormat ?? format_num;
10515
10883
  const totals = steps.map(step_total);
10516
10884
  const value_max = Math.max(1, ...totals);
10517
10885
  const plot_w = width - PAD_LEFT2 - PAD_RIGHT2;
10518
10886
  const vbox_h = height ?? PAD_TOP2 + steps.length * ROW_H + PAD_BOTTOM2;
10519
- const handle_mouse_move = React26.useCallback(
10887
+ const handle_mouse_move = React27.useCallback(
10520
10888
  (e) => {
10521
10889
  if (steps.length === 0) return;
10522
10890
  const rect = e.currentTarget.getBoundingClientRect();
@@ -10531,7 +10899,7 @@ function FunnelChart({
10531
10899
  },
10532
10900
  [steps.length, vbox_h]
10533
10901
  );
10534
- const handle_mouse_leave = React26.useCallback(() => set_hover_idx(null), []);
10902
+ const handle_mouse_leave = React27.useCallback(() => set_hover_idx(null), []);
10535
10903
  return /* @__PURE__ */ jsxs(
10536
10904
  "svg",
10537
10905
  {
@@ -10719,21 +11087,21 @@ function celebrate(payload) {
10719
11087
  _enqueue(payload);
10720
11088
  }
10721
11089
  function CelebrationProvider({ children }) {
10722
- const [queue, set_queue] = React26.useState([]);
10723
- const enqueue = React26.useCallback((payload) => {
11090
+ const [queue, set_queue] = React27.useState([]);
11091
+ const enqueue = React27.useCallback((payload) => {
10724
11092
  const storage_key = `hazo_ui_celebration_${payload.id}`;
10725
11093
  if (typeof window !== "undefined" && sessionStorage.getItem(storage_key)) {
10726
11094
  return;
10727
11095
  }
10728
11096
  set_queue((q) => [...q, payload]);
10729
11097
  }, []);
10730
- React26.useEffect(() => {
11098
+ React27.useEffect(() => {
10731
11099
  _enqueue = enqueue;
10732
11100
  return () => {
10733
11101
  _enqueue = null;
10734
11102
  };
10735
11103
  }, [enqueue]);
10736
- const handle_close = React26.useCallback(() => {
11104
+ const handle_close = React27.useCallback(() => {
10737
11105
  set_queue((q) => q.slice(1));
10738
11106
  }, []);
10739
11107
  const current = queue[0] ?? null;
@@ -10762,14 +11130,14 @@ function CelebrationModalInner({
10762
11130
  autoDismissDelay = 8e3,
10763
11131
  audioChime = false
10764
11132
  } = payload;
10765
- const [visible, set_visible] = React26.useState(true);
10766
- const [is_downloading, set_is_downloading] = React26.useState(false);
10767
- const canvas_ref = React26.useRef(null);
10768
- const card_ref = React26.useRef(null);
10769
- React26.useEffect(() => {
11133
+ const [visible, set_visible] = React27.useState(true);
11134
+ const [is_downloading, set_is_downloading] = React27.useState(false);
11135
+ const canvas_ref = React27.useRef(null);
11136
+ const card_ref = React27.useRef(null);
11137
+ React27.useEffect(() => {
10770
11138
  sessionStorage.setItem(`hazo_ui_celebration_${id}`, "1");
10771
11139
  }, [id]);
10772
- React26.useEffect(() => {
11140
+ React27.useEffect(() => {
10773
11141
  if (!canvas_ref.current) return;
10774
11142
  let confetti_instance = null;
10775
11143
  import('canvas-confetti').then(({ default: confetti }) => {
@@ -10786,18 +11154,18 @@ function CelebrationModalInner({
10786
11154
  confetti_instance?.reset();
10787
11155
  };
10788
11156
  }, []);
10789
- React26.useEffect(() => {
11157
+ React27.useEffect(() => {
10790
11158
  if (!audioChime) return;
10791
11159
  const audio = new Audio(celebration_chime_default);
10792
11160
  audio.play().catch(() => {
10793
11161
  });
10794
11162
  }, [audioChime]);
10795
- React26.useEffect(() => {
11163
+ React27.useEffect(() => {
10796
11164
  if (!autoDismiss) return;
10797
11165
  const timer = window.setTimeout(close_modal, autoDismissDelay);
10798
11166
  return () => window.clearTimeout(timer);
10799
11167
  }, [autoDismiss, autoDismissDelay]);
10800
- React26.useEffect(() => {
11168
+ React27.useEffect(() => {
10801
11169
  const on_key = (e) => {
10802
11170
  if (e.key === "Escape") close_modal();
10803
11171
  };
@@ -11046,8 +11414,8 @@ function useEtaProgress(opts) {
11046
11414
  loadDurations,
11047
11415
  appendDuration
11048
11416
  } = opts;
11049
- const [value, setValue] = React26.useState(0);
11050
- const stateRef = React26.useRef({
11417
+ const [value, setValue] = React27.useState(0);
11418
+ const stateRef = React27.useRef({
11051
11419
  started: false,
11052
11420
  finished: false,
11053
11421
  startTime: 0,
@@ -11057,14 +11425,14 @@ function useEtaProgress(opts) {
11057
11425
  eta: 0,
11058
11426
  rafId: 0
11059
11427
  });
11060
- const stop = React26.useCallback(() => {
11428
+ const stop = React27.useCallback(() => {
11061
11429
  if (stateRef.current.rafId) {
11062
11430
  cancelAnimationFrame(stateRef.current.rafId);
11063
11431
  stateRef.current.rafId = 0;
11064
11432
  }
11065
11433
  }, []);
11066
- React26.useEffect(() => stop, [stop]);
11067
- const tick = React26.useCallback(() => {
11434
+ React27.useEffect(() => stop, [stop]);
11435
+ const tick = React27.useCallback(() => {
11068
11436
  const s = stateRef.current;
11069
11437
  if (s.finished || !s.started) return;
11070
11438
  const elapsed = Date.now() - s.startTime;
@@ -11073,7 +11441,7 @@ function useEtaProgress(opts) {
11073
11441
  setValue(Math.max(timeValue, unitValue));
11074
11442
  s.rafId = requestAnimationFrame(tick);
11075
11443
  }, [unitCount]);
11076
- const start = React26.useCallback(() => {
11444
+ const start = React27.useCallback(() => {
11077
11445
  const s = stateRef.current;
11078
11446
  if (s.started) return;
11079
11447
  const window2 = loadDurations();
@@ -11087,13 +11455,13 @@ function useEtaProgress(opts) {
11087
11455
  stop();
11088
11456
  s.rafId = requestAnimationFrame(tick);
11089
11457
  }, [loadDurations, unitCount, concurrency, fallbackUnitMs, stop, tick]);
11090
- const unitDone = React26.useCallback(() => {
11458
+ const unitDone = React27.useCallback(() => {
11091
11459
  const s = stateRef.current;
11092
11460
  if (!s.started || s.finished) return;
11093
11461
  s.unitsDone = Math.min(s.unitsDone + 1, unitCount);
11094
11462
  s.unitTimestamps.push(Date.now());
11095
11463
  }, [unitCount]);
11096
- const finish = React26.useCallback(() => {
11464
+ const finish = React27.useCallback(() => {
11097
11465
  const s = stateRef.current;
11098
11466
  if (s.finished) return;
11099
11467
  s.finished = true;
@@ -11127,8 +11495,8 @@ function HazoUiEtaProgress({
11127
11495
  ...endpoint ? { endpoint } : {}
11128
11496
  });
11129
11497
  const durationWindow = Array.isArray(stored) ? stored : [];
11130
- const loadDurations = React26.useCallback(() => durationWindow, [durationWindow]);
11131
- const appendDuration = React26.useCallback(
11498
+ const loadDurations = React27.useCallback(() => durationWindow, [durationWindow]);
11499
+ const appendDuration = React27.useCallback(
11132
11500
  (ms) => {
11133
11501
  append(ms, windowSize);
11134
11502
  },
@@ -11141,7 +11509,7 @@ function HazoUiEtaProgress({
11141
11509
  loadDurations,
11142
11510
  appendDuration
11143
11511
  });
11144
- React26.useEffect(() => {
11512
+ React27.useEffect(() => {
11145
11513
  if (handleRef) {
11146
11514
  handleRef.current = handle;
11147
11515
  }
@@ -11183,8 +11551,8 @@ function HazoUiMemoryDropdown({
11183
11551
  fallback: []
11184
11552
  });
11185
11553
  const storedEntries = Array.isArray(stored) ? stored : [];
11186
- const [query, setQuery] = React26.useState("");
11187
- React26.useEffect(() => {
11554
+ const [query, setQuery] = React27.useState("");
11555
+ React27.useEffect(() => {
11188
11556
  if (!add_entry) return;
11189
11557
  const updated = upsertEntry(storedEntries, add_entry);
11190
11558
  setValue(updated);
@@ -11263,8 +11631,8 @@ function HazoUiMemoryDropdown({
11263
11631
  );
11264
11632
  }
11265
11633
  function EntryRow({ entry, on_select, onDelete }) {
11266
- const [deleteHovered, setDeleteHovered] = React26.useState(false);
11267
- const [rowHovered, setRowHovered] = React26.useState(false);
11634
+ const [deleteHovered, setDeleteHovered] = React27.useState(false);
11635
+ const [rowHovered, setRowHovered] = React27.useState(false);
11268
11636
  return /* @__PURE__ */ jsxs(
11269
11637
  "div",
11270
11638
  {
@@ -11321,68 +11689,174 @@ function EntryRow({ entry, on_select, onDelete }) {
11321
11689
  }
11322
11690
  );
11323
11691
  }
11324
- var ThemeContext = React26.createContext(void 0);
11325
- function HazoThemeProvider({
11326
- children,
11327
- defaultTheme = "system",
11328
- storageKey = "theme"
11692
+ function Logo({
11693
+ logoUrl,
11694
+ logoUrlDark,
11695
+ appTitle,
11696
+ href,
11697
+ height = 28,
11698
+ className,
11699
+ imgClassName
11329
11700
  }) {
11330
- const [theme, setTheme] = useLocalStorage(storageKey, defaultTheme);
11331
- const prefersDark = useMediaQuery("(prefers-color-scheme: dark)");
11332
- const resolvedTheme = theme === "system" ? prefersDark ? "dark" : "light" : theme;
11333
- React26.useEffect(() => {
11334
- document.documentElement.classList.toggle("dark", resolvedTheme === "dark");
11335
- }, [resolvedTheme]);
11336
- const toggleTheme = React26.useCallback(() => {
11337
- setTheme(resolvedTheme === "dark" ? "light" : "dark");
11338
- }, [resolvedTheme, setTheme]);
11339
- const value = React26.useMemo(
11340
- () => ({ theme, setTheme, resolvedTheme, toggleTheme }),
11341
- [theme, setTheme, resolvedTheme, toggleTheme]
11342
- );
11343
- return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
11344
- }
11345
- function useTheme() {
11346
- const context = React26.useContext(ThemeContext);
11347
- if (context === void 0) {
11348
- throw new Error("useTheme must be used within a <HazoThemeProvider>");
11701
+ const alt = appTitle ?? "Logo";
11702
+ let content = null;
11703
+ if (logoUrl) {
11704
+ content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
11705
+ /* @__PURE__ */ jsx(
11706
+ "img",
11707
+ {
11708
+ src: logoUrl,
11709
+ alt,
11710
+ height,
11711
+ style: { height },
11712
+ className: cn("object-contain", logoUrlDark && "dark:hidden", imgClassName)
11713
+ }
11714
+ ),
11715
+ logoUrlDark ? /* @__PURE__ */ jsx(
11716
+ "img",
11717
+ {
11718
+ src: logoUrlDark,
11719
+ alt,
11720
+ height,
11721
+ style: { height },
11722
+ className: cn("hidden object-contain dark:block", imgClassName)
11723
+ }
11724
+ ) : null
11725
+ ] });
11726
+ } else if (appTitle) {
11727
+ content = /* @__PURE__ */ jsx("span", { className: "font-semibold text-navbar-fg", children: appTitle });
11728
+ }
11729
+ if (content === null) return /* @__PURE__ */ jsx(Fragment$1, {});
11730
+ const resolvedHref = safeHref(href);
11731
+ if (resolvedHref) {
11732
+ return /* @__PURE__ */ jsx("a", { href: resolvedHref, className: cn("inline-flex items-center gap-2", className), children: content });
11349
11733
  }
11350
- return context;
11734
+ return /* @__PURE__ */ jsx("div", { className: cn("inline-flex items-center gap-2", className), children: content });
11351
11735
  }
11352
- function ThemeScript({ storageKey = "theme" }) {
11353
- const script = `(function(){try{var k=${JSON.stringify(
11354
- storageKey
11355
- )};var raw=localStorage.getItem(k);var t="system";if(raw){try{t=JSON.parse(raw);}catch(e){t=String(raw).replace(/^"|"$/g,"");}}var m=window.matchMedia("(prefers-color-scheme: dark)").matches;var isDark=t==="dark"||((t==="system"||!t)&&m);var c=document.documentElement.classList;if(isDark){c.add("dark");}else{c.remove("dark");}}catch(e){}})();`;
11356
- return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: script } });
11736
+ function AppHeader({ identity, homeHref, navItems, actions, className }) {
11737
+ return /* @__PURE__ */ jsxs(
11738
+ "header",
11739
+ {
11740
+ "aria-label": "Application header",
11741
+ className: cn(
11742
+ "flex w-full items-center justify-between gap-4 border-b bg-navbar text-navbar-fg border-navbar-border px-4 py-2.5",
11743
+ className
11744
+ ),
11745
+ children: [
11746
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
11747
+ /* @__PURE__ */ jsx(
11748
+ Logo,
11749
+ {
11750
+ logoUrl: identity?.logoUrl,
11751
+ logoUrlDark: identity?.logoUrlDark,
11752
+ appTitle: identity?.appTitle,
11753
+ href: homeHref
11754
+ }
11755
+ ),
11756
+ navItems
11757
+ ] }),
11758
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children: actions })
11759
+ ]
11760
+ }
11761
+ );
11357
11762
  }
11358
- var ThemeToggle = React26.forwardRef(
11359
- ({ className, ...props }, ref) => {
11360
- const { resolvedTheme, toggleTheme } = useTheme();
11361
- const [mounted, setMounted] = React26.useState(false);
11362
- React26.useEffect(() => {
11363
- setMounted(true);
11364
- }, []);
11365
- const isDark = mounted && resolvedTheme === "dark";
11366
- const label = isDark ? "Switch to light theme" : "Switch to dark theme";
11367
- return /* @__PURE__ */ jsx(
11368
- "button",
11763
+ function AppFooter({ variant, footer, identity, className }) {
11764
+ const cfg = footer ?? identity?.footer?.[variant];
11765
+ if (variant === "app") {
11766
+ const links = cfg?.columns?.[0]?.links;
11767
+ return /* @__PURE__ */ jsxs(
11768
+ "footer",
11369
11769
  {
11370
- type: "button",
11371
- ref,
11372
- onClick: toggleTheme,
11373
- "aria-label": label,
11374
11770
  className: cn(
11375
- "inline-flex h-9 w-9 items-center justify-center rounded-full text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50",
11771
+ "flex w-full items-center justify-between gap-4 border-t bg-footer-app text-footer-app-fg border-footer-app-border px-4 py-2 text-sm",
11376
11772
  className
11377
11773
  ),
11378
- ...props,
11379
- children: isDark ? /* @__PURE__ */ jsx(Sun, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Moon, { className: "h-4 w-4" })
11774
+ children: [
11775
+ /* @__PURE__ */ jsx("div", { className: "text-footer-app-fg-muted", children: cfg?.copyright }),
11776
+ links && links.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children: links.map((link, i) => /* @__PURE__ */ jsx(
11777
+ "a",
11778
+ {
11779
+ href: safeHref(link.href),
11780
+ className: "text-footer-app-fg-muted hover:text-footer-app-fg",
11781
+ children: link.label
11782
+ },
11783
+ `${link.href}-${i}`
11784
+ )) }) : null
11785
+ ]
11380
11786
  }
11381
11787
  );
11382
11788
  }
11383
- );
11384
- ThemeToggle.displayName = "ThemeToggle";
11789
+ const showBrandRow = Boolean(identity?.logoUrl || identity?.appTitle);
11790
+ return /* @__PURE__ */ jsxs(
11791
+ "footer",
11792
+ {
11793
+ className: cn(
11794
+ "w-full border-t bg-footer-public text-footer-public-fg border-footer-public-border px-6 py-10",
11795
+ className
11796
+ ),
11797
+ children: [
11798
+ showBrandRow ? /* @__PURE__ */ jsx("div", { className: "mb-8", children: /* @__PURE__ */ jsx(
11799
+ Logo,
11800
+ {
11801
+ logoUrl: identity?.logoUrl,
11802
+ logoUrlDark: identity?.logoUrlDark,
11803
+ appTitle: identity?.appTitle
11804
+ }
11805
+ ) }) : null,
11806
+ cfg?.columns && cfg.columns.length > 0 ? /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-8 md:grid-cols-4", children: cfg.columns.map((column, idx) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
11807
+ column.heading ? /* @__PURE__ */ jsx("div", { className: "font-medium text-footer-public-fg", children: column.heading }) : null,
11808
+ column.links.map((link, i) => /* @__PURE__ */ jsx(
11809
+ "a",
11810
+ {
11811
+ href: safeHref(link.href),
11812
+ className: "text-footer-public-fg-muted hover:text-footer-public-fg",
11813
+ children: link.label
11814
+ },
11815
+ `${link.href}-${i}`
11816
+ ))
11817
+ ] }, column.heading ?? idx)) }) : null,
11818
+ /* @__PURE__ */ jsxs("div", { className: "mt-8 flex flex-wrap items-center justify-between gap-4", children: [
11819
+ /* @__PURE__ */ jsx("div", { className: "text-sm text-footer-public-fg-muted", children: cfg?.copyright }),
11820
+ cfg?.social ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
11821
+ cfg.social.github ? /* @__PURE__ */ jsx(
11822
+ "a",
11823
+ {
11824
+ href: safeHref(cfg.social.github),
11825
+ className: "text-footer-public-fg-muted hover:text-footer-public-fg",
11826
+ children: "GitHub"
11827
+ }
11828
+ ) : null,
11829
+ cfg.social.twitter ? /* @__PURE__ */ jsx(
11830
+ "a",
11831
+ {
11832
+ href: safeHref(cfg.social.twitter),
11833
+ className: "text-footer-public-fg-muted hover:text-footer-public-fg",
11834
+ children: "Twitter"
11835
+ }
11836
+ ) : null,
11837
+ cfg.social.linkedin ? /* @__PURE__ */ jsx(
11838
+ "a",
11839
+ {
11840
+ href: safeHref(cfg.social.linkedin),
11841
+ className: "text-footer-public-fg-muted hover:text-footer-public-fg",
11842
+ children: "LinkedIn"
11843
+ }
11844
+ ) : null,
11845
+ cfg.social.website ? /* @__PURE__ */ jsx(
11846
+ "a",
11847
+ {
11848
+ href: safeHref(cfg.social.website),
11849
+ className: "text-footer-public-fg-muted hover:text-footer-public-fg",
11850
+ children: "Website"
11851
+ }
11852
+ ) : null
11853
+ ] }) : null
11854
+ ] })
11855
+ ]
11856
+ }
11857
+ );
11858
+ }
11385
11859
 
11386
- export { ANIMATION_PRESETS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, CELEBRATION_GRADIENT, Calendar, CanvasTextToolbar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CelebrationProvider, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, CommandNodeExtension, CommandPill, CommandPopover, DateRangeSelector, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, ErrorBanner, ErrorPage, FunnelChart, HazoContextProvider, HazoThemeProvider, HazoUiConfirmDialog, HazoUiDialog, DialogClose as HazoUiDialogClose, DialogContent as HazoUiDialogContent, DialogDescription as HazoUiDialogDescription, DialogFooter as HazoUiDialogFooter, DialogHeader as HazoUiDialogHeader, DialogOverlay as HazoUiDialogOverlay, DialogPortal as HazoUiDialogPortal, Dialog as HazoUiDialogRoot, DialogTitle as HazoUiDialogTitle, DialogTrigger as HazoUiDialogTrigger, HazoUiEtaProgress, HazoUiFlexInput, HazoUiFlexRadio, HazoUiImageCropper, HazoUiImageCropperDialog, HazoUiKanban, HazoUiKanbanFilter, HazoUiMemoryDropdown, HazoUiMultiFilterDialog, HazoUiMultiSortDialog, HazoUiPillRadio, HazoUiProgressBar, HazoUiRte, HazoUiTable, HazoUiTextarea, HazoUiTextbox, HazoUiToaster, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputAffix, InverseSparkline, Label3 as Label, LoadingTimeout, MarkdownEditor, NotificationCountBadge, NotificationItem, NotificationPanel, Popover, PopoverContent, PopoverTrigger, ProgressiveImage, RadioGroup, RadioGroupItem, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Command as ShadcnCommand, CommandEmpty as ShadcnCommandEmpty, CommandGroup as ShadcnCommandGroup, CommandInput as ShadcnCommandInput, CommandItem as ShadcnCommandItem, CommandList as ShadcnCommandList, Skeleton, SkeletonBar, SkeletonCircle, SkeletonGroup, SkeletonRect, Slider, Sparkline, Spinner, StackedBars, Switch, Table2 as Table, TableBody, TableCaption, TableCell2 as TableCell, TableFooter, TableHead, TableHeader2 as TableHeader, TableRow2 as TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeScript, ThemeToggle, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, applyKanbanFilter, buttonGroupVariants, celebrate, cn, computeEta, create_command_suggestion_extension, easeToward, errorToast, format_num, generateUUID, get_hazo_ui_config, get_logger, median, parse_commands_from_text, pick_x_label_indices, reset_hazo_ui_config, resolve_animation_classes, set_hazo_ui_config, set_logger, successToast, text_to_tiptap_content, toggleVariants, upsertEntry as upsertMemoryEntry, useClickOutside, useCopyToClipboard, useDebounce, useErrorDisplay, useEtaProgress, useFullscreen, useIsMobile, useLoadingState, useLocalStorage, useMediaQuery, useSessionStorage, useTheme, useViewport, useWakeLock, use_fullscreen, use_wake_lock };
11860
+ export { ANIMATION_PRESETS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppFooter, AppHeader, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, CELEBRATION_GRADIENT, Calendar, CanvasTextToolbar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CelebrationProvider, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, CommandNodeExtension, CommandPill, CommandPopover, DateRangeSelector, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, ErrorBanner, ErrorPage, FunnelChart, HazoContextProvider, HazoUiConfirmDialog, HazoUiDialog, DialogClose as HazoUiDialogClose, DialogContent as HazoUiDialogContent, DialogDescription as HazoUiDialogDescription, DialogFooter as HazoUiDialogFooter, DialogHeader as HazoUiDialogHeader, DialogOverlay as HazoUiDialogOverlay, DialogPortal as HazoUiDialogPortal, Dialog as HazoUiDialogRoot, DialogTitle as HazoUiDialogTitle, DialogTrigger as HazoUiDialogTrigger, HazoUiEtaProgress, HazoUiFlexInput, HazoUiFlexRadio, HazoUiIcon, HazoUiIconPicker, HazoUiImageCropper, HazoUiImageCropperDialog, HazoUiKanban, HazoUiKanbanFilter, HazoUiMemoryDropdown, HazoUiMultiFilterDialog, HazoUiMultiSortDialog, HazoUiPillRadio, HazoUiProgressBar, HazoUiRte, HazoUiTable, HazoUiTextarea, HazoUiTextbox, HazoUiToaster, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputAffix, InverseSparkline, Label3 as Label, LoadingTimeout, Logo, MarkdownEditor, NotificationCountBadge, NotificationItem, NotificationPanel, Popover, PopoverContent, PopoverTrigger, ProgressiveImage, RadioGroup, RadioGroupItem, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Command as ShadcnCommand, CommandEmpty as ShadcnCommandEmpty, CommandGroup as ShadcnCommandGroup, CommandInput as ShadcnCommandInput, CommandItem as ShadcnCommandItem, CommandList as ShadcnCommandList, Skeleton, SkeletonBar, SkeletonCircle, SkeletonGroup, SkeletonRect, Slider, Sparkline, Spinner, StackedBars, Switch, Table2 as Table, TableBody, TableCaption, TableCell2 as TableCell, TableFooter, TableHead, TableHeader2 as TableHeader, TableRow2 as TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, applyKanbanFilter, buttonGroupVariants, celebrate, cn, computeEta, create_command_suggestion_extension, easeToward, errorToast, format_num, generateUUID, get_hazo_ui_config, get_logger, isLucideValue, median, parse_commands_from_text, pick_x_label_indices, reset_hazo_ui_config, resolve_animation_classes, safeHref, set_hazo_ui_config, set_logger, successToast, text_to_tiptap_content, toggleVariants, upsertEntry as upsertMemoryEntry, useClickOutside, useCopyToClipboard, useDebounce, useErrorDisplay, useEtaProgress, useFullscreen, useIsMobile, useLoadingState, useLocalStorage, useMediaQuery, useSessionStorage, useViewport, useWakeLock, use_fullscreen, use_wake_lock };
11387
11861
  //# sourceMappingURL=index.js.map
11388
11862
  //# sourceMappingURL=index.js.map