hazo_ui 3.3.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -74,6 +74,7 @@ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
74
74
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
75
75
  import { Toaster, toast } from 'sonner';
76
76
  export { toast as rawToast } from 'sonner';
77
+ import { useHazoState } from 'hazo_state/client';
77
78
 
78
79
  var __create = Object.create;
79
80
  var __defProp = Object.defineProperty;
@@ -7931,6 +7932,18 @@ function useFullscreen(elementRef) {
7931
7932
  }, [enter, exit]);
7932
7933
  return { isFullscreen: is_fullscreen, enter, exit, toggle };
7933
7934
  }
7935
+ function use_wake_lock(active) {
7936
+ const { acquired, request, release } = useWakeLock();
7937
+ useEffect(() => {
7938
+ if (active && !acquired) void request();
7939
+ if (!active && acquired) void release();
7940
+ }, [active, acquired, request, release]);
7941
+ }
7942
+ function use_fullscreen() {
7943
+ const ref = useRef(null);
7944
+ const { isFullscreen, toggle } = useFullscreen(ref);
7945
+ return { is_fullscreen: isFullscreen, toggle, ref };
7946
+ }
7934
7947
  function KanbanCard({
7935
7948
  item,
7936
7949
  renderCard,
@@ -10347,6 +10360,219 @@ function DateRangeSelector({
10347
10360
  }
10348
10361
  );
10349
10362
  }
10363
+ var PAD_LEFT4 = 80;
10364
+ var PAD_RIGHT4 = 72;
10365
+ var PAD_TOP4 = 12;
10366
+ var PAD_BOTTOM4 = 12;
10367
+ var ROW_H = 44;
10368
+ var LABEL_H = 14;
10369
+ var BAR_H = 22;
10370
+ var AXIS_LABEL_COLOR4 = "#8b949e";
10371
+ var GRIDLINE_COLOR3 = "#2a3441";
10372
+ function step_total(step) {
10373
+ if (step.value !== void 0) return step.value;
10374
+ if (step.segments) return step.segments.reduce((s, g) => s + g.value, 0);
10375
+ return 0;
10376
+ }
10377
+ function FunnelChart({
10378
+ steps,
10379
+ width = 360,
10380
+ height,
10381
+ color: color2 = "#3b82f6",
10382
+ valueFormat,
10383
+ showDropoff = true,
10384
+ showTooltip = true,
10385
+ className
10386
+ }) {
10387
+ const [hover_idx, set_hover_idx] = React26.useState(null);
10388
+ const fmt = valueFormat ?? format_num;
10389
+ const totals = steps.map(step_total);
10390
+ const value_max = Math.max(1, ...totals);
10391
+ const plot_w = width - PAD_LEFT4 - PAD_RIGHT4;
10392
+ const vbox_h = height ?? PAD_TOP4 + steps.length * ROW_H + PAD_BOTTOM4;
10393
+ const handle_mouse_move = React26.useCallback(
10394
+ (e) => {
10395
+ if (steps.length === 0) return;
10396
+ const rect = e.currentTarget.getBoundingClientRect();
10397
+ if (rect.height === 0) return;
10398
+ const vbox_y = (e.clientY - rect.top) / rect.height * vbox_h;
10399
+ const row_idx = Math.floor((vbox_y - PAD_TOP4) / ROW_H);
10400
+ if (row_idx < 0 || row_idx >= steps.length) {
10401
+ set_hover_idx(null);
10402
+ return;
10403
+ }
10404
+ set_hover_idx(row_idx);
10405
+ },
10406
+ [steps.length, vbox_h]
10407
+ );
10408
+ const handle_mouse_leave = React26.useCallback(() => set_hover_idx(null), []);
10409
+ return /* @__PURE__ */ jsxs(
10410
+ "svg",
10411
+ {
10412
+ viewBox: `0 0 ${width} ${vbox_h}`,
10413
+ onMouseMove: showTooltip ? handle_mouse_move : void 0,
10414
+ onMouseLeave: showTooltip ? handle_mouse_leave : void 0,
10415
+ className: cn("cls_hazo_chart cls_hazo_chart_funnel", className),
10416
+ style: {
10417
+ width: "100%",
10418
+ height: "auto",
10419
+ display: "block",
10420
+ cursor: showTooltip ? "crosshair" : "default"
10421
+ },
10422
+ children: [
10423
+ steps.length > 0 && /* @__PURE__ */ jsx(
10424
+ "line",
10425
+ {
10426
+ x1: PAD_LEFT4 + plot_w / 2,
10427
+ x2: PAD_LEFT4 + plot_w / 2,
10428
+ y1: PAD_TOP4,
10429
+ y2: PAD_TOP4 + steps.length * ROW_H,
10430
+ stroke: GRIDLINE_COLOR3,
10431
+ strokeWidth: 0.5,
10432
+ strokeDasharray: "2,3"
10433
+ }
10434
+ ),
10435
+ steps.map((step, i) => {
10436
+ const total = totals[i];
10437
+ const bar_w = total / value_max * plot_w;
10438
+ const bar_x = PAD_LEFT4 + (plot_w - bar_w) / 2;
10439
+ const bar_y = PAD_TOP4 + i * ROW_H + LABEL_H;
10440
+ const pct_first = i === 0 ? 100 : Math.round(total / (totals[0] || 1) * 100);
10441
+ const value_label = i === 0 ? `${fmt(total)} (100%)` : `${fmt(total)} (${pct_first}%)`;
10442
+ const dropoff = i > 0 ? totals[i - 1] - total : 0;
10443
+ const label_x = bar_x + bar_w + 6;
10444
+ return /* @__PURE__ */ jsxs("g", { children: [
10445
+ /* @__PURE__ */ jsx(
10446
+ "text",
10447
+ {
10448
+ x: PAD_LEFT4 - 6,
10449
+ y: bar_y + BAR_H / 2 + 4,
10450
+ textAnchor: "end",
10451
+ fill: AXIS_LABEL_COLOR4,
10452
+ fontSize: 9,
10453
+ children: step.label
10454
+ }
10455
+ ),
10456
+ step.segments ? (() => {
10457
+ let cursor_x = bar_x;
10458
+ return step.segments.map((seg, s_idx) => {
10459
+ const seg_w = seg.value / value_max * plot_w;
10460
+ const x = cursor_x;
10461
+ cursor_x += seg_w;
10462
+ return /* @__PURE__ */ jsx(
10463
+ "rect",
10464
+ {
10465
+ x,
10466
+ y: bar_y,
10467
+ width: seg_w,
10468
+ height: BAR_H,
10469
+ fill: seg.color
10470
+ },
10471
+ `seg_${s_idx}`
10472
+ );
10473
+ });
10474
+ })() : /* @__PURE__ */ jsx("rect", { x: bar_x, y: bar_y, width: bar_w, height: BAR_H, fill: color2 }),
10475
+ /* @__PURE__ */ jsx(
10476
+ "text",
10477
+ {
10478
+ x: label_x,
10479
+ y: bar_y + BAR_H / 2,
10480
+ textAnchor: "start",
10481
+ fill: color2,
10482
+ fontSize: 9,
10483
+ dominantBaseline: "middle",
10484
+ children: value_label
10485
+ }
10486
+ ),
10487
+ showDropoff && i > 0 && /* @__PURE__ */ jsx(
10488
+ "text",
10489
+ {
10490
+ x: label_x,
10491
+ y: bar_y + BAR_H / 2 + 10,
10492
+ textAnchor: "start",
10493
+ fill: AXIS_LABEL_COLOR4,
10494
+ fontSize: 8,
10495
+ children: `\u2212${fmt(dropoff)}`
10496
+ }
10497
+ )
10498
+ ] }, `step_${i}`);
10499
+ }),
10500
+ showTooltip && hover_idx !== null && (() => {
10501
+ const i = hover_idx;
10502
+ const step = steps[i];
10503
+ const total = totals[i];
10504
+ const pct_first = i === 0 ? 100 : Math.round(total / (totals[0] || 1) * 100);
10505
+ const pct_prev = i === 0 ? 100 : Math.round(total / (totals[i - 1] || 1) * 100);
10506
+ const dropoff = i > 0 ? totals[i - 1] - total : 0;
10507
+ const bar_w = total / value_max * plot_w;
10508
+ const bar_x = PAD_LEFT4 + (plot_w - bar_w) / 2;
10509
+ const bar_y = PAD_TOP4 + i * ROW_H + LABEL_H;
10510
+ const bubble_anchor_y = bar_y + BAR_H / 2;
10511
+ const lines = [
10512
+ { text: step.label, accent: true },
10513
+ { text: `Total: ${fmt(total)}`, accent: false },
10514
+ { text: `% of first: ${pct_first}%`, accent: false }
10515
+ ];
10516
+ if (i > 0) {
10517
+ lines.push({ text: `% of prev: ${pct_prev}%`, accent: false });
10518
+ lines.push({ text: `Drop-off: \u2212${fmt(dropoff)}`, accent: false });
10519
+ }
10520
+ if (step.segments) {
10521
+ step.segments.forEach((seg) => {
10522
+ lines.push({ text: `${seg.label}: ${fmt(seg.value)}`, accent: false });
10523
+ });
10524
+ }
10525
+ const line_h = 13;
10526
+ const pad_v = 8;
10527
+ const bubble_w = 120;
10528
+ const bubble_h = lines.length * line_h + pad_v * 2;
10529
+ const right_x = bar_x + bar_w + 6;
10530
+ const left_x = bar_x - bubble_w - 6;
10531
+ const fits_right = right_x + bubble_w <= width - 4;
10532
+ const fits_left = left_x >= 4;
10533
+ let bubble_x;
10534
+ let bubble_y;
10535
+ if (fits_right || fits_left) {
10536
+ bubble_x = fits_right ? right_x : left_x;
10537
+ bubble_y = Math.max(4, Math.min(bubble_anchor_y - bubble_h / 2, vbox_h - bubble_h - 4));
10538
+ } else {
10539
+ bubble_x = Math.min(Math.max(bar_x + bar_w / 2 - bubble_w / 2, 4), width - bubble_w - 4);
10540
+ const below_y = bar_y + BAR_H + 6;
10541
+ bubble_y = below_y + bubble_h <= vbox_h - 4 ? below_y : Math.max(4, bar_y - bubble_h - 6);
10542
+ }
10543
+ return /* @__PURE__ */ jsxs("g", { children: [
10544
+ /* @__PURE__ */ jsx(
10545
+ "rect",
10546
+ {
10547
+ x: bubble_x,
10548
+ y: bubble_y,
10549
+ width: bubble_w,
10550
+ height: bubble_h,
10551
+ rx: 3,
10552
+ fill: "#0d1117",
10553
+ stroke: color2,
10554
+ strokeWidth: 0.5,
10555
+ fillOpacity: 0.92
10556
+ }
10557
+ ),
10558
+ lines.map((line, k) => /* @__PURE__ */ jsx(
10559
+ "text",
10560
+ {
10561
+ x: bubble_x + 7,
10562
+ y: bubble_y + pad_v + k * line_h + line_h * 0.75,
10563
+ fill: line.accent ? color2 : AXIS_LABEL_COLOR4,
10564
+ fontSize: line.accent ? 10 : 8,
10565
+ fontWeight: line.accent ? 700 : 400,
10566
+ children: line.text
10567
+ },
10568
+ k
10569
+ ))
10570
+ ] });
10571
+ })()
10572
+ ]
10573
+ }
10574
+ );
10575
+ }
10350
10576
 
10351
10577
  // src/assets/celebration-chime.mp3
10352
10578
  var celebration_chime_default = "data:text/plain;charset=utf-8,";
@@ -10633,6 +10859,177 @@ function CelebrationModalInner({
10633
10859
  );
10634
10860
  }
10635
10861
 
10636
- 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, 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, 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, HazoUiFlexInput, HazoUiFlexRadio, HazoUiKanban, HazoUiKanbanFilter, HazoUiMultiFilterDialog, HazoUiMultiSortDialog, HazoUiPillRadio, HazoUiRte, HazoUiTable, HazoUiTextarea, HazoUiTextbox, HazoUiToaster, HoverCard, HoverCardContent, HoverCardTrigger, Input, InverseSparkline, Label3 as Label, LineChart, LoadingTimeout, MarkdownEditor, MultiLineChart, 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, 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, create_command_suggestion_extension, errorToast, format_num, generateUUID, get_hazo_ui_config, get_logger, 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, useClickOutside, useCopyToClipboard, useDebounce, useErrorDisplay, useFullscreen, useIsMobile, useLoadingState, useLocalStorage, useMediaQuery, useSessionStorage, useViewport, useWakeLock };
10862
+ // src/components/hazo_ui_eta_progress/eta.ts
10863
+ function median(values) {
10864
+ if (values.length === 0) return 0;
10865
+ const sorted = [...values].sort((a, b) => a - b);
10866
+ const mid = Math.floor(sorted.length / 2);
10867
+ return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
10868
+ }
10869
+ function computeEta(durationWindow, unitCount, concurrency = 1, fallbackUnitMs = 5e3) {
10870
+ const unitMs = durationWindow.length > 0 ? median(durationWindow) : fallbackUnitMs;
10871
+ return unitMs * Math.ceil(unitCount / Math.max(1, concurrency));
10872
+ }
10873
+ function easeToward(elapsed, eta, maxCap = 0.95) {
10874
+ if (eta <= 0 || elapsed <= 0) return 0;
10875
+ const t = elapsed / eta;
10876
+ return maxCap * (1 - Math.exp(-1.5 * t));
10877
+ }
10878
+ function HazoUiProgressBar({
10879
+ value,
10880
+ label,
10881
+ showPercent = false,
10882
+ size = 8,
10883
+ className
10884
+ }) {
10885
+ const pct = Math.round(Math.min(1, Math.max(0, value)) * 100);
10886
+ return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
10887
+ (label || showPercent) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-1", children: [
10888
+ label && /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: label }),
10889
+ showPercent && /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground tabular-nums", children: [
10890
+ pct,
10891
+ "%"
10892
+ ] })
10893
+ ] }),
10894
+ /* @__PURE__ */ jsx(
10895
+ "div",
10896
+ {
10897
+ role: "progressbar",
10898
+ "aria-valuenow": pct,
10899
+ "aria-valuemin": 0,
10900
+ "aria-valuemax": 100,
10901
+ "aria-label": label,
10902
+ className: "w-full rounded-full overflow-hidden bg-muted",
10903
+ style: { height: size },
10904
+ children: /* @__PURE__ */ jsx(
10905
+ "div",
10906
+ {
10907
+ className: "h-full rounded-full bg-accent transition-[width] duration-200 ease-out motion-reduce:transition-none",
10908
+ style: { width: `${pct}%` }
10909
+ }
10910
+ )
10911
+ }
10912
+ )
10913
+ ] });
10914
+ }
10915
+ function useEtaProgress(opts) {
10916
+ const {
10917
+ unitCount,
10918
+ concurrency = 1,
10919
+ fallbackUnitMs = 5e3,
10920
+ loadDurations,
10921
+ appendDuration
10922
+ } = opts;
10923
+ const [value, setValue] = React26.useState(0);
10924
+ const stateRef = React26.useRef({
10925
+ started: false,
10926
+ finished: false,
10927
+ startTime: 0,
10928
+ unitsDone: 0,
10929
+ unitTimestamps: [],
10930
+ // timestamps of each unitDone() call
10931
+ eta: 0,
10932
+ rafId: 0
10933
+ });
10934
+ const stop = React26.useCallback(() => {
10935
+ if (stateRef.current.rafId) {
10936
+ cancelAnimationFrame(stateRef.current.rafId);
10937
+ stateRef.current.rafId = 0;
10938
+ }
10939
+ }, []);
10940
+ React26.useEffect(() => stop, [stop]);
10941
+ const tick = React26.useCallback(() => {
10942
+ const s = stateRef.current;
10943
+ if (s.finished || !s.started) return;
10944
+ const elapsed = Date.now() - s.startTime;
10945
+ const timeValue = easeToward(elapsed, s.eta);
10946
+ const unitValue = unitCount > 0 ? s.unitsDone / unitCount : 0;
10947
+ setValue(Math.max(timeValue, unitValue));
10948
+ s.rafId = requestAnimationFrame(tick);
10949
+ }, [unitCount]);
10950
+ const start = React26.useCallback(() => {
10951
+ const s = stateRef.current;
10952
+ if (s.started) return;
10953
+ const window2 = loadDurations();
10954
+ const eta = computeEta(window2, unitCount, concurrency, fallbackUnitMs);
10955
+ s.started = true;
10956
+ s.finished = false;
10957
+ s.startTime = Date.now();
10958
+ s.unitsDone = 0;
10959
+ s.unitTimestamps = [];
10960
+ s.eta = eta;
10961
+ stop();
10962
+ s.rafId = requestAnimationFrame(tick);
10963
+ }, [loadDurations, unitCount, concurrency, fallbackUnitMs, stop, tick]);
10964
+ const unitDone = React26.useCallback(() => {
10965
+ const s = stateRef.current;
10966
+ if (!s.started || s.finished) return;
10967
+ s.unitsDone = Math.min(s.unitsDone + 1, unitCount);
10968
+ s.unitTimestamps.push(Date.now());
10969
+ }, [unitCount]);
10970
+ const finish = React26.useCallback(() => {
10971
+ const s = stateRef.current;
10972
+ if (s.finished) return;
10973
+ s.finished = true;
10974
+ stop();
10975
+ setValue(1);
10976
+ if (s.started && s.unitTimestamps.length > 0) {
10977
+ const totalMs = Date.now() - s.startTime;
10978
+ const perUnitMs = totalMs / Math.ceil(unitCount / Math.max(1, concurrency));
10979
+ appendDuration(perUnitMs);
10980
+ }
10981
+ s.started = false;
10982
+ s.unitsDone = 0;
10983
+ }, [stop, unitCount, concurrency, appendDuration]);
10984
+ return { value, start, unitDone, finish };
10985
+ }
10986
+ function HazoUiEtaProgress({
10987
+ estimateKey,
10988
+ unitCount,
10989
+ concurrency = 1,
10990
+ windowSize = 5,
10991
+ fallbackUnitMs = 5e3,
10992
+ level = "global",
10993
+ label,
10994
+ endpoint,
10995
+ handleRef,
10996
+ className
10997
+ }) {
10998
+ const { value: stored, append } = useHazoState(estimateKey, {
10999
+ level,
11000
+ fallback: [],
11001
+ ...endpoint ? { endpoint } : {}
11002
+ });
11003
+ const durationWindow = Array.isArray(stored) ? stored : [];
11004
+ const loadDurations = React26.useCallback(() => durationWindow, [durationWindow]);
11005
+ const appendDuration = React26.useCallback(
11006
+ (ms) => {
11007
+ append(ms, windowSize);
11008
+ },
11009
+ [append, windowSize]
11010
+ );
11011
+ const handle = useEtaProgress({
11012
+ unitCount,
11013
+ concurrency,
11014
+ fallbackUnitMs,
11015
+ loadDurations,
11016
+ appendDuration
11017
+ });
11018
+ React26.useEffect(() => {
11019
+ if (handleRef) {
11020
+ handleRef.current = handle;
11021
+ }
11022
+ }, [handleRef, handle]);
11023
+ return /* @__PURE__ */ jsx(
11024
+ HazoUiProgressBar,
11025
+ {
11026
+ value: handle.value,
11027
+ label,
11028
+ className
11029
+ }
11030
+ );
11031
+ }
11032
+
11033
+ 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, 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, HazoUiKanban, HazoUiKanbanFilter, HazoUiMultiFilterDialog, HazoUiMultiSortDialog, HazoUiPillRadio, HazoUiProgressBar, HazoUiRte, HazoUiTable, HazoUiTextarea, HazoUiTextbox, HazoUiToaster, HoverCard, HoverCardContent, HoverCardTrigger, Input, InverseSparkline, Label3 as Label, LineChart, LoadingTimeout, MarkdownEditor, MultiLineChart, 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, 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, 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, useClickOutside, useCopyToClipboard, useDebounce, useErrorDisplay, useEtaProgress, useFullscreen, useIsMobile, useLoadingState, useLocalStorage, useMediaQuery, useSessionStorage, useViewport, useWakeLock, use_fullscreen, use_wake_lock };
10637
11034
  //# sourceMappingURL=index.js.map
10638
11035
  //# sourceMappingURL=index.js.map