@hina-ui/vue 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/index.js +1222 -599
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/components/app-shell/AppShell.vue.d.ts +1 -0
  4. package/dist/types/components/app-shell/AppShell.vue.d.ts.map +1 -1
  5. package/dist/types/components/combobox/Combobox.vue.d.ts +2 -1
  6. package/dist/types/components/combobox/Combobox.vue.d.ts.map +1 -1
  7. package/dist/types/components/combobox/composables/useCombobox.d.ts +25 -0
  8. package/dist/types/components/combobox/composables/useCombobox.d.ts.map +1 -0
  9. package/dist/types/components/combobox/composables/useOptionLabels.d.ts +3 -0
  10. package/dist/types/components/combobox/composables/useOptionLabels.d.ts.map +1 -0
  11. package/dist/types/components/dialog/Dialog.vue.d.ts +3 -1
  12. package/dist/types/components/dialog/Dialog.vue.d.ts.map +1 -1
  13. package/dist/types/components/drawer/Drawer.vue.d.ts +21 -14
  14. package/dist/types/components/drawer/Drawer.vue.d.ts.map +1 -1
  15. package/dist/types/components/drawer/drawer.variants.d.ts +10 -1
  16. package/dist/types/components/drawer/drawer.variants.d.ts.map +1 -1
  17. package/dist/types/components/dropdown-menu/DropdownMenu.vue.d.ts +4 -1
  18. package/dist/types/components/dropdown-menu/DropdownMenu.vue.d.ts.map +1 -1
  19. package/dist/types/components/hover-card/HoverCard.vue.d.ts +4 -1
  20. package/dist/types/components/hover-card/HoverCard.vue.d.ts.map +1 -1
  21. package/dist/types/components/hover-card/HoverCardAnchor.vue.d.ts +6 -4
  22. package/dist/types/components/hover-card/HoverCardAnchor.vue.d.ts.map +1 -1
  23. package/dist/types/components/hover-card/composables/useHoverCardAnchor.d.ts +9 -4
  24. package/dist/types/components/hover-card/composables/useHoverCardAnchor.d.ts.map +1 -1
  25. package/dist/types/components/multi-combobox/MultiCombobox.vue.d.ts +1 -0
  26. package/dist/types/components/multi-combobox/MultiCombobox.vue.d.ts.map +1 -1
  27. package/dist/types/components/multi-combobox/composables/useMultiCombobox.d.ts +2 -1
  28. package/dist/types/components/multi-combobox/composables/useMultiCombobox.d.ts.map +1 -1
  29. package/dist/types/components/nav-link/NavLink.vue.d.ts.map +1 -1
  30. package/dist/types/components/nav-link/nav-link.variants.d.ts +1 -18
  31. package/dist/types/components/nav-link/nav-link.variants.d.ts.map +1 -1
  32. package/dist/types/components/popover/Popover.vue.d.ts +4 -1
  33. package/dist/types/components/popover/Popover.vue.d.ts.map +1 -1
  34. package/dist/types/components/sheet/Sheet.vue.d.ts +21 -14
  35. package/dist/types/components/sheet/Sheet.vue.d.ts.map +1 -1
  36. package/dist/types/components/sheet/sheet.variants.d.ts +54 -3
  37. package/dist/types/components/sheet/sheet.variants.d.ts.map +1 -1
  38. package/dist/types/components/sidebar/Sidebar.vue.d.ts +15 -11
  39. package/dist/types/components/sidebar/Sidebar.vue.d.ts.map +1 -1
  40. package/dist/types/components/sidebar/SidebarGroup.vue.d.ts.map +1 -1
  41. package/dist/types/components/sidebar/SidebarLabel.vue.d.ts +20 -0
  42. package/dist/types/components/sidebar/SidebarLabel.vue.d.ts.map +1 -0
  43. package/dist/types/components/sidebar/sidebar.variants.d.ts +46 -0
  44. package/dist/types/components/sidebar/sidebar.variants.d.ts.map +1 -0
  45. package/dist/types/components/tree/Tree.vue.d.ts +37 -0
  46. package/dist/types/components/tree/Tree.vue.d.ts.map +1 -0
  47. package/dist/types/components/tree/TreeCheck.vue.d.ts +8 -0
  48. package/dist/types/components/tree/TreeCheck.vue.d.ts.map +1 -0
  49. package/dist/types/components/tree/composables/useTree.d.ts +23 -0
  50. package/dist/types/components/tree/composables/useTree.d.ts.map +1 -0
  51. package/dist/types/components/tree/tree.variants.d.ts +5 -0
  52. package/dist/types/components/tree/tree.variants.d.ts.map +1 -0
  53. package/dist/types/components/tree/types.d.ts +18 -0
  54. package/dist/types/components/tree/types.d.ts.map +1 -0
  55. package/dist/types/components/tree/utils/selection.d.ts +16 -0
  56. package/dist/types/components/tree/utils/selection.d.ts.map +1 -0
  57. package/dist/types/index.d.ts +4 -0
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/types/lib/anchored-overlay.d.ts +12 -2
  60. package/dist/types/lib/anchored-overlay.d.ts.map +1 -1
  61. package/dist/types/lib/overlay-anchor.d.ts +16 -0
  62. package/dist/types/lib/overlay-anchor.d.ts.map +1 -0
  63. package/dist/types/lib/scroll-viewport.d.ts +9 -0
  64. package/dist/types/lib/scroll-viewport.d.ts.map +1 -0
  65. package/dist/types/locale/en-US.d.ts.map +1 -1
  66. package/dist/types/locale/index.d.ts.map +1 -1
  67. package/dist/types/locale/types.d.ts +3 -0
  68. package/dist/types/locale/types.d.ts.map +1 -1
  69. package/dist/types/locale/zh-CN.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/src/components/app-shell/AppShell.vue +2 -1
  72. package/src/components/combobox/Combobox.vue +14 -23
  73. package/src/components/combobox/composables/useCombobox.ts +63 -0
  74. package/src/components/combobox/composables/useOptionLabels.ts +20 -0
  75. package/src/components/dialog/Dialog.vue +5 -1
  76. package/src/components/drawer/Drawer.vue +69 -32
  77. package/src/components/drawer/drawer.variants.ts +6 -2
  78. package/src/components/dropdown-menu/DropdownMenu.vue +18 -5
  79. package/src/components/hover-card/HoverCard.vue +6 -1
  80. package/src/components/hover-card/HoverCardAnchor.vue +3 -1
  81. package/src/components/hover-card/composables/useHoverCardAnchor.ts +33 -42
  82. package/src/components/multi-combobox/MultiCombobox.vue +2 -0
  83. package/src/components/multi-combobox/composables/useMultiCombobox.ts +5 -10
  84. package/src/components/nav-link/NavLink.vue +7 -1
  85. package/src/components/nav-link/nav-link.variants.ts +1 -10
  86. package/src/components/popover/Popover.vue +17 -7
  87. package/src/components/sheet/Sheet.vue +67 -24
  88. package/src/components/sheet/sheet.variants.ts +17 -4
  89. package/src/components/sidebar/Sidebar.vue +43 -33
  90. package/src/components/sidebar/SidebarGroup.vue +12 -11
  91. package/src/components/sidebar/SidebarLabel.vue +24 -0
  92. package/src/components/sidebar/sidebar.variants.ts +36 -0
  93. package/src/components/tree/Tree.vue +132 -0
  94. package/src/components/tree/TreeCheck.vue +33 -0
  95. package/src/components/tree/composables/useTree.ts +81 -0
  96. package/src/components/tree/tree.variants.ts +22 -0
  97. package/src/components/tree/types.ts +20 -0
  98. package/src/components/tree/utils/selection.ts +78 -0
  99. package/src/index.ts +4 -0
  100. package/src/lib/anchored-overlay.ts +28 -19
  101. package/src/lib/overlay-anchor.ts +65 -0
  102. package/src/lib/scroll-viewport.ts +8 -0
  103. package/src/locale/en-US.ts +1 -0
  104. package/src/locale/index.ts +1 -0
  105. package/src/locale/types.ts +3 -0
  106. package/src/locale/zh-CN.ts +1 -0
  107. package/src/styles/motion.css +40 -0
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { AccordionContent, AccordionHeader, AccordionItem, AccordionRoot, Accord
6
6
  import { ArrowLeft, ArrowRight, CalendarClock, CalendarDays, CalendarRange, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, ChevronsLeft, ChevronsRight, CircleCheck, CircleX, Copy, Download, Eye, EyeOff, File, Inbox, Info, Lightbulb, Megaphone, Minus, MoreHorizontal, PanelLeft, RotateCw, Scan, Search, Shrink, Star, TrendingDown, TrendingUp, TriangleAlert, Upload, User, X, ZoomIn, ZoomOut } from "@lucide/vue";
7
7
  import { Motion, animate, useMotionValue, useTransform } from "motion-v";
8
8
  import { OverlayScrollbars } from "overlayscrollbars";
9
- import { createSharedComposable, useDocumentVisibility, useEventListener, useIntersectionObserver, useIntervalFn, useMediaQuery, useMutationObserver, useRafFn, useResizeObserver } from "@vueuse/core";
9
+ import { createSharedComposable, defaultDocument, useDocumentVisibility, useEventListener, useIntersectionObserver, useIntervalFn, useMediaQuery, useMutationObserver, useRafFn, useResizeObserver } from "@vueuse/core";
10
10
  import { CalendarDate, CalendarDateTime, Time, getLocalTimeZone, parseDate, parseDateTime, parseTime, today } from "@internationalized/date";
11
11
  //#region src/lib/tw-merge.ts
12
12
  var TW_MERGE_CONFIG = { extend: {
@@ -216,6 +216,7 @@ var zhCN = {
216
216
  show: "显示密码",
217
217
  hide: "隐藏密码"
218
218
  },
219
+ tree: { empty: "暂无节点" },
219
220
  treeSelect: { search: "搜索节点" },
220
221
  combobox: {
221
222
  placeholder: "输入或选择",
@@ -357,6 +358,7 @@ var enUS = {
357
358
  show: "Show password",
358
359
  hide: "Hide password"
359
360
  },
361
+ tree: { empty: "No nodes" },
360
362
  treeSelect: { search: "Search nodes" },
361
363
  combobox: {
362
364
  placeholder: "Type or choose",
@@ -489,6 +491,10 @@ function merge(base, patch) {
489
491
  ...base.passwordInput,
490
492
  ...patch.passwordInput
491
493
  },
494
+ tree: {
495
+ ...base.tree,
496
+ ...patch.tree
497
+ },
492
498
  treeSelect: {
493
499
  ...base.treeSelect,
494
500
  ...patch.treeSelect
@@ -700,7 +706,7 @@ var spinner = tv({
700
706
  });
701
707
  //#endregion
702
708
  //#region src/components/spinner/Spinner.vue?vue&type=script&setup=true&lang.ts
703
- var _hoisted_1$98 = ["aria-label"];
709
+ var _hoisted_1$100 = ["aria-label"];
704
710
  //#endregion
705
711
  //#region src/components/spinner/Spinner.vue
706
712
  var Spinner_default = /* @__PURE__ */ defineComponent({
@@ -720,13 +726,13 @@ var Spinner_default = /* @__PURE__ */ defineComponent({
720
726
  "aria-label": props.label ?? unref(t).common.loading,
721
727
  class: unref(cn)(unref(spinner)({ size: props.size })),
722
728
  style: { animation: "hn-spin var(--hn-spin-duration) var(--hn-ease-linear) infinite" }
723
- }), null, 16, _hoisted_1$98);
729
+ }), null, 16, _hoisted_1$100);
724
730
  };
725
731
  }
726
732
  });
727
733
  //#endregion
728
734
  //#region src/components/button/IconSlot.vue?vue&type=script&setup=true&lang.ts
729
- var _hoisted_1$97 = {
735
+ var _hoisted_1$99 = {
730
736
  key: 0,
731
737
  "aria-hidden": "true",
732
738
  class: "absolute inset-0 inline-flex items-center justify-center"
@@ -750,7 +756,7 @@ var IconSlot_default$1 = /* @__PURE__ */ defineComponent({
750
756
  "leave-active-class": "hn-transition",
751
757
  "leave-to-class": "scale-90 opacity-0"
752
758
  }, {
753
- default: withCtx(() => [props.swapped ? (openBlock(), createElementBlock("span", _hoisted_1$97, [createVNode(Spinner_default, { size: props.spinnerSize }, null, 8, ["size"])])) : createCommentVNode("", true)]),
759
+ default: withCtx(() => [props.swapped ? (openBlock(), createElementBlock("span", _hoisted_1$99, [createVNode(Spinner_default, { size: props.spinnerSize }, null, 8, ["size"])])) : createCommentVNode("", true)]),
754
760
  _: 1
755
761
  })], 2);
756
762
  };
@@ -946,7 +952,7 @@ function useRipple(container, surface, isDisabled) {
946
952
  }
947
953
  //#endregion
948
954
  //#region src/components/ripple/Ripple.vue?vue&type=script&setup=true&lang.ts
949
- var _hoisted_1$96 = ["data-pressed"];
955
+ var _hoisted_1$98 = ["data-pressed"];
950
956
  //#endregion
951
957
  //#region src/components/ripple/Ripple.vue
952
958
  var Ripple_default = /* @__PURE__ */ defineComponent({
@@ -969,13 +975,13 @@ var Ripple_default = /* @__PURE__ */ defineComponent({
969
975
  ref: surface,
970
976
  class: "hn-ripple-surface",
971
977
  "data-pressed": unref(pressed) ? "" : void 0
972
- }, null, 8, _hoisted_1$96)], 512);
978
+ }, null, 8, _hoisted_1$98)], 512);
973
979
  };
974
980
  }
975
981
  });
976
982
  //#endregion
977
983
  //#region src/components/button/Button.vue?vue&type=script&setup=true&lang.ts
978
- var _hoisted_1$95 = {
984
+ var _hoisted_1$97 = {
979
985
  key: 0,
980
986
  "aria-hidden": "true",
981
987
  class: "absolute inset-0 flex items-center justify-center"
@@ -1086,7 +1092,7 @@ var Button_default = /* @__PURE__ */ defineComponent({
1086
1092
  "leave-active-class": "hn-transition",
1087
1093
  "leave-to-class": "opacity-0"
1088
1094
  }, {
1089
- default: withCtx(() => [props.loading && spinnerAt.value === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$95, [createVNode(Spinner_default, { size: spinnerSize.value }, null, 8, ["size"])])) : createCommentVNode("", true)]),
1095
+ default: withCtx(() => [props.loading && spinnerAt.value === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$97, [createVNode(Spinner_default, { size: spinnerSize.value }, null, 8, ["size"])])) : createCommentVNode("", true)]),
1090
1096
  _: 1
1091
1097
  })
1092
1098
  ], 64))]),
@@ -1337,7 +1343,7 @@ function useCopy(text, onCopied, resetAfter = () => COPIED_RESET_MS) {
1337
1343
  }
1338
1344
  //#endregion
1339
1345
  //#region src/components/copy-button/CopyButton.vue?vue&type=script&setup=true&lang.ts
1340
- var _hoisted_1$94 = { class: "relative inline-flex size-[1em]" };
1346
+ var _hoisted_1$96 = { class: "relative inline-flex size-[1em]" };
1341
1347
  //#endregion
1342
1348
  //#region src/components/copy-button/CopyButton.vue
1343
1349
  var CopyButton_default = /* @__PURE__ */ defineComponent({
@@ -1369,7 +1375,7 @@ var CopyButton_default = /* @__PURE__ */ defineComponent({
1369
1375
  class: props.class,
1370
1376
  onClick: unref(copy)
1371
1377
  }), {
1372
- default: withCtx(() => [createElementVNode("span", _hoisted_1$94, [createVNode(Transition, {
1378
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$96, [createVNode(Transition, {
1373
1379
  "enter-active-class": "hn-transition-base",
1374
1380
  "enter-from-class": "scale-90 opacity-0",
1375
1381
  "leave-active-class": "hn-transition",
@@ -1444,7 +1450,7 @@ var buttonGroup = tv({
1444
1450
  });
1445
1451
  //#endregion
1446
1452
  //#region src/components/button-group/ButtonGroup.vue?vue&type=script&setup=true&lang.ts
1447
- var _hoisted_1$93 = ["aria-label", "aria-orientation"];
1453
+ var _hoisted_1$95 = ["aria-label", "aria-orientation"];
1448
1454
  //#endregion
1449
1455
  //#region src/components/button-group/ButtonGroup.vue
1450
1456
  var ButtonGroup_default = /* @__PURE__ */ defineComponent({
@@ -1475,7 +1481,7 @@ var ButtonGroup_default = /* @__PURE__ */ defineComponent({
1475
1481
  block: props.block,
1476
1482
  divider: props.divider
1477
1483
  }), props.class))
1478
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$93);
1484
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$95);
1479
1485
  };
1480
1486
  }
1481
1487
  });
@@ -1709,8 +1715,8 @@ var chipRemove = tv({
1709
1715
  });
1710
1716
  //#endregion
1711
1717
  //#region src/components/chip/IconSlot.vue?vue&type=script&setup=true&lang.ts
1712
- var _hoisted_1$92 = { class: "hn-collapse-body" };
1713
- var _hoisted_2$47 = {
1718
+ var _hoisted_1$94 = { class: "hn-collapse-body" };
1719
+ var _hoisted_2$49 = {
1714
1720
  key: 0,
1715
1721
  "aria-hidden": "true",
1716
1722
  class: "absolute inset-0 inline-flex items-center justify-center"
@@ -1731,7 +1737,7 @@ var IconSlot_default = /* @__PURE__ */ defineComponent({
1731
1737
  return openBlock(), createElementBlock("span", {
1732
1738
  "data-hn-icon": "",
1733
1739
  class: normalizeClass(["hn-collapse-x", props.icon || props.checked ? "hn-collapse-open" : "hn-collapse-closed"])
1734
- }, [createElementVNode("span", _hoisted_1$92, [createElementVNode("span", { class: normalizeClass(unref(chipIcon)({ size: props.size })) }, [props.icon ? (openBlock(), createElementBlock("span", {
1740
+ }, [createElementVNode("span", _hoisted_1$94, [createElementVNode("span", { class: normalizeClass(unref(chipIcon)({ size: props.size })) }, [props.icon ? (openBlock(), createElementBlock("span", {
1735
1741
  key: 0,
1736
1742
  class: normalizeClass(["hn-transition inline-flex items-center justify-center", props.checked ? "scale-90 opacity-0" : "scale-100 opacity-100"])
1737
1743
  }, [renderSlot(_ctx.$slots, "default")], 2)) : createCommentVNode("", true), createVNode(Transition, {
@@ -1740,7 +1746,7 @@ var IconSlot_default = /* @__PURE__ */ defineComponent({
1740
1746
  "leave-active-class": "hn-transition",
1741
1747
  "leave-to-class": "scale-90 opacity-0"
1742
1748
  }, {
1743
- default: withCtx(() => [props.checked ? (openBlock(), createElementBlock("span", _hoisted_2$47, [createVNode(unref(Check))])) : createCommentVNode("", true)]),
1749
+ default: withCtx(() => [props.checked ? (openBlock(), createElementBlock("span", _hoisted_2$49, [createVNode(unref(Check))])) : createCommentVNode("", true)]),
1744
1750
  _: 1
1745
1751
  })], 2)])], 2);
1746
1752
  };
@@ -1927,13 +1933,13 @@ var VisuallyHidden_default = /* @__PURE__ */ defineComponent({
1927
1933
  });
1928
1934
  //#endregion
1929
1935
  //#region src/components/lightbox/LightboxStrip.vue?vue&type=script&setup=true&lang.ts
1930
- var _hoisted_1$91 = [
1936
+ var _hoisted_1$93 = [
1931
1937
  "src",
1932
1938
  "alt",
1933
1939
  "onLoad"
1934
1940
  ];
1935
- var _hoisted_2$46 = ["src"];
1936
- var _hoisted_3$22 = [
1941
+ var _hoisted_2$48 = ["src"];
1942
+ var _hoisted_3$25 = [
1937
1943
  "src",
1938
1944
  "alt",
1939
1945
  "onLoad"
@@ -1994,7 +2000,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
1994
2000
  draggable: "false",
1995
2001
  class: "block size-full object-contain",
1996
2002
  onLoad: ($event) => emit("learn", slide.item.id, $event.target)
1997
- }, null, 40, _hoisted_1$91), createVNode(Transition, {
2003
+ }, null, 40, _hoisted_1$93), createVNode(Transition, {
1998
2004
  "enter-active-class": "hn-transition-base",
1999
2005
  "enter-from-class": "opacity-0",
2000
2006
  "leave-active-class": "hn-transition",
@@ -2007,7 +2013,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
2007
2013
  "aria-hidden": "true",
2008
2014
  draggable: "false",
2009
2015
  class: "absolute inset-0 size-full object-contain"
2010
- }, null, 8, _hoisted_2$46)) : createCommentVNode("", true)]),
2016
+ }, null, 8, _hoisted_2$48)) : createCommentVNode("", true)]),
2011
2017
  _: 1
2012
2018
  })]),
2013
2019
  _: 2
@@ -2029,7 +2035,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
2029
2035
  draggable: "false",
2030
2036
  class: "block size-full object-contain",
2031
2037
  onLoad: ($event) => emit("learn", slide.item.id, $event.target)
2032
- }, null, 40, _hoisted_3$22)]),
2038
+ }, null, 40, _hoisted_3$25)]),
2033
2039
  _: 2
2034
2040
  }, 1032, [
2035
2041
  "style",
@@ -2258,10 +2264,10 @@ function useScrollFocus(host, viewport, options) {
2258
2264
  }
2259
2265
  //#endregion
2260
2266
  //#region src/components/scroll-area/ScrollArea.vue?vue&type=script&setup=true&lang.ts
2261
- var _hoisted_1$90 = ["data-visible"];
2262
- var _hoisted_2$45 = ["data-visible"];
2263
- var _hoisted_3$21 = ["data-visible"];
2264
- var _hoisted_4$16 = ["data-visible"];
2267
+ var _hoisted_1$92 = ["data-visible"];
2268
+ var _hoisted_2$47 = ["data-visible"];
2269
+ var _hoisted_3$24 = ["data-visible"];
2270
+ var _hoisted_4$19 = ["data-visible"];
2265
2271
  //#endregion
2266
2272
  //#region src/components/scroll-area/ScrollArea.vue
2267
2273
  var ScrollArea_default = /* @__PURE__ */ defineComponent({
@@ -2364,28 +2370,28 @@ var ScrollArea_default = /* @__PURE__ */ defineComponent({
2364
2370
  "data-side": "x-start",
2365
2371
  "data-visible": unref(showXStart) ? "" : void 0,
2366
2372
  "aria-hidden": "true"
2367
- }, null, 8, _hoisted_1$90)) : createCommentVNode("", true),
2373
+ }, null, 8, _hoisted_1$92)) : createCommentVNode("", true),
2368
2374
  props.direction !== "vertical" ? (openBlock(), createElementBlock("div", {
2369
2375
  key: 1,
2370
2376
  class: "hn-scroll-shadow",
2371
2377
  "data-side": "x-end",
2372
2378
  "data-visible": unref(showXEnd) ? "" : void 0,
2373
2379
  "aria-hidden": "true"
2374
- }, null, 8, _hoisted_2$45)) : createCommentVNode("", true),
2380
+ }, null, 8, _hoisted_2$47)) : createCommentVNode("", true),
2375
2381
  props.direction !== "horizontal" ? (openBlock(), createElementBlock("div", {
2376
2382
  key: 2,
2377
2383
  class: "hn-scroll-shadow",
2378
2384
  "data-side": "y-start",
2379
2385
  "data-visible": unref(showYStart) ? "" : void 0,
2380
2386
  "aria-hidden": "true"
2381
- }, null, 8, _hoisted_3$21)) : createCommentVNode("", true),
2387
+ }, null, 8, _hoisted_3$24)) : createCommentVNode("", true),
2382
2388
  props.direction !== "horizontal" ? (openBlock(), createElementBlock("div", {
2383
2389
  key: 3,
2384
2390
  class: "hn-scroll-shadow",
2385
2391
  "data-side": "y-end",
2386
2392
  "data-visible": unref(showYEnd) ? "" : void 0,
2387
2393
  "aria-hidden": "true"
2388
- }, null, 8, _hoisted_4$16)) : createCommentVNode("", true)
2394
+ }, null, 8, _hoisted_4$19)) : createCommentVNode("", true)
2389
2395
  ], 64)) : createCommentVNode("", true)], 2);
2390
2396
  };
2391
2397
  }
@@ -2444,16 +2450,16 @@ var Highlight_default = /* @__PURE__ */ defineComponent({
2444
2450
  });
2445
2451
  //#endregion
2446
2452
  //#region src/components/lightbox/LightboxThumbs.vue?vue&type=script&setup=true&lang.ts
2447
- var _hoisted_1$89 = {
2453
+ var _hoisted_1$91 = {
2448
2454
  "data-hn-thumbs": "",
2449
2455
  class: "relative isolate flex w-max gap-2 px-4 py-3"
2450
2456
  };
2451
- var _hoisted_2$44 = [
2457
+ var _hoisted_2$46 = [
2452
2458
  "aria-label",
2453
2459
  "aria-current",
2454
2460
  "onClick"
2455
2461
  ];
2456
- var _hoisted_3$20 = ["src"];
2462
+ var _hoisted_3$23 = ["src"];
2457
2463
  //#endregion
2458
2464
  //#region src/components/lightbox/LightboxThumbs.vue
2459
2465
  var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
@@ -2489,7 +2495,7 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2489
2495
  scrollbar: false,
2490
2496
  class: "max-w-full"
2491
2497
  }, {
2492
- default: withCtx(() => [createElementVNode("div", _hoisted_1$89, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, at) => {
2498
+ default: withCtx(() => [createElementVNode("div", _hoisted_1$91, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, at) => {
2493
2499
  return openBlock(), createElementBlock("button", {
2494
2500
  key: item.id,
2495
2501
  ref_for: true,
@@ -2506,14 +2512,14 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2506
2512
  alt: "",
2507
2513
  draggable: "false",
2508
2514
  class: "relative -z-10 size-full object-cover"
2509
- }, null, 8, _hoisted_3$20),
2515
+ }, null, 8, _hoisted_3$23),
2510
2516
  at === props.index ? (openBlock(), createBlock(Highlight_default, {
2511
2517
  key: 0,
2512
2518
  id: unref(highlightId),
2513
2519
  axis: "x",
2514
2520
  class: "ring-accent absolute inset-0 rounded-md ring-2 ring-inset"
2515
2521
  }, null, 8, ["id"])) : createCommentVNode("", true)
2516
- ], 10, _hoisted_2$44);
2522
+ ], 10, _hoisted_2$46);
2517
2523
  }), 128))])]),
2518
2524
  _: 1
2519
2525
  });
@@ -2522,8 +2528,8 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2522
2528
  });
2523
2529
  //#endregion
2524
2530
  //#region src/components/lightbox/LightboxToolbar.vue?vue&type=script&setup=true&lang.ts
2525
- var _hoisted_1$88 = { class: "flex flex-col items-center gap-1 pb-[max(--spacing(3),env(safe-area-inset-bottom))]" };
2526
- var _hoisted_2$43 = { class: "flex items-center gap-1" };
2531
+ var _hoisted_1$90 = { class: "flex flex-col items-center gap-1 pb-[max(--spacing(3),env(safe-area-inset-bottom))]" };
2532
+ var _hoisted_2$45 = { class: "flex items-center gap-1" };
2527
2533
  //#endregion
2528
2534
  //#region src/components/lightbox/LightboxToolbar.vue
2529
2535
  var LightboxToolbar_default = /* @__PURE__ */ defineComponent({
@@ -2550,12 +2556,12 @@ var LightboxToolbar_default = /* @__PURE__ */ defineComponent({
2550
2556
  const emit = __emit;
2551
2557
  const t = useUiLocale();
2552
2558
  return (_ctx, _cache) => {
2553
- return openBlock(), createElementBlock("div", _hoisted_1$88, [props.items.length > 1 ? (openBlock(), createBlock(LightboxThumbs_default, {
2559
+ return openBlock(), createElementBlock("div", _hoisted_1$90, [props.items.length > 1 ? (openBlock(), createBlock(LightboxThumbs_default, {
2554
2560
  key: 0,
2555
2561
  items: props.items,
2556
2562
  index: props.index,
2557
2563
  onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event))
2558
- }, null, 8, ["items", "index"])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$43, [
2564
+ }, null, 8, ["items", "index"])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$45, [
2559
2565
  createVNode(IconButton_default, {
2560
2566
  label: unref(t).lightbox.zoomOut,
2561
2567
  disabled: !props.zoomed,
@@ -4160,8 +4166,8 @@ async function saveImage(url) {
4160
4166
  }
4161
4167
  //#endregion
4162
4168
  //#region src/components/lightbox/Lightbox.vue?vue&type=script&setup=true&lang.ts
4163
- var _hoisted_1$87 = ["data-hn-phase"];
4164
- var _hoisted_2$42 = {
4169
+ var _hoisted_1$89 = ["data-hn-phase"];
4170
+ var _hoisted_2$44 = {
4165
4171
  "aria-hidden": "true",
4166
4172
  class: "pointer-events-none absolute inset-0 isolate"
4167
4173
  };
@@ -4329,7 +4335,7 @@ var Lightbox_default = /* @__PURE__ */ defineComponent({
4329
4335
  onWheel: _cache[10] || (_cache[10] = (...args) => unref(gesture).onWheel && unref(gesture).onWheel(...args)),
4330
4336
  onKeydown
4331
4337
  }, [
4332
- createElementVNode("div", _hoisted_2$42, [createVNode(unref(Motion), {
4338
+ createElementVNode("div", _hoisted_2$44, [createVNode(unref(Motion), {
4333
4339
  class: "hn-scrim",
4334
4340
  style: normalizeStyle({ opacity: unref(motion).presence })
4335
4341
  }, null, 8, ["style"])]),
@@ -4399,7 +4405,7 @@ var Lightbox_default = /* @__PURE__ */ defineComponent({
4399
4405
  "hint",
4400
4406
  "presence"
4401
4407
  ])
4402
- ], 42, _hoisted_1$87)]),
4408
+ ], 42, _hoisted_1$89)]),
4403
4409
  _: 1
4404
4410
  })]),
4405
4411
  _: 1
@@ -4571,7 +4577,7 @@ function useImageGroup() {
4571
4577
  }
4572
4578
  //#endregion
4573
4579
  //#region src/components/image/Image.vue?vue&type=script&setup=true&lang.ts
4574
- var _hoisted_1$86 = [
4580
+ var _hoisted_1$88 = [
4575
4581
  "src",
4576
4582
  "alt",
4577
4583
  "decoding",
@@ -4681,7 +4687,7 @@ var Image_default = /* @__PURE__ */ defineComponent({
4681
4687
  fit: props.fit,
4682
4688
  lazy: props.lazy
4683
4689
  }), props.lazy && !unref(revealed) && "opacity-0", props.imageClass)
4684
- }), null, 16, _hoisted_1$86)) : unref(failed) ? renderSlot(_ctx.$slots, "error", {}, void 0, void 0, 1) : renderSlot(_ctx.$slots, "empty", {}, void 0, void 0, 2),
4690
+ }), null, 16, _hoisted_1$88)) : unref(failed) ? renderSlot(_ctx.$slots, "error", {}, void 0, void 0, 1) : renderSlot(_ctx.$slots, "empty", {}, void 0, void 0, 2),
4685
4691
  unref(showSkeleton) ? (openBlock(), createElementBlock("span", {
4686
4692
  key: 3,
4687
4693
  ref_key: "skeletonEl",
@@ -4962,7 +4968,7 @@ var indicator = tv({
4962
4968
  });
4963
4969
  //#endregion
4964
4970
  //#region src/components/indicator/Indicator.vue?vue&type=script&setup=true&lang.ts
4965
- var _hoisted_1$85 = {
4971
+ var _hoisted_1$87 = {
4966
4972
  key: 0,
4967
4973
  "aria-hidden": "true",
4968
4974
  class: "hn-ping absolute inset-0 rounded-full bg-inherit"
@@ -4993,7 +4999,7 @@ var Indicator_default = /* @__PURE__ */ defineComponent({
4993
4999
  size: props.size
4994
5000
  }), props.class))
4995
5001
  }, {
4996
- default: withCtx(() => [props.pulse ? (openBlock(), createElementBlock("span", _hoisted_1$85)) : createCommentVNode("", true), props.label ? (openBlock(), createBlock(VisuallyHidden_default, { key: 1 }, {
5002
+ default: withCtx(() => [props.pulse ? (openBlock(), createElementBlock("span", _hoisted_1$87)) : createCommentVNode("", true), props.label ? (openBlock(), createBlock(VisuallyHidden_default, { key: 1 }, {
4997
5003
  default: withCtx(() => [createTextVNode(toDisplayString(props.label), 1)]),
4998
5004
  _: 1
4999
5005
  })) : createCommentVNode("", true)]),
@@ -5045,8 +5051,8 @@ var calloutIcons = {
5045
5051
  };
5046
5052
  //#endregion
5047
5053
  //#region src/components/callout/Callout.vue?vue&type=script&setup=true&lang.ts
5048
- var _hoisted_1$84 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
5049
- var _hoisted_2$41 = {
5054
+ var _hoisted_1$86 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
5055
+ var _hoisted_2$43 = {
5050
5056
  key: 0,
5051
5057
  class: "text-fg font-medium"
5052
5058
  };
@@ -5074,7 +5080,7 @@ var Callout_default = /* @__PURE__ */ defineComponent({
5074
5080
  key: 0,
5075
5081
  class: normalizeClass(unref(calloutIcon)({ tone: props.tone })),
5076
5082
  "aria-hidden": "true"
5077
- }, null, 8, ["class"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_1$84, [props.title ? (openBlock(), createElementBlock("p", _hoisted_2$41, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])], 2);
5083
+ }, null, 8, ["class"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_1$86, [props.title ? (openBlock(), createElementBlock("p", _hoisted_2$43, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])], 2);
5078
5084
  };
5079
5085
  }
5080
5086
  });
@@ -5128,19 +5134,19 @@ function useCollapseGap() {
5128
5134
  }
5129
5135
  //#endregion
5130
5136
  //#region src/components/alert/Alert.vue?vue&type=script&setup=true&lang.ts
5131
- var _hoisted_1$83 = {
5137
+ var _hoisted_1$85 = {
5132
5138
  key: 0,
5133
5139
  "data-hn-alert": "",
5134
5140
  class: "hn-collapse"
5135
5141
  };
5136
- var _hoisted_2$40 = { class: "hn-collapse-body" };
5137
- var _hoisted_3$19 = ["role"];
5138
- var _hoisted_4$15 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
5139
- var _hoisted_5$10 = {
5142
+ var _hoisted_2$42 = { class: "hn-collapse-body" };
5143
+ var _hoisted_3$22 = ["role"];
5144
+ var _hoisted_4$18 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
5145
+ var _hoisted_5$12 = {
5140
5146
  key: 0,
5141
5147
  class: "text-fg font-medium"
5142
5148
  };
5143
- var _hoisted_6$7 = {
5149
+ var _hoisted_6$9 = {
5144
5150
  key: 0,
5145
5151
  class: "flex shrink-0 items-center gap-2 self-center"
5146
5152
  };
@@ -5184,7 +5190,7 @@ var Alert_default = /* @__PURE__ */ defineComponent({
5184
5190
  "leave-from-class": "hn-collapse-open",
5185
5191
  "leave-to-class": "hn-collapse-closed"
5186
5192
  }, toHandlers(unref(hooks))), {
5187
- default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$83, [createElementVNode("div", _hoisted_2$40, [createElementVNode("div", {
5193
+ default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$85, [createElementVNode("div", _hoisted_2$42, [createElementVNode("div", {
5188
5194
  role: role.value,
5189
5195
  class: normalizeClass(unref(cn)(unref(callout)({ tone: props.tone }), props.class))
5190
5196
  }, [
@@ -5193,15 +5199,15 @@ var Alert_default = /* @__PURE__ */ defineComponent({
5193
5199
  class: normalizeClass(unref(calloutIcon)({ tone: props.tone })),
5194
5200
  "aria-hidden": "true"
5195
5201
  }, null, 8, ["class"])) : createCommentVNode("", true)]),
5196
- createElementVNode("div", _hoisted_4$15, [props.title ? (openBlock(), createElementBlock("p", _hoisted_5$10, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")]),
5197
- unref(slots).actions ? (openBlock(), createElementBlock("div", _hoisted_6$7, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
5202
+ createElementVNode("div", _hoisted_4$18, [props.title ? (openBlock(), createElementBlock("p", _hoisted_5$12, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")]),
5203
+ unref(slots).actions ? (openBlock(), createElementBlock("div", _hoisted_6$9, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
5198
5204
  props.closable ? (openBlock(), createBlock(CloseButton_default, {
5199
5205
  key: 1,
5200
5206
  size: "sm",
5201
5207
  class: "-my-0.5 -me-1",
5202
5208
  onClick: close
5203
5209
  })) : createCommentVNode("", true)
5204
- ], 10, _hoisted_3$19)])])) : createCommentVNode("", true)]),
5210
+ ], 10, _hoisted_3$22)])])) : createCommentVNode("", true)]),
5205
5211
  _: 3
5206
5212
  }, 16);
5207
5213
  };
@@ -5753,7 +5759,7 @@ var PaginationPage_default = /* @__PURE__ */ defineComponent({
5753
5759
  });
5754
5760
  //#endregion
5755
5761
  //#region src/components/pagination/PaginationEllipsis.vue?vue&type=script&setup=true&lang.ts
5756
- var _hoisted_1$82 = {
5762
+ var _hoisted_1$84 = {
5757
5763
  class: "grid",
5758
5764
  "aria-hidden": "true"
5759
5765
  };
@@ -5800,7 +5806,7 @@ var PaginationEllipsis_default = /* @__PURE__ */ defineComponent({
5800
5806
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", {
5801
5807
  side: props.range.side,
5802
5808
  expanded: expanded.value
5803
- }, () => [createElementVNode("span", _hoisted_1$82, [createVNode(unref(MoreHorizontal), { class: normalizeClass(["hn-transition-base [grid-area:1/1]", expanded.value ? "scale-90 opacity-0" : "scale-100 opacity-100"]) }, null, 8, ["class"]), (openBlock(), createBlock(resolveDynamicComponent(props.range.side === "prev" ? unref(ChevronLeft) : unref(ChevronRight)), { class: normalizeClass([[unref(paginationArrow)({ dir: unref(direction) }), expanded.value ? "scale-100 opacity-100" : "scale-90 opacity-0"], "hn-transition-base [grid-area:1/1]"]) }, null, 8, ["class"]))])])]),
5809
+ }, () => [createElementVNode("span", _hoisted_1$84, [createVNode(unref(MoreHorizontal), { class: normalizeClass(["hn-transition-base [grid-area:1/1]", expanded.value ? "scale-90 opacity-0" : "scale-100 opacity-100"]) }, null, 8, ["class"]), (openBlock(), createBlock(resolveDynamicComponent(props.range.side === "prev" ? unref(ChevronLeft) : unref(ChevronRight)), { class: normalizeClass([[unref(paginationArrow)({ dir: unref(direction) }), expanded.value ? "scale-100 opacity-100" : "scale-90 opacity-0"], "hn-transition-base [grid-area:1/1]"]) }, null, 8, ["class"]))])])]),
5804
5810
  _: 3
5805
5811
  }, 8, [
5806
5812
  "size",
@@ -6393,8 +6399,8 @@ function usePaginationEllipsis(host, items) {
6393
6399
  }
6394
6400
  //#endregion
6395
6401
  //#region src/components/pagination/PaginationPages.vue?vue&type=script&setup=true&lang.ts
6396
- var _hoisted_1$81 = { key: 0 };
6397
- var _hoisted_2$39 = { key: 1 };
6402
+ var _hoisted_1$83 = { key: 0 };
6403
+ var _hoisted_2$41 = { key: 1 };
6398
6404
  //#endregion
6399
6405
  //#region src/components/pagination/PaginationPages.vue
6400
6406
  var PaginationPages_default = /* @__PURE__ */ defineComponent({
@@ -6410,7 +6416,7 @@ var PaginationPages_default = /* @__PURE__ */ defineComponent({
6410
6416
  const ellipsis = usePaginationEllipsis(toRef(props, "host"), () => props.items);
6411
6417
  return (_ctx, _cache) => {
6412
6418
  return openBlock(), createElementBlock(Fragment, null, [
6413
- unref(showFirstLast) ? (openBlock(), createElementBlock("li", _hoisted_1$81, [createVNode(PaginationControl_default, {
6419
+ unref(showFirstLast) ? (openBlock(), createElementBlock("li", _hoisted_1$83, [createVNode(PaginationControl_default, {
6414
6420
  action: "first",
6415
6421
  size: unref(size),
6416
6422
  dir: unref(direction)
@@ -6443,7 +6449,7 @@ var PaginationPages_default = /* @__PURE__ */ defineComponent({
6443
6449
  size: unref(size),
6444
6450
  dir: unref(direction)
6445
6451
  }, null, 8, ["size", "dir"])]),
6446
- unref(showFirstLast) ? (openBlock(), createElementBlock("li", _hoisted_2$39, [createVNode(PaginationControl_default, {
6452
+ unref(showFirstLast) ? (openBlock(), createElementBlock("li", _hoisted_2$41, [createVNode(PaginationControl_default, {
6447
6453
  action: "last",
6448
6454
  size: unref(size),
6449
6455
  dir: unref(direction)
@@ -6732,20 +6738,20 @@ function flattenOptions(items) {
6732
6738
  }
6733
6739
  //#endregion
6734
6740
  //#region src/components/select/SelectList.vue?vue&type=script&setup=true&lang.ts
6735
- var _hoisted_1$80 = { class: "min-w-0 flex-1" };
6736
- var _hoisted_2$38 = { class: "block truncate" };
6737
- var _hoisted_3$18 = {
6741
+ var _hoisted_1$82 = { class: "min-w-0 flex-1" };
6742
+ var _hoisted_2$40 = { class: "block truncate" };
6743
+ var _hoisted_3$21 = {
6738
6744
  key: 0,
6739
6745
  class: "text-muted block truncate text-xs"
6740
6746
  };
6741
- var _hoisted_4$14 = { class: "flex size-4 shrink-0 items-center justify-center" };
6742
- var _hoisted_5$9 = { class: "min-w-0 flex-1" };
6743
- var _hoisted_6$6 = { class: "block truncate" };
6744
- var _hoisted_7$4 = {
6747
+ var _hoisted_4$17 = { class: "flex size-4 shrink-0 items-center justify-center" };
6748
+ var _hoisted_5$11 = { class: "min-w-0 flex-1" };
6749
+ var _hoisted_6$8 = { class: "block truncate" };
6750
+ var _hoisted_7$6 = {
6745
6751
  key: 0,
6746
6752
  class: "text-muted block truncate text-xs"
6747
6753
  };
6748
- var _hoisted_8$2 = { class: "flex size-4 shrink-0 items-center justify-center" };
6754
+ var _hoisted_8$3 = { class: "flex size-4 shrink-0 items-center justify-center" };
6749
6755
  //#endregion
6750
6756
  //#region src/components/select/SelectList.vue
6751
6757
  var SelectList_default = /* @__PURE__ */ defineComponent({
@@ -6791,9 +6797,9 @@ var SelectList_default = /* @__PURE__ */ defineComponent({
6791
6797
  class: normalizeClass(unref(selectItem)())
6792
6798
  }, {
6793
6799
  default: withCtx(() => [createVNode(unref(SelectItemText), { "as-child": "" }, {
6794
- default: withCtx(() => [createElementVNode("span", _hoisted_1$80, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$38, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(option.description), 1)) : createCommentVNode("", true)])])]),
6800
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$82, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$40, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_3$21, toDisplayString(option.description), 1)) : createCommentVNode("", true)])])]),
6795
6801
  _: 2
6796
- }, 1024), createElementVNode("span", _hoisted_4$14, [createVNode(unref(SelectItemIndicator), null, {
6802
+ }, 1024), createElementVNode("span", _hoisted_4$17, [createVNode(unref(SelectItemIndicator), null, {
6797
6803
  default: withCtx(() => [createVNode(unref(Check))]),
6798
6804
  _: 1
6799
6805
  })])]),
@@ -6814,9 +6820,9 @@ var SelectList_default = /* @__PURE__ */ defineComponent({
6814
6820
  class: normalizeClass(unref(selectItem)())
6815
6821
  }, {
6816
6822
  default: withCtx(() => [createVNode(unref(SelectItemText), { "as-child": "" }, {
6817
- default: withCtx(() => [createElementVNode("span", _hoisted_5$9, [renderSlot(_ctx.$slots, "option", { option: item }, () => [createElementVNode("span", _hoisted_6$6, toDisplayString(item.label), 1), item.description ? (openBlock(), createElementBlock("span", _hoisted_7$4, toDisplayString(item.description), 1)) : createCommentVNode("", true)])])]),
6823
+ default: withCtx(() => [createElementVNode("span", _hoisted_5$11, [renderSlot(_ctx.$slots, "option", { option: item }, () => [createElementVNode("span", _hoisted_6$8, toDisplayString(item.label), 1), item.description ? (openBlock(), createElementBlock("span", _hoisted_7$6, toDisplayString(item.description), 1)) : createCommentVNode("", true)])])]),
6818
6824
  _: 2
6819
- }, 1024), createElementVNode("span", _hoisted_8$2, [createVNode(unref(SelectItemIndicator), null, {
6825
+ }, 1024), createElementVNode("span", _hoisted_8$3, [createVNode(unref(SelectItemIndicator), null, {
6820
6826
  default: withCtx(() => [createVNode(unref(Check))]),
6821
6827
  _: 1
6822
6828
  })])]),
@@ -6870,7 +6876,7 @@ function useClearTransition(visible) {
6870
6876
  }
6871
6877
  //#endregion
6872
6878
  //#region src/components/select/Select.vue?vue&type=script&setup=true&lang.ts
6873
- var _hoisted_1$79 = [
6879
+ var _hoisted_1$81 = [
6874
6880
  "dir",
6875
6881
  "data-invalid",
6876
6882
  "data-disabled"
@@ -6988,7 +6994,7 @@ var Select_default = /* @__PURE__ */ defineComponent({
6988
6994
  _: 1
6989
6995
  }, 8, ["label"])], 2)) : createCommentVNode("", true)]),
6990
6996
  _: 1
6991
- }, 16)], 10, _hoisted_1$79), createVNode(SelectList_default, {
6997
+ }, 16)], 10, _hoisted_1$81), createVNode(SelectList_default, {
6992
6998
  options: props.options,
6993
6999
  keyboard: keyboard.value
6994
7000
  }, {
@@ -7077,12 +7083,12 @@ function focusFieldFrom(root, target) {
7077
7083
  }
7078
7084
  //#endregion
7079
7085
  //#region src/components/input/InputBase.vue?vue&type=script&setup=true&lang.ts
7080
- var _hoisted_1$78 = [
7086
+ var _hoisted_1$80 = [
7081
7087
  "data-invalid",
7082
7088
  "data-disabled",
7083
7089
  "aria-busy"
7084
7090
  ];
7085
- var _hoisted_2$37 = [
7091
+ var _hoisted_2$39 = [
7086
7092
  "id",
7087
7093
  "disabled",
7088
7094
  "aria-invalid",
@@ -7169,7 +7175,7 @@ var InputBase_default = /* @__PURE__ */ defineComponent({
7169
7175
  leading: !!unref(slots).leading,
7170
7176
  trailing: clearing.value || trailingSpinner.value || !!unref(slots).trailing
7171
7177
  })
7172
- }), null, 16, _hoisted_2$37), [[vModelDynamic, model.value]]),
7178
+ }), null, 16, _hoisted_2$39), [[vModelDynamic, model.value]]),
7173
7179
  createVNode(Transition, {
7174
7180
  "enter-active-class": "hn-transition-base",
7175
7181
  "enter-from-class": "scale-90 opacity-0",
@@ -7205,7 +7211,7 @@ var InputBase_default = /* @__PURE__ */ defineComponent({
7205
7211
  key: 1,
7206
7212
  class: normalizeClass(unref(inputAdornment)())
7207
7213
  }, [renderSlot(_ctx.$slots, "trailing")], 2)) : createCommentVNode("", true)
7208
- ], 10, _hoisted_1$78);
7214
+ ], 10, _hoisted_1$80);
7209
7215
  };
7210
7216
  }
7211
7217
  });
@@ -7409,18 +7415,18 @@ function usePagination(props, model, sizeModel, change) {
7409
7415
  }
7410
7416
  //#endregion
7411
7417
  //#region src/components/pagination/Pagination.vue?vue&type=script&setup=true&lang.ts
7412
- var _hoisted_1$77 = ["dir", "aria-busy"];
7413
- var _hoisted_2$36 = {
7418
+ var _hoisted_1$79 = ["dir", "aria-busy"];
7419
+ var _hoisted_2$38 = {
7414
7420
  key: 0,
7415
7421
  class: "relative min-h-0 flex-auto"
7416
7422
  };
7417
- var _hoisted_3$17 = ["inert"];
7418
- var _hoisted_4$13 = [
7423
+ var _hoisted_3$20 = ["inert"];
7424
+ var _hoisted_4$16 = [
7419
7425
  "aria-label",
7420
7426
  "inert",
7421
7427
  "data-disabled"
7422
7428
  ];
7423
- var _hoisted_5$8 = {
7429
+ var _hoisted_5$10 = {
7424
7430
  key: 1,
7425
7431
  class: "flex max-w-full flex-wrap items-center gap-3"
7426
7432
  };
@@ -7488,7 +7494,7 @@ var Pagination_default = /* @__PURE__ */ defineComponent({
7488
7494
  dir: unref(rootDirection),
7489
7495
  "aria-busy": props.pending || void 0,
7490
7496
  class: unref(cn)("max-w-full", _ctx.$slots.list && "flex min-h-0 flex-col gap-3", props.class)
7491
- }), [_ctx.$slots.list ? (openBlock(), createElementBlock("div", _hoisted_2$36, [createElementVNode("div", { inert: props.pending || void 0 }, [renderSlot(_ctx.$slots, "list", normalizeProps(guardReactiveProps(unref(state))))], 8, _hoisted_3$17), createVNode(LoadingOverlay_default, { visible: props.pending }, null, 8, ["visible"])])) : createCommentVNode("", true), !props.hideSinglePage || unref(state).pageCount > 1 ? (openBlock(), createBlock(unref(PaginationRoot), {
7497
+ }), [_ctx.$slots.list ? (openBlock(), createElementBlock("div", _hoisted_2$38, [createElementVNode("div", { inert: props.pending || void 0 }, [renderSlot(_ctx.$slots, "list", normalizeProps(guardReactiveProps(unref(state))))], 8, _hoisted_3$20), createVNode(LoadingOverlay_default, { visible: props.pending }, null, 8, ["visible"])])) : createCommentVNode("", true), !props.hideSinglePage || unref(state).pageCount > 1 ? (openBlock(), createBlock(unref(PaginationRoot), {
7492
7498
  key: 1,
7493
7499
  page: unref(page),
7494
7500
  total: unref(total),
@@ -7515,8 +7521,8 @@ var Pagination_default = /* @__PURE__ */ defineComponent({
7515
7521
  fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, "ellipsis", normalizeProps(guardReactiveProps(slotProps)))]),
7516
7522
  key: "1"
7517
7523
  } : void 0]), 1024),
7518
- props.pageSizeOptions?.length || props.showJump ? (openBlock(), createElementBlock("div", _hoisted_5$8, [props.pageSizeOptions?.length ? (openBlock(), createBlock(PaginationSize_default, { key: 0 })) : createCommentVNode("", true), props.showJump ? (openBlock(), createBlock(PaginationJump_default, { key: 1 })) : createCommentVNode("", true)])) : createCommentVNode("", true)
7519
- ])], 10, _hoisted_4$13)]),
7524
+ props.pageSizeOptions?.length || props.showJump ? (openBlock(), createElementBlock("div", _hoisted_5$10, [props.pageSizeOptions?.length ? (openBlock(), createBlock(PaginationSize_default, { key: 0 })) : createCommentVNode("", true), props.showJump ? (openBlock(), createBlock(PaginationJump_default, { key: 1 })) : createCommentVNode("", true)])) : createCommentVNode("", true)
7525
+ ])], 10, _hoisted_4$16)]),
7520
7526
  _: 3
7521
7527
  }, 8, [
7522
7528
  "page",
@@ -7526,13 +7532,13 @@ var Pagination_default = /* @__PURE__ */ defineComponent({
7526
7532
  "show-edges",
7527
7533
  "disabled",
7528
7534
  "onUpdate:page"
7529
- ])) : createCommentVNode("", true)], 16, _hoisted_1$77);
7535
+ ])) : createCommentVNode("", true)], 16, _hoisted_1$79);
7530
7536
  };
7531
7537
  }
7532
7538
  });
7533
7539
  //#endregion
7534
7540
  //#region src/components/prev-next/PrevNext.vue?vue&type=script&setup=true&lang.ts
7535
- var _hoisted_1$76 = ["aria-label"];
7541
+ var _hoisted_1$78 = ["aria-label"];
7536
7542
  //#endregion
7537
7543
  //#region src/components/prev-next/PrevNext.vue
7538
7544
  var PrevNext_default = /* @__PURE__ */ defineComponent({
@@ -7549,7 +7555,7 @@ var PrevNext_default = /* @__PURE__ */ defineComponent({
7549
7555
  return openBlock(), createElementBlock("nav", {
7550
7556
  "aria-label": props.label ?? unref(t).pagination.navLabel,
7551
7557
  class: normalizeClass(unref(cn)("grid gap-4 sm:grid-cols-2", props.class))
7552
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$76);
7558
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$78);
7553
7559
  };
7554
7560
  }
7555
7561
  });
@@ -7573,7 +7579,7 @@ var prevNextEyebrow = tv({
7573
7579
  });
7574
7580
  //#endregion
7575
7581
  //#region src/components/prev-next/PrevNextLink.vue?vue&type=script&setup=true&lang.ts
7576
- var _hoisted_1$75 = { class: "text-fg font-medium" };
7582
+ var _hoisted_1$77 = { class: "text-fg font-medium" };
7577
7583
  //#endregion
7578
7584
  //#region src/components/prev-next/PrevNextLink.vue
7579
7585
  var PrevNextLink_default = /* @__PURE__ */ defineComponent({
@@ -7609,7 +7615,7 @@ var PrevNextLink_default = /* @__PURE__ */ defineComponent({
7609
7615
  class: "size-4",
7610
7616
  "aria-hidden": "true"
7611
7617
  })), createTextVNode(" " + toDisplayString(props.label ?? (props.direction === "prev" ? unref(t).pagination.prev : unref(t).pagination.next)), 1)], 2),
7612
- createElementVNode("span", _hoisted_1$75, [renderSlot(_ctx.$slots, "default")])
7618
+ createElementVNode("span", _hoisted_1$77, [renderSlot(_ctx.$slots, "default")])
7613
7619
  ]),
7614
7620
  _: 3
7615
7621
  }, 16, [
@@ -7686,8 +7692,8 @@ var tableCell = tv({
7686
7692
  });
7687
7693
  //#endregion
7688
7694
  //#region src/components/table/Table.vue?vue&type=script&setup=true&lang.ts
7689
- var _hoisted_1$74 = { class: "hn-table" };
7690
- var _hoisted_2$35 = { key: 0 };
7695
+ var _hoisted_1$76 = { class: "hn-table" };
7696
+ var _hoisted_2$37 = { key: 0 };
7691
7697
  //#endregion
7692
7698
  //#region src/components/table/Table.vue
7693
7699
  var Table_default = /* @__PURE__ */ defineComponent({
@@ -7717,7 +7723,7 @@ var Table_default = /* @__PURE__ */ defineComponent({
7717
7723
  stickyHeader: props.stickyHeader
7718
7724
  }), props.class))
7719
7725
  }, {
7720
- default: withCtx(() => [createElementVNode("table", _hoisted_1$74, [props.caption ? (openBlock(), createElementBlock("caption", _hoisted_2$35, [createElementVNode("span", null, toDisplayString(props.caption), 1)])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])]),
7726
+ default: withCtx(() => [createElementVNode("table", _hoisted_1$76, [props.caption ? (openBlock(), createElementBlock("caption", _hoisted_2$37, [createElementVNode("span", null, toDisplayString(props.caption), 1)])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])]),
7721
7727
  _: 3
7722
7728
  }, 8, ["direction", "class"]);
7723
7729
  };
@@ -7764,7 +7770,7 @@ var TableRow_default = /* @__PURE__ */ defineComponent({
7764
7770
  });
7765
7771
  //#endregion
7766
7772
  //#region src/components/table/TableHead.vue?vue&type=script&setup=true&lang.ts
7767
- var _hoisted_1$73 = ["scope"];
7773
+ var _hoisted_1$75 = ["scope"];
7768
7774
  //#endregion
7769
7775
  //#region src/components/table/TableHead.vue
7770
7776
  var TableHead_default = /* @__PURE__ */ defineComponent({
@@ -7789,7 +7795,7 @@ var TableHead_default = /* @__PURE__ */ defineComponent({
7789
7795
  sticky: props.sticky,
7790
7796
  head: true
7791
7797
  }), props.class))
7792
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$73);
7798
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$75);
7793
7799
  };
7794
7800
  }
7795
7801
  });
@@ -8279,8 +8285,8 @@ var textareaField = tv({ base: [
8279
8285
  ] });
8280
8286
  //#endregion
8281
8287
  //#region src/components/textarea/Textarea.vue?vue&type=script&setup=true&lang.ts
8282
- var _hoisted_1$72 = ["data-invalid", "data-disabled"];
8283
- var _hoisted_2$34 = [
8288
+ var _hoisted_1$74 = ["data-invalid", "data-disabled"];
8289
+ var _hoisted_2$36 = [
8284
8290
  "id",
8285
8291
  "rows",
8286
8292
  "disabled",
@@ -8349,9 +8355,9 @@ var Textarea_default = /* @__PURE__ */ defineComponent({
8349
8355
  "aria-describedby": unref(describedBy),
8350
8356
  class: unref(textareaField)(),
8351
8357
  onInput: _cache[1] || (_cache[1] = (...args) => unref(fit) && unref(fit)(...args))
8352
- }), null, 16, _hoisted_2$34), [[vModelText, model.value]])]),
8358
+ }), null, 16, _hoisted_2$36), [[vModelText, model.value]])]),
8353
8359
  _: 1
8354
- }, 512)], 14, _hoisted_1$72);
8360
+ }, 512)], 14, _hoisted_1$74);
8355
8361
  };
8356
8362
  }
8357
8363
  });
@@ -8485,7 +8491,7 @@ var NumberInput_default = /* @__PURE__ */ defineComponent({
8485
8491
  });
8486
8492
  //#endregion
8487
8493
  //#region src/components/password-input/PasswordInput.vue?vue&type=script&setup=true&lang.ts
8488
- var _hoisted_1$71 = { class: "relative inline-flex" };
8494
+ var _hoisted_1$73 = { class: "relative inline-flex" };
8489
8495
  //#endregion
8490
8496
  //#region src/components/password-input/PasswordInput.vue
8491
8497
  var PasswordInput_default = /* @__PURE__ */ defineComponent({
@@ -8529,7 +8535,7 @@ var PasswordInput_default = /* @__PURE__ */ defineComponent({
8529
8535
  disabled: props.disabled,
8530
8536
  onClick: _cache[0] || (_cache[0] = ($event) => visible.value = !visible.value)
8531
8537
  }, {
8532
- default: withCtx(() => [createElementVNode("span", _hoisted_1$71, [createVNode(Transition, {
8538
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$73, [createVNode(Transition, {
8533
8539
  "enter-active-class": "hn-transition-base",
8534
8540
  "enter-from-class": "scale-90 opacity-0",
8535
8541
  "leave-active-class": "hn-transition absolute",
@@ -8624,7 +8630,7 @@ var inputGroup = tv({
8624
8630
  var inputGroupAddon = tv({ base: "text-muted flex shrink-0 items-center gap-2 px-[var(--hn-input-px)] whitespace-nowrap [&>svg]:size-[var(--hn-input-icon)]" });
8625
8631
  //#endregion
8626
8632
  //#region src/components/input-group/InputGroup.vue?vue&type=script&setup=true&lang.ts
8627
- var _hoisted_1$70 = ["data-invalid", "data-disabled"];
8633
+ var _hoisted_1$72 = ["data-invalid", "data-disabled"];
8628
8634
  //#endregion
8629
8635
  //#region src/components/input-group/InputGroup.vue
8630
8636
  var InputGroup_default = /* @__PURE__ */ defineComponent({
@@ -8656,7 +8662,7 @@ var InputGroup_default = /* @__PURE__ */ defineComponent({
8656
8662
  size: props.size
8657
8663
  }), unref(inputGroup)({ divided: props.variant !== "bare" }), props.class)),
8658
8664
  onClick: _cache[0] || (_cache[0] = ($event) => unref(focusFieldFrom)($event.currentTarget, $event.target))
8659
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$70);
8665
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$72);
8660
8666
  };
8661
8667
  }
8662
8668
  });
@@ -8686,18 +8692,18 @@ var multiSelectTrigger = tv({ base: [
8686
8692
  var multiSelectChips = tv({ base: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden" });
8687
8693
  //#endregion
8688
8694
  //#region src/components/multi-select/MultiSelect.vue?vue&type=script&setup=true&lang.ts
8689
- var _hoisted_1$69 = { class: "min-w-0 truncate" };
8690
- var _hoisted_2$33 = {
8695
+ var _hoisted_1$71 = { class: "min-w-0 truncate" };
8696
+ var _hoisted_2$35 = {
8691
8697
  key: 1,
8692
8698
  class: "min-w-0 truncate"
8693
8699
  };
8694
- var _hoisted_3$16 = [
8700
+ var _hoisted_3$19 = [
8695
8701
  "name",
8696
8702
  "required",
8697
8703
  "autocomplete",
8698
8704
  "disabled"
8699
8705
  ];
8700
- var _hoisted_4$12 = ["value", "disabled"];
8706
+ var _hoisted_4$15 = ["value", "disabled"];
8701
8707
  //#endregion
8702
8708
  //#region src/components/multi-select/MultiSelect.vue
8703
8709
  var MultiSelect_default = /* @__PURE__ */ defineComponent({
@@ -8801,7 +8807,7 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
8801
8807
  onClick: isolate,
8802
8808
  onRemove: ($event) => remove(option.value)
8803
8809
  }, {
8804
- default: withCtx(() => [createElementVNode("span", _hoisted_1$69, toDisplayString(option.label), 1)]),
8810
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$71, toDisplayString(option.label), 1)]),
8805
8811
  _: 2
8806
8812
  }, 1032, [
8807
8813
  "size",
@@ -8816,7 +8822,7 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
8816
8822
  }, {
8817
8823
  default: withCtx(() => [createTextVNode(" +" + toDisplayString(overflow.value), 1)]),
8818
8824
  _: 1
8819
- }, 8, ["size", "disabled"])) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_2$33, toDisplayString(props.placeholder ?? unref(t).select.placeholder), 1))], 2),
8825
+ }, 8, ["size", "disabled"])) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_2$35, toDisplayString(props.placeholder ?? unref(t).select.placeholder), 1))], 2),
8820
8826
  createVNode(Transition, {
8821
8827
  "enter-active-class": "hn-transition-base",
8822
8828
  "enter-from-class": "scale-90 opacity-0",
@@ -8868,8 +8874,8 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
8868
8874
  key: option.value,
8869
8875
  value: option.value,
8870
8876
  disabled: option.disabled
8871
- }, toDisplayString(option.label), 9, _hoisted_4$12);
8872
- }), 128))], 8, _hoisted_3$16), [[vModelSelect, model.value]])]),
8877
+ }, toDisplayString(option.label), 9, _hoisted_4$15);
8878
+ }), 128))], 8, _hoisted_3$19), [[vModelSelect, model.value]])]),
8873
8879
  _: 1
8874
8880
  })) : createCommentVNode("", true),
8875
8881
  createVNode(SelectList_default, {
@@ -8891,25 +8897,87 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
8891
8897
  }
8892
8898
  });
8893
8899
  //#endregion
8900
+ //#region src/components/combobox/composables/useOptionLabels.ts
8901
+ function useOptionLabels(options, selectedOptions) {
8902
+ const labels = reactive(/* @__PURE__ */ new Map());
8903
+ watch([options, selectedOptions], ([items, selected]) => {
8904
+ for (const option of flattenOptions(items)) labels.set(option.value, option.label);
8905
+ for (const option of selected ?? []) labels.set(option.value, option.label);
8906
+ }, {
8907
+ immediate: true,
8908
+ deep: true
8909
+ });
8910
+ return labels;
8911
+ }
8912
+ //#endregion
8913
+ //#region src/components/combobox/composables/useCombobox.ts
8914
+ function useCombobox(options) {
8915
+ const { model, search, open } = options;
8916
+ const labels = useOptionLabels(options.options, () => {
8917
+ const option = options.selectedOption();
8918
+ return option ? [option] : [];
8919
+ });
8920
+ const label = computed(() => displayValue(model.value));
8921
+ const editing = ref(false);
8922
+ const keyboard = ref(false);
8923
+ const input = shallowRef(null);
8924
+ function displayValue(value) {
8925
+ return value == null ? "" : labels.get(value) ?? "";
8926
+ }
8927
+ function clear() {
8928
+ model.value = null;
8929
+ search.value = "";
8930
+ options.onClear();
8931
+ input.value?.$el.focus();
8932
+ }
8933
+ function onInput(event) {
8934
+ if (options.disabled()) return;
8935
+ editing.value = true;
8936
+ if (event.isComposing) return;
8937
+ if (event.target.value === "" && model.value != null) model.value = null;
8938
+ }
8939
+ function onHostClick(event) {
8940
+ focusFieldFrom(event.currentTarget, event.target);
8941
+ }
8942
+ watch(open, (value) => {
8943
+ if (!value) {
8944
+ keyboard.value = false;
8945
+ editing.value = false;
8946
+ }
8947
+ });
8948
+ watch(model, () => editing.value = false, { flush: "sync" });
8949
+ watch(label, (value) => {
8950
+ if (!editing.value) search.value = value;
8951
+ });
8952
+ return {
8953
+ keyboard,
8954
+ input,
8955
+ displayValue,
8956
+ clear,
8957
+ onInput,
8958
+ onHostClick
8959
+ };
8960
+ }
8961
+ //#endregion
8894
8962
  //#region src/components/combobox/combobox.variants.ts
8895
8963
  var comboboxContent = tv({ base: ["hn-anim-pop z-(--hn-z-overlay) flex w-[var(--reka-combobox-trigger-width)] min-w-40 flex-col overflow-hidden shadow-md outline-none", "[&[data-hn-fresh]_[data-highlighted]:not(:hover)]:[--hn-state-hover-opacity:0]"] });
8896
8964
  var comboboxList = tv({ base: "max-h-[min(20rem,var(--reka-combobox-content-available-height))]" });
8897
8965
  //#endregion
8898
8966
  //#region src/components/combobox/ComboboxList.vue?vue&type=script&setup=true&lang.ts
8899
- var _hoisted_1$68 = { class: "min-w-0 flex-1" };
8900
- var _hoisted_2$32 = { class: "block truncate" };
8901
- var _hoisted_3$15 = {
8967
+ var _hoisted_1$70 = { class: "min-w-0 flex-1" };
8968
+ var _hoisted_2$34 = { class: "block truncate" };
8969
+ var _hoisted_3$18 = {
8902
8970
  key: 0,
8903
8971
  class: "text-muted block truncate text-xs"
8904
8972
  };
8905
- var _hoisted_4$11 = { class: "flex size-4 shrink-0 items-center justify-center" };
8906
- var _hoisted_5$7 = { class: "min-w-0 flex-1" };
8907
- var _hoisted_6$5 = { class: "block truncate" };
8908
- var _hoisted_7$3 = {
8973
+ var _hoisted_4$14 = { class: "flex size-4 shrink-0 items-center justify-center" };
8974
+ var _hoisted_5$9 = { class: "min-w-0 flex-1" };
8975
+ var _hoisted_6$7 = { class: "block truncate" };
8976
+ var _hoisted_7$5 = {
8909
8977
  key: 0,
8910
8978
  class: "text-muted block truncate text-xs"
8911
8979
  };
8912
- var _hoisted_8$1 = { class: "flex size-4 shrink-0 items-center justify-center" };
8980
+ var _hoisted_8$2 = { class: "flex size-4 shrink-0 items-center justify-center" };
8913
8981
  //#endregion
8914
8982
  //#region src/components/combobox/ComboboxList.vue
8915
8983
  var ComboboxList_default = /* @__PURE__ */ defineComponent({
@@ -8954,7 +9022,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
8954
9022
  disabled: option.disabled,
8955
9023
  class: normalizeClass(unref(selectItem)())
8956
9024
  }, {
8957
- default: withCtx(() => [createElementVNode("span", _hoisted_1$68, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$32, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_3$15, toDisplayString(option.description), 1)) : createCommentVNode("", true)])]), createElementVNode("span", _hoisted_4$11, [createVNode(unref(ComboboxItemIndicator), null, {
9025
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$70, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$34, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(option.description), 1)) : createCommentVNode("", true)])]), createElementVNode("span", _hoisted_4$14, [createVNode(unref(ComboboxItemIndicator), null, {
8958
9026
  default: withCtx(() => [createVNode(unref(Check))]),
8959
9027
  _: 1
8960
9028
  })])]),
@@ -8974,7 +9042,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
8974
9042
  disabled: item.disabled,
8975
9043
  class: normalizeClass(unref(selectItem)())
8976
9044
  }, {
8977
- default: withCtx(() => [createElementVNode("span", _hoisted_5$7, [renderSlot(_ctx.$slots, "option", { option: item }, () => [createElementVNode("span", _hoisted_6$5, toDisplayString(item.label), 1), item.description ? (openBlock(), createElementBlock("span", _hoisted_7$3, toDisplayString(item.description), 1)) : createCommentVNode("", true)])]), createElementVNode("span", _hoisted_8$1, [createVNode(unref(ComboboxItemIndicator), null, {
9045
+ default: withCtx(() => [createElementVNode("span", _hoisted_5$9, [renderSlot(_ctx.$slots, "option", { option: item }, () => [createElementVNode("span", _hoisted_6$7, toDisplayString(item.label), 1), item.description ? (openBlock(), createElementBlock("span", _hoisted_7$5, toDisplayString(item.description), 1)) : createCommentVNode("", true)])]), createElementVNode("span", _hoisted_8$2, [createVNode(unref(ComboboxItemIndicator), null, {
8978
9046
  default: withCtx(() => [createVNode(unref(Check))]),
8979
9047
  _: 1
8980
9048
  })])]),
@@ -9002,7 +9070,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
9002
9070
  });
9003
9071
  //#endregion
9004
9072
  //#region src/components/combobox/Combobox.vue?vue&type=script&setup=true&lang.ts
9005
- var _hoisted_1$67 = ["data-invalid", "data-disabled"];
9073
+ var _hoisted_1$69 = ["data-invalid", "data-disabled"];
9006
9074
  //#endregion
9007
9075
  //#region src/components/combobox/Combobox.vue
9008
9076
  var Combobox_default = /* @__PURE__ */ defineComponent({
@@ -9011,6 +9079,7 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9011
9079
  __name: "Combobox",
9012
9080
  props: /*@__PURE__*/ mergeModels({
9013
9081
  options: {},
9082
+ selectedOption: {},
9014
9083
  placeholder: {},
9015
9084
  ignoreFilter: { type: Boolean },
9016
9085
  clearable: { type: Boolean },
@@ -9043,28 +9112,20 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9043
9112
  const open = useModel(__props, "open");
9044
9113
  const t = useUiLocale();
9045
9114
  const group = injectInputGroup();
9046
- const keyboard = ref(false);
9047
- const input = shallowRef(null);
9048
9115
  computed(() => group ? group.size.value : props.size);
9049
9116
  const { id: fieldId, invalid, disabled, describedBy } = useFieldControl({
9050
9117
  invalid: () => props.invalid || !!group?.invalid.value,
9051
9118
  disabled: () => props.disabled || !!group?.disabled.value
9052
9119
  });
9053
9120
  const clearing = computed(() => !!props.clearable && model.value != null && model.value !== "" && !disabled.value);
9054
- function displayValue(value) {
9055
- return flattenOptions(props.options).find((option) => option.value === value)?.label ?? "";
9056
- }
9057
- function clear() {
9058
- model.value = null;
9059
- search.value = "";
9060
- emit("clear");
9061
- input.value?.$el.focus();
9062
- }
9063
- watch(search, (value) => {
9064
- if (value === "" && model.value != null) model.value = null;
9065
- });
9066
- watch(open, (value) => {
9067
- if (!value) keyboard.value = false;
9121
+ const { keyboard, input, displayValue, clear, onInput, onHostClick } = useCombobox({
9122
+ options: () => props.options,
9123
+ selectedOption: () => props.selectedOption,
9124
+ model,
9125
+ search,
9126
+ open,
9127
+ disabled: () => disabled.value,
9128
+ onClear: () => emit("clear")
9068
9129
  });
9069
9130
  return (_ctx, _cache) => {
9070
9131
  return openBlock(), createBlock(unref(ComboboxRoot), {
@@ -9085,7 +9146,7 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9085
9146
  variant: props.variant,
9086
9147
  size: props.size
9087
9148
  }), props.class)),
9088
- onClick: _cache[2] || (_cache[2] = ($event) => unref(focusFieldFrom)($event.currentTarget, $event.target)),
9149
+ onClick: _cache[2] || (_cache[2] = (...args) => unref(onHostClick) && unref(onHostClick)(...args)),
9089
9150
  onKeydown: _cache[3] || (_cache[3] = ($event) => keyboard.value = true)
9090
9151
  }, [
9091
9152
  createVNode(unref(ComboboxInput), mergeProps({
@@ -9096,19 +9157,22 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9096
9157
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => search.value = $event),
9097
9158
  id: unref(fieldId),
9098
9159
  "aria-describedby": unref(describedBy),
9099
- "display-value": displayValue,
9160
+ "display-value": unref(displayValue),
9100
9161
  placeholder: props.placeholder ?? unref(t).combobox.placeholder,
9101
9162
  disabled: unref(disabled),
9102
9163
  "aria-invalid": unref(invalid) || void 0,
9103
- class: unref(inputControl)({ trailing: true })
9164
+ class: unref(inputControl)({ trailing: true }),
9165
+ onInput: unref(onInput)
9104
9166
  }), null, 16, [
9105
9167
  "modelValue",
9106
9168
  "id",
9107
9169
  "aria-describedby",
9170
+ "display-value",
9108
9171
  "placeholder",
9109
9172
  "disabled",
9110
9173
  "aria-invalid",
9111
- "class"
9174
+ "class",
9175
+ "onInput"
9112
9176
  ]),
9113
9177
  createVNode(Transition, {
9114
9178
  "enter-active-class": "hn-transition-base",
@@ -9122,11 +9186,11 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9122
9186
  class: normalizeClass(unref(inputActionSlot)())
9123
9187
  }, [createVNode(InputAction_default, {
9124
9188
  label: unref(t).common.clear,
9125
- onClick: clear
9189
+ onClick: unref(clear)
9126
9190
  }, {
9127
9191
  default: withCtx(() => [createVNode(unref(X))]),
9128
9192
  _: 1
9129
- }, 8, ["label"])], 2)) : createCommentVNode("", true)]),
9193
+ }, 8, ["label", "onClick"])], 2)) : createCommentVNode("", true)]),
9130
9194
  _: 1
9131
9195
  }),
9132
9196
  createVNode(unref(ComboboxTrigger), {
@@ -9142,11 +9206,11 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
9142
9206
  "disabled",
9143
9207
  "class"
9144
9208
  ])
9145
- ], 42, _hoisted_1$67)]),
9209
+ ], 42, _hoisted_1$69)]),
9146
9210
  _: 1
9147
9211
  }), createVNode(ComboboxList_default, {
9148
9212
  options: props.options,
9149
- keyboard: keyboard.value
9213
+ keyboard: unref(keyboard)
9150
9214
  }, {
9151
9215
  option: withCtx((slotProps) => [renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps(slotProps)))]),
9152
9216
  _: 3
@@ -9191,11 +9255,11 @@ var commandItemHint = tv({ base: "ms-auto flex shrink-0 items-center gap-1" });
9191
9255
  var commandEmpty = tv({ base: "text-muted px-4 py-8 text-center text-sm" });
9192
9256
  //#endregion
9193
9257
  //#region src/components/command-palette/CommandPaletteItem.vue?vue&type=script&setup=true&lang.ts
9194
- var _hoisted_1$66 = { class: "truncate" };
9195
- var _hoisted_2$31 = ["textContent"];
9196
- var _hoisted_3$14 = ["textContent"];
9197
- var _hoisted_4$10 = ["textContent"];
9198
- var _hoisted_5$6 = {
9258
+ var _hoisted_1$68 = { class: "truncate" };
9259
+ var _hoisted_2$33 = ["textContent"];
9260
+ var _hoisted_3$17 = ["textContent"];
9261
+ var _hoisted_4$13 = ["textContent"];
9262
+ var _hoisted_5$8 = {
9199
9263
  key: 0,
9200
9264
  class: "text-muted truncate text-xs"
9201
9265
  };
@@ -9236,18 +9300,18 @@ var CommandPaletteItem_default = /* @__PURE__ */ defineComponent({
9236
9300
  "aria-hidden": "true",
9237
9301
  class: "text-muted"
9238
9302
  })) : createCommentVNode("", true),
9239
- createElementVNode("span", { class: normalizeClass(unref(commandItemBody)()) }, [createElementVNode("span", _hoisted_1$66, [
9240
- createElementVNode("span", { textContent: toDisplayString(parts.value[0]) }, null, 8, _hoisted_2$31),
9303
+ createElementVNode("span", { class: normalizeClass(unref(commandItemBody)()) }, [createElementVNode("span", _hoisted_1$68, [
9304
+ createElementVNode("span", { textContent: toDisplayString(parts.value[0]) }, null, 8, _hoisted_2$33),
9241
9305
  parts.value[1] ? (openBlock(), createElementBlock("span", {
9242
9306
  key: 0,
9243
9307
  class: normalizeClass(unref(commandItemMatch)()),
9244
9308
  textContent: toDisplayString(parts.value[1])
9245
- }, null, 10, _hoisted_3$14)) : createCommentVNode("", true),
9309
+ }, null, 10, _hoisted_3$17)) : createCommentVNode("", true),
9246
9310
  parts.value[2] ? (openBlock(), createElementBlock("span", {
9247
9311
  key: 1,
9248
9312
  textContent: toDisplayString(parts.value[2])
9249
- }, null, 8, _hoisted_4$10)) : createCommentVNode("", true)
9250
- ]), props.match.item.description ? (openBlock(), createElementBlock("span", _hoisted_5$6, toDisplayString(props.match.item.description), 1)) : createCommentVNode("", true)], 2),
9313
+ }, null, 8, _hoisted_4$13)) : createCommentVNode("", true)
9314
+ ]), props.match.item.description ? (openBlock(), createElementBlock("span", _hoisted_5$8, toDisplayString(props.match.item.description), 1)) : createCommentVNode("", true)], 2),
9251
9315
  props.match.item.kbd?.length ? (openBlock(), createElementBlock("span", {
9252
9316
  key: 1,
9253
9317
  class: normalizeClass(unref(commandItemHint)())
@@ -9588,13 +9652,13 @@ var CommandPalette_default = /* @__PURE__ */ defineComponent({
9588
9652
  });
9589
9653
  //#endregion
9590
9654
  //#region src/components/listbox/ListboxOptionContent.vue?vue&type=script&setup=true&lang.ts
9591
- var _hoisted_1$65 = { class: "min-w-0 flex-1" };
9592
- var _hoisted_2$30 = { class: "block truncate" };
9593
- var _hoisted_3$13 = {
9655
+ var _hoisted_1$67 = { class: "min-w-0 flex-1" };
9656
+ var _hoisted_2$32 = { class: "block truncate" };
9657
+ var _hoisted_3$16 = {
9594
9658
  key: 0,
9595
9659
  class: "text-muted block truncate text-xs"
9596
9660
  };
9597
- var _hoisted_4$9 = {
9661
+ var _hoisted_4$12 = {
9598
9662
  key: 1,
9599
9663
  class: "flex size-4 shrink-0 items-center justify-center"
9600
9664
  };
@@ -9610,13 +9674,13 @@ var ListboxOptionContent_default = /* @__PURE__ */ defineComponent({
9610
9674
  const slots = useSlots();
9611
9675
  const { isSelected: selected } = injectListboxItemContext();
9612
9676
  return (_ctx, _cache) => {
9613
- return openBlock(), createElementBlock(Fragment, null, [createElementVNode("span", _hoisted_1$65, [renderSlot(_ctx.$slots, "option", {
9677
+ return openBlock(), createElementBlock(Fragment, null, [createElementVNode("span", _hoisted_1$67, [renderSlot(_ctx.$slots, "option", {
9614
9678
  option: props.option,
9615
9679
  selected: unref(selected)
9616
- }, () => [createElementVNode("span", _hoisted_2$30, toDisplayString(props.option.label), 1), props.option.description ? (openBlock(), createElementBlock("span", _hoisted_3$13, toDisplayString(props.option.description), 1)) : createCommentVNode("", true)])]), slots.trailing ? renderSlot(_ctx.$slots, "trailing", {
9680
+ }, () => [createElementVNode("span", _hoisted_2$32, toDisplayString(props.option.label), 1), props.option.description ? (openBlock(), createElementBlock("span", _hoisted_3$16, toDisplayString(props.option.description), 1)) : createCommentVNode("", true)])]), slots.trailing ? renderSlot(_ctx.$slots, "trailing", {
9617
9681
  option: props.option,
9618
9682
  selected: unref(selected)
9619
- }, void 0, void 0, 0) : (openBlock(), createElementBlock("span", _hoisted_4$9, [createVNode(unref(ListboxItemIndicator), null, {
9683
+ }, void 0, void 0, 0) : (openBlock(), createElementBlock("span", _hoisted_4$12, [createVNode(unref(ListboxItemIndicator), null, {
9620
9684
  default: withCtx(() => [createVNode(unref(Check))]),
9621
9685
  _: 1
9622
9686
  })]))], 64);
@@ -9760,95 +9824,495 @@ var Listbox_default = /* @__PURE__ */ defineComponent({
9760
9824
  }
9761
9825
  });
9762
9826
  //#endregion
9763
- //#region src/components/tree-select/tree-select.variants.ts
9764
- var treeSelectContent = tv({ base: ["hn-anim-pop z-(--hn-z-overlay) flex w-[var(--reka-popover-trigger-width)] min-w-40 max-h-[var(--reka-popover-content-available-height)] flex-col overflow-hidden shadow-md outline-none"] });
9765
- var treeSelectList = tv({ base: "min-h-0 max-h-80" });
9766
- var treeSelectRow = tv({ base: [
9767
- "hn-interactive hn-state-layer hn-press-none relative isolate flex w-full cursor-pointer",
9768
- "items-center gap-1 rounded-md py-2 pe-2.5 text-start text-sm select-none",
9769
- "text-fg [&_svg]:size-4 [&_svg]:shrink-0",
9770
- "data-disabled:pointer-events-none data-disabled:opacity-50"
9771
- ] });
9772
- var treeSelectToggle = tv({ base: ["text-muted flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm", "[&>span>svg]:size-3.5"] });
9827
+ //#region src/components/checkbox/checkbox.variants.ts
9828
+ var checkbox = tv({
9829
+ base: ["text-fg grid w-fit max-w-full cursor-pointer items-center gap-x-[var(--hn-field-gap)] select-none", "data-disabled:cursor-not-allowed data-disabled:opacity-50"],
9830
+ variants: {
9831
+ controlPlacement: {
9832
+ start: "grid-cols-[auto_minmax(0,1fr)]",
9833
+ end: "grid-cols-[minmax(0,1fr)_auto]"
9834
+ },
9835
+ block: { true: "w-full" },
9836
+ bare: { true: "gap-x-0" },
9837
+ size: {
9838
+ sm: "text-sm",
9839
+ md: "text-base",
9840
+ lg: "text-md"
9841
+ }
9842
+ },
9843
+ defaultVariants: {
9844
+ size: "md",
9845
+ controlPlacement: "start",
9846
+ block: false
9847
+ }
9848
+ });
9849
+ var checkboxControl = tv({
9850
+ base: "row-start-1",
9851
+ variants: { controlPlacement: {
9852
+ start: "col-start-1 justify-self-start",
9853
+ end: "col-start-2 justify-self-end"
9854
+ } },
9855
+ defaultVariants: { controlPlacement: "start" }
9856
+ });
9857
+ var checkboxBox = tv({
9858
+ base: [
9859
+ "hn-focus-ring hn-state-layer hn-transition-base relative grid shrink-0 cursor-pointer place-items-center",
9860
+ "size-[var(--hn-checkbox-size)] border",
9861
+ "border-line bg-surface shadow-sm disabled:cursor-not-allowed",
9862
+ "[--hn-state-selected-color:var(--hn-accent-on)] [--hn-state-selected-opacity:0]",
9863
+ "data-[state=checked]:border-accent data-[state=checked]:bg-accent data-[state=checked]:text-surface",
9864
+ "data-[state=indeterminate]:border-accent data-[state=indeterminate]:bg-accent data-[state=indeterminate]:text-surface",
9865
+ "data-invalid:border-danger data-invalid:focus-visible:outline-danger",
9866
+ "[&_svg]:col-start-1 [&_svg]:row-start-1 [&_svg]:size-[var(--hn-checkbox-icon)] [&_svg]:stroke-[3]"
9867
+ ],
9868
+ variants: {
9869
+ shape: {
9870
+ square: "rounded-xs",
9871
+ round: "rounded-full"
9872
+ },
9873
+ size: {
9874
+ sm: "[--hn-checkbox-icon:0.625rem] [--hn-checkbox-size:0.875rem]",
9875
+ md: "[--hn-checkbox-icon:0.75rem] [--hn-checkbox-size:1rem]",
9876
+ lg: "[--hn-checkbox-icon:0.875rem] [--hn-checkbox-size:1.125rem]"
9877
+ }
9878
+ },
9879
+ defaultVariants: {
9880
+ shape: "square",
9881
+ size: "md"
9882
+ }
9883
+ });
9884
+ var checkboxTitle = tv({
9885
+ base: "row-start-1 flex min-h-[1lh] min-w-0 items-center",
9886
+ variants: { controlPlacement: {
9887
+ start: "col-start-2",
9888
+ end: "col-start-1"
9889
+ } },
9890
+ defaultVariants: { controlPlacement: "start" }
9891
+ });
9892
+ var checkboxTitleText = tv({ base: "block [text-box:trim-both_cap_alphabetic]" });
9893
+ var checkboxDescription = tv({
9894
+ base: "text-muted row-start-2 block",
9895
+ variants: {
9896
+ controlPlacement: {
9897
+ start: "col-start-2",
9898
+ end: "col-start-1"
9899
+ },
9900
+ size: {
9901
+ sm: "text-xs",
9902
+ md: "text-sm",
9903
+ lg: "text-base"
9904
+ }
9905
+ },
9906
+ defaultVariants: {
9907
+ size: "md",
9908
+ controlPlacement: "start"
9909
+ }
9910
+ });
9773
9911
  //#endregion
9774
- //#region src/components/tree-select/TreeSelectSearch.vue?vue&type=script&setup=true&lang.ts
9775
- var _hoisted_1$64 = { class: "border-line shrink-0 border-b px-1" };
9776
- var _hoisted_2$29 = [
9777
- "aria-label",
9778
- "aria-controls",
9779
- "placeholder"
9780
- ];
9912
+ //#region src/components/tree/TreeCheck.vue?vue&type=script&setup=true&lang.ts
9913
+ var _hoisted_1$66 = ["data-state"];
9781
9914
  //#endregion
9782
- //#region src/components/tree-select/TreeSelectSearch.vue
9783
- var TreeSelectSearch_default = /* @__PURE__ */ defineComponent({
9784
- name: "HnTreeSelectSearch",
9785
- inheritAttrs: false,
9786
- __name: "TreeSelectSearch",
9787
- props: /*@__PURE__*/ mergeModels({
9788
- placeholder: {},
9789
- controls: {}
9790
- }, {
9791
- "modelValue": { required: true },
9792
- "modelModifiers": {}
9793
- }),
9794
- emits: /*@__PURE__*/ mergeModels(["clear", "keydown"], ["update:modelValue"]),
9795
- setup(__props, { expose: __expose, emit: __emit }) {
9915
+ //#region src/components/tree/TreeCheck.vue
9916
+ var TreeCheck_default = /* @__PURE__ */ defineComponent({
9917
+ name: "HnTreeCheck",
9918
+ __name: "TreeCheck",
9919
+ props: {
9920
+ selected: { type: Boolean },
9921
+ indeterminate: { type: Boolean }
9922
+ },
9923
+ setup(__props) {
9796
9924
  const props = __props;
9797
- const emit = __emit;
9798
- const model = useModel(__props, "modelValue");
9799
- const t = useUiLocale();
9800
- const input = shallowRef(null);
9801
- __expose({ focus: () => input.value?.focus() });
9802
9925
  return (_ctx, _cache) => {
9803
- return openBlock(), createElementBlock("div", _hoisted_1$64, [createElementVNode("div", { class: normalizeClass(unref(textInputHost)({
9804
- variant: "bare",
9805
- size: "sm"
9806
- })) }, [
9807
- createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(unref(Search))], 2),
9808
- withDirectives(createElementVNode("input", {
9809
- ref_key: "input",
9810
- ref: input,
9811
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
9812
- "data-hn-tree-select-search": "",
9813
- type: "text",
9814
- role: "searchbox",
9815
- autocomplete: "off",
9816
- "aria-label": props.placeholder,
9817
- "aria-controls": props.controls,
9818
- placeholder: props.placeholder,
9819
- class: normalizeClass(unref(inputControl)({
9820
- leading: true,
9821
- trailing: !!model.value
9822
- })),
9823
- onKeydown: _cache[1] || (_cache[1] = ($event) => emit("keydown", $event))
9824
- }, null, 42, _hoisted_2$29), [[vModelText, model.value]]),
9825
- createVNode(Transition, {
9826
- "enter-active-class": "hn-transition-base",
9827
- "enter-from-class": "scale-90 opacity-0",
9828
- "leave-active-class": "hn-transition",
9829
- "leave-to-class": "scale-90 opacity-0"
9830
- }, {
9831
- default: withCtx(() => [model.value ? (openBlock(), createBlock(InputAction_default, {
9832
- key: 0,
9833
- label: unref(t).common.clear,
9834
- onClick: _cache[2] || (_cache[2] = ($event) => emit("clear"))
9835
- }, {
9836
- default: withCtx(() => [createVNode(unref(X))]),
9837
- _: 1
9838
- }, 8, ["label"])) : createCommentVNode("", true)]),
9839
- _: 1
9840
- })
9841
- ], 2)]);
9926
+ return openBlock(), createElementBlock("span", {
9927
+ "aria-hidden": "true",
9928
+ "data-state": props.indeterminate ? "indeterminate" : props.selected ? "checked" : "unchecked",
9929
+ class: normalizeClass([unref(checkboxBox)(), "pointer-events-none"])
9930
+ }, [createVNode(Transition, {
9931
+ "enter-active-class": "hn-transition-press",
9932
+ "enter-from-class": "scale-50 opacity-0",
9933
+ "leave-active-class": "hn-transition",
9934
+ "leave-to-class": "scale-50 opacity-0"
9935
+ }, {
9936
+ default: withCtx(() => [props.selected ? (openBlock(), createBlock(unref(Check), { key: 0 })) : createCommentVNode("", true)]),
9937
+ _: 1
9938
+ }), createVNode(Transition, {
9939
+ "enter-active-class": "hn-transition-press",
9940
+ "enter-from-class": "scale-50 opacity-0",
9941
+ "leave-active-class": "hn-transition",
9942
+ "leave-to-class": "scale-50 opacity-0"
9943
+ }, {
9944
+ default: withCtx(() => [props.indeterminate ? (openBlock(), createBlock(unref(Minus), { key: 0 })) : createCommentVNode("", true)]),
9945
+ _: 1
9946
+ })], 10, _hoisted_1$66);
9842
9947
  };
9843
9948
  }
9844
9949
  });
9845
9950
  //#endregion
9846
- //#region src/components/tree-select/types.ts
9847
- function findNode(nodes, value) {
9848
- for (const node of nodes) {
9849
- if (node.value === value) return node;
9850
- const hit = node.children && findNode(node.children, value);
9851
- if (hit) return hit;
9951
+ //#region src/components/tree/utils/selection.ts
9952
+ function indexTree(nodes) {
9953
+ const entries = /* @__PURE__ */ new Map();
9954
+ function visit(node, parent, disabled = false) {
9955
+ const entry = {
9956
+ node,
9957
+ parent,
9958
+ disabled: disabled || !!node.disabled,
9959
+ children: node.children?.map((child) => child.value) ?? []
9960
+ };
9961
+ entries.set(node.value, entry);
9962
+ node.children?.forEach((child) => visit(child, node.value, entry.disabled));
9963
+ }
9964
+ nodes.forEach((node) => visit(node));
9965
+ return {
9966
+ roots: nodes.map((node) => node.value),
9967
+ entries
9968
+ };
9969
+ }
9970
+ function checkedState(tree, values) {
9971
+ const checked = new Set(values);
9972
+ const states = /* @__PURE__ */ new Map();
9973
+ function visit(value, inherited = false) {
9974
+ const entry = tree.entries.get(value);
9975
+ const own = checked.has(value) || !entry.disabled && inherited;
9976
+ const enabled = entry.children.map((child) => visit(child, !entry.disabled && own)).filter((child) => !child.disabled);
9977
+ const selected = entry.disabled || enabled.length === 0 ? own : enabled.every((child) => child.selected);
9978
+ const state = {
9979
+ selected,
9980
+ indeterminate: !entry.disabled && !selected && enabled.some((child) => child.selected || child.indeterminate),
9981
+ disabled: entry.disabled
9982
+ };
9983
+ states.set(value, state);
9984
+ return state;
9985
+ }
9986
+ tree.roots.forEach((value) => visit(value));
9987
+ return states;
9988
+ }
9989
+ function toggleChecked(tree, values, value) {
9990
+ const entry = tree.entries.get(value);
9991
+ if (!entry || entry.disabled) return values;
9992
+ const states = checkedState(tree, values);
9993
+ const checked = new Set(values.filter((value) => !tree.entries.has(value)));
9994
+ states.forEach((state, value) => {
9995
+ if (state.selected) checked.add(value);
9996
+ });
9997
+ const selected = !states.get(value).selected;
9998
+ function visit(value) {
9999
+ const entry = tree.entries.get(value);
10000
+ if (entry.disabled) return;
10001
+ if (selected) checked.add(value);
10002
+ else checked.delete(value);
10003
+ entry.children.forEach(visit);
10004
+ }
10005
+ visit(value);
10006
+ let parent = entry.parent;
10007
+ while (parent !== void 0) {
10008
+ checked.delete(parent);
10009
+ parent = tree.entries.get(parent).parent;
10010
+ }
10011
+ const next = checkedState(tree, [...checked]);
10012
+ return [...[...checked].filter((value) => !tree.entries.has(value)), ...[...tree.entries.keys()].filter((value) => next.get(value).selected)];
10013
+ }
10014
+ //#endregion
10015
+ //#region src/components/tree/composables/useTree.ts
10016
+ function useTree(props, model, expandedModel, disabled) {
10017
+ const initialExpanded = [...props.defaultExpanded];
10018
+ const index = computed(() => indexTree(props.items));
10019
+ const states = computed(() => {
10020
+ if (props.multiple) return checkedState(index.value, Array.isArray(model.value) ? model.value : []);
10021
+ return new Map([...index.value.entries].map(([value, entry]) => [value, {
10022
+ selected: value === model.value,
10023
+ indeterminate: false,
10024
+ disabled: entry.disabled
10025
+ }]));
10026
+ });
10027
+ const selected = computed(() => [...index.value.entries.values()].filter((entry) => states.value.get(entry.node.value)?.selected).map((entry) => entry.node));
10028
+ const keys = computed(() => new Map([...index.value.entries].map(([value, entry]) => [key(entry.node), value])));
10029
+ const expanded = computed({
10030
+ get: () => (expandedModel.value ?? initialExpanded).map((value) => key({ value })),
10031
+ set: (value) => {
10032
+ expandedModel.value = value.flatMap((key) => keys.value.has(key) ? [keys.value.get(key)] : []);
10033
+ }
10034
+ });
10035
+ function key(node) {
10036
+ return `${typeof node.value}:${node.value}`;
10037
+ }
10038
+ function getChildren(node) {
10039
+ return node.children?.length ? node.children : void 0;
10040
+ }
10041
+ function state(node) {
10042
+ const value = states.value.get(node.value);
10043
+ return {
10044
+ ...value,
10045
+ disabled: disabled.value || value.disabled
10046
+ };
10047
+ }
10048
+ function select(event) {
10049
+ event.preventDefault();
10050
+ const node = event.detail.value;
10051
+ if (!node || state(node).disabled) return;
10052
+ model.value = props.multiple ? toggleChecked(index.value, Array.isArray(model.value) ? model.value : [], node.value) : model.value === node.value ? null : node.value;
10053
+ }
10054
+ function toggle(node) {
10055
+ if (state(node).disabled || !getChildren(node)) return;
10056
+ const value = key(node);
10057
+ expanded.value = expanded.value.includes(value) ? expanded.value.filter((key) => key !== value) : [...expanded.value, value];
10058
+ }
10059
+ function keepRowClick(event) {
10060
+ if (event.detail.originalEvent.type === "click") event.preventDefault();
10061
+ }
10062
+ return {
10063
+ selected,
10064
+ expanded,
10065
+ key,
10066
+ getChildren,
10067
+ state,
10068
+ select,
10069
+ toggle,
10070
+ keepRowClick
10071
+ };
10072
+ }
10073
+ //#endregion
10074
+ //#region src/components/tree/tree.variants.ts
10075
+ var tree = tv({ base: "flex w-full min-w-0 flex-col outline-none" });
10076
+ var treeRow = tv({ base: [
10077
+ "hn-interactive hn-state-layer hn-press-none relative isolate flex w-full cursor-pointer",
10078
+ "items-center gap-(--hn-control-gap) rounded-md py-2 pe-2.5 text-start text-sm select-none",
10079
+ "ps-[calc(0.375rem+var(--hn-tree-level)*1.25rem)] text-fg outline-none",
10080
+ "data-disabled:pointer-events-none data-disabled:opacity-50"
10081
+ ] });
10082
+ var treeToggle = tv({ base: "text-muted flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm rtl:-scale-x-100 [&>span>svg]:size-3.5" });
10083
+ var treeEmpty = tv({ base: "text-muted px-2.5 py-2 text-sm" });
10084
+ //#endregion
10085
+ //#region src/components/tree/Tree.vue?vue&type=script&setup=true&lang.ts
10086
+ var _hoisted_1$65 = [
10087
+ "id",
10088
+ "aria-labelledby",
10089
+ "aria-describedby"
10090
+ ];
10091
+ var _hoisted_2$31 = ["aria-selected", "aria-checked"];
10092
+ var _hoisted_3$15 = ["onClick"];
10093
+ var _hoisted_4$11 = {
10094
+ key: 1,
10095
+ class: "size-5 shrink-0",
10096
+ "aria-hidden": "true"
10097
+ };
10098
+ var _hoisted_5$7 = { class: "min-w-0 flex-1" };
10099
+ var _hoisted_6$6 = { class: "block truncate" };
10100
+ var _hoisted_7$4 = {
10101
+ key: 0,
10102
+ class: "text-muted block truncate text-xs"
10103
+ };
10104
+ //#endregion
10105
+ //#region src/components/tree/Tree.vue
10106
+ var Tree_default = /* @__PURE__ */ defineComponent({
10107
+ name: "HnTree",
10108
+ inheritAttrs: false,
10109
+ __name: "Tree",
10110
+ props: /*@__PURE__*/ mergeModels({
10111
+ items: {},
10112
+ multiple: { type: Boolean },
10113
+ defaultExpanded: { default: () => [] },
10114
+ disabled: { type: Boolean },
10115
+ invalid: { type: Boolean },
10116
+ class: {}
10117
+ }, {
10118
+ "modelValue": {},
10119
+ "modelModifiers": {},
10120
+ "expanded": {},
10121
+ "expandedModifiers": {}
10122
+ }),
10123
+ emits: ["update:modelValue", "update:expanded"],
10124
+ setup(__props) {
10125
+ const props = __props;
10126
+ const model = useModel(__props, "modelValue");
10127
+ const expandedModel = useModel(__props, "expanded");
10128
+ const t = useUiLocale();
10129
+ const { id, labelledBy, describedBy, disabled, invalid } = useFieldControl({
10130
+ disabled: () => props.disabled,
10131
+ invalid: () => props.invalid
10132
+ });
10133
+ const { selected, expanded, key, getChildren, state, select, toggle, keepRowClick } = useTree(props, model, expandedModel, disabled);
10134
+ return (_ctx, _cache) => {
10135
+ return props.items.length === 0 ? (openBlock(), createElementBlock("div", mergeProps({ key: 0 }, _ctx.$attrs, {
10136
+ id: unref(id),
10137
+ role: "status",
10138
+ "aria-labelledby": unref(labelledBy),
10139
+ "aria-describedby": unref(describedBy),
10140
+ "data-hn-tree": "",
10141
+ class: unref(cn)(unref(treeEmpty)(), props.class)
10142
+ }), [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref(t).tree.empty), 1)])], 16, _hoisted_1$65)) : (openBlock(), createBlock(unref(TreeRoot), mergeProps({ key: 1 }, _ctx.$attrs, {
10143
+ id: unref(id),
10144
+ expanded: unref(expanded),
10145
+ "onUpdate:expanded": _cache[0] || (_cache[0] = ($event) => isRef(expanded) ? expanded.value = $event : null),
10146
+ items: props.items,
10147
+ "get-key": unref(key),
10148
+ "get-children": unref(getChildren),
10149
+ "model-value": props.multiple ? unref(selected) : unref(selected)[0],
10150
+ multiple: props.multiple,
10151
+ disabled: unref(disabled),
10152
+ "aria-labelledby": unref(labelledBy),
10153
+ "aria-describedby": unref(describedBy),
10154
+ "aria-invalid": unref(invalid) || void 0,
10155
+ "aria-disabled": unref(disabled) || void 0,
10156
+ "data-hn-tree": "",
10157
+ "data-disabled": unref(disabled) ? "" : void 0,
10158
+ "data-invalid": unref(invalid) ? "" : void 0,
10159
+ class: unref(cn)(unref(tree)(), props.class)
10160
+ }), {
10161
+ default: withCtx(({ flattenItems }) => [(openBlock(true), createElementBlock(Fragment, null, renderList(flattenItems, (item) => {
10162
+ return openBlock(), createBlock(unref(TreeItem), mergeProps({ key: item._id }, { ref_for: true }, item.bind, {
10163
+ disabled: unref(state)(item.value).disabled,
10164
+ "as-child": "",
10165
+ onSelect: unref(select),
10166
+ onToggle: unref(keepRowClick)
10167
+ }), {
10168
+ default: withCtx(({ isExpanded }) => [createElementVNode("li", {
10169
+ "aria-selected": props.multiple ? void 0 : unref(state)(item.value).selected,
10170
+ "aria-checked": props.multiple ? unref(state)(item.value).indeterminate ? "mixed" : unref(state)(item.value).selected : void 0,
10171
+ style: normalizeStyle({ "--hn-tree-level": item.level - 1 }),
10172
+ class: normalizeClass(unref(treeRow)())
10173
+ }, [
10174
+ item.hasChildren ? (openBlock(), createElementBlock("span", {
10175
+ key: 0,
10176
+ class: normalizeClass(unref(treeToggle)()),
10177
+ "aria-hidden": "true",
10178
+ "data-hn-tree-toggle": "",
10179
+ onClick: withModifiers(($event) => unref(toggle)(item.value), ["stop"])
10180
+ }, [createVNode(DisclosureIcon_default, {
10181
+ direction: "end",
10182
+ open: isExpanded
10183
+ }, null, 8, ["open"])], 10, _hoisted_3$15)) : (openBlock(), createElementBlock("span", _hoisted_4$11)),
10184
+ props.multiple ? (openBlock(), createBlock(TreeCheck_default, {
10185
+ key: 2,
10186
+ selected: unref(state)(item.value).selected,
10187
+ indeterminate: unref(state)(item.value).indeterminate
10188
+ }, null, 8, ["selected", "indeterminate"])) : createCommentVNode("", true),
10189
+ createElementVNode("span", _hoisted_5$7, [renderSlot(_ctx.$slots, "node", mergeProps({
10190
+ node: item.value,
10191
+ expanded: isExpanded
10192
+ }, { ref_for: true }, unref(state)(item.value)), () => [createElementVNode("span", _hoisted_6$6, toDisplayString(item.value.label), 1), item.value.description ? (openBlock(), createElementBlock("span", _hoisted_7$4, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)])]),
10193
+ renderSlot(_ctx.$slots, "trailing", mergeProps({
10194
+ node: item.value,
10195
+ expanded: isExpanded
10196
+ }, { ref_for: true }, unref(state)(item.value)))
10197
+ ], 14, _hoisted_2$31)]),
10198
+ _: 2
10199
+ }, 1040, [
10200
+ "disabled",
10201
+ "onSelect",
10202
+ "onToggle"
10203
+ ]);
10204
+ }), 128))]),
10205
+ _: 3
10206
+ }, 16, [
10207
+ "id",
10208
+ "expanded",
10209
+ "items",
10210
+ "get-key",
10211
+ "get-children",
10212
+ "model-value",
10213
+ "multiple",
10214
+ "disabled",
10215
+ "aria-labelledby",
10216
+ "aria-describedby",
10217
+ "aria-invalid",
10218
+ "aria-disabled",
10219
+ "data-disabled",
10220
+ "data-invalid",
10221
+ "class"
10222
+ ]));
10223
+ };
10224
+ }
10225
+ });
10226
+ //#endregion
10227
+ //#region src/components/tree-select/tree-select.variants.ts
10228
+ var treeSelectContent = tv({ base: ["hn-anim-pop z-(--hn-z-overlay) flex w-[var(--reka-popover-trigger-width)] min-w-40 max-h-[var(--reka-popover-content-available-height)] flex-col overflow-hidden shadow-md outline-none"] });
10229
+ var treeSelectList = tv({ base: "min-h-0 max-h-80" });
10230
+ var treeSelectRow = tv({ base: [
10231
+ "hn-interactive hn-state-layer hn-press-none relative isolate flex w-full cursor-pointer",
10232
+ "items-center gap-1 rounded-md py-2 pe-2.5 text-start text-sm select-none",
10233
+ "text-fg [&_svg]:size-4 [&_svg]:shrink-0",
10234
+ "data-disabled:pointer-events-none data-disabled:opacity-50"
10235
+ ] });
10236
+ var treeSelectToggle = tv({ base: ["text-muted flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-sm", "[&>span>svg]:size-3.5"] });
10237
+ //#endregion
10238
+ //#region src/components/tree-select/TreeSelectSearch.vue?vue&type=script&setup=true&lang.ts
10239
+ var _hoisted_1$64 = { class: "border-line shrink-0 border-b px-1" };
10240
+ var _hoisted_2$30 = [
10241
+ "aria-label",
10242
+ "aria-controls",
10243
+ "placeholder"
10244
+ ];
10245
+ //#endregion
10246
+ //#region src/components/tree-select/TreeSelectSearch.vue
10247
+ var TreeSelectSearch_default = /* @__PURE__ */ defineComponent({
10248
+ name: "HnTreeSelectSearch",
10249
+ inheritAttrs: false,
10250
+ __name: "TreeSelectSearch",
10251
+ props: /*@__PURE__*/ mergeModels({
10252
+ placeholder: {},
10253
+ controls: {}
10254
+ }, {
10255
+ "modelValue": { required: true },
10256
+ "modelModifiers": {}
10257
+ }),
10258
+ emits: /*@__PURE__*/ mergeModels(["clear", "keydown"], ["update:modelValue"]),
10259
+ setup(__props, { expose: __expose, emit: __emit }) {
10260
+ const props = __props;
10261
+ const emit = __emit;
10262
+ const model = useModel(__props, "modelValue");
10263
+ const t = useUiLocale();
10264
+ const input = shallowRef(null);
10265
+ __expose({ focus: () => input.value?.focus() });
10266
+ return (_ctx, _cache) => {
10267
+ return openBlock(), createElementBlock("div", _hoisted_1$64, [createElementVNode("div", { class: normalizeClass(unref(textInputHost)({
10268
+ variant: "bare",
10269
+ size: "sm"
10270
+ })) }, [
10271
+ createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(unref(Search))], 2),
10272
+ withDirectives(createElementVNode("input", {
10273
+ ref_key: "input",
10274
+ ref: input,
10275
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
10276
+ "data-hn-tree-select-search": "",
10277
+ type: "text",
10278
+ role: "searchbox",
10279
+ autocomplete: "off",
10280
+ "aria-label": props.placeholder,
10281
+ "aria-controls": props.controls,
10282
+ placeholder: props.placeholder,
10283
+ class: normalizeClass(unref(inputControl)({
10284
+ leading: true,
10285
+ trailing: !!model.value
10286
+ })),
10287
+ onKeydown: _cache[1] || (_cache[1] = ($event) => emit("keydown", $event))
10288
+ }, null, 42, _hoisted_2$30), [[vModelText, model.value]]),
10289
+ createVNode(Transition, {
10290
+ "enter-active-class": "hn-transition-base",
10291
+ "enter-from-class": "scale-90 opacity-0",
10292
+ "leave-active-class": "hn-transition",
10293
+ "leave-to-class": "scale-90 opacity-0"
10294
+ }, {
10295
+ default: withCtx(() => [model.value ? (openBlock(), createBlock(InputAction_default, {
10296
+ key: 0,
10297
+ label: unref(t).common.clear,
10298
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("clear"))
10299
+ }, {
10300
+ default: withCtx(() => [createVNode(unref(X))]),
10301
+ _: 1
10302
+ }, 8, ["label"])) : createCommentVNode("", true)]),
10303
+ _: 1
10304
+ })
10305
+ ], 2)]);
10306
+ };
10307
+ }
10308
+ });
10309
+ //#endregion
10310
+ //#region src/components/tree-select/types.ts
10311
+ function findNode(nodes, value) {
10312
+ for (const node of nodes) {
10313
+ if (node.value === value) return node;
10314
+ const hit = node.children && findNode(node.children, value);
10315
+ if (hit) return hit;
9852
10316
  }
9853
10317
  }
9854
10318
  function pathTo(nodes, value, trail = []) {
@@ -9984,19 +10448,19 @@ var _hoisted_1$63 = [
9984
10448
  "data-disabled",
9985
10449
  "aria-invalid"
9986
10450
  ];
9987
- var _hoisted_2$28 = { class: "min-w-0 flex-1 truncate" };
9988
- var _hoisted_3$12 = ["onClick"];
9989
- var _hoisted_4$8 = {
10451
+ var _hoisted_2$29 = { class: "min-w-0 flex-1 truncate" };
10452
+ var _hoisted_3$14 = ["onClick"];
10453
+ var _hoisted_4$10 = {
9990
10454
  key: 1,
9991
10455
  class: "size-5 shrink-0"
9992
10456
  };
9993
- var _hoisted_5$5 = { class: "min-w-0 flex-1" };
9994
- var _hoisted_6$4 = { class: "block truncate" };
9995
- var _hoisted_7$2 = {
10457
+ var _hoisted_5$6 = { class: "min-w-0 flex-1" };
10458
+ var _hoisted_6$5 = { class: "block truncate" };
10459
+ var _hoisted_7$3 = {
9996
10460
  key: 0,
9997
10461
  class: "text-muted block truncate text-xs"
9998
10462
  };
9999
- var _hoisted_8 = { class: "flex size-4 shrink-0 items-center justify-center" };
10463
+ var _hoisted_8$1 = { class: "flex size-4 shrink-0 items-center justify-center" };
10000
10464
  var _hoisted_9 = { role: "status" };
10001
10465
  //#endregion
10002
10466
  //#region src/components/tree-select/TreeSelect.vue
@@ -10067,7 +10531,7 @@ var TreeSelect_default = /* @__PURE__ */ defineComponent({
10067
10531
  variant: props.variant,
10068
10532
  size: props.size
10069
10533
  }), unref(selectTrigger)(), props.class)
10070
- }), [createElementVNode("span", _hoisted_2$28, toDisplayString(unref(selected) ? unref(selected).label : props.placeholder ?? unref(t).select.placeholder), 1), createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(DisclosureIcon_default)], 2)], 16, _hoisted_1$63)]),
10534
+ }), [createElementVNode("span", _hoisted_2$29, toDisplayString(unref(selected) ? unref(selected).label : props.placeholder ?? unref(t).select.placeholder), 1), createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(DisclosureIcon_default)], 2)], 16, _hoisted_1$63)]),
10071
10535
  _: 1
10072
10536
  }), createVNode(unref(PopoverPortal), null, {
10073
10537
  default: withCtx(() => [createVNode(unref(PopoverContent), {
@@ -10134,9 +10598,9 @@ var TreeSelect_default = /* @__PURE__ */ defineComponent({
10134
10598
  }, [createVNode(DisclosureIcon_default, {
10135
10599
  direction: "end",
10136
10600
  open: isExpanded
10137
- }, null, 8, ["open"])], 10, _hoisted_3$12)) : (openBlock(), createElementBlock("span", _hoisted_4$8)),
10138
- createElementVNode("span", _hoisted_5$5, [renderSlot(_ctx.$slots, "node", { node: item.value }, () => [createElementVNode("span", _hoisted_6$4, toDisplayString(item.value.label), 1), item.value.description ? (openBlock(), createElementBlock("span", _hoisted_7$2, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)])]),
10139
- createElementVNode("span", _hoisted_8, [isSelected ? (openBlock(), createBlock(unref(Check), { key: 0 })) : createCommentVNode("", true)])
10601
+ }, null, 8, ["open"])], 10, _hoisted_3$14)) : (openBlock(), createElementBlock("span", _hoisted_4$10)),
10602
+ createElementVNode("span", _hoisted_5$6, [renderSlot(_ctx.$slots, "node", { node: item.value }, () => [createElementVNode("span", _hoisted_6$5, toDisplayString(item.value.label), 1), item.value.description ? (openBlock(), createElementBlock("span", _hoisted_7$3, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)])]),
10603
+ createElementVNode("span", _hoisted_8$1, [isSelected ? (openBlock(), createBlock(unref(Check), { key: 0 })) : createCommentVNode("", true)])
10140
10604
  ]),
10141
10605
  _: 2
10142
10606
  }, 1040, [
@@ -10183,91 +10647,6 @@ var TreeSelect_default = /* @__PURE__ */ defineComponent({
10183
10647
  }
10184
10648
  });
10185
10649
  //#endregion
10186
- //#region src/components/checkbox/checkbox.variants.ts
10187
- var checkbox = tv({
10188
- base: ["text-fg grid w-fit max-w-full cursor-pointer items-center gap-x-[var(--hn-field-gap)] select-none", "data-disabled:cursor-not-allowed data-disabled:opacity-50"],
10189
- variants: {
10190
- controlPlacement: {
10191
- start: "grid-cols-[auto_minmax(0,1fr)]",
10192
- end: "grid-cols-[minmax(0,1fr)_auto]"
10193
- },
10194
- block: { true: "w-full" },
10195
- bare: { true: "gap-x-0" },
10196
- size: {
10197
- sm: "text-sm",
10198
- md: "text-base",
10199
- lg: "text-md"
10200
- }
10201
- },
10202
- defaultVariants: {
10203
- size: "md",
10204
- controlPlacement: "start",
10205
- block: false
10206
- }
10207
- });
10208
- var checkboxControl = tv({
10209
- base: "row-start-1",
10210
- variants: { controlPlacement: {
10211
- start: "col-start-1 justify-self-start",
10212
- end: "col-start-2 justify-self-end"
10213
- } },
10214
- defaultVariants: { controlPlacement: "start" }
10215
- });
10216
- var checkboxBox = tv({
10217
- base: [
10218
- "hn-focus-ring hn-state-layer hn-transition-base relative grid shrink-0 cursor-pointer place-items-center",
10219
- "size-[var(--hn-checkbox-size)] border",
10220
- "border-line bg-surface shadow-sm disabled:cursor-not-allowed",
10221
- "[--hn-state-selected-color:var(--hn-accent-on)] [--hn-state-selected-opacity:0]",
10222
- "data-[state=checked]:border-accent data-[state=checked]:bg-accent data-[state=checked]:text-surface",
10223
- "data-[state=indeterminate]:border-accent data-[state=indeterminate]:bg-accent data-[state=indeterminate]:text-surface",
10224
- "data-invalid:border-danger data-invalid:focus-visible:outline-danger",
10225
- "[&_svg]:col-start-1 [&_svg]:row-start-1 [&_svg]:size-[var(--hn-checkbox-icon)] [&_svg]:stroke-[3]"
10226
- ],
10227
- variants: {
10228
- shape: {
10229
- square: "rounded-xs",
10230
- round: "rounded-full"
10231
- },
10232
- size: {
10233
- sm: "[--hn-checkbox-icon:0.625rem] [--hn-checkbox-size:0.875rem]",
10234
- md: "[--hn-checkbox-icon:0.75rem] [--hn-checkbox-size:1rem]",
10235
- lg: "[--hn-checkbox-icon:0.875rem] [--hn-checkbox-size:1.125rem]"
10236
- }
10237
- },
10238
- defaultVariants: {
10239
- shape: "square",
10240
- size: "md"
10241
- }
10242
- });
10243
- var checkboxTitle = tv({
10244
- base: "row-start-1 flex min-h-[1lh] min-w-0 items-center",
10245
- variants: { controlPlacement: {
10246
- start: "col-start-2",
10247
- end: "col-start-1"
10248
- } },
10249
- defaultVariants: { controlPlacement: "start" }
10250
- });
10251
- var checkboxTitleText = tv({ base: "block [text-box:trim-both_cap_alphabetic]" });
10252
- var checkboxDescription = tv({
10253
- base: "text-muted row-start-2 block",
10254
- variants: {
10255
- controlPlacement: {
10256
- start: "col-start-2",
10257
- end: "col-start-1"
10258
- },
10259
- size: {
10260
- sm: "text-xs",
10261
- md: "text-sm",
10262
- lg: "text-base"
10263
- }
10264
- },
10265
- defaultVariants: {
10266
- size: "md",
10267
- controlPlacement: "start"
10268
- }
10269
- });
10270
- //#endregion
10271
10650
  //#region src/components/checkbox/Checkbox.vue?vue&type=script&setup=true&lang.ts
10272
10651
  var _hoisted_1$62 = ["data-disabled"];
10273
10652
  //#endregion
@@ -11150,11 +11529,11 @@ var _hoisted_1$57 = {
11150
11529
  key: "on",
11151
11530
  class: "inline-flex items-center justify-center"
11152
11531
  };
11153
- var _hoisted_2$27 = {
11532
+ var _hoisted_2$28 = {
11154
11533
  key: "off",
11155
11534
  class: "inline-flex items-center justify-center"
11156
11535
  };
11157
- var _hoisted_3$11 = {
11536
+ var _hoisted_3$13 = {
11158
11537
  key: 2,
11159
11538
  class: "inline-flex items-center"
11160
11539
  };
@@ -11231,10 +11610,10 @@ var Toggle_default = /* @__PURE__ */ defineComponent({
11231
11610
  "leave-active-class": "hn-transition absolute",
11232
11611
  "leave-to-class": "scale-90 opacity-0"
11233
11612
  }, {
11234
- default: withCtx(() => [swapped.value ? (openBlock(), createElementBlock("span", _hoisted_1$57, [renderSlot(_ctx.$slots, "pressed-icon")])) : (openBlock(), createElementBlock("span", _hoisted_2$27, [renderSlot(_ctx.$slots, "icon", { pressed: pressed.value })]))]),
11613
+ default: withCtx(() => [swapped.value ? (openBlock(), createElementBlock("span", _hoisted_1$57, [renderSlot(_ctx.$slots, "pressed-icon")])) : (openBlock(), createElementBlock("span", _hoisted_2$28, [renderSlot(_ctx.$slots, "icon", { pressed: pressed.value })]))]),
11235
11614
  _: 3
11236
11615
  })], 2)) : createCommentVNode("", true),
11237
- unref(slots).default ? (openBlock(), createElementBlock("span", _hoisted_3$11, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true)
11616
+ unref(slots).default ? (openBlock(), createElementBlock("span", _hoisted_3$13, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true)
11238
11617
  ]),
11239
11618
  _: 3
11240
11619
  }, 16, [
@@ -11492,13 +11871,7 @@ function useMultiCombobox(options) {
11492
11871
  const { model, open } = options;
11493
11872
  const keyboard = ref(false);
11494
11873
  const input = shallowRef(null);
11495
- const labels = reactive(/* @__PURE__ */ new Map());
11496
- watch(options.options, (options) => {
11497
- for (const option of flattenOptions(options)) labels.set(option.value, option.label);
11498
- }, {
11499
- immediate: true,
11500
- deep: true
11501
- });
11874
+ const labels = useOptionLabels(options.options, options.selectedOptions);
11502
11875
  const selected = computed(() => model.value.map((value) => ({
11503
11876
  value,
11504
11877
  label: labels.get(value) ?? String(value)
@@ -11548,7 +11921,7 @@ var _hoisted_1$54 = [
11548
11921
  "data-disabled",
11549
11922
  "aria-busy"
11550
11923
  ];
11551
- var _hoisted_2$26 = { class: "min-w-0 truncate" };
11924
+ var _hoisted_2$27 = { class: "min-w-0 truncate" };
11552
11925
  //#endregion
11553
11926
  //#region src/components/multi-combobox/MultiCombobox.vue
11554
11927
  var MultiCombobox_default = /* @__PURE__ */ defineComponent({
@@ -11557,6 +11930,7 @@ var MultiCombobox_default = /* @__PURE__ */ defineComponent({
11557
11930
  __name: "MultiCombobox",
11558
11931
  props: /*@__PURE__*/ mergeModels({
11559
11932
  options: {},
11933
+ selectedOptions: {},
11560
11934
  placeholder: {},
11561
11935
  ignoreFilter: { type: Boolean },
11562
11936
  loading: { type: Boolean },
@@ -11599,6 +11973,7 @@ var MultiCombobox_default = /* @__PURE__ */ defineComponent({
11599
11973
  });
11600
11974
  const { selected, keyboard, input, remove, clear, onHostClick, onInputKeydown } = useMultiCombobox({
11601
11975
  options: () => props.options,
11976
+ selectedOptions: () => props.selectedOptions,
11602
11977
  model,
11603
11978
  open,
11604
11979
  disabled: () => disabled.value,
@@ -11641,7 +12016,7 @@ var MultiCombobox_default = /* @__PURE__ */ defineComponent({
11641
12016
  class: normalizeClass(unref(tagsInputChip)()),
11642
12017
  onRemove: ($event) => unref(remove)(option.value)
11643
12018
  }, {
11644
- default: withCtx(() => [createElementVNode("span", _hoisted_2$26, toDisplayString(option.label), 1)]),
12019
+ default: withCtx(() => [createElementVNode("span", _hoisted_2$27, toDisplayString(option.label), 1)]),
11645
12020
  _: 2
11646
12021
  }, 1032, [
11647
12022
  "size",
@@ -14030,7 +14405,7 @@ var _hoisted_1$46 = [
14030
14405
  "multiple",
14031
14406
  "disabled"
14032
14407
  ];
14033
- var _hoisted_2$25 = [
14408
+ var _hoisted_2$26 = [
14034
14409
  "id",
14035
14410
  "aria-describedby",
14036
14411
  "aria-invalid",
@@ -14039,7 +14414,7 @@ var _hoisted_2$25 = [
14039
14414
  "aria-busy",
14040
14415
  "disabled"
14041
14416
  ];
14042
- var _hoisted_3$10 = ["src"];
14417
+ var _hoisted_3$12 = ["src"];
14043
14418
  //#endregion
14044
14419
  //#region src/components/file-upload/FileUpload.vue
14045
14420
  var FileUpload_default = /* @__PURE__ */ defineComponent({
@@ -14143,7 +14518,7 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
14143
14518
  }, {
14144
14519
  default: withCtx(() => [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(unref(Upload), { "aria-hidden": "true" })])]),
14145
14520
  _: 3
14146
- }, 8, ["swapped"]), renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(unref(t).upload.dropHint), 1)])], 16, _hoisted_2$25)) : (openBlock(), createBlock(Button_default, mergeProps({ key: 1 }, _ctx.$attrs, {
14521
+ }, 8, ["swapped"]), renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(unref(t).upload.dropHint), 1)])], 16, _hoisted_2$26)) : (openBlock(), createBlock(Button_default, mergeProps({ key: 1 }, _ctx.$attrs, {
14147
14522
  id: unref(fieldId),
14148
14523
  "aria-describedby": unref(describedBy),
14149
14524
  "aria-invalid": unref(invalid) || void 0,
@@ -14175,7 +14550,7 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
14175
14550
  key: 0,
14176
14551
  src: unref(urls).get(file),
14177
14552
  alt: ""
14178
- }, null, 8, _hoisted_3$10)) : (openBlock(), createBlock(unref(File), {
14553
+ }, null, 8, _hoisted_3$12)) : (openBlock(), createBlock(unref(File), {
14179
14554
  key: 1,
14180
14555
  "aria-hidden": "true"
14181
14556
  }))], 2),
@@ -14539,7 +14914,7 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
14539
14914
  //#endregion
14540
14915
  //#region src/components/popconfirm/Popconfirm.vue?vue&type=script&setup=true&lang.ts
14541
14916
  var _hoisted_1$45 = { class: "flex flex-col gap-0.5" };
14542
- var _hoisted_2$24 = { class: "flex justify-end gap-2" };
14917
+ var _hoisted_2$25 = { class: "flex justify-end gap-2" };
14543
14918
  //#endregion
14544
14919
  //#region src/components/popconfirm/Popconfirm.vue
14545
14920
  var Popconfirm_default = /* @__PURE__ */ defineComponent({
@@ -14641,7 +15016,7 @@ var Popconfirm_default = /* @__PURE__ */ defineComponent({
14641
15016
  _: 1
14642
15017
  }, 8, ["id"])) : createCommentVNode("", true)]),
14643
15018
  renderSlot(_ctx.$slots, "content"),
14644
- createElementVNode("div", _hoisted_2$24, [createVNode(Button_default, {
15019
+ createElementVNode("div", _hoisted_2$25, [createVNode(Button_default, {
14645
15020
  size: "sm",
14646
15021
  variant: "soft",
14647
15022
  tone: "neutral",
@@ -14677,6 +15052,59 @@ var Popconfirm_default = /* @__PURE__ */ defineComponent({
14677
15052
  }
14678
15053
  });
14679
15054
  //#endregion
15055
+ //#region src/lib/overlay-anchor.ts
15056
+ function overlayAnchorElement(anchor) {
15057
+ return anchor && "nodeType" in anchor ? anchor : void 0;
15058
+ }
15059
+ function overlayAnchorContext(anchor) {
15060
+ return overlayAnchorElement(anchor) ?? (anchor && "contextElement" in anchor ? anchor.contextElement : void 0);
15061
+ }
15062
+ function useOverlayAnchor(source, open, present, strategy) {
15063
+ const reference = shallowRef();
15064
+ let current;
15065
+ watch([
15066
+ source,
15067
+ open,
15068
+ present,
15069
+ strategy
15070
+ ], ([anchor, active, mounted]) => {
15071
+ if (!mounted) {
15072
+ current = void 0;
15073
+ reference.value = void 0;
15074
+ return;
15075
+ }
15076
+ if (!anchor || !active && reference.value && anchor !== current) return;
15077
+ const contextElement = overlayAnchorContext(anchor);
15078
+ if (contextElement && !contextElement.isConnected) return;
15079
+ current = anchor;
15080
+ const measure = () => {
15081
+ const { x, y, width, height, top, right, bottom, left } = anchor.getBoundingClientRect();
15082
+ return {
15083
+ x,
15084
+ y,
15085
+ width,
15086
+ height,
15087
+ top,
15088
+ right,
15089
+ bottom,
15090
+ left
15091
+ };
15092
+ };
15093
+ let rect = measure();
15094
+ reference.value = {
15095
+ contextElement,
15096
+ getBoundingClientRect: () => {
15097
+ if (source() === anchor && (!contextElement || contextElement.isConnected)) rect = measure();
15098
+ return rect;
15099
+ }
15100
+ };
15101
+ }, {
15102
+ immediate: true,
15103
+ flush: "post"
15104
+ });
15105
+ return reference;
15106
+ }
15107
+ //#endregion
14680
15108
  //#region src/lib/overlay-positioner.ts
14681
15109
  function useOverlayPositionerClass(content, className) {
14682
15110
  watchEffect((onCleanup) => {
@@ -14698,12 +15126,12 @@ function useHoverCardAnchor(props) {
14698
15126
  onDismiss: root.onDismiss
14699
15127
  };
14700
15128
  const anchor = computed(() => props.external ? props.anchor ?? void 0 : void 0);
15129
+ const element = computed(() => overlayAnchorElement(anchor.value));
15130
+ const virtual = computed(() => !!anchor.value && !element.value);
14701
15131
  const { content, present } = useOverlayPortal(root.open);
14702
15132
  useOverlayPositionerClass(content, () => props.positionerClass);
14703
15133
  const panel = computed(() => props.external ? content.value?.$el : void 0);
14704
- const liveAnchor = shallowRef();
14705
- const retained = shallowRef();
14706
- const reference = computed(() => props.external ? liveAnchor.value ?? retained.value : void 0);
15134
+ const reference = useOverlayAnchor(() => props.external ? anchor.value : root.triggerElement.value, root.open, present, () => props.updatePositionStrategy);
14707
15135
  let timer;
14708
15136
  let tracking = false;
14709
15137
  function cancel() {
@@ -14716,7 +15144,7 @@ function useHoverCardAnchor(props) {
14716
15144
  root.onOpenChange(false);
14717
15145
  }
14718
15146
  function close() {
14719
- if (timer !== void 0 || !root.open.value || root.hasSelectionRef.value || root.isPointerDownOnContentRef.value) return;
15147
+ if (virtual.value || timer !== void 0 || !root.open.value || root.hasSelectionRef.value || root.isPointerDownOnContentRef.value) return;
14720
15148
  timer = setTimeout(dismiss, props.closeDelay);
14721
15149
  }
14722
15150
  function keep() {
@@ -14727,8 +15155,8 @@ function useHoverCardAnchor(props) {
14727
15155
  const pointer = event;
14728
15156
  if (!root.open.value || !tracking || pointer.pointerType === "touch") return;
14729
15157
  const target = pointer.target;
14730
- if (target && (anchor.value?.contains(target) || panel.value?.contains(target))) return keep();
14731
- const a = anchor.value?.getBoundingClientRect();
15158
+ if (target && (element.value?.contains(target) || panel.value?.contains(target))) return keep();
15159
+ const a = element.value?.getBoundingClientRect();
14732
15160
  const b = panel.value?.getBoundingClientRect();
14733
15161
  if (a && b && inPointerCorridor({
14734
15162
  x: pointer.clientX,
@@ -14738,9 +15166,9 @@ function useHoverCardAnchor(props) {
14738
15166
  }
14739
15167
  function leave(event) {
14740
15168
  const pointer = event;
14741
- if (pointer.pointerType === "touch" || !root.open.value) return;
15169
+ if (virtual.value || pointer.pointerType === "touch" || !root.open.value) return;
14742
15170
  tracking = true;
14743
- const a = anchor.value?.getBoundingClientRect();
15171
+ const a = element.value?.getBoundingClientRect();
14744
15172
  const b = panel.value?.getBoundingClientRect();
14745
15173
  if (a && b && inPointerCorridor({
14746
15174
  x: pointer.clientX,
@@ -14749,19 +15177,11 @@ function useHoverCardAnchor(props) {
14749
15177
  else close();
14750
15178
  }
14751
15179
  function measure() {
14752
- const element = anchor.value;
14753
- if (!element?.isConnected) {
14754
- liveAnchor.value = void 0;
15180
+ if (!anchor.value || element.value && !element.value.isConnected) {
14755
15181
  if (root.open.value) dismiss();
14756
15182
  return;
14757
15183
  }
14758
- liveAnchor.value = element;
14759
- const rect = element.getBoundingClientRect();
14760
- const previous = retained.value?.getBoundingClientRect();
14761
- if (!previous || retained.value?.contextElement !== element || rect.x !== previous.x || rect.y !== previous.y || rect.width !== previous.width || rect.height !== previous.height) retained.value = {
14762
- getBoundingClientRect: () => rect,
14763
- contextElement: element
14764
- };
15184
+ reference.value?.getBoundingClientRect();
14765
15185
  }
14766
15186
  const { pause, resume } = useRafFn(measure, { immediate: false });
14767
15187
  root.onOpen = () => props.external ? keep() : original.onOpen();
@@ -14775,32 +15195,29 @@ function useHoverCardAnchor(props) {
14775
15195
  cancel();
14776
15196
  tracking = false;
14777
15197
  pause();
14778
- if (!props.external || !mounted) {
14779
- liveAnchor.value = void 0;
14780
- return;
14781
- }
15198
+ if (!props.external || !mounted) return;
14782
15199
  if (element !== previous?.[0]) {
14783
15200
  root.hasSelectionRef.value = false;
14784
15201
  root.isPointerDownOnContentRef.value = false;
14785
15202
  }
14786
15203
  measure();
14787
- resume();
15204
+ if (!virtual.value) resume();
14788
15205
  }, {
14789
15206
  immediate: true,
14790
15207
  flush: "post"
14791
15208
  });
14792
- useEventListener(anchor, "pointerenter", keep);
14793
- useEventListener(anchor, "pointerleave", leave);
14794
- useEventListener(anchor, "focusin", keep);
14795
- useEventListener(anchor, "focusout", (event) => {
15209
+ useEventListener(element, "pointerenter", keep);
15210
+ useEventListener(element, "pointerleave", leave);
15211
+ useEventListener(element, "focusin", keep);
15212
+ useEventListener(element, "focusout", (event) => {
14796
15213
  const target = event.relatedTarget;
14797
- if (!target || !anchor.value?.contains(target) && !panel.value?.contains(target)) close();
15214
+ if (!target || !element.value?.contains(target) && !panel.value?.contains(target)) close();
14798
15215
  });
14799
15216
  useEventListener(panel, "pointerenter", keep);
14800
15217
  useEventListener(panel, "pointerleave", leave);
14801
- useEventListener(() => anchor.value?.ownerDocument, "pointermove", track);
14802
- useEventListener(() => anchor.value?.ownerDocument, "scroll", (event) => {
14803
- if (root.open.value && event.target?.contains(anchor.value ?? null)) dismiss();
15218
+ useEventListener(() => element.value?.ownerDocument, "pointermove", track);
15219
+ useEventListener(() => element.value?.ownerDocument, "scroll", (event) => {
15220
+ if (root.open.value && event.target?.contains(element.value ?? null)) dismiss();
14804
15221
  }, {
14805
15222
  capture: true,
14806
15223
  passive: true
@@ -14811,7 +15228,6 @@ function useHoverCardAnchor(props) {
14811
15228
  });
14812
15229
  function contentRef(value) {
14813
15230
  content.value = value;
14814
- if (!value && !root.open.value) retained.value = void 0;
14815
15231
  }
14816
15232
  return {
14817
15233
  reference,
@@ -14826,6 +15242,7 @@ var HoverCardAnchor_default = /* @__PURE__ */ defineComponent({
14826
15242
  __name: "HoverCardAnchor",
14827
15243
  props: {
14828
15244
  anchor: {},
15245
+ updatePositionStrategy: {},
14829
15246
  external: { type: Boolean },
14830
15247
  closeDelay: {},
14831
15248
  positionerClass: {}
@@ -14848,6 +15265,7 @@ var HoverCard_default = /* @__PURE__ */ defineComponent({
14848
15265
  __name: "HoverCard",
14849
15266
  props: /*@__PURE__*/ mergeModels({
14850
15267
  anchor: {},
15268
+ updatePositionStrategy: { default: "optimized" },
14851
15269
  side: { default: "bottom" },
14852
15270
  align: { default: "center" },
14853
15271
  sideOffset: { default: 8 },
@@ -14882,6 +15300,7 @@ var HoverCard_default = /* @__PURE__ */ defineComponent({
14882
15300
  _: 3
14883
15301
  })) : createCommentVNode("", true), createVNode(HoverCardAnchor_default, {
14884
15302
  anchor: props.anchor,
15303
+ "update-position-strategy": props.updatePositionStrategy,
14885
15304
  external: !_ctx.$slots.default,
14886
15305
  "close-delay": props.closeDelay,
14887
15306
  "positioner-class": props.positionerClass
@@ -14889,6 +15308,7 @@ var HoverCard_default = /* @__PURE__ */ defineComponent({
14889
15308
  default: withCtx(({ reference, contentRef, present }) => [present ? (openBlock(), createBlock(unref(HoverCardPortal), { key: 0 }, {
14890
15309
  default: withCtx(() => [createVNode(unref(HoverCardContent), {
14891
15310
  reference,
15311
+ "update-position-strategy": props.updatePositionStrategy,
14892
15312
  "as-child": "",
14893
15313
  side: props.side,
14894
15314
  align: props.align,
@@ -14911,6 +15331,7 @@ var HoverCard_default = /* @__PURE__ */ defineComponent({
14911
15331
  _: 2
14912
15332
  }, 1032, [
14913
15333
  "reference",
15334
+ "update-position-strategy",
14914
15335
  "side",
14915
15336
  "align",
14916
15337
  "side-offset"
@@ -14920,6 +15341,7 @@ var HoverCard_default = /* @__PURE__ */ defineComponent({
14920
15341
  _: 3
14921
15342
  }, 8, [
14922
15343
  "anchor",
15344
+ "update-position-strategy",
14923
15345
  "external",
14924
15346
  "close-delay",
14925
15347
  "positioner-class"
@@ -15041,7 +15463,7 @@ var ContextMenuItem_default = /* @__PURE__ */ defineComponent({
15041
15463
  //#endregion
15042
15464
  //#region src/components/context-menu/ContextMenuCheckboxItem.vue?vue&type=script&setup=true&lang.ts
15043
15465
  var _hoisted_1$43 = { class: "min-w-0 flex-1" };
15044
- var _hoisted_2$23 = { class: "flex size-4 shrink-0 items-center justify-center" };
15466
+ var _hoisted_2$24 = { class: "flex size-4 shrink-0 items-center justify-center" };
15045
15467
  //#endregion
15046
15468
  //#region src/components/context-menu/ContextMenuCheckboxItem.vue
15047
15469
  var ContextMenuCheckboxItem_default = /* @__PURE__ */ defineComponent({
@@ -15075,7 +15497,7 @@ var ContextMenuCheckboxItem_default = /* @__PURE__ */ defineComponent({
15075
15497
  default: withCtx(() => [
15076
15498
  createElementVNode("span", _hoisted_1$43, [renderSlot(_ctx.$slots, "default")]),
15077
15499
  renderSlot(_ctx.$slots, "trailing"),
15078
- createElementVNode("span", _hoisted_2$23, [createVNode(unref(ContextMenuItemIndicator), null, {
15500
+ createElementVNode("span", _hoisted_2$24, [createVNode(unref(ContextMenuItemIndicator), null, {
15079
15501
  default: withCtx(() => [createVNode(unref(Check))]),
15080
15502
  _: 1
15081
15503
  })])
@@ -15223,7 +15645,7 @@ var ContextMenuRadioGroup_default = /* @__PURE__ */ defineComponent({
15223
15645
  //#endregion
15224
15646
  //#region src/components/context-menu/ContextMenuRadioItem.vue?vue&type=script&setup=true&lang.ts
15225
15647
  var _hoisted_1$41 = { class: "min-w-0 flex-1" };
15226
- var _hoisted_2$22 = { class: "flex size-4 shrink-0 items-center justify-center" };
15648
+ var _hoisted_2$23 = { class: "flex size-4 shrink-0 items-center justify-center" };
15227
15649
  //#endregion
15228
15650
  //#region src/components/context-menu/ContextMenuRadioItem.vue
15229
15651
  var ContextMenuRadioItem_default = /* @__PURE__ */ defineComponent({
@@ -15245,7 +15667,7 @@ var ContextMenuRadioItem_default = /* @__PURE__ */ defineComponent({
15245
15667
  "text-value": props.textValue,
15246
15668
  class: unref(cn)(unref(dropdownItem)(), props.class)
15247
15669
  }), {
15248
- default: withCtx(() => [createElementVNode("span", _hoisted_1$41, [renderSlot(_ctx.$slots, "default")]), createElementVNode("span", _hoisted_2$22, [createVNode(unref(ContextMenuItemIndicator), null, {
15670
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$41, [renderSlot(_ctx.$slots, "default")]), createElementVNode("span", _hoisted_2$23, [createVNode(unref(ContextMenuItemIndicator), null, {
15249
15671
  default: withCtx(() => [createVNode(unref(Check), { class: "size-4" })]),
15250
15672
  _: 1
15251
15673
  })])]),
@@ -15260,6 +15682,15 @@ var ContextMenuRadioItem_default = /* @__PURE__ */ defineComponent({
15260
15682
  }
15261
15683
  });
15262
15684
  //#endregion
15685
+ //#region src/lib/scroll-viewport.ts
15686
+ function useScrollViewport() {
15687
+ const scrollArea = shallowRef(null);
15688
+ return {
15689
+ scrollArea,
15690
+ viewport: computed(() => scrollArea.value?.viewport)
15691
+ };
15692
+ }
15693
+ //#endregion
15263
15694
  //#region src/components/sheet/composables/useDragToDismiss.ts
15264
15695
  var DISTANCE_RATIO = .3;
15265
15696
  var FLICK_VELOCITY = .6;
@@ -15315,23 +15746,63 @@ function useDragToDismiss(panel, options) {
15315
15746
  }
15316
15747
  //#endregion
15317
15748
  //#region src/components/sheet/sheet.variants.ts
15318
- var sheetPanel = tv({ base: [
15319
- "hn-anim-sheet-bottom hn-transition pointer-events-auto fixed inset-x-0 bottom-0 z-(--hn-z-overlay)",
15320
- "mx-auto flex max-h-[calc(100dvh-3rem)] w-full flex-col gap-4 sm:max-w-xl",
15321
- "rounded-t-xl rounded-b-none border-b-0 pt-2 shadow-lg outline-none",
15322
- "pb-[max(var(--hn-panel-p),env(safe-area-inset-bottom))]",
15323
- "data-dragging:transition-none"
15324
- ] });
15325
- var sheetGrip = tv({ base: "flex shrink-0 cursor-grab touch-none flex-col select-none data-dragging:cursor-grabbing" });
15326
- var sheetHandle = tv({ base: "bg-line-strong hn-transition-base mx-auto mb-3 h-1.5 w-10 rounded-full data-disabled:opacity-50" });
15749
+ var sheetPanel = tv({
15750
+ base: [
15751
+ "hn-anim-sheet-bottom hn-transition pointer-events-auto fixed inset-x-0 bottom-0 z-(--hn-z-overlay)",
15752
+ "mx-auto flex max-h-[calc(100dvh-3rem)] w-full flex-col sm:max-w-xl",
15753
+ "rounded-t-xl rounded-b-none border-b-0 shadow-lg outline-none",
15754
+ "data-dragging:transition-none"
15755
+ ],
15756
+ variants: {
15757
+ padded: { true: "gap-4 pb-[max(var(--hn-panel-p),env(safe-area-inset-bottom))]" },
15758
+ grip: {
15759
+ true: "",
15760
+ false: ""
15761
+ }
15762
+ },
15763
+ compoundVariants: [{
15764
+ padded: true,
15765
+ grip: true,
15766
+ class: "pt-2"
15767
+ }, {
15768
+ padded: true,
15769
+ grip: false,
15770
+ class: "pt-(--hn-panel-p)"
15771
+ }],
15772
+ defaultVariants: {
15773
+ grip: true,
15774
+ padded: true
15775
+ }
15776
+ });
15777
+ var sheetGrip = tv({
15778
+ base: "flex shrink-0 cursor-grab touch-none flex-col select-none data-dragging:cursor-grabbing",
15779
+ variants: { standalone: { true: "py-2" } }
15780
+ });
15781
+ var sheetHandle = tv({
15782
+ base: "bg-line-strong hn-transition-base mx-auto h-1.5 w-10 rounded-full data-disabled:opacity-50",
15783
+ variants: { header: {
15784
+ true: "mb-3",
15785
+ false: ""
15786
+ } },
15787
+ defaultVariants: { header: true }
15788
+ });
15327
15789
  //#endregion
15328
15790
  //#region src/components/sheet/Sheet.vue?vue&type=script&setup=true&lang.ts
15329
15791
  var _hoisted_1$40 = ["data-dragging"];
15330
- var _hoisted_2$21 = ["data-disabled"];
15331
- var _hoisted_3$9 = { class: "flex items-start justify-between gap-4 px-(--hn-panel-p)" };
15332
- var _hoisted_4$7 = { class: "flex min-w-0 flex-col gap-1.5" };
15333
- var _hoisted_5$4 = { class: "px-(--hn-panel-p) py-1" };
15334
- var _hoisted_6$3 = {
15792
+ var _hoisted_2$22 = ["data-disabled"];
15793
+ var _hoisted_3$11 = {
15794
+ key: 1,
15795
+ class: "flex items-start justify-between gap-4 px-(--hn-panel-p)"
15796
+ };
15797
+ var _hoisted_4$9 = { class: "flex min-w-0 flex-col gap-1.5" };
15798
+ var _hoisted_5$5 = { class: "flex min-w-0 items-center gap-2" };
15799
+ var _hoisted_6$4 = {
15800
+ key: 0,
15801
+ class: "text-muted flex shrink-0 [&_svg]:size-5",
15802
+ "aria-hidden": "true"
15803
+ };
15804
+ var _hoisted_7$2 = { class: "px-(--hn-panel-p) py-1" };
15805
+ var _hoisted_8 = {
15335
15806
  key: 1,
15336
15807
  class: "flex shrink-0 justify-end gap-(--hn-inline-gap) px-(--hn-panel-p)"
15337
15808
  };
@@ -15343,6 +15814,14 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15343
15814
  props: /*@__PURE__*/ mergeModels({
15344
15815
  title: {},
15345
15816
  description: {},
15817
+ header: {
15818
+ type: Boolean,
15819
+ default: true
15820
+ },
15821
+ closable: {
15822
+ type: Boolean,
15823
+ default: true
15824
+ },
15346
15825
  handle: {
15347
15826
  type: Boolean,
15348
15827
  default: true
@@ -15357,11 +15836,13 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15357
15836
  "openModifiers": {}
15358
15837
  }),
15359
15838
  emits: ["update:open"],
15360
- setup(__props) {
15839
+ setup(__props, { expose: __expose }) {
15361
15840
  const props = __props;
15841
+ const slots = useSlots();
15842
+ const { scrollArea, viewport } = useScrollViewport();
15843
+ __expose({ viewport });
15362
15844
  const open = useModel(__props, "open");
15363
- useUiLocale();
15364
- const panel = shallowRef(null);
15845
+ const { content: panel, present } = useOverlayPortal(open);
15365
15846
  const { dragging, offset, onPointerDown } = useDragToDismiss(() => panel.value?.$el ?? null, {
15366
15847
  enabled: () => !props.locked,
15367
15848
  open,
@@ -15388,42 +15869,64 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15388
15869
  }, {
15389
15870
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
15390
15871
  _: 3
15391
- })) : createCommentVNode("", true), createVNode(unref(DialogPortal), null, {
15872
+ })) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(DialogPortal), { key: 1 }, {
15392
15873
  default: withCtx(() => [createVNode(unref(DialogOverlay), { class: "hn-scrim" }), createVNode(unref(DialogContent), {
15393
15874
  "as-child": "",
15394
15875
  onEscapeKeyDown: guard,
15395
15876
  onInteractOutside: guard
15396
15877
  }, {
15397
- default: withCtx(() => [createVNode(Card_default, {
15878
+ default: withCtx(() => [createVNode(Card_default, mergeProps({
15398
15879
  ref_key: "panel",
15399
- ref: panel,
15880
+ ref: panel
15881
+ }, props.description ? {} : { "aria-describedby": void 0 }, {
15400
15882
  "data-hn-sheet": "",
15401
15883
  "data-dragging": unref(dragging) ? "" : void 0,
15402
15884
  padded: false,
15403
- style: normalizeStyle(style.value),
15404
- class: normalizeClass(unref(cn)(unref(sheetPanel)(), props.class))
15405
- }, {
15885
+ style: style.value,
15886
+ class: unref(cn)(unref(sheetPanel)({
15887
+ grip: props.header || props.handle,
15888
+ padded: !slots.body
15889
+ }), props.class)
15890
+ }), {
15406
15891
  default: withCtx(() => [
15407
- createElementVNode("div", {
15892
+ !props.header || slots.body ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(DialogTitle), { "as-child": "" }, {
15893
+ default: withCtx(() => [createVNode(Heading_default, {
15894
+ level: 2,
15895
+ class: "sr-only"
15896
+ }, {
15897
+ default: withCtx(() => [createTextVNode(toDisplayString(props.title), 1)]),
15898
+ _: 1
15899
+ })]),
15900
+ _: 1
15901
+ }), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
15902
+ key: 0,
15903
+ class: "sr-only"
15904
+ }, {
15905
+ default: withCtx(() => [createTextVNode(toDisplayString(props.description), 1)]),
15906
+ _: 1
15907
+ })) : createCommentVNode("", true)], 64)) : createCommentVNode("", true),
15908
+ props.handle || props.header && !slots.body ? (openBlock(), createElementBlock("div", {
15909
+ key: 1,
15408
15910
  "data-hn-sheet-grip": "",
15409
15911
  "data-dragging": unref(dragging) ? "" : void 0,
15410
- class: normalizeClass(unref(sheetGrip)()),
15912
+ class: normalizeClass(unref(sheetGrip)({ standalone: !!slots.body })),
15411
15913
  onPointerdown: _cache[0] || (_cache[0] = (...args) => unref(onPointerDown) && unref(onPointerDown)(...args))
15412
15914
  }, [props.handle ? (openBlock(), createElementBlock("div", {
15413
15915
  key: 0,
15414
15916
  "aria-hidden": "true",
15415
15917
  "data-disabled": props.locked ? "" : void 0,
15416
- class: normalizeClass(unref(sheetHandle)())
15417
- }, null, 10, _hoisted_2$21)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3$9, [createElementVNode("div", _hoisted_4$7, [createVNode(unref(DialogTitle), { "as-child": "" }, {
15918
+ class: normalizeClass(unref(sheetHandle)({ header: props.header && !slots.body }))
15919
+ }, null, 10, _hoisted_2$22)) : createCommentVNode("", true), props.header && !slots.body ? (openBlock(), createElementBlock("div", _hoisted_3$11, [createElementVNode("div", _hoisted_4$9, [createElementVNode("div", _hoisted_5$5, [slots.icon ? (openBlock(), createElementBlock("span", _hoisted_6$4, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true), createVNode(unref(DialogTitle), { "as-child": "" }, {
15418
15920
  default: withCtx(() => [createVNode(Heading_default, {
15419
15921
  level: 2,
15420
- size: "lg"
15922
+ size: "lg",
15923
+ class: "min-w-0"
15421
15924
  }, {
15422
- default: withCtx(() => [createTextVNode(toDisplayString(props.title), 1)]),
15423
- _: 1
15925
+ default: withCtx(() => [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(props.title), 1)])]),
15926
+ _: 3
15424
15927
  })]),
15425
- _: 1
15426
- }), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
15928
+ _: 3
15929
+ })]), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
15427
15930
  key: 0,
15428
15931
  "as-child": ""
15429
15932
  }, {
@@ -15432,7 +15935,7 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15432
15935
  _: 1
15433
15936
  })]),
15434
15937
  _: 1
15435
- })) : createCommentVNode("", true)]), !props.handle ? (openBlock(), createBlock(unref(DialogClose), {
15938
+ })) : createCommentVNode("", true)]), !props.handle && props.closable ? (openBlock(), createBlock(unref(DialogClose), {
15436
15939
  key: 0,
15437
15940
  "as-child": ""
15438
15941
  }, {
@@ -15441,18 +15944,19 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15441
15944
  class: "-mt-1.5 -me-1.5 shrink-0"
15442
15945
  }, null, 8, ["disabled"])]),
15443
15946
  _: 1
15444
- })) : createCommentVNode("", true)])], 42, _hoisted_1$40),
15445
- _ctx.$slots.content ? (openBlock(), createBlock(ScrollArea_default, {
15947
+ })) : createCommentVNode("", true)])) : createCommentVNode("", true)], 42, _hoisted_1$40)) : createCommentVNode("", true),
15948
+ slots.body ? renderSlot(_ctx.$slots, "body", { close }, void 0, void 0, 2) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [_ctx.$slots.content ? (openBlock(), createBlock(ScrollArea_default, {
15446
15949
  key: 0,
15950
+ ref_key: "scrollArea",
15951
+ ref: scrollArea,
15447
15952
  class: "min-h-0 grow"
15448
15953
  }, {
15449
- default: withCtx(() => [createElementVNode("div", _hoisted_5$4, [renderSlot(_ctx.$slots, "content", { close })])]),
15954
+ default: withCtx(() => [createElementVNode("div", _hoisted_7$2, [renderSlot(_ctx.$slots, "content", { close })])]),
15450
15955
  _: 3
15451
- })) : createCommentVNode("", true),
15452
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6$3, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
15956
+ }, 512)) : createCommentVNode("", true), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_8, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)], 64))
15453
15957
  ]),
15454
15958
  _: 3
15455
- }, 8, [
15959
+ }, 16, [
15456
15960
  "data-dragging",
15457
15961
  "style",
15458
15962
  "class"
@@ -15460,7 +15964,7 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
15460
15964
  _: 3
15461
15965
  })]),
15462
15966
  _: 3
15463
- })]),
15967
+ })) : createCommentVNode("", true)]),
15464
15968
  _: 3
15465
15969
  }, 8, ["open"]);
15466
15970
  };
@@ -15810,7 +16314,7 @@ function toneAt(index) {
15810
16314
  //#endregion
15811
16315
  //#region src/components/meter-group/MeterGroup.vue?vue&type=script&setup=true&lang.ts
15812
16316
  var _hoisted_1$36 = ["aria-label"];
15813
- var _hoisted_2$20 = [
16317
+ var _hoisted_2$21 = [
15814
16318
  "aria-label",
15815
16319
  "aria-valuenow",
15816
16320
  "aria-valuemax",
@@ -15881,7 +16385,7 @@ var MeterGroup_default = /* @__PURE__ */ defineComponent({
15881
16385
  "aria-valuetext": props.format ? entry.text : void 0,
15882
16386
  class: normalizeClass(unref(meterSegment)({ tone: entry.tone })),
15883
16387
  style: normalizeStyle({ width: entry.width })
15884
- }, null, 14, _hoisted_2$20);
16388
+ }, null, 14, _hoisted_2$21);
15885
16389
  }), 128))], 16, _hoisted_1$36),
15886
16390
  props.legend ? (openBlock(), createElementBlock("div", {
15887
16391
  key: 1,
@@ -16139,7 +16643,7 @@ var statisticIcon = tv({ base: "bg-subtle text-muted flex size-10 shrink-0 items
16139
16643
  //#endregion
16140
16644
  //#region src/components/statistic/Statistic.vue?vue&type=script&setup=true&lang.ts
16141
16645
  var _hoisted_1$33 = { key: 2 };
16142
- var _hoisted_2$19 = {
16646
+ var _hoisted_2$20 = {
16143
16647
  key: 2,
16144
16648
  class: "text-muted"
16145
16649
  };
@@ -16231,7 +16735,7 @@ var Statistic_default = /* @__PURE__ */ defineComponent({
16231
16735
  "aria-hidden": "true"
16232
16736
  })) : createCommentVNode("", true),
16233
16737
  createElementVNode("span", null, toDisplayString(deltaText.value), 1),
16234
- props.deltaLabel ? (openBlock(), createElementBlock("span", _hoisted_2$19, toDisplayString(props.deltaLabel), 1)) : createCommentVNode("", true)
16738
+ props.deltaLabel ? (openBlock(), createElementBlock("span", _hoisted_2$20, toDisplayString(props.deltaLabel), 1)) : createCommentVNode("", true)
16235
16739
  ], 64))], 2)) : createCommentVNode("", true),
16236
16740
  renderSlot(_ctx.$slots, "default")
16237
16741
  ], 2), unref(slots).icon ? (openBlock(), createElementBlock("span", {
@@ -16314,9 +16818,9 @@ var _hoisted_1$32 = {
16314
16818
  "data-hn-banner": "",
16315
16819
  class: "hn-collapse w-full"
16316
16820
  };
16317
- var _hoisted_2$18 = { class: "hn-collapse-body" };
16318
- var _hoisted_3$8 = ["data-tone"];
16319
- var _hoisted_4$6 = ["aria-live"];
16821
+ var _hoisted_2$19 = { class: "hn-collapse-body" };
16822
+ var _hoisted_3$10 = ["data-tone"];
16823
+ var _hoisted_4$8 = ["aria-live"];
16320
16824
  //#endregion
16321
16825
  //#region src/components/banner/Banner.vue
16322
16826
  var Banner_default = /* @__PURE__ */ defineComponent({
@@ -16380,7 +16884,7 @@ var Banner_default = /* @__PURE__ */ defineComponent({
16380
16884
  "leave-from-class": "hn-collapse-open",
16381
16885
  "leave-to-class": "hn-collapse-closed"
16382
16886
  }, toHandlers(unref(hooks))), {
16383
- default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$32, [createElementVNode("div", _hoisted_2$18, [createElementVNode("div", {
16887
+ default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$32, [createElementVNode("div", _hoisted_2$19, [createElementVNode("div", {
16384
16888
  "data-tone": tone.value,
16385
16889
  class: normalizeClass(unref(cn)(unref(banner)({ tone: tone.value }), props.class)),
16386
16890
  onPointerenter: _cache[2] || (_cache[2] = ($event) => unref(autoplay).hovered.value = true),
@@ -16410,7 +16914,7 @@ var Banner_default = /* @__PURE__ */ defineComponent({
16410
16914
  index: at.value
16411
16915
  })], 2))]),
16412
16916
  _: 3
16413
- }, 8, ["enter-from-class", "leave-to-class"])], 8, _hoisted_4$6)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [renderSlot(_ctx.$slots, "icon", {}, () => [props.icon ? (openBlock(), createBlock(resolveDynamicComponent(icon.value), {
16917
+ }, 8, ["enter-from-class", "leave-to-class"])], 8, _hoisted_4$8)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [renderSlot(_ctx.$slots, "icon", {}, () => [props.icon ? (openBlock(), createBlock(resolveDynamicComponent(icon.value), {
16414
16918
  key: 0,
16415
16919
  class: normalizeClass(unref(bannerIcon)()),
16416
16920
  "aria-hidden": "true"
@@ -16453,7 +16957,7 @@ var Banner_default = /* @__PURE__ */ defineComponent({
16453
16957
  size: "sm",
16454
16958
  class: "text-current",
16455
16959
  onClick: close
16456
- })) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 42, _hoisted_3$8)])])) : createCommentVNode("", true)]),
16960
+ })) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 42, _hoisted_3$10)])])) : createCommentVNode("", true)]),
16457
16961
  _: 3
16458
16962
  }, 16);
16459
16963
  };
@@ -16601,7 +17105,7 @@ var MenubarItem_default = /* @__PURE__ */ defineComponent({
16601
17105
  //#endregion
16602
17106
  //#region src/components/menubar/MenubarCheckboxItem.vue?vue&type=script&setup=true&lang.ts
16603
17107
  var _hoisted_1$30 = { class: "min-w-0 flex-1" };
16604
- var _hoisted_2$17 = { class: "flex size-4 shrink-0 items-center justify-center" };
17108
+ var _hoisted_2$18 = { class: "flex size-4 shrink-0 items-center justify-center" };
16605
17109
  //#endregion
16606
17110
  //#region src/components/menubar/MenubarCheckboxItem.vue
16607
17111
  var MenubarCheckboxItem_default = /* @__PURE__ */ defineComponent({
@@ -16635,7 +17139,7 @@ var MenubarCheckboxItem_default = /* @__PURE__ */ defineComponent({
16635
17139
  default: withCtx(() => [
16636
17140
  createElementVNode("span", _hoisted_1$30, [renderSlot(_ctx.$slots, "default")]),
16637
17141
  renderSlot(_ctx.$slots, "trailing"),
16638
- createElementVNode("span", _hoisted_2$17, [createVNode(unref(MenubarItemIndicator), null, {
17142
+ createElementVNode("span", _hoisted_2$18, [createVNode(unref(MenubarItemIndicator), null, {
16639
17143
  default: withCtx(() => [createVNode(unref(Check))]),
16640
17144
  _: 1
16641
17145
  })])
@@ -16783,7 +17287,7 @@ var MenubarRadioGroup_default = /* @__PURE__ */ defineComponent({
16783
17287
  //#endregion
16784
17288
  //#region src/components/menubar/MenubarRadioItem.vue?vue&type=script&setup=true&lang.ts
16785
17289
  var _hoisted_1$28 = { class: "min-w-0 flex-1" };
16786
- var _hoisted_2$16 = { class: "flex size-4 shrink-0 items-center justify-center" };
17290
+ var _hoisted_2$17 = { class: "flex size-4 shrink-0 items-center justify-center" };
16787
17291
  //#endregion
16788
17292
  //#region src/components/menubar/MenubarRadioItem.vue
16789
17293
  var MenubarRadioItem_default = /* @__PURE__ */ defineComponent({
@@ -16805,7 +17309,7 @@ var MenubarRadioItem_default = /* @__PURE__ */ defineComponent({
16805
17309
  "text-value": props.textValue,
16806
17310
  class: unref(cn)(unref(dropdownItem)(), props.class)
16807
17311
  }), {
16808
- default: withCtx(() => [createElementVNode("span", _hoisted_1$28, [renderSlot(_ctx.$slots, "default")]), createElementVNode("span", _hoisted_2$16, [createVNode(unref(MenubarItemIndicator), null, {
17312
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$28, [renderSlot(_ctx.$slots, "default")]), createElementVNode("span", _hoisted_2$17, [createVNode(unref(MenubarItemIndicator), null, {
16809
17313
  default: withCtx(() => [createVNode(unref(Check), { class: "size-4" })]),
16810
17314
  _: 1
16811
17315
  })])]),
@@ -17091,15 +17595,15 @@ var _hoisted_1$26 = [
17091
17595
  "data-disabled",
17092
17596
  "data-orientation"
17093
17597
  ];
17094
- var _hoisted_2$15 = ["id", "for"];
17095
- var _hoisted_3$7 = ["id"];
17096
- var _hoisted_4$5 = ["id"];
17097
- var _hoisted_5$3 = {
17598
+ var _hoisted_2$16 = ["id", "for"];
17599
+ var _hoisted_3$9 = ["id"];
17600
+ var _hoisted_4$7 = ["id"];
17601
+ var _hoisted_5$4 = {
17098
17602
  key: 0,
17099
17603
  "data-hn-form-field-message": "",
17100
17604
  class: "hn-collapse [--hn-collapse-out:var(--hn-duration-fast)]"
17101
17605
  };
17102
- var _hoisted_6$2 = { class: "hn-collapse-body" };
17606
+ var _hoisted_6$3 = { class: "hn-collapse-body" };
17103
17607
  var _hoisted_7$1 = ["id"];
17104
17608
  //#endregion
17105
17609
  //#region src/components/form-field/FormField.vue
@@ -17194,11 +17698,11 @@ var FormField_default = /* @__PURE__ */ defineComponent({
17194
17698
  default: withCtx(() => [createTextVNode(toDisplayString(unref(t).form.required), 1)]),
17195
17699
  _: 1
17196
17700
  })) : createCommentVNode("", true)
17197
- ], 10, _hoisted_2$15)) : createCommentVNode("", true), descriptionWithLabel.value ? (openBlock(), createElementBlock("p", {
17701
+ ], 10, _hoisted_2$16)) : createCommentVNode("", true), descriptionWithLabel.value ? (openBlock(), createElementBlock("p", {
17198
17702
  key: 1,
17199
17703
  id: unref(descriptionId),
17200
17704
  class: normalizeClass(unref(formFieldDescription)())
17201
- }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_3$7)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true), createElementVNode("div", {
17705
+ }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_3$9)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true), createElementVNode("div", {
17202
17706
  "data-hn-form-field-body": "",
17203
17707
  class: normalizeClass(unref(formFieldContent)())
17204
17708
  }, [
@@ -17210,14 +17714,14 @@ var FormField_default = /* @__PURE__ */ defineComponent({
17210
17714
  key: 0,
17211
17715
  id: unref(descriptionId),
17212
17716
  class: normalizeClass(unref(formFieldDescription)())
17213
- }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_4$5)) : createCommentVNode("", true),
17717
+ }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_4$7)) : createCommentVNode("", true),
17214
17718
  createVNode(Transition, mergeProps({
17215
17719
  "enter-from-class": "hn-collapse-closed",
17216
17720
  "enter-to-class": "hn-collapse-open",
17217
17721
  "leave-from-class": "hn-collapse-open",
17218
17722
  "leave-to-class": "hn-collapse-closed"
17219
17723
  }, toHandlers(unref(hooks))), {
17220
- default: withCtx(() => [message.value ? (openBlock(), createElementBlock("div", _hoisted_5$3, [createElementVNode("div", _hoisted_6$2, [createElementVNode("p", {
17724
+ default: withCtx(() => [message.value ? (openBlock(), createElementBlock("div", _hoisted_5$4, [createElementVNode("div", _hoisted_6$3, [createElementVNode("p", {
17221
17725
  id: unref(messageId),
17222
17726
  class: normalizeClass(unref(formFieldMessage)()),
17223
17727
  "aria-live": "polite"
@@ -17249,7 +17753,7 @@ var formLayoutGrid = tv({
17249
17753
  //#endregion
17250
17754
  //#region src/components/form-layout/FormLayout.vue?vue&type=script&setup=true&lang.ts
17251
17755
  var _hoisted_1$25 = ["disabled", "aria-describedby"];
17252
- var _hoisted_2$14 = ["id"];
17756
+ var _hoisted_2$15 = ["id"];
17253
17757
  //#endregion
17254
17758
  //#region src/components/form-layout/FormLayout.vue
17255
17759
  var FormLayout_default = /* @__PURE__ */ defineComponent({
@@ -17294,7 +17798,7 @@ var FormLayout_default = /* @__PURE__ */ defineComponent({
17294
17798
  key: 1,
17295
17799
  id: unref(descriptionId),
17296
17800
  class: normalizeClass(unref(formLayoutDescription)())
17297
- }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_2$14)) : createCommentVNode("", true),
17801
+ }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(props.description), 1)])], 10, _hoisted_2$15)) : createCommentVNode("", true),
17298
17802
  createElementVNode("div", { class: normalizeClass(unref(formLayoutGrid)({
17299
17803
  columns: props.columns,
17300
17804
  headed: headed.value || described.value
@@ -17774,9 +18278,9 @@ var codeBlockLabel = tv({ base: "text-faint font-mono text-xs select-none" });
17774
18278
  //#endregion
17775
18279
  //#region src/components/code-block/CodeBlock.vue?vue&type=script&setup=true&lang.ts
17776
18280
  var _hoisted_1$23 = ["data-lang"];
17777
- var _hoisted_2$13 = ["innerHTML"];
17778
- var _hoisted_3$6 = { key: 1 };
17779
- var _hoisted_4$4 = { key: 2 };
18281
+ var _hoisted_2$14 = ["innerHTML"];
18282
+ var _hoisted_3$8 = { key: 1 };
18283
+ var _hoisted_4$6 = { key: 2 };
17780
18284
  //#endregion
17781
18285
  //#region src/components/code-block/CodeBlock.vue
17782
18286
  var CodeBlock_default = /* @__PURE__ */ defineComponent({
@@ -17811,14 +18315,14 @@ var CodeBlock_default = /* @__PURE__ */ defineComponent({
17811
18315
  default: withCtx(() => [createElementVNode("pre", { class: normalizeClass(unref(codeBlockContent)()) }, [props.html ? (openBlock(), createElementBlock("code", {
17812
18316
  key: 0,
17813
18317
  innerHTML: props.html
17814
- }, null, 8, _hoisted_2$13)) : unref(tokens) ? (openBlock(), createElementBlock("code", _hoisted_3$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(tokens), (line, i) => {
18318
+ }, null, 8, _hoisted_2$14)) : unref(tokens) ? (openBlock(), createElementBlock("code", _hoisted_3$8, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(tokens), (line, i) => {
17815
18319
  return openBlock(), createElementBlock(Fragment, { key: i }, [createTextVNode(toDisplayString(i ? "\n" : ""), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(line, (tk, j) => {
17816
18320
  return openBlock(), createElementBlock("span", {
17817
18321
  key: j,
17818
18322
  style: normalizeStyle(tk.htmlStyle)
17819
18323
  }, toDisplayString(tk.content), 5);
17820
18324
  }), 128))], 64);
17821
- }), 128))])) : (openBlock(), createElementBlock("code", _hoisted_4$4, toDisplayString(__props.code), 1))], 2)]),
18325
+ }), 128))])) : (openBlock(), createElementBlock("code", _hoisted_4$6, toDisplayString(__props.code), 1))], 2)]),
17822
18326
  _: 1
17823
18327
  }, 8, ["label", "class"]), createElementVNode("div", { class: normalizeClass(unref(codeBlockActions)()) }, [tag.value ? (openBlock(), createElementBlock("span", {
17824
18328
  key: 0,
@@ -18794,17 +19298,14 @@ var navLink = tv({
18794
19298
  } },
18795
19299
  defaultVariants: { active: false }
18796
19300
  });
18797
- var navLinkLabel = tv({
18798
- base: "shrink-0 whitespace-nowrap",
18799
- variants: { rail: {
18800
- true: "opacity-0 [transition:opacity_calc(var(--hn-duration-fast)/2)_var(--hn-ease-exit)]",
18801
- false: "opacity-100 [transition:opacity_var(--hn-duration-fast)_var(--hn-ease-enter)]"
18802
- } },
18803
- defaultVariants: { rail: false }
18804
- });
19301
+ var navLinkLabel = tv({ base: "hn-sidebar-label shrink-0 whitespace-nowrap" });
18805
19302
  //#endregion
18806
19303
  //#region src/components/nav-link/NavLink.vue?vue&type=script&setup=true&lang.ts
18807
- var _hoisted_1$18 = ["aria-hidden"];
19304
+ var _hoisted_1$18 = [
19305
+ "aria-hidden",
19306
+ "inert",
19307
+ "data-collapsed"
19308
+ ];
18808
19309
  //#endregion
18809
19310
  //#region src/components/nav-link/NavLink.vue
18810
19311
  var NavLink_default = /* @__PURE__ */ defineComponent({
@@ -18849,8 +19350,10 @@ var NavLink_default = /* @__PURE__ */ defineComponent({
18849
19350
  }), {
18850
19351
  default: withCtx(() => [renderSlot(_ctx.$slots, "icon"), createElementVNode("span", {
18851
19352
  "aria-hidden": rail.value ? "true" : void 0,
19353
+ inert: rail.value,
19354
+ "data-collapsed": rail.value ? "" : void 0,
18852
19355
  "data-hn-label": "",
18853
- class: normalizeClass(unref(navLinkLabel)({ rail: rail.value }))
19356
+ class: normalizeClass(unref(navLinkLabel)())
18854
19357
  }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$18)]),
18855
19358
  _: 3
18856
19359
  }, 16, [
@@ -18870,8 +19373,65 @@ var NavLink_default = /* @__PURE__ */ defineComponent({
18870
19373
  }
18871
19374
  });
18872
19375
  //#endregion
19376
+ //#region src/components/sidebar/sidebar.variants.ts
19377
+ var sidebarRoot = tv({
19378
+ base: "flex h-full min-h-0 shrink-0 flex-col overflow-hidden",
19379
+ variants: { inDrawer: {
19380
+ true: "w-full",
19381
+ false: "hn-sidebar border-line w-64 border-e data-[state=rail]:w-14 data-[state=hidden]:w-0 data-[state=hidden]:border-e-transparent"
19382
+ } }
19383
+ });
19384
+ var sidebarRegion = tv({
19385
+ base: "shrink-0 py-3",
19386
+ variants: {
19387
+ inDrawer: {
19388
+ true: "w-full",
19389
+ false: "w-[calc(16rem-1px)] px-3"
19390
+ },
19391
+ footer: { true: "border-line border-t" }
19392
+ }
19393
+ });
19394
+ var sidebarLabel = tv({ base: "hn-sidebar-label min-w-0" });
19395
+ var sidebarBrand = tv({ base: "flex min-h-8 items-center gap-2" });
19396
+ var sidebarIcon = tv({ base: "flex size-8 shrink-0 items-center justify-center overflow-hidden [&>*]:size-full [&_img]:size-full [&_img]:object-contain [&_svg]:size-full" });
19397
+ var sidebarWordmark = tv({ base: "flex flex-1 items-center [&_img]:max-h-8 [&_img]:max-w-full [&_img]:object-contain [&_svg]:max-h-8 [&_svg]:max-w-full" });
19398
+ //#endregion
19399
+ //#region src/components/sidebar/SidebarLabel.vue
19400
+ var SidebarLabel_default = /* @__PURE__ */ defineComponent({
19401
+ name: "HnSidebarLabel",
19402
+ __name: "SidebarLabel",
19403
+ props: {
19404
+ as: { default: "span" },
19405
+ class: {}
19406
+ },
19407
+ setup(__props) {
19408
+ const props = __props;
19409
+ const sidebar = useSidebar();
19410
+ const collapsed = computed(() => sidebar?.state.value === "rail");
19411
+ return (_ctx, _cache) => {
19412
+ return openBlock(), createBlock(resolveDynamicComponent(props.as), {
19413
+ "data-collapsed": collapsed.value ? "" : void 0,
19414
+ "aria-hidden": collapsed.value ? "true" : void 0,
19415
+ inert: collapsed.value,
19416
+ class: normalizeClass(unref(cn)(unref(sidebarLabel)(), props.class))
19417
+ }, {
19418
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
19419
+ _: 3
19420
+ }, 8, [
19421
+ "data-collapsed",
19422
+ "aria-hidden",
19423
+ "inert",
19424
+ "class"
19425
+ ]);
19426
+ };
19427
+ }
19428
+ });
19429
+ //#endregion
18873
19430
  //#region src/components/sidebar/Sidebar.vue?vue&type=script&setup=true&lang.ts
18874
- var _hoisted_1$17 = ["aria-label"];
19431
+ var _hoisted_1$17 = ["data-state", "inert"];
19432
+ var _hoisted_2$13 = ["data-state", "inert"];
19433
+ var _hoisted_3$7 = { class: "hn-collapse-body" };
19434
+ var _hoisted_4$5 = ["aria-label"];
18875
19435
  //#endregion
18876
19436
  //#region src/components/sidebar/Sidebar.vue
18877
19437
  var Sidebar_default = /* @__PURE__ */ defineComponent({
@@ -18887,52 +19447,59 @@ var Sidebar_default = /* @__PURE__ */ defineComponent({
18887
19447
  const sidebar = useSidebar();
18888
19448
  const state = computed(() => sidebar?.state.value ?? "expanded");
18889
19449
  const inDrawer = computed(() => sidebar?.inDrawer ?? false);
18890
- const width = computed(() => {
18891
- if (state.value === "rail") return 56;
18892
- if (state.value === "hidden") return 0;
18893
- return 256;
18894
- });
18895
- const transition = computed(() => prefersReducedMotion() ? { duration: 0 } : TRANSITION.layout);
18896
19450
  return (_ctx, _cache) => {
18897
- return openBlock(), createBlock(unref(Motion), {
18898
- as: "aside",
18899
- initial: false,
18900
- animate: inDrawer.value ? void 0 : { width: width.value },
18901
- transition: transition.value,
19451
+ return openBlock(), createElementBlock("aside", {
18902
19452
  "data-state": state.value,
18903
- class: normalizeClass(unref(cn)("flex h-full min-h-0 shrink-0 flex-col overflow-hidden", inDrawer.value ? "w-full" : "border-line border-e [transition:border-color_var(--hn-duration-base)_var(--hn-ease-move)]", !inDrawer.value && state.value === "hidden" && "border-e-transparent", props.class))
18904
- }, {
18905
- default: withCtx(() => [
18906
- _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
18907
- key: 0,
18908
- class: normalizeClass(unref(cn)("shrink-0", !inDrawer.value && "px-3 py-3"))
18909
- }, [renderSlot(_ctx.$slots, "header", { state: state.value })], 2)) : createCommentVNode("", true),
18910
- createVNode(ScrollArea_default, { class: "min-h-0 flex-1" }, {
18911
- default: withCtx(() => [createElementVNode("nav", {
18912
- "aria-label": props.label ?? unref(t).sidebar.navLabel,
18913
- class: normalizeClass(unref(cn)("flex flex-col gap-1", !inDrawer.value && "px-2.5 py-2"))
18914
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$17)]),
18915
- _: 3
18916
- }),
18917
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", {
18918
- key: 1,
18919
- class: normalizeClass(unref(cn)("border-line shrink-0 border-t", !inDrawer.value && "px-3 py-3"))
18920
- }, [renderSlot(_ctx.$slots, "footer", { state: state.value })], 2)) : createCommentVNode("", true)
18921
- ]),
18922
- _: 3
18923
- }, 8, [
18924
- "animate",
18925
- "transition",
18926
- "data-state",
18927
- "class"
18928
- ]);
19453
+ inert: state.value === "hidden",
19454
+ class: normalizeClass(unref(cn)(unref(sidebarRoot)({ inDrawer: inDrawer.value }), props.class))
19455
+ }, [
19456
+ _ctx.$slots.header ? (openBlock(), createElementBlock("div", {
19457
+ key: 0,
19458
+ class: normalizeClass(unref(sidebarRegion)({ inDrawer: inDrawer.value }))
19459
+ }, [renderSlot(_ctx.$slots, "header", { state: state.value })], 2)) : _ctx.$slots.icon || _ctx.$slots.wordmark ? (openBlock(), createElementBlock("div", {
19460
+ key: 1,
19461
+ class: "hn-collapse shrink-0",
19462
+ "data-state": state.value === "rail" && !_ctx.$slots.icon ? "closed" : "open",
19463
+ inert: state.value === "rail" && !_ctx.$slots.icon
19464
+ }, [createElementVNode("div", _hoisted_3$7, [createElementVNode("div", { class: normalizeClass(unref(sidebarRegion)({ inDrawer: inDrawer.value })) }, [createElementVNode("div", { class: normalizeClass(unref(sidebarBrand)()) }, [_ctx.$slots.icon ? (openBlock(), createElementBlock("div", {
19465
+ key: 0,
19466
+ class: normalizeClass(unref(sidebarIcon)())
19467
+ }, [renderSlot(_ctx.$slots, "icon", { state: state.value })], 2)) : createCommentVNode("", true), _ctx.$slots.wordmark ? (openBlock(), createBlock(SidebarLabel_default, {
19468
+ key: 1,
19469
+ as: "div",
19470
+ class: normalizeClass(unref(sidebarWordmark)())
19471
+ }, {
19472
+ default: withCtx(() => [renderSlot(_ctx.$slots, "wordmark", { state: state.value })]),
19473
+ _: 3
19474
+ }, 8, ["class"])) : createCommentVNode("", true)], 2)], 2)])], 8, _hoisted_2$13)) : createCommentVNode("", true),
19475
+ createVNode(ScrollArea_default, { class: "min-h-0 flex-1" }, {
19476
+ default: withCtx(() => [createElementVNode("nav", {
19477
+ "aria-label": props.label ?? unref(t).sidebar.navLabel,
19478
+ class: normalizeClass(unref(cn)("flex flex-col gap-1 py-2", !inDrawer.value && "px-2.5"))
19479
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_4$5)]),
19480
+ _: 3
19481
+ }),
19482
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", {
19483
+ key: 2,
19484
+ class: normalizeClass(unref(sidebarRegion)({
19485
+ inDrawer: inDrawer.value,
19486
+ footer: true
19487
+ }))
19488
+ }, [renderSlot(_ctx.$slots, "footer", { state: state.value })], 2)) : createCommentVNode("", true)
19489
+ ], 10, _hoisted_1$17);
18929
19490
  };
18930
19491
  }
18931
19492
  });
18932
19493
  //#endregion
18933
19494
  //#region src/components/sidebar/SidebarGroup.vue?vue&type=script&setup=true&lang.ts
18934
- var _hoisted_1$16 = { class: "hn-collapse-body" };
18935
- var _hoisted_2$12 = { class: "flex flex-col gap-0.5 pt-1" };
19495
+ var _hoisted_1$16 = { class: "relative h-(--hn-control-h-sm)" };
19496
+ var _hoisted_2$12 = [
19497
+ "data-collapsed",
19498
+ "aria-hidden",
19499
+ "inert"
19500
+ ];
19501
+ var _hoisted_3$6 = ["data-collapsed"];
19502
+ var _hoisted_4$4 = { class: "flex flex-col gap-0.5 pt-1" };
18936
19503
  //#endregion
18937
19504
  //#region src/components/sidebar/SidebarGroup.vue
18938
19505
  var SidebarGroup_default = /* @__PURE__ */ defineComponent({
@@ -18957,31 +19524,33 @@ var SidebarGroup_default = /* @__PURE__ */ defineComponent({
18957
19524
  class: normalizeClass(unref(cn)(props.class)),
18958
19525
  "onUpdate:open": _cache[0] || (_cache[0] = (v) => rail.value ? void 0 : open.value = v)
18959
19526
  }, {
18960
- default: withCtx(() => [
18961
- createElementVNode("div", { class: normalizeClass(["hn-collapse", rail.value ? "hn-collapse-closed" : "hn-collapse-open"]) }, [createElementVNode("div", _hoisted_1$16, [createVNode(CollapsibleTrigger_default, { "as-child": "" }, {
18962
- default: withCtx(() => [createVNode(Button_default, {
18963
- variant: "ghost",
18964
- tone: "neutral",
18965
- size: "sm",
18966
- block: "",
18967
- tabindex: rail.value ? -1 : void 0,
18968
- class: "text-muted justify-between font-medium"
18969
- }, {
18970
- trailing: withCtx(() => [createVNode(DisclosureIcon_default, { direction: "end" })]),
18971
- default: withCtx(() => [createTextVNode(toDisplayString(props.label) + " ", 1)]),
18972
- _: 1
18973
- }, 8, ["tabindex"])]),
19527
+ default: withCtx(() => [createElementVNode("div", _hoisted_1$16, [createElementVNode("div", {
19528
+ class: "hn-sidebar-label",
19529
+ "data-collapsed": rail.value ? "" : void 0,
19530
+ "aria-hidden": rail.value ? "true" : void 0,
19531
+ inert: rail.value
19532
+ }, [createVNode(CollapsibleTrigger_default, { "as-child": "" }, {
19533
+ default: withCtx(() => [createVNode(Button_default, {
19534
+ variant: "ghost",
19535
+ tone: "neutral",
19536
+ size: "sm",
19537
+ block: "",
19538
+ tabindex: rail.value ? -1 : void 0,
19539
+ class: "text-muted justify-between font-medium"
19540
+ }, {
19541
+ trailing: withCtx(() => [createVNode(DisclosureIcon_default, { direction: "end" })]),
19542
+ default: withCtx(() => [createTextVNode(toDisplayString(props.label) + " ", 1)]),
18974
19543
  _: 1
18975
- })])], 2),
18976
- createElementVNode("div", {
18977
- "aria-hidden": "true",
18978
- class: normalizeClass(["hn-collapse", rail.value ? "hn-collapse-open" : "hn-collapse-closed"])
18979
- }, [..._cache[1] || (_cache[1] = [createElementVNode("div", { class: "hn-collapse-body" }, [createElementVNode("div", { class: "border-line mx-2 my-1.5 border-t" })], -1)])], 2),
18980
- createVNode(CollapsibleContent_default, null, {
18981
- default: withCtx(() => [createElementVNode("div", _hoisted_2$12, [renderSlot(_ctx.$slots, "default")])]),
18982
- _: 3
18983
- })
18984
- ]),
19544
+ }, 8, ["tabindex"])]),
19545
+ _: 1
19546
+ })], 8, _hoisted_2$12), createElementVNode("div", {
19547
+ "aria-hidden": "true",
19548
+ class: "hn-sidebar-label border-line pointer-events-none absolute inset-x-2 top-1/2 border-t",
19549
+ "data-collapsed": rail.value ? void 0 : ""
19550
+ }, null, 8, _hoisted_3$6)]), createVNode(CollapsibleContent_default, null, {
19551
+ default: withCtx(() => [createElementVNode("div", _hoisted_4$4, [renderSlot(_ctx.$slots, "default")])]),
19552
+ _: 3
19553
+ })]),
18985
19554
  _: 3
18986
19555
  }, 8, ["open", "class"]);
18987
19556
  };
@@ -19012,8 +19581,9 @@ var TooltipProvider_default = /* @__PURE__ */ defineComponent({
19012
19581
  //#endregion
19013
19582
  //#region src/components/drawer/drawer.variants.ts
19014
19583
  var drawerCard = tv({
19015
- base: "",
19584
+ base: ["hn-anim-drawer pointer-events-auto fixed inset-y-0 z-(--hn-z-overlay) flex flex-col", "max-w-[calc(100vw-3rem)] rounded-none shadow-lg outline-none"],
19016
19585
  variants: {
19586
+ padded: { true: "gap-4 py-(--hn-panel-p)" },
19017
19587
  side: {
19018
19588
  start: "start-0",
19019
19589
  end: "end-0"
@@ -19026,16 +19596,26 @@ var drawerCard = tv({
19026
19596
  },
19027
19597
  defaultVariants: {
19028
19598
  side: "end",
19029
- size: "md"
19599
+ size: "md",
19600
+ padded: true
19030
19601
  }
19031
19602
  });
19032
19603
  //#endregion
19033
19604
  //#region src/components/drawer/Drawer.vue?vue&type=script&setup=true&lang.ts
19034
- var _hoisted_1$15 = { class: "flex shrink-0 items-start justify-between gap-4 px-(--hn-panel-p)" };
19605
+ var _hoisted_1$15 = {
19606
+ key: 0,
19607
+ class: "flex shrink-0 items-start justify-between gap-4 px-(--hn-panel-p)"
19608
+ };
19035
19609
  var _hoisted_2$11 = { class: "flex min-w-0 flex-col gap-1.5" };
19036
- var _hoisted_3$5 = { class: "px-(--hn-panel-p) py-1" };
19610
+ var _hoisted_3$5 = { class: "flex min-w-0 items-center gap-2" };
19037
19611
  var _hoisted_4$3 = {
19038
- key: 1,
19612
+ key: 0,
19613
+ class: "text-muted flex shrink-0 [&_svg]:size-5",
19614
+ "aria-hidden": "true"
19615
+ };
19616
+ var _hoisted_5$3 = { class: "px-(--hn-panel-p) py-1" };
19617
+ var _hoisted_6$2 = {
19618
+ key: 2,
19039
19619
  class: "flex shrink-0 justify-end gap-(--hn-inline-gap) px-(--hn-panel-p)"
19040
19620
  };
19041
19621
  //#endregion
@@ -19048,6 +19628,14 @@ var Drawer_default = /* @__PURE__ */ defineComponent({
19048
19628
  description: {},
19049
19629
  side: { default: "end" },
19050
19630
  size: { default: "md" },
19631
+ header: {
19632
+ type: Boolean,
19633
+ default: true
19634
+ },
19635
+ closable: {
19636
+ type: Boolean,
19637
+ default: true
19638
+ },
19051
19639
  locked: {
19052
19640
  type: Boolean,
19053
19641
  default: false
@@ -19058,13 +19646,16 @@ var Drawer_default = /* @__PURE__ */ defineComponent({
19058
19646
  "openModifiers": {}
19059
19647
  }),
19060
19648
  emits: ["update:open"],
19061
- setup(__props) {
19649
+ setup(__props, { expose: __expose }) {
19062
19650
  const props = __props;
19651
+ const slots = useSlots();
19063
19652
  function guard(e) {
19064
19653
  if (props.locked) e.preventDefault();
19065
19654
  }
19655
+ const { scrollArea, viewport } = useScrollViewport();
19656
+ __expose({ viewport });
19066
19657
  const open = useModel(__props, "open");
19067
- useUiLocale();
19658
+ const { content, present } = useOverlayPortal(open);
19068
19659
  function close() {
19069
19660
  open.value = false;
19070
19661
  }
@@ -19079,31 +19670,51 @@ var Drawer_default = /* @__PURE__ */ defineComponent({
19079
19670
  }, {
19080
19671
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
19081
19672
  _: 3
19082
- })) : createCommentVNode("", true), createVNode(unref(DialogPortal), null, {
19673
+ })) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(DialogPortal), { key: 1 }, {
19083
19674
  default: withCtx(() => [createVNode(unref(DialogOverlay), { class: "hn-scrim" }), createVNode(unref(DialogContent), {
19084
19675
  "as-child": "",
19085
19676
  onEscapeKeyDown: guard,
19086
19677
  onInteractOutside: guard
19087
19678
  }, {
19088
- default: withCtx(() => [createVNode(Card_default, {
19679
+ default: withCtx(() => [createVNode(Card_default, mergeProps({
19680
+ ref_key: "content",
19681
+ ref: content
19682
+ }, props.description ? {} : { "aria-describedby": void 0 }, {
19089
19683
  "data-hn-side": props.side,
19090
19684
  padded: false,
19091
- class: normalizeClass(unref(cn)("hn-anim-drawer pointer-events-auto fixed inset-y-0 z-(--hn-z-overlay) flex flex-col gap-4", "max-w-[calc(100vw-3rem)] rounded-none py-(--hn-panel-p) shadow-lg outline-none", unref(drawerCard)({
19685
+ class: unref(cn)(unref(drawerCard)({
19092
19686
  side: props.side,
19093
- size: props.size
19094
- }), props.class))
19095
- }, {
19096
- default: withCtx(() => [
19097
- createElementVNode("div", _hoisted_1$15, [createElementVNode("div", _hoisted_2$11, [createVNode(unref(DialogTitle), { "as-child": "" }, {
19687
+ size: props.size,
19688
+ padded: !slots.body
19689
+ }), props.class)
19690
+ }), {
19691
+ default: withCtx(() => [!props.header || slots.body ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(DialogTitle), { "as-child": "" }, {
19692
+ default: withCtx(() => [createVNode(Heading_default, {
19693
+ level: 2,
19694
+ class: "sr-only"
19695
+ }, {
19696
+ default: withCtx(() => [createTextVNode(toDisplayString(props.title), 1)]),
19697
+ _: 1
19698
+ })]),
19699
+ _: 1
19700
+ }), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
19701
+ key: 0,
19702
+ class: "sr-only"
19703
+ }, {
19704
+ default: withCtx(() => [createTextVNode(toDisplayString(props.description), 1)]),
19705
+ _: 1
19706
+ })) : createCommentVNode("", true)], 64)) : createCommentVNode("", true), slots.body ? renderSlot(_ctx.$slots, "body", { close }, void 0, void 0, 1) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
19707
+ props.header ? (openBlock(), createElementBlock("div", _hoisted_1$15, [createElementVNode("div", _hoisted_2$11, [createElementVNode("div", _hoisted_3$5, [slots.icon ? (openBlock(), createElementBlock("span", _hoisted_4$3, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true), createVNode(unref(DialogTitle), { "as-child": "" }, {
19098
19708
  default: withCtx(() => [createVNode(Heading_default, {
19099
19709
  level: 2,
19100
- size: "lg"
19710
+ size: "lg",
19711
+ class: "min-w-0"
19101
19712
  }, {
19102
- default: withCtx(() => [createTextVNode(toDisplayString(props.title), 1)]),
19103
- _: 1
19713
+ default: withCtx(() => [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(props.title), 1)])]),
19714
+ _: 3
19104
19715
  })]),
19105
- _: 1
19106
- }), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
19716
+ _: 3
19717
+ })]), props.description ? (openBlock(), createBlock(unref(DialogDescription), {
19107
19718
  key: 0,
19108
19719
  "as-child": ""
19109
19720
  }, {
@@ -19112,28 +19723,33 @@ var Drawer_default = /* @__PURE__ */ defineComponent({
19112
19723
  _: 1
19113
19724
  })]),
19114
19725
  _: 1
19115
- })) : createCommentVNode("", true)]), createVNode(unref(DialogClose), { "as-child": "" }, {
19726
+ })) : createCommentVNode("", true)]), props.closable ? (openBlock(), createBlock(unref(DialogClose), {
19727
+ key: 0,
19728
+ "as-child": ""
19729
+ }, {
19116
19730
  default: withCtx(() => [createVNode(CloseButton_default, {
19117
19731
  disabled: props.locked,
19118
19732
  class: "-mt-1.5 -me-1.5 shrink-0"
19119
19733
  }, null, 8, ["disabled"])]),
19120
19734
  _: 1
19121
- })]),
19735
+ })) : createCommentVNode("", true)])) : createCommentVNode("", true),
19122
19736
  _ctx.$slots.content ? (openBlock(), createBlock(ScrollArea_default, {
19123
- key: 0,
19737
+ key: 1,
19738
+ ref_key: "scrollArea",
19739
+ ref: scrollArea,
19124
19740
  class: "min-h-0 grow"
19125
19741
  }, {
19126
- default: withCtx(() => [createElementVNode("div", _hoisted_3$5, [renderSlot(_ctx.$slots, "content", { close })])]),
19742
+ default: withCtx(() => [createElementVNode("div", _hoisted_5$3, [renderSlot(_ctx.$slots, "content", { close })])]),
19127
19743
  _: 3
19128
- })) : createCommentVNode("", true),
19129
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$3, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
19130
- ]),
19744
+ }, 512)) : createCommentVNode("", true),
19745
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6$2, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
19746
+ ], 64))]),
19131
19747
  _: 3
19132
- }, 8, ["data-hn-side", "class"])]),
19748
+ }, 16, ["data-hn-side", "class"])]),
19133
19749
  _: 3
19134
19750
  })]),
19135
19751
  _: 3
19136
- })]),
19752
+ })) : createCommentVNode("", true)]),
19137
19753
  _: 3
19138
19754
  }, 8, ["open"]);
19139
19755
  };
@@ -19199,6 +19815,7 @@ var AppShell_default = /* @__PURE__ */ defineComponent({
19199
19815
  type: Boolean,
19200
19816
  default: true
19201
19817
  },
19818
+ mobileTitle: {},
19202
19819
  class: {}
19203
19820
  }, {
19204
19821
  "sidebar": { default: "expanded" },
@@ -19254,7 +19871,7 @@ var AppShell_default = /* @__PURE__ */ defineComponent({
19254
19871
  key: 1,
19255
19872
  open: mobileOpen.value,
19256
19873
  "onUpdate:open": _cache[0] || (_cache[0] = ($event) => mobileOpen.value = $event),
19257
- title: unref(t).sidebar.navLabel,
19874
+ title: props.mobileTitle ?? unref(t).sidebar.navLabel,
19258
19875
  side: "start",
19259
19876
  size: "sm",
19260
19877
  class: "lg:hidden"
@@ -19628,20 +20245,14 @@ var BreadcrumbSeparator_default = /* @__PURE__ */ defineComponent({
19628
20245
  //#region src/lib/anchored-overlay.ts
19629
20246
  function useAnchoredOverlay(props, open, emit, openAutoFocus) {
19630
20247
  const { forwardRef: trigger, currentElement: triggerElement } = useForwardExpose();
19631
- const retainedAnchor = shallowRef();
19632
- const reference = computed(() => props.anchor ?? (open.value ? triggerElement.value ?? retainedAnchor.value : retainedAnchor.value ?? triggerElement.value));
19633
20248
  const visible = computed({
19634
20249
  get: () => !!open.value && !!(props.anchor || triggerElement.value),
19635
20250
  set: (value) => {
19636
20251
  open.value = value;
19637
20252
  }
19638
20253
  });
19639
- watch(() => props.anchor, (anchor) => {
19640
- if (anchor) retainedAnchor.value = anchor;
19641
- }, {
19642
- immediate: true,
19643
- flush: "sync"
19644
- });
20254
+ const { content, present } = useOverlayPortal(visible);
20255
+ const reference = useOverlayAnchor(() => props.anchor ?? triggerElement.value, visible, present, () => props.updatePositionStrategy);
19645
20256
  let previousFocus = null;
19646
20257
  let interactedOutside = false;
19647
20258
  function once(handler) {
@@ -19654,7 +20265,7 @@ function useAnchoredOverlay(props, open, emit, openAutoFocus) {
19654
20265
  }
19655
20266
  watch(visible, (active) => {
19656
20267
  if (!active) return;
19657
- previousFocus = (props.anchor?.ownerDocument ?? triggerElement.value?.ownerDocument)?.activeElement;
20268
+ previousFocus = (overlayAnchorContext(props.anchor)?.ownerDocument ?? triggerElement.value?.ownerDocument ?? defaultDocument)?.activeElement;
19658
20269
  interactedOutside = false;
19659
20270
  }, {
19660
20271
  immediate: true,
@@ -19670,11 +20281,10 @@ function useAnchoredOverlay(props, open, emit, openAutoFocus) {
19670
20281
  nextTick(() => {
19671
20282
  const active = panel.ownerDocument.activeElement;
19672
20283
  if (restore && !visible.value && target?.isConnected && (active === panel.ownerDocument.body || panel.contains(active))) target.focus({ preventScroll: true });
19673
- if (!visible.value) retainedAnchor.value = void 0;
19674
20284
  });
19675
20285
  });
19676
20286
  const onInteractOutside = once((event) => {
19677
- if (!triggerElement.value && props.anchor?.contains(event.target)) event.preventDefault();
20287
+ if (!triggerElement.value && overlayAnchorElement(props.anchor)?.contains(event.target)) event.preventDefault();
19678
20288
  emit("interactOutside", event);
19679
20289
  const original = event.detail.originalEvent;
19680
20290
  const rightClick = "button" in original && (original.button === 2 || original.button === 0 && original.ctrlKey);
@@ -19682,6 +20292,8 @@ function useAnchoredOverlay(props, open, emit, openAutoFocus) {
19682
20292
  });
19683
20293
  return {
19684
20294
  trigger,
20295
+ content,
20296
+ present,
19685
20297
  reference,
19686
20298
  visible,
19687
20299
  events: {
@@ -19702,6 +20314,7 @@ var Popover_default = /* @__PURE__ */ defineComponent({
19702
20314
  __name: "Popover",
19703
20315
  props: /*@__PURE__*/ mergeModels({
19704
20316
  anchor: {},
20317
+ updatePositionStrategy: { default: "optimized" },
19705
20318
  modal: {
19706
20319
  type: Boolean,
19707
20320
  default: true
@@ -19730,8 +20343,7 @@ var Popover_default = /* @__PURE__ */ defineComponent({
19730
20343
  const props = __props;
19731
20344
  const open = useModel(__props, "open");
19732
20345
  const emit = __emit;
19733
- const { trigger, reference, visible, events } = useAnchoredOverlay(props, open, emit, (event) => emit("openAutoFocus", event));
19734
- const { content, present } = useOverlayPortal(visible);
20346
+ const { trigger, content, present, reference, visible, events } = useAnchoredOverlay(props, open, emit, (event) => emit("openAutoFocus", event));
19735
20347
  const pressOrigin = computed(() => {
19736
20348
  if (props.side === "left") return "right";
19737
20349
  if (props.side === "right") return "left";
@@ -19759,6 +20371,7 @@ var Popover_default = /* @__PURE__ */ defineComponent({
19759
20371
  ...unref(events)
19760
20372
  }, {
19761
20373
  reference: unref(reference),
20374
+ "update-position-strategy": props.updatePositionStrategy,
19762
20375
  "as-child": "",
19763
20376
  side: props.side,
19764
20377
  align: props.align,
@@ -19776,6 +20389,7 @@ var Popover_default = /* @__PURE__ */ defineComponent({
19776
20389
  _: 3
19777
20390
  }, 16, [
19778
20391
  "reference",
20392
+ "update-position-strategy",
19779
20393
  "side",
19780
20394
  "align",
19781
20395
  "side-offset"
@@ -19796,6 +20410,7 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
19796
20410
  props: /*@__PURE__*/ mergeModels({
19797
20411
  label: {},
19798
20412
  anchor: {},
20413
+ updatePositionStrategy: { default: "optimized" },
19799
20414
  modal: {
19800
20415
  type: Boolean,
19801
20416
  default: true
@@ -19818,7 +20433,7 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
19818
20433
  ], ["update:open"]),
19819
20434
  setup(__props, { emit: __emit }) {
19820
20435
  const props = __props;
19821
- const { trigger, reference, visible, events } = useAnchoredOverlay(props, useModel(__props, "open"), __emit);
20436
+ const { trigger, content, present, reference, visible, events } = useAnchoredOverlay(props, useModel(__props, "open"), __emit);
19822
20437
  const pressOrigin = computed(() => {
19823
20438
  if (props.side === "left") return "right";
19824
20439
  if (props.side === "right") return "left";
@@ -19842,19 +20457,22 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
19842
20457
  }, {
19843
20458
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
19844
20459
  _: 3
19845
- }, 8, ["style"])) : createCommentVNode("", true), createVNode(unref(DropdownMenuPortal), null, {
19846
- default: withCtx(() => [unref(reference) ? (openBlock(), createBlock(unref(DropdownMenuContent), mergeProps({ key: 0 }, {
20460
+ }, 8, ["style"])) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(DropdownMenuPortal), { key: 1 }, {
20461
+ default: withCtx(() => [createVNode(unref(DropdownMenuContent), mergeProps({
19847
20462
  "aria-label": props.label,
19848
20463
  ..._ctx.$attrs,
19849
20464
  ...unref(events)
19850
20465
  }, {
19851
20466
  reference: unref(reference),
20467
+ "update-position-strategy": props.updatePositionStrategy,
19852
20468
  "as-child": "",
19853
20469
  side: props.side,
19854
20470
  align: props.align,
19855
20471
  "side-offset": props.sideOffset
19856
20472
  }), {
19857
20473
  default: withCtx(() => [createVNode(Card_default, {
20474
+ ref_key: "content",
20475
+ ref: content,
19858
20476
  padded: false,
19859
20477
  class: normalizeClass(unref(cn)("hn-anim-pop z-(--hn-z-overlay) flex min-w-40 flex-col gap-0.5 p-1 shadow-md outline-none", props.class))
19860
20478
  }, {
@@ -19864,12 +20482,13 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
19864
20482
  _: 3
19865
20483
  }, 16, [
19866
20484
  "reference",
20485
+ "update-position-strategy",
19867
20486
  "side",
19868
20487
  "align",
19869
20488
  "side-offset"
19870
- ])) : createCommentVNode("", true)]),
20489
+ ])]),
19871
20490
  _: 3
19872
- })]),
20491
+ })) : createCommentVNode("", true)]),
19873
20492
  _: 3
19874
20493
  }, 8, [
19875
20494
  "open",
@@ -20186,12 +20805,14 @@ var Dialog_default = /* @__PURE__ */ defineComponent({
20186
20805
  "openModifiers": {}
20187
20806
  }),
20188
20807
  emits: ["update:open"],
20189
- setup(__props) {
20808
+ setup(__props, { expose: __expose }) {
20190
20809
  const props = __props;
20191
20810
  const slots = useSlots();
20192
20811
  function guard(e) {
20193
20812
  if (props.locked) e.preventDefault();
20194
20813
  }
20814
+ const { scrollArea, viewport } = useScrollViewport();
20815
+ __expose({ viewport });
20195
20816
  const open = useModel(__props, "open");
20196
20817
  const { content, present } = useOverlayPortal(open);
20197
20818
  function close() {
@@ -20273,11 +20894,13 @@ var Dialog_default = /* @__PURE__ */ defineComponent({
20273
20894
  })) : createCommentVNode("", true)])) : createCommentVNode("", true),
20274
20895
  _ctx.$slots.content ? (openBlock(), createBlock(ScrollArea_default, {
20275
20896
  key: 1,
20897
+ ref_key: "scrollArea",
20898
+ ref: scrollArea,
20276
20899
  class: "min-h-0"
20277
20900
  }, {
20278
20901
  default: withCtx(() => [createElementVNode("div", _hoisted_5$1, [renderSlot(_ctx.$slots, "content", { close })])]),
20279
20902
  _: 3
20280
- })) : createCommentVNode("", true),
20903
+ }, 512)) : createCommentVNode("", true),
20281
20904
  _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
20282
20905
  ], 64))]),
20283
20906
  _: 3
@@ -21376,6 +21999,6 @@ function createScrollRestorer(key, ports) {
21376
21999
  };
21377
22000
  }
21378
22001
  //#endregion
21379
- export { Accordion_default as Accordion, AccordionContent_default as AccordionContent, AccordionItem_default as AccordionItem, AccordionTrigger_default as AccordionTrigger, Alert_default as Alert, AlertDialog_default as AlertDialog, Anchor_default as Anchor, AppShell_default as AppShell, AspectRatio_default as AspectRatio, Avatar_default as Avatar, AvatarGroup_default as AvatarGroup, Badge_default as Badge, Banner_default as Banner, Blockquote_default as Blockquote, Breadcrumb_default as Breadcrumb, BreadcrumbItem_default as BreadcrumbItem, BreadcrumbSeparator_default as BreadcrumbSeparator, Button_default as Button, ButtonGroup_default as ButtonGroup, Calendar_default as Calendar, Callout_default as Callout, Card_default as Card, Center_default as Center, Checkbox_default as Checkbox, CheckboxGroup_default as CheckboxGroup, Chip_default as Chip, CloseButton_default as CloseButton, Code_default as Code, CodeBlock_default as CodeBlock, Collapsible_default as Collapsible, CollapsibleContent_default as CollapsibleContent, CollapsibleTrigger_default as CollapsibleTrigger, Combobox_default as Combobox, CommandPalette_default as CommandPalette, Container_default as Container, ContextMenu_default as ContextMenu, ContextMenuCheckboxItem_default as ContextMenuCheckboxItem, ContextMenuGroup_default as ContextMenuGroup, ContextMenuItem_default as ContextMenuItem, ContextMenuLabel_default as ContextMenuLabel, ContextMenuRadioGroup_default as ContextMenuRadioGroup, ContextMenuRadioItem_default as ContextMenuRadioItem, ContextMenuSeparator_default as ContextMenuSeparator, ContextMenuSub_default as ContextMenuSub, CopyButton_default as CopyButton, DURATION, DateField_default as DateField, DatePicker_default as DatePicker, DateRangeField_default as DateRangeField, DateRangePicker_default as DateRangePicker, DateTimePicker_default as DateTimePicker, DescriptionDetails_default as DescriptionDetails, DescriptionList_default as DescriptionList, DescriptionTerm_default as DescriptionTerm, Dialog_default as Dialog, DisclosureIcon_default as DisclosureIcon, Divider_default as Divider, Drawer_default as Drawer, DropdownMenu_default as DropdownMenu, DropdownMenuCheckboxItem_default as DropdownMenuCheckboxItem, DropdownMenuGroup_default as DropdownMenuGroup, DropdownMenuItem_default as DropdownMenuItem, DropdownMenuLabel_default as DropdownMenuLabel, DropdownMenuRadioGroup_default as DropdownMenuRadioGroup, DropdownMenuRadioItem_default as DropdownMenuRadioItem, DropdownMenuSeparator_default as DropdownMenuSeparator, DropdownMenuSub_default as DropdownMenuSub, EASE, Empty_default as Empty, FileUpload_default as FileUpload, Flex_default as Flex, Form_default as Form, FormField_default as FormField, FormLayout_default as FormLayout, Grid_default as Grid, Heading_default as Heading, Highlight_default as Highlight, HoverCard_default as HoverCard, IconButton_default as IconButton, Image_default as Image, ImageGroup_default as ImageGroup, Indicator_default as Indicator, Inline_default as Inline, Input_default as Input, InputGroup_default as InputGroup, InputGroupAddon_default as InputGroupAddon, Kbd_default as Kbd, Lightbox_default as Lightbox, Link_default as Link, List_default as List, ListItem_default as ListItem, Listbox_default as Listbox, LoadingOverlay_default as LoadingOverlay, Mark_default as Mark, Menubar_default as Menubar, MenubarCheckboxItem_default as MenubarCheckboxItem, MenubarGroup_default as MenubarGroup, MenubarItem_default as MenubarItem, MenubarLabel_default as MenubarLabel, MenubarMenu_default as MenubarMenu, MenubarRadioGroup_default as MenubarRadioGroup, MenubarRadioItem_default as MenubarRadioItem, MenubarSeparator_default as MenubarSeparator, MenubarSub_default as MenubarSub, MeterGroup_default as MeterGroup, MultiCombobox_default as MultiCombobox, MultiSelect_default as MultiSelect, NavLink_default as NavLink, NumberFormat_default as NumberFormat, NumberInput_default as NumberInput, Page_default as Page, PageAside_default as PageAside, PageBody_default as PageBody, PageHeader_default as PageHeader, Pagination_default as Pagination, PaginationContent_default as PaginationContent, PaginationInfo_default as PaginationInfo, PaginationJump_default as PaginationJump, PaginationSize_default as PaginationSize, Panel_default as Panel, PasswordInput_default as PasswordInput, PinInput_default as PinInput, Popconfirm_default as Popconfirm, Popover_default as Popover, PrevNext_default as PrevNext, PrevNextLink_default as PrevNextLink, Progress_default as Progress, Prose_default as Prose, REQUIRED_SINGLETONS, RESTORE_DEADLINE_MS, RadioGroup_default as RadioGroup, RangeCalendar_default as RangeCalendar, RangeSlider_default as RangeSlider, Rating_default as Rating, Result_default as Result, RingProgress_default as RingProgress, Ripple_default as Ripple, SAVE_THROTTLE_MS, SCROLL_ATOP_ATTR, SCROLL_ATOP_HIDE_PX, SCROLL_AT_ATTR, SCROLL_RESTORE_ATTR, SCROLL_STATE_FIELD, STAGGER, ScrollArea_default as ScrollArea, SearchInput_default as SearchInput, Section_default as Section, SegmentedControl_default as SegmentedControl, Select_default as Select, Sheet_default as Sheet, Sidebar_default as Sidebar, SidebarGroup_default as SidebarGroup, SidebarTrigger_default as SidebarTrigger, SimpleGrid_default as SimpleGrid, Skeleton_default as Skeleton, Slider_default as Slider, Space_default as Space, Spinner_default as Spinner, Splitter_default as Splitter, SplitterHandle_default as SplitterHandle, SplitterPanel_default as SplitterPanel, Spoiler_default as Spoiler, Stack_default as Stack, Statistic_default as Statistic, Switch_default as Switch, TRANSITION, TRAVEL, Table_default as Table, TableBody_default as TableBody, TableCell_default as TableCell, TableHead_default as TableHead, TableHeader_default as TableHeader, TableRow_default as TableRow, Tabs_default as Tabs, TabsContent_default as TabsContent, TabsList_default as TabsList, TabsTrigger_default as TabsTrigger, Tag_default as Tag, TagsInput_default as TagsInput, Text_default as Text, Textarea_default as Textarea, Time_default as Time, TimeField_default as TimeField, Toaster_default as Toaster, Toggle_default as Toggle, Tooltip_default as Tooltip, TooltipProvider_default as TooltipProvider, TreeSelect_default as TreeSelect, VisuallyHidden_default as VisuallyHidden, atopOff, cn, createScrollRestorer, cssEase, enUS, firstPaintRestoreScript, provideImageResolver, provideUiLocale, readScrollRecord, toast, tokenize, tokensToHtml, tv, useImageResolver, useUiLocale, vTooltip, writeScrollRecord, zhCN };
22002
+ export { Accordion_default as Accordion, AccordionContent_default as AccordionContent, AccordionItem_default as AccordionItem, AccordionTrigger_default as AccordionTrigger, Alert_default as Alert, AlertDialog_default as AlertDialog, Anchor_default as Anchor, AppShell_default as AppShell, AspectRatio_default as AspectRatio, Avatar_default as Avatar, AvatarGroup_default as AvatarGroup, Badge_default as Badge, Banner_default as Banner, Blockquote_default as Blockquote, Breadcrumb_default as Breadcrumb, BreadcrumbItem_default as BreadcrumbItem, BreadcrumbSeparator_default as BreadcrumbSeparator, Button_default as Button, ButtonGroup_default as ButtonGroup, Calendar_default as Calendar, Callout_default as Callout, Card_default as Card, Center_default as Center, Checkbox_default as Checkbox, CheckboxGroup_default as CheckboxGroup, Chip_default as Chip, CloseButton_default as CloseButton, Code_default as Code, CodeBlock_default as CodeBlock, Collapsible_default as Collapsible, CollapsibleContent_default as CollapsibleContent, CollapsibleTrigger_default as CollapsibleTrigger, Combobox_default as Combobox, CommandPalette_default as CommandPalette, Container_default as Container, ContextMenu_default as ContextMenu, ContextMenuCheckboxItem_default as ContextMenuCheckboxItem, ContextMenuGroup_default as ContextMenuGroup, ContextMenuItem_default as ContextMenuItem, ContextMenuLabel_default as ContextMenuLabel, ContextMenuRadioGroup_default as ContextMenuRadioGroup, ContextMenuRadioItem_default as ContextMenuRadioItem, ContextMenuSeparator_default as ContextMenuSeparator, ContextMenuSub_default as ContextMenuSub, CopyButton_default as CopyButton, DURATION, DateField_default as DateField, DatePicker_default as DatePicker, DateRangeField_default as DateRangeField, DateRangePicker_default as DateRangePicker, DateTimePicker_default as DateTimePicker, DescriptionDetails_default as DescriptionDetails, DescriptionList_default as DescriptionList, DescriptionTerm_default as DescriptionTerm, Dialog_default as Dialog, DisclosureIcon_default as DisclosureIcon, Divider_default as Divider, Drawer_default as Drawer, DropdownMenu_default as DropdownMenu, DropdownMenuCheckboxItem_default as DropdownMenuCheckboxItem, DropdownMenuGroup_default as DropdownMenuGroup, DropdownMenuItem_default as DropdownMenuItem, DropdownMenuLabel_default as DropdownMenuLabel, DropdownMenuRadioGroup_default as DropdownMenuRadioGroup, DropdownMenuRadioItem_default as DropdownMenuRadioItem, DropdownMenuSeparator_default as DropdownMenuSeparator, DropdownMenuSub_default as DropdownMenuSub, EASE, Empty_default as Empty, FileUpload_default as FileUpload, Flex_default as Flex, Form_default as Form, FormField_default as FormField, FormLayout_default as FormLayout, Grid_default as Grid, Heading_default as Heading, Highlight_default as Highlight, HoverCard_default as HoverCard, IconButton_default as IconButton, Image_default as Image, ImageGroup_default as ImageGroup, Indicator_default as Indicator, Inline_default as Inline, Input_default as Input, InputGroup_default as InputGroup, InputGroupAddon_default as InputGroupAddon, Kbd_default as Kbd, Lightbox_default as Lightbox, Link_default as Link, List_default as List, ListItem_default as ListItem, Listbox_default as Listbox, LoadingOverlay_default as LoadingOverlay, Mark_default as Mark, Menubar_default as Menubar, MenubarCheckboxItem_default as MenubarCheckboxItem, MenubarGroup_default as MenubarGroup, MenubarItem_default as MenubarItem, MenubarLabel_default as MenubarLabel, MenubarMenu_default as MenubarMenu, MenubarRadioGroup_default as MenubarRadioGroup, MenubarRadioItem_default as MenubarRadioItem, MenubarSeparator_default as MenubarSeparator, MenubarSub_default as MenubarSub, MeterGroup_default as MeterGroup, MultiCombobox_default as MultiCombobox, MultiSelect_default as MultiSelect, NavLink_default as NavLink, NumberFormat_default as NumberFormat, NumberInput_default as NumberInput, Page_default as Page, PageAside_default as PageAside, PageBody_default as PageBody, PageHeader_default as PageHeader, Pagination_default as Pagination, PaginationContent_default as PaginationContent, PaginationInfo_default as PaginationInfo, PaginationJump_default as PaginationJump, PaginationSize_default as PaginationSize, Panel_default as Panel, PasswordInput_default as PasswordInput, PinInput_default as PinInput, Popconfirm_default as Popconfirm, Popover_default as Popover, PrevNext_default as PrevNext, PrevNextLink_default as PrevNextLink, Progress_default as Progress, Prose_default as Prose, REQUIRED_SINGLETONS, RESTORE_DEADLINE_MS, RadioGroup_default as RadioGroup, RangeCalendar_default as RangeCalendar, RangeSlider_default as RangeSlider, Rating_default as Rating, Result_default as Result, RingProgress_default as RingProgress, Ripple_default as Ripple, SAVE_THROTTLE_MS, SCROLL_ATOP_ATTR, SCROLL_ATOP_HIDE_PX, SCROLL_AT_ATTR, SCROLL_RESTORE_ATTR, SCROLL_STATE_FIELD, STAGGER, ScrollArea_default as ScrollArea, SearchInput_default as SearchInput, Section_default as Section, SegmentedControl_default as SegmentedControl, Select_default as Select, Sheet_default as Sheet, Sidebar_default as Sidebar, SidebarGroup_default as SidebarGroup, SidebarLabel_default as SidebarLabel, SidebarTrigger_default as SidebarTrigger, SimpleGrid_default as SimpleGrid, Skeleton_default as Skeleton, Slider_default as Slider, Space_default as Space, Spinner_default as Spinner, Splitter_default as Splitter, SplitterHandle_default as SplitterHandle, SplitterPanel_default as SplitterPanel, Spoiler_default as Spoiler, Stack_default as Stack, Statistic_default as Statistic, Switch_default as Switch, TRANSITION, TRAVEL, Table_default as Table, TableBody_default as TableBody, TableCell_default as TableCell, TableHead_default as TableHead, TableHeader_default as TableHeader, TableRow_default as TableRow, Tabs_default as Tabs, TabsContent_default as TabsContent, TabsList_default as TabsList, TabsTrigger_default as TabsTrigger, Tag_default as Tag, TagsInput_default as TagsInput, Text_default as Text, Textarea_default as Textarea, Time_default as Time, TimeField_default as TimeField, Toaster_default as Toaster, Toggle_default as Toggle, Tooltip_default as Tooltip, TooltipProvider_default as TooltipProvider, Tree_default as Tree, TreeSelect_default as TreeSelect, VisuallyHidden_default as VisuallyHidden, atopOff, cn, createScrollRestorer, cssEase, enUS, firstPaintRestoreScript, provideImageResolver, provideUiLocale, readScrollRecord, toast, tokenize, tokensToHtml, tv, useImageResolver, useUiLocale, vTooltip, writeScrollRecord, zhCN };
21380
22003
 
21381
22004
  //# sourceMappingURL=index.js.map