@hina-ui/vue 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/index.js +880 -347
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/components/alert-dialog/AlertDialog.vue.d.ts +6 -2
  4. package/dist/types/components/alert-dialog/AlertDialog.vue.d.ts.map +1 -1
  5. package/dist/types/components/alert-dialog/alert-dialog.variants.d.ts +5 -0
  6. package/dist/types/components/alert-dialog/alert-dialog.variants.d.ts.map +1 -0
  7. package/dist/types/components/alert-dialog/composables/useAlertDialogConfirm.d.ts +9 -0
  8. package/dist/types/components/alert-dialog/composables/useAlertDialogConfirm.d.ts.map +1 -0
  9. package/dist/types/components/alert-dialog/composables/useConfirmDelay.d.ts +3 -0
  10. package/dist/types/components/alert-dialog/composables/useConfirmDelay.d.ts.map +1 -0
  11. package/dist/types/components/anchor/Anchor.vue.d.ts.map +1 -1
  12. package/dist/types/components/code-block/CodeBlock.vue.d.ts.map +1 -1
  13. package/dist/types/components/code-block/code-block.variants.d.ts +6 -0
  14. package/dist/types/components/code-block/code-block.variants.d.ts.map +1 -0
  15. package/dist/types/components/code-block/composables/useCodeHighlight.d.ts +7 -0
  16. package/dist/types/components/code-block/composables/useCodeHighlight.d.ts.map +1 -0
  17. package/dist/types/components/dialog/Dialog.vue.d.ts.map +1 -1
  18. package/dist/types/components/dialog/ModalContent.vue.d.ts +21 -0
  19. package/dist/types/components/dialog/ModalContent.vue.d.ts.map +1 -0
  20. package/dist/types/components/dropdown-menu/DropdownMenu.vue.d.ts +18 -6
  21. package/dist/types/components/dropdown-menu/DropdownMenu.vue.d.ts.map +1 -1
  22. package/dist/types/components/file-upload/FileUpload.vue.d.ts +1 -1
  23. package/dist/types/components/file-upload/FileUpload.vue.d.ts.map +1 -1
  24. package/dist/types/components/highlight/Highlight.vue.d.ts +2 -0
  25. package/dist/types/components/highlight/Highlight.vue.d.ts.map +1 -1
  26. package/dist/types/components/highlight/composables/useHighlightMotion.d.ts +10 -0
  27. package/dist/types/components/highlight/composables/useHighlightMotion.d.ts.map +1 -0
  28. package/dist/types/components/image/Image.vue.d.ts +5 -2
  29. package/dist/types/components/image/Image.vue.d.ts.map +1 -1
  30. package/dist/types/components/image/composables/useImage.d.ts.map +1 -1
  31. package/dist/types/components/image/image.variants.d.ts +23 -1
  32. package/dist/types/components/image/image.variants.d.ts.map +1 -1
  33. package/dist/types/components/lightbox/LightboxThumbs.vue.d.ts.map +1 -1
  34. package/dist/types/components/lightbox/composables/useLightboxMotion.d.ts.map +1 -1
  35. package/dist/types/components/lightbox/composables/useLightboxPose.d.ts.map +1 -1
  36. package/dist/types/components/lightbox/utils/clip.d.ts +16 -0
  37. package/dist/types/components/lightbox/utils/clip.d.ts.map +1 -0
  38. package/dist/types/components/lightbox/utils/pose.d.ts +2 -2
  39. package/dist/types/components/lightbox/utils/pose.d.ts.map +1 -1
  40. package/dist/types/components/popover/Popover.vue.d.ts +19 -6
  41. package/dist/types/components/popover/Popover.vue.d.ts.map +1 -1
  42. package/dist/types/components/popover/PopoverContent.vue.d.ts +29 -0
  43. package/dist/types/components/popover/PopoverContent.vue.d.ts.map +1 -0
  44. package/dist/types/components/popover/composables/usePopoverCloseFocus.d.ts +2 -0
  45. package/dist/types/components/popover/composables/usePopoverCloseFocus.d.ts.map +1 -0
  46. package/dist/types/components/scroll-area/ScrollArea.vue.d.ts.map +1 -1
  47. package/dist/types/components/scroll-area/composables/useLayerLock.d.ts.map +1 -1
  48. package/dist/types/components/scroll-area/composables/useScrollFocus.d.ts +17 -0
  49. package/dist/types/components/scroll-area/composables/useScrollFocus.d.ts.map +1 -0
  50. package/dist/types/components/segmented-control/SegmentedControl.vue.d.ts.map +1 -1
  51. package/dist/types/components/tabs/TabsTrigger.vue.d.ts.map +1 -1
  52. package/dist/types/index.d.ts +2 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/types/lib/anchored-overlay.d.ts +19 -0
  55. package/dist/types/lib/anchored-overlay.d.ts.map +1 -0
  56. package/dist/types/lib/dialog-focus.d.ts +2 -0
  57. package/dist/types/lib/dialog-focus.d.ts.map +1 -0
  58. package/dist/types/lib/overlay-portal.d.ts +6 -0
  59. package/dist/types/lib/overlay-portal.d.ts.map +1 -0
  60. package/package.json +1 -1
  61. package/src/components/alert-dialog/AlertDialog.vue +31 -40
  62. package/src/components/alert-dialog/alert-dialog.variants.ts +17 -0
  63. package/src/components/alert-dialog/composables/useAlertDialogConfirm.ts +29 -0
  64. package/src/components/alert-dialog/composables/useConfirmDelay.ts +37 -0
  65. package/src/components/anchor/Anchor.vue +1 -0
  66. package/src/components/code-block/CodeBlock.vue +15 -30
  67. package/src/components/code-block/code-block.variants.ts +21 -0
  68. package/src/components/code-block/composables/useCodeHighlight.ts +30 -0
  69. package/src/components/dialog/Dialog.vue +7 -4
  70. package/src/components/dialog/ModalContent.vue +19 -0
  71. package/src/components/dropdown-menu/DropdownMenu.vue +16 -4
  72. package/src/components/highlight/Highlight.vue +5 -4
  73. package/src/components/highlight/composables/useHighlightMotion.ts +22 -0
  74. package/src/components/image/Image.vue +9 -12
  75. package/src/components/image/composables/useImage.ts +6 -3
  76. package/src/components/image/image.variants.ts +13 -1
  77. package/src/components/lightbox/LightboxThumbs.vue +1 -0
  78. package/src/components/lightbox/composables/useLightboxMotion.ts +3 -1
  79. package/src/components/lightbox/composables/useLightboxPose.ts +5 -2
  80. package/src/components/lightbox/utils/clip.ts +117 -0
  81. package/src/components/lightbox/utils/pose.ts +23 -13
  82. package/src/components/popover/Popover.vue +26 -6
  83. package/src/components/popover/PopoverContent.vue +25 -0
  84. package/src/components/popover/composables/usePopoverCloseFocus.ts +17 -0
  85. package/src/components/scroll-area/ScrollArea.vue +7 -5
  86. package/src/components/scroll-area/composables/useLayerLock.ts +8 -9
  87. package/src/components/scroll-area/composables/useScrollFocus.ts +39 -0
  88. package/src/components/scroll-area/composables/useWheelRedirect.ts +1 -1
  89. package/src/components/segmented-control/SegmentedControl.vue +6 -1
  90. package/src/components/skeleton/LICENSE +24 -0
  91. package/src/components/tabs/TabsTrigger.vue +6 -1
  92. package/src/index.ts +2 -0
  93. package/src/lib/anchored-overlay.ts +107 -0
  94. package/src/lib/dialog-focus.ts +13 -0
  95. package/src/lib/overlay-portal.ts +8 -0
  96. package/src/styles/interaction.css +26 -3
  97. package/src/styles/motion.css +14 -2
  98. package/src/styles/semantic.css +5 -1
  99. package/src/styles/typography.css +9 -4
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { clsx } from "clsx";
2
2
  import { extendTailwindMerge } from "tailwind-merge";
3
3
  import { createTV } from "tailwind-variants";
4
- import { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, inject, isRef, markRaw, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onBeforeUpdate, onMounted, openBlock, provide, reactive, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRef, toValue, unref, useAttrs, useId, useModel, useSlots, vModelDynamic, vModelSelect, vModelText, watch, watchEffect, withCtx, withDirectives, withKeys, withModifiers } from "vue";
5
- import { AccordionContent, AccordionHeader, AccordionItem, AccordionRoot, AccordionTrigger, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogOverlay, AlertDialogPortal, AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, AspectRatio, CalendarCell, CalendarCellTrigger, CalendarGrid, CalendarGridBody, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarNext, CalendarPrev, CalendarRoot, CheckboxGroupRoot, CheckboxRoot, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, ComboboxAnchor, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxPortal, ComboboxRoot, ComboboxTrigger, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuItemIndicator, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DateFieldInput, DateFieldRoot, DateRangeFieldInput, DateRangeFieldRoot, DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemIndicator, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRoot, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, HoverCardContent, HoverCardPortal, HoverCardRoot, HoverCardTrigger, ListboxContent, ListboxFilter, ListboxGroup, ListboxGroupLabel, ListboxItem, ListboxItemIndicator, ListboxRoot, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarItemIndicator, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarRoot, MenubarSeparator, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthPickerCell, MonthPickerCellTrigger, MonthPickerGrid, MonthPickerGridBody, MonthPickerGridRow, MonthPickerNext, MonthPickerPrev, MonthPickerRoot, NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, PinInputInput, PinInputRoot, PopoverAnchor, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, Primitive, ProgressIndicator, ProgressRoot, RadioGroupItem, RadioGroupRoot, RangeCalendarCell, RangeCalendarCellTrigger, RangeCalendarGrid, RangeCalendarGridBody, RangeCalendarGridHead, RangeCalendarGridRow, RangeCalendarHeadCell, RangeCalendarNext, RangeCalendarPrev, RangeCalendarRoot, RatingItem, RatingItemIndicator, RatingRoot, SelectContent, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectPortal, SelectRoot, SelectTrigger, Separator, SliderRoot, SliderThumb, SliderTrack, SplitterGroup, SplitterPanel, SplitterResizeHandle, SwitchRoot, TabsContent, TabsList, TabsRoot, TabsTrigger, TagsInputInput, TagsInputItem, TagsInputItemText, TagsInputRoot, TimeFieldInput, TimeFieldRoot, ToastClose, ToastDescription, ToastPortal, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Toggle, ToggleGroupItem, ToggleGroupRoot, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipTrigger, TreeItem, TreeRoot, VisuallyHidden, YearPickerCell, YearPickerCellTrigger, YearPickerGrid, YearPickerGridBody, YearPickerGridRow, YearPickerNext, YearPickerPrev, YearPickerRoot, injectListboxItemContext, injectTabsRootContext, injectTooltipProviderContext, useBodyScrollLock, useDirection, useForwardPropsEmits } from "reka-ui";
4
+ import { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, inject, isRef, markRaw, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onBeforeUpdate, onMounted, onScopeDispose, openBlock, provide, reactive, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, toHandlers, toRef, toValue, unref, useAttrs, useId, useModel, useSlots, vModelDynamic, vModelSelect, vModelText, watch, watchEffect, withCtx, withDirectives, withKeys, withModifiers } from "vue";
5
+ import { AccordionContent, AccordionHeader, AccordionItem, AccordionRoot, AccordionTrigger, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogOverlay, AlertDialogPortal, AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, AspectRatio, CalendarCell, CalendarCellTrigger, CalendarGrid, CalendarGridBody, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarNext, CalendarPrev, CalendarRoot, CheckboxGroupRoot, CheckboxRoot, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, ComboboxAnchor, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxPortal, ComboboxRoot, ComboboxTrigger, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuItemIndicator, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DateFieldInput, DateFieldRoot, DateRangeFieldInput, DateRangeFieldRoot, DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemIndicator, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRoot, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, HoverCardContent, HoverCardPortal, HoverCardRoot, HoverCardTrigger, ListboxContent, ListboxFilter, ListboxGroup, ListboxGroupLabel, ListboxItem, ListboxItemIndicator, ListboxRoot, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarItemIndicator, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarRoot, MenubarSeparator, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthPickerCell, MonthPickerCellTrigger, MonthPickerGrid, MonthPickerGridBody, MonthPickerGridRow, MonthPickerNext, MonthPickerPrev, MonthPickerRoot, NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, PinInputInput, PinInputRoot, PopoverAnchor, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, Primitive, ProgressIndicator, ProgressRoot, RadioGroupItem, RadioGroupRoot, RangeCalendarCell, RangeCalendarCellTrigger, RangeCalendarGrid, RangeCalendarGridBody, RangeCalendarGridHead, RangeCalendarGridRow, RangeCalendarHeadCell, RangeCalendarNext, RangeCalendarPrev, RangeCalendarRoot, RatingItem, RatingItemIndicator, RatingRoot, SelectContent, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectPortal, SelectRoot, SelectTrigger, Separator, SliderRoot, SliderThumb, SliderTrack, SplitterGroup, SplitterPanel, SplitterResizeHandle, SwitchRoot, TabsContent, TabsList, TabsRoot, TabsTrigger, TagsInputInput, TagsInputItem, TagsInputItemText, TagsInputRoot, TimeFieldInput, TimeFieldRoot, ToastClose, ToastDescription, ToastPortal, ToastProvider, ToastRoot, ToastTitle, ToastViewport, Toggle, ToggleGroupItem, ToggleGroupRoot, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipTrigger, TreeItem, TreeRoot, VisuallyHidden, YearPickerCell, YearPickerCellTrigger, YearPickerGrid, YearPickerGridBody, YearPickerGridRow, YearPickerNext, YearPickerPrev, YearPickerRoot, injectDialogRootContext, injectListboxItemContext, injectPopoverRootContext, injectTabsRootContext, injectTooltipProviderContext, useBodyScrollLock, useDirection, useForwardExpose, useForwardPropsEmits } from "reka-ui";
6
6
  import { ArrowLeft, ArrowRight, CalendarClock, CalendarDays, CalendarRange, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, CircleCheck, CircleX, Copy, Download, Eye, EyeOff, File, Inbox, Info, Lightbulb, Megaphone, Minus, PanelLeft, RotateCw, 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 { createSharedComposable, useDocumentVisibility, useEventListener, useIntersectionObserver, useIntervalFn, useMediaQuery, useMutationObserver } from "@vueuse/core";
@@ -674,7 +674,7 @@ var spinner = tv({
674
674
  });
675
675
  //#endregion
676
676
  //#region src/components/spinner/Spinner.vue?vue&type=script&setup=true&lang.ts
677
- var _hoisted_1$95 = ["aria-label"];
677
+ var _hoisted_1$94 = ["aria-label"];
678
678
  //#endregion
679
679
  //#region src/components/spinner/Spinner.vue
680
680
  var Spinner_default = /* @__PURE__ */ defineComponent({
@@ -694,13 +694,13 @@ var Spinner_default = /* @__PURE__ */ defineComponent({
694
694
  "aria-label": props.label ?? unref(t).common.loading,
695
695
  class: unref(cn)(unref(spinner)({ size: props.size })),
696
696
  style: { animation: "hn-spin var(--hn-spin-duration) var(--hn-ease-linear) infinite" }
697
- }), null, 16, _hoisted_1$95);
697
+ }), null, 16, _hoisted_1$94);
698
698
  };
699
699
  }
700
700
  });
701
701
  //#endregion
702
702
  //#region src/components/button/IconSlot.vue?vue&type=script&setup=true&lang.ts
703
- var _hoisted_1$94 = {
703
+ var _hoisted_1$93 = {
704
704
  key: 0,
705
705
  "aria-hidden": "true",
706
706
  class: "absolute inset-0 inline-flex items-center justify-center"
@@ -724,7 +724,7 @@ var IconSlot_default$1 = /* @__PURE__ */ defineComponent({
724
724
  "leave-active-class": "hn-transition",
725
725
  "leave-to-class": "scale-90 opacity-0"
726
726
  }, {
727
- default: withCtx(() => [props.swapped ? (openBlock(), createElementBlock("span", _hoisted_1$94, [createVNode(Spinner_default, { size: props.spinnerSize }, null, 8, ["size"])])) : createCommentVNode("", true)]),
727
+ default: withCtx(() => [props.swapped ? (openBlock(), createElementBlock("span", _hoisted_1$93, [createVNode(Spinner_default, { size: props.spinnerSize }, null, 8, ["size"])])) : createCommentVNode("", true)]),
728
728
  _: 1
729
729
  })], 2);
730
730
  };
@@ -920,7 +920,7 @@ function useRipple(container, surface, isDisabled) {
920
920
  }
921
921
  //#endregion
922
922
  //#region src/components/ripple/Ripple.vue?vue&type=script&setup=true&lang.ts
923
- var _hoisted_1$93 = ["data-pressed"];
923
+ var _hoisted_1$92 = ["data-pressed"];
924
924
  //#endregion
925
925
  //#region src/components/ripple/Ripple.vue
926
926
  var Ripple_default = /* @__PURE__ */ defineComponent({
@@ -943,13 +943,13 @@ var Ripple_default = /* @__PURE__ */ defineComponent({
943
943
  ref: surface,
944
944
  class: "hn-ripple-surface",
945
945
  "data-pressed": unref(pressed) ? "" : void 0
946
- }, null, 8, _hoisted_1$93)], 512);
946
+ }, null, 8, _hoisted_1$92)], 512);
947
947
  };
948
948
  }
949
949
  });
950
950
  //#endregion
951
951
  //#region src/components/button/Button.vue?vue&type=script&setup=true&lang.ts
952
- var _hoisted_1$92 = {
952
+ var _hoisted_1$91 = {
953
953
  key: 0,
954
954
  "aria-hidden": "true",
955
955
  class: "absolute inset-0 flex items-center justify-center"
@@ -1060,7 +1060,7 @@ var Button_default = /* @__PURE__ */ defineComponent({
1060
1060
  "leave-active-class": "hn-transition",
1061
1061
  "leave-to-class": "opacity-0"
1062
1062
  }, {
1063
- default: withCtx(() => [props.loading && spinnerAt.value === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$92, [createVNode(Spinner_default, { size: spinnerSize.value }, null, 8, ["size"])])) : createCommentVNode("", true)]),
1063
+ default: withCtx(() => [props.loading && spinnerAt.value === "center" ? (openBlock(), createElementBlock("span", _hoisted_1$91, [createVNode(Spinner_default, { size: spinnerSize.value }, null, 8, ["size"])])) : createCommentVNode("", true)]),
1064
1064
  _: 1
1065
1065
  })
1066
1066
  ], 64))]),
@@ -1284,7 +1284,7 @@ function useCopy(text, onCopied, resetAfter = () => COPIED_RESET_MS) {
1284
1284
  }
1285
1285
  //#endregion
1286
1286
  //#region src/components/copy-button/CopyButton.vue?vue&type=script&setup=true&lang.ts
1287
- var _hoisted_1$91 = { class: "relative inline-flex size-[1em]" };
1287
+ var _hoisted_1$90 = { class: "relative inline-flex size-[1em]" };
1288
1288
  //#endregion
1289
1289
  //#region src/components/copy-button/CopyButton.vue
1290
1290
  var CopyButton_default = /* @__PURE__ */ defineComponent({
@@ -1316,7 +1316,7 @@ var CopyButton_default = /* @__PURE__ */ defineComponent({
1316
1316
  class: props.class,
1317
1317
  onClick: unref(copy)
1318
1318
  }), {
1319
- default: withCtx(() => [createElementVNode("span", _hoisted_1$91, [createVNode(Transition, {
1319
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$90, [createVNode(Transition, {
1320
1320
  "enter-active-class": "hn-transition-base",
1321
1321
  "enter-from-class": "scale-90 opacity-0",
1322
1322
  "leave-active-class": "hn-transition",
@@ -1391,7 +1391,7 @@ var buttonGroup = tv({
1391
1391
  });
1392
1392
  //#endregion
1393
1393
  //#region src/components/button-group/ButtonGroup.vue?vue&type=script&setup=true&lang.ts
1394
- var _hoisted_1$90 = ["aria-label", "aria-orientation"];
1394
+ var _hoisted_1$89 = ["aria-label", "aria-orientation"];
1395
1395
  //#endregion
1396
1396
  //#region src/components/button-group/ButtonGroup.vue
1397
1397
  var ButtonGroup_default = /* @__PURE__ */ defineComponent({
@@ -1422,7 +1422,7 @@ var ButtonGroup_default = /* @__PURE__ */ defineComponent({
1422
1422
  block: props.block,
1423
1423
  divider: props.divider
1424
1424
  }), props.class))
1425
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$90);
1425
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$89);
1426
1426
  };
1427
1427
  }
1428
1428
  });
@@ -1656,8 +1656,8 @@ var chipRemove = tv({
1656
1656
  });
1657
1657
  //#endregion
1658
1658
  //#region src/components/chip/IconSlot.vue?vue&type=script&setup=true&lang.ts
1659
- var _hoisted_1$89 = { class: "hn-collapse-body" };
1660
- var _hoisted_2$45 = {
1659
+ var _hoisted_1$88 = { class: "hn-collapse-body" };
1660
+ var _hoisted_2$44 = {
1661
1661
  key: 0,
1662
1662
  "aria-hidden": "true",
1663
1663
  class: "absolute inset-0 inline-flex items-center justify-center"
@@ -1678,7 +1678,7 @@ var IconSlot_default = /* @__PURE__ */ defineComponent({
1678
1678
  return openBlock(), createElementBlock("span", {
1679
1679
  "data-hn-icon": "",
1680
1680
  class: normalizeClass(["hn-collapse-x", props.icon || props.checked ? "hn-collapse-open" : "hn-collapse-closed"])
1681
- }, [createElementVNode("span", _hoisted_1$89, [createElementVNode("span", { class: normalizeClass(unref(chipIcon)({ size: props.size })) }, [props.icon ? (openBlock(), createElementBlock("span", {
1681
+ }, [createElementVNode("span", _hoisted_1$88, [createElementVNode("span", { class: normalizeClass(unref(chipIcon)({ size: props.size })) }, [props.icon ? (openBlock(), createElementBlock("span", {
1682
1682
  key: 0,
1683
1683
  class: normalizeClass(["hn-transition inline-flex items-center justify-center", props.checked ? "scale-90 opacity-0" : "scale-100 opacity-100"])
1684
1684
  }, [renderSlot(_ctx.$slots, "default")], 2)) : createCommentVNode("", true), createVNode(Transition, {
@@ -1687,7 +1687,7 @@ var IconSlot_default = /* @__PURE__ */ defineComponent({
1687
1687
  "leave-active-class": "hn-transition",
1688
1688
  "leave-to-class": "scale-90 opacity-0"
1689
1689
  }, {
1690
- default: withCtx(() => [props.checked ? (openBlock(), createElementBlock("span", _hoisted_2$45, [createVNode(unref(Check))])) : createCommentVNode("", true)]),
1690
+ default: withCtx(() => [props.checked ? (openBlock(), createElementBlock("span", _hoisted_2$44, [createVNode(unref(Check))])) : createCommentVNode("", true)]),
1691
1691
  _: 1
1692
1692
  })], 2)])], 2);
1693
1693
  };
@@ -1874,13 +1874,13 @@ var VisuallyHidden_default = /* @__PURE__ */ defineComponent({
1874
1874
  });
1875
1875
  //#endregion
1876
1876
  //#region src/components/lightbox/LightboxStrip.vue?vue&type=script&setup=true&lang.ts
1877
- var _hoisted_1$88 = [
1877
+ var _hoisted_1$87 = [
1878
1878
  "src",
1879
1879
  "alt",
1880
1880
  "onLoad"
1881
1881
  ];
1882
- var _hoisted_2$44 = ["src"];
1883
- var _hoisted_3$22 = [
1882
+ var _hoisted_2$43 = ["src"];
1883
+ var _hoisted_3$21 = [
1884
1884
  "src",
1885
1885
  "alt",
1886
1886
  "onLoad"
@@ -1941,7 +1941,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
1941
1941
  draggable: "false",
1942
1942
  class: "block size-full object-contain",
1943
1943
  onLoad: ($event) => emit("learn", slide.item.id, $event.target)
1944
- }, null, 40, _hoisted_1$88), createVNode(Transition, {
1944
+ }, null, 40, _hoisted_1$87), createVNode(Transition, {
1945
1945
  "enter-active-class": "hn-transition-base",
1946
1946
  "enter-from-class": "opacity-0",
1947
1947
  "leave-active-class": "hn-transition",
@@ -1954,7 +1954,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
1954
1954
  "aria-hidden": "true",
1955
1955
  draggable: "false",
1956
1956
  class: "absolute inset-0 size-full object-contain"
1957
- }, null, 8, _hoisted_2$44)) : createCommentVNode("", true)]),
1957
+ }, null, 8, _hoisted_2$43)) : createCommentVNode("", true)]),
1958
1958
  _: 1
1959
1959
  })]),
1960
1960
  _: 2
@@ -1976,7 +1976,7 @@ var LightboxStrip_default = /* @__PURE__ */ defineComponent({
1976
1976
  draggable: "false",
1977
1977
  class: "block size-full object-contain",
1978
1978
  onLoad: ($event) => emit("learn", slide.item.id, $event.target)
1979
- }, null, 40, _hoisted_3$22)]),
1979
+ }, null, 40, _hoisted_3$21)]),
1980
1980
  _: 2
1981
1981
  }, 1032, [
1982
1982
  "style",
@@ -2116,7 +2116,7 @@ function useEdgeShadow(viewport, opts) {
2116
2116
  //#region src/components/scroll-area/composables/useWheelRedirect.ts
2117
2117
  function useWheelRedirect(viewport, enabled) {
2118
2118
  function onWheel(event) {
2119
- if (!enabled()) return;
2119
+ if (event.defaultPrevented || !enabled()) return;
2120
2120
  const el = viewport.value;
2121
2121
  if (!el) return;
2122
2122
  if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return;
@@ -2150,9 +2150,6 @@ var useBodyPointerLock = createSharedComposable(() => {
2150
2150
  }
2151
2151
  return locked;
2152
2152
  });
2153
- function block(event) {
2154
- event.preventDefault();
2155
- }
2156
2153
  function useLayerLock(viewport) {
2157
2154
  const locked = useBodyPointerLock();
2158
2155
  let release;
@@ -2160,28 +2157,58 @@ function useLayerLock(viewport) {
2160
2157
  release?.();
2161
2158
  release = void 0;
2162
2159
  const el = viewport.value;
2163
- if (!el || !locked.value || getComputedStyle(el).pointerEvents !== "none") return;
2164
- el.addEventListener("wheel", block, { passive: false });
2165
- el.addEventListener("touchmove", block, { passive: false });
2160
+ if (!el || !locked.value) return;
2161
+ const block = (event) => {
2162
+ if (getComputedStyle(el).pointerEvents === "none") event.preventDefault();
2163
+ };
2164
+ el.addEventListener("wheel", block, {
2165
+ passive: false,
2166
+ capture: true
2167
+ });
2168
+ el.addEventListener("touchmove", block, {
2169
+ passive: false,
2170
+ capture: true
2171
+ });
2166
2172
  release = () => {
2167
- el.removeEventListener("wheel", block);
2168
- el.removeEventListener("touchmove", block);
2173
+ el.removeEventListener("wheel", block, true);
2174
+ el.removeEventListener("touchmove", block, true);
2169
2175
  };
2170
2176
  }
2171
2177
  watch([locked, viewport], apply, { flush: "post" });
2172
2178
  onBeforeUnmount(() => release?.());
2173
2179
  }
2174
2180
  //#endregion
2181
+ //#region src/components/scroll-area/composables/useScrollFocus.ts
2182
+ function useScrollFocus(host, viewport, options) {
2183
+ function attributes(enabled) {
2184
+ const { focusable, label } = options();
2185
+ return {
2186
+ tabindex: enabled && focusable ? 0 : void 0,
2187
+ role: enabled && focusable ? "region" : void 0,
2188
+ "aria-label": enabled && focusable ? label : void 0
2189
+ };
2190
+ }
2191
+ const hostFocus = computed(() => attributes(!viewport.value));
2192
+ const viewportFocus = computed(() => attributes(!!viewport.value));
2193
+ watch(viewport, async (element) => {
2194
+ const target = host.value;
2195
+ if (!element || !target || !options().focusable) return;
2196
+ if (target.ownerDocument.activeElement !== target) return;
2197
+ await nextTick();
2198
+ const active = target.ownerDocument.activeElement;
2199
+ if (options().focusable && element.isConnected && (active === target || active === target.ownerDocument.body)) element.focus({ preventScroll: true });
2200
+ }, { flush: "sync" });
2201
+ return {
2202
+ hostFocus,
2203
+ viewportFocus
2204
+ };
2205
+ }
2206
+ //#endregion
2175
2207
  //#region src/components/scroll-area/ScrollArea.vue?vue&type=script&setup=true&lang.ts
2176
- var _hoisted_1$87 = [
2177
- "tabindex",
2178
- "role",
2179
- "aria-label"
2180
- ];
2181
- var _hoisted_2$43 = ["data-visible"];
2182
- var _hoisted_3$21 = ["data-visible"];
2208
+ var _hoisted_1$86 = ["data-visible"];
2209
+ var _hoisted_2$42 = ["data-visible"];
2210
+ var _hoisted_3$20 = ["data-visible"];
2183
2211
  var _hoisted_4$15 = ["data-visible"];
2184
- var _hoisted_5$11 = ["data-visible"];
2185
2212
  //#endregion
2186
2213
  //#region src/components/scroll-area/ScrollArea.vue
2187
2214
  var ScrollArea_default = /* @__PURE__ */ defineComponent({
@@ -2242,6 +2269,10 @@ var ScrollArea_default = /* @__PURE__ */ defineComponent({
2242
2269
  };
2243
2270
  }
2244
2271
  const { viewport, instance, onEvent } = useOverlayScrollbars(host, content, options);
2272
+ const { hostFocus, viewportFocus } = useScrollFocus(host, viewport, () => ({
2273
+ focusable: props.focusable,
2274
+ label: props.label ?? t.value.scroll.regionLabel
2275
+ }));
2245
2276
  const { showXStart, showXEnd, showYStart, showYEnd, updateEdges } = useEdgeShadow(viewport, () => ({
2246
2277
  direction: props.direction,
2247
2278
  shadow: props.shadow
@@ -2264,62 +2295,80 @@ var ScrollArea_default = /* @__PURE__ */ defineComponent({
2264
2295
  return openBlock(), createElementBlock("div", { class: normalizeClass(unref(cn)("hn-scroll-area relative flex flex-col overflow-hidden", props.class)) }, [createElementVNode("div", mergeProps({
2265
2296
  ref_key: "host",
2266
2297
  ref: host
2267
- }, _ctx.$attrs, {
2298
+ }, {
2299
+ ..._ctx.$attrs,
2300
+ ...unref(hostFocus)
2301
+ }, {
2268
2302
  "data-overlayscrollbars-initialize": "",
2269
- tabindex: props.focusable ? 0 : void 0,
2270
- role: props.focusable ? "region" : void 0,
2271
- "aria-label": props.focusable ? props.label ?? unref(t).scroll.regionLabel : void 0,
2272
2303
  class: "w-full min-h-0 grow"
2273
- }), [createElementVNode("div", {
2304
+ }), [createElementVNode("div", mergeProps({
2274
2305
  ref_key: "content",
2275
- ref: content,
2276
- "data-overlayscrollbars-contents": ""
2277
- }, [renderSlot(_ctx.$slots, "default")], 512)], 16, _hoisted_1$87), props.shadow ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2306
+ ref: content
2307
+ }, unref(viewportFocus), { "data-overlayscrollbars-contents": "" }), [renderSlot(_ctx.$slots, "default")], 16)], 16), props.shadow ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2278
2308
  props.direction !== "vertical" ? (openBlock(), createElementBlock("div", {
2279
2309
  key: 0,
2280
2310
  class: "hn-scroll-shadow",
2281
2311
  "data-side": "x-start",
2282
2312
  "data-visible": unref(showXStart) ? "" : void 0,
2283
2313
  "aria-hidden": "true"
2284
- }, null, 8, _hoisted_2$43)) : createCommentVNode("", true),
2314
+ }, null, 8, _hoisted_1$86)) : createCommentVNode("", true),
2285
2315
  props.direction !== "vertical" ? (openBlock(), createElementBlock("div", {
2286
2316
  key: 1,
2287
2317
  class: "hn-scroll-shadow",
2288
2318
  "data-side": "x-end",
2289
2319
  "data-visible": unref(showXEnd) ? "" : void 0,
2290
2320
  "aria-hidden": "true"
2291
- }, null, 8, _hoisted_3$21)) : createCommentVNode("", true),
2321
+ }, null, 8, _hoisted_2$42)) : createCommentVNode("", true),
2292
2322
  props.direction !== "horizontal" ? (openBlock(), createElementBlock("div", {
2293
2323
  key: 2,
2294
2324
  class: "hn-scroll-shadow",
2295
2325
  "data-side": "y-start",
2296
2326
  "data-visible": unref(showYStart) ? "" : void 0,
2297
2327
  "aria-hidden": "true"
2298
- }, null, 8, _hoisted_4$15)) : createCommentVNode("", true),
2328
+ }, null, 8, _hoisted_3$20)) : createCommentVNode("", true),
2299
2329
  props.direction !== "horizontal" ? (openBlock(), createElementBlock("div", {
2300
2330
  key: 3,
2301
2331
  class: "hn-scroll-shadow",
2302
2332
  "data-side": "y-end",
2303
2333
  "data-visible": unref(showYEnd) ? "" : void 0,
2304
2334
  "aria-hidden": "true"
2305
- }, null, 8, _hoisted_5$11)) : createCommentVNode("", true)
2335
+ }, null, 8, _hoisted_4$15)) : createCommentVNode("", true)
2306
2336
  ], 64)) : createCommentVNode("", true)], 2);
2307
2337
  };
2308
2338
  }
2309
2339
  });
2310
2340
  //#endregion
2341
+ //#region src/components/highlight/composables/useHighlightMotion.ts
2342
+ function useHighlightMotion(axis) {
2343
+ return {
2344
+ transition: computed(() => prefersReducedMotion() ? { duration: 0 } : TRANSITION.layout),
2345
+ transformTemplate: computed(() => {
2346
+ const direction = axis();
2347
+ if (direction === "both") return void 0;
2348
+ return (_, generated) => {
2349
+ if (!generated || generated === "none" || typeof DOMMatrix === "undefined") return generated;
2350
+ const matrix = new DOMMatrix(generated);
2351
+ if (direction === "x") matrix.m42 = 0;
2352
+ else matrix.m41 = 0;
2353
+ return matrix.toString();
2354
+ };
2355
+ })
2356
+ };
2357
+ }
2358
+ //#endregion
2311
2359
  //#region src/components/highlight/Highlight.vue
2312
2360
  var Highlight_default = /* @__PURE__ */ defineComponent({
2313
2361
  name: "HnHighlight",
2314
2362
  __name: "Highlight",
2315
2363
  props: {
2316
2364
  id: { default: void 0 },
2365
+ axis: { default: "both" },
2317
2366
  as: { default: "div" },
2318
2367
  class: {}
2319
2368
  },
2320
2369
  setup(__props) {
2321
2370
  const props = __props;
2322
- const transition = computed(() => prefersReducedMotion() ? { duration: 0 } : TRANSITION.layout);
2371
+ const { transition, transformTemplate } = useHighlightMotion(() => props.axis);
2323
2372
  return (_ctx, _cache) => {
2324
2373
  return openBlock(), createBlock(unref(Motion), {
2325
2374
  as: props.as,
@@ -2327,12 +2376,14 @@ var Highlight_default = /* @__PURE__ */ defineComponent({
2327
2376
  "layout-id": props.id,
2328
2377
  "aria-hidden": "true",
2329
2378
  "data-hn-highlight": "",
2330
- transition: transition.value,
2379
+ transition: unref(transition),
2380
+ "transform-template": unref(transformTemplate),
2331
2381
  class: normalizeClass(unref(cn)("pointer-events-none", props.class))
2332
2382
  }, null, 8, [
2333
2383
  "as",
2334
2384
  "layout-id",
2335
2385
  "transition",
2386
+ "transform-template",
2336
2387
  "class"
2337
2388
  ]);
2338
2389
  };
@@ -2340,16 +2391,16 @@ var Highlight_default = /* @__PURE__ */ defineComponent({
2340
2391
  });
2341
2392
  //#endregion
2342
2393
  //#region src/components/lightbox/LightboxThumbs.vue?vue&type=script&setup=true&lang.ts
2343
- var _hoisted_1$86 = {
2394
+ var _hoisted_1$85 = {
2344
2395
  "data-hn-thumbs": "",
2345
2396
  class: "relative isolate flex w-max gap-2 px-4 py-3"
2346
2397
  };
2347
- var _hoisted_2$42 = [
2398
+ var _hoisted_2$41 = [
2348
2399
  "aria-label",
2349
2400
  "aria-current",
2350
2401
  "onClick"
2351
2402
  ];
2352
- var _hoisted_3$20 = ["src"];
2403
+ var _hoisted_3$19 = ["src"];
2353
2404
  //#endregion
2354
2405
  //#region src/components/lightbox/LightboxThumbs.vue
2355
2406
  var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
@@ -2385,7 +2436,7 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2385
2436
  scrollbar: false,
2386
2437
  class: "max-w-full"
2387
2438
  }, {
2388
- default: withCtx(() => [createElementVNode("div", _hoisted_1$86, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, at) => {
2439
+ default: withCtx(() => [createElementVNode("div", _hoisted_1$85, [(openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, at) => {
2389
2440
  return openBlock(), createElementBlock("button", {
2390
2441
  key: item.id,
2391
2442
  ref_for: true,
@@ -2402,13 +2453,14 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2402
2453
  alt: "",
2403
2454
  draggable: "false",
2404
2455
  class: "relative -z-10 size-full object-cover"
2405
- }, null, 8, _hoisted_3$20),
2456
+ }, null, 8, _hoisted_3$19),
2406
2457
  at === props.index ? (openBlock(), createBlock(Highlight_default, {
2407
2458
  key: 0,
2408
2459
  id: unref(highlightId),
2460
+ axis: "x",
2409
2461
  class: "ring-accent absolute inset-0 rounded-md ring-2 ring-inset"
2410
2462
  }, null, 8, ["id"])) : createCommentVNode("", true)
2411
- ], 10, _hoisted_2$42);
2463
+ ], 10, _hoisted_2$41);
2412
2464
  }), 128))])]),
2413
2465
  _: 1
2414
2466
  });
@@ -2417,8 +2469,8 @@ var LightboxThumbs_default = /* @__PURE__ */ defineComponent({
2417
2469
  });
2418
2470
  //#endregion
2419
2471
  //#region src/components/lightbox/LightboxToolbar.vue?vue&type=script&setup=true&lang.ts
2420
- var _hoisted_1$85 = { class: "flex flex-col items-center gap-1 pb-3" };
2421
- var _hoisted_2$41 = { class: "flex items-center gap-1" };
2472
+ var _hoisted_1$84 = { class: "flex flex-col items-center gap-1 pb-3" };
2473
+ var _hoisted_2$40 = { class: "flex items-center gap-1" };
2422
2474
  //#endregion
2423
2475
  //#region src/components/lightbox/LightboxToolbar.vue
2424
2476
  var LightboxToolbar_default = /* @__PURE__ */ defineComponent({
@@ -2442,12 +2494,12 @@ var LightboxToolbar_default = /* @__PURE__ */ defineComponent({
2442
2494
  const emit = __emit;
2443
2495
  const t = useUiLocale();
2444
2496
  return (_ctx, _cache) => {
2445
- return openBlock(), createElementBlock("div", _hoisted_1$85, [props.items.length > 1 ? (openBlock(), createBlock(LightboxThumbs_default, {
2497
+ return openBlock(), createElementBlock("div", _hoisted_1$84, [props.items.length > 1 ? (openBlock(), createBlock(LightboxThumbs_default, {
2446
2498
  key: 0,
2447
2499
  items: props.items,
2448
2500
  index: props.index,
2449
2501
  onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event))
2450
- }, null, 8, ["items", "index"])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$41, [
2502
+ }, null, 8, ["items", "index"])) : createCommentVNode("", true), createElementVNode("div", _hoisted_2$40, [
2451
2503
  createVNode(IconButton_default, {
2452
2504
  label: unref(t).lightbox.zoomOut,
2453
2505
  variant: "soft",
@@ -2719,7 +2771,7 @@ var REST_POSE = {
2719
2771
  y: 0,
2720
2772
  scale: 1,
2721
2773
  rotate: 0,
2722
- clipPath: "inset(0px 0px 0px 0px round 0px)"
2774
+ clipPath: "inset(0px 0px 0px 0px round 0px 0px 0px 0px / 0px 0px 0px 0px)"
2723
2775
  };
2724
2776
  var TRAVEL_SPRING = {
2725
2777
  type: "spring",
@@ -2770,22 +2822,41 @@ function intersect(a, b) {
2770
2822
  height: Math.max(0, bottom - y)
2771
2823
  };
2772
2824
  }
2773
- function openPose(frame, box, natural, fit, radius = 0) {
2825
+ function openPose(frame, box, natural, fit, radius = 0, clipBox = box) {
2774
2826
  const rendered = renderedRect(box, natural, fit);
2775
2827
  if (frame.width <= 0 || frame.height <= 0 || rendered.width <= 0) return REST_POSE;
2776
2828
  const scale = rendered.width / frame.width;
2777
- const visible = intersect(box, rendered);
2829
+ const visible = intersect(intersect(box, clipBox), rendered);
2778
2830
  const top = (visible.y - rendered.y) / scale;
2779
2831
  const left = (visible.x - rendered.x) / scale;
2780
2832
  const right = (rendered.x + rendered.width - visible.x - visible.width) / scale;
2781
2833
  const bottom = (rendered.y + rendered.height - visible.y - visible.height) / scale;
2782
- const corner = Math.max(0, radius) / scale;
2834
+ const corners = typeof radius === "number" ? Array.from({ length: 4 }, () => ({
2835
+ x: radius,
2836
+ y: radius
2837
+ })) : radius;
2838
+ const leftEdge = Math.abs(visible.x - clipBox.x) <= .5;
2839
+ const topEdge = Math.abs(visible.y - clipBox.y) <= .5;
2840
+ const rightEdge = Math.abs(visible.x + visible.width - clipBox.x - clipBox.width) <= .5;
2841
+ const bottomEdge = Math.abs(visible.y + visible.height - clipBox.y - clipBox.height) <= .5;
2842
+ const touches = [
2843
+ leftEdge && topEdge,
2844
+ rightEdge && topEdge,
2845
+ rightEdge && bottomEdge,
2846
+ leftEdge && bottomEdge
2847
+ ];
2848
+ const clipped = corners.map((corner, index) => touches[index] ? corner : {
2849
+ x: 0,
2850
+ y: 0
2851
+ });
2852
+ const horizontal = clipped.map((corner) => px(Math.max(0, corner.x) / scale)).join(" ");
2853
+ const vertical = clipped.map((corner) => px(Math.max(0, corner.y) / scale)).join(" ");
2783
2854
  return {
2784
2855
  x: rendered.x + rendered.width / 2 - (frame.x + frame.width / 2),
2785
2856
  y: rendered.y + rendered.height / 2 - (frame.y + frame.height / 2),
2786
2857
  scale,
2787
2858
  rotate: 0,
2788
- clipPath: `inset(${px(top)} ${px(right)} ${px(bottom)} ${px(left)} round ${px(corner)})`
2859
+ clipPath: `inset(${px(top)} ${px(right)} ${px(bottom)} ${px(left)} round ${horizontal} / ${vertical})`
2789
2860
  };
2790
2861
  }
2791
2862
  function baseScale(frame, stage, rotation) {
@@ -2794,13 +2865,6 @@ function baseScale(frame, stage, rotation) {
2794
2865
  if (rotation % 180 === 0) return 1;
2795
2866
  return Math.min(stage.width / visual.width, stage.height / visual.height);
2796
2867
  }
2797
- function radiusOf(el) {
2798
- for (let node = el, depth = 0; node && depth < 2; node = node.parentElement, depth += 1) {
2799
- const value = Number.parseFloat(getComputedStyle(node).borderTopLeftRadius);
2800
- if (value > 0) return value;
2801
- }
2802
- return 0;
2803
- }
2804
2868
  function dismissProgress(offsetY, stageHeight) {
2805
2869
  if (stageHeight <= 0) return 0;
2806
2870
  return Math.min(1, Math.max(0, offsetY) / (stageHeight * DISMISS_TRAVEL));
@@ -2885,7 +2949,7 @@ function useLightboxMotion(stageHeight, restScale) {
2885
2949
  function leave(to) {
2886
2950
  stop();
2887
2951
  const t = to ? timing(RETURN_SPRING) : transition("exit");
2888
- return settle([...to ? poseTo(to, t) : [animate(scale, FADE_POSE.scale, t), animate(opacity, 0, t)], animate(presence, 0, t)]);
2952
+ return settle([...to ? poseTo(to, t) : [animate(scale, Math.min(scale.get(), FADE_POSE.scale), t), animate(opacity, 0, t)], animate(presence, 0, t)]);
2889
2953
  }
2890
2954
  function dismissMove(offsetY) {
2891
2955
  y.set(offsetY < 0 ? rubberBand(offsetY, 0, Infinity, stageHeight()) : offsetY);
@@ -3531,6 +3595,131 @@ function useLightboxLarge(item, active) {
3531
3595
  };
3532
3596
  }
3533
3597
  //#endregion
3598
+ //#region src/components/lightbox/utils/clip.ts
3599
+ function emptyCorners() {
3600
+ return [
3601
+ {
3602
+ x: 0,
3603
+ y: 0
3604
+ },
3605
+ {
3606
+ x: 0,
3607
+ y: 0
3608
+ },
3609
+ {
3610
+ x: 0,
3611
+ y: 0
3612
+ },
3613
+ {
3614
+ x: 0,
3615
+ y: 0
3616
+ }
3617
+ ];
3618
+ }
3619
+ function length(value, size) {
3620
+ const number = Number.parseFloat(value) || 0;
3621
+ return value.endsWith("%") ? number * size / 100 : number;
3622
+ }
3623
+ function cornersOf(style, width, height) {
3624
+ const corners = [
3625
+ style.borderTopLeftRadius,
3626
+ style.borderTopRightRadius,
3627
+ style.borderBottomRightRadius,
3628
+ style.borderBottomLeftRadius
3629
+ ].map((value) => {
3630
+ const [x = "0", y = x] = value.split(/\s+/);
3631
+ return {
3632
+ x: length(x, width),
3633
+ y: length(y, height)
3634
+ };
3635
+ });
3636
+ const [tl, tr, br, bl] = corners;
3637
+ const factor = Math.min(1, width / (tl.x + tr.x || 1), width / (bl.x + br.x || 1), height / (tl.y + bl.y || 1), height / (tr.y + br.y || 1));
3638
+ return corners.map((corner) => ({
3639
+ x: corner.x * factor,
3640
+ y: corner.y * factor
3641
+ }));
3642
+ }
3643
+ function paddingBox(node, style) {
3644
+ const box = node.getBoundingClientRect();
3645
+ const width = node instanceof HTMLElement ? node.offsetWidth : box.width;
3646
+ const height = node instanceof HTMLElement ? node.offsetHeight : box.height;
3647
+ const sx = width ? box.width / width : 1;
3648
+ const sy = height ? box.height / height : 1;
3649
+ const left = Number.parseFloat(style.borderLeftWidth) || 0;
3650
+ const right = Number.parseFloat(style.borderRightWidth) || 0;
3651
+ const top = Number.parseFloat(style.borderTopWidth) || 0;
3652
+ const bottom = Number.parseFloat(style.borderBottomWidth) || 0;
3653
+ const corners = cornersOf(style, width, height);
3654
+ const borders = [
3655
+ [left, top],
3656
+ [right, top],
3657
+ [right, bottom],
3658
+ [left, bottom]
3659
+ ];
3660
+ return {
3661
+ rect: {
3662
+ x: box.x + left * sx,
3663
+ y: box.y + top * sy,
3664
+ width: Math.max(0, box.width - (left + right) * sx),
3665
+ height: Math.max(0, box.height - (top + bottom) * sy)
3666
+ },
3667
+ corners: corners.map((corner, index) => ({
3668
+ x: Math.max(0, corner.x - borders[index][0]) * sx,
3669
+ y: Math.max(0, corner.y - borders[index][1]) * sy
3670
+ }))
3671
+ };
3672
+ }
3673
+ function points(rect) {
3674
+ return [
3675
+ [rect.x, rect.y],
3676
+ [rect.x + rect.width, rect.y],
3677
+ [rect.x + rect.width, rect.y + rect.height],
3678
+ [rect.x, rect.y + rect.height]
3679
+ ];
3680
+ }
3681
+ function clipOf(el, box) {
3682
+ let rect = {
3683
+ x: box.x,
3684
+ y: box.y,
3685
+ width: box.width,
3686
+ height: box.height
3687
+ };
3688
+ const clips = [];
3689
+ for (let node = el; node; node = node.parentElement) {
3690
+ const style = getComputedStyle(node);
3691
+ const clipX = node === el || /^(hidden|clip|scroll|auto)$/.test(style.overflowX);
3692
+ const clipY = node === el || /^(hidden|clip|scroll|auto)$/.test(style.overflowY);
3693
+ if (!clipX && !clipY) continue;
3694
+ const clip = paddingBox(node, style);
3695
+ const x = clipX ? Math.max(rect.x, clip.rect.x) : rect.x;
3696
+ const y = clipY ? Math.max(rect.y, clip.rect.y) : rect.y;
3697
+ const right = clipX ? Math.min(rect.x + rect.width, clip.rect.x + clip.rect.width) : rect.x + rect.width;
3698
+ const bottom = clipY ? Math.min(rect.y + rect.height, clip.rect.y + clip.rect.height) : rect.y + rect.height;
3699
+ rect = {
3700
+ x,
3701
+ y,
3702
+ width: Math.max(0, right - x),
3703
+ height: Math.max(0, bottom - y)
3704
+ };
3705
+ if (clipX && clipY) clips.push(clip);
3706
+ }
3707
+ const corners = emptyCorners();
3708
+ const visible = points(rect);
3709
+ for (const clip of clips) {
3710
+ const edges = points(clip.rect);
3711
+ for (let index = 0; index < 4; index += 1) {
3712
+ if (visible[index].some((value, axis) => Math.abs(value - edges[index][axis]) > .5)) continue;
3713
+ corners[index].x = Math.max(corners[index].x, clip.corners[index].x);
3714
+ corners[index].y = Math.max(corners[index].y, clip.corners[index].y);
3715
+ }
3716
+ }
3717
+ return {
3718
+ rect,
3719
+ corners
3720
+ };
3721
+ }
3722
+ //#endregion
3534
3723
  //#region src/components/lightbox/composables/useLightboxPose.ts
3535
3724
  function useLightboxPose(frames, current) {
3536
3725
  function sourceBox() {
@@ -3552,7 +3741,9 @@ function useLightboxPose(frames, current) {
3552
3741
  const box = sourceBox();
3553
3742
  const natural = frames.naturalOf(item);
3554
3743
  if (!box || !natural) return null;
3555
- return openPose(frames.frameOf(item), box, natural, item?.fit, radiusOf(item?.source?.()));
3744
+ const clip = clipOf(item?.source?.(), box);
3745
+ if (clip.rect.width <= 0 || clip.rect.height <= 0) return null;
3746
+ return openPose(frames.frameOf(item), box, natural, item?.fit, clip.corners, clip.rect);
3556
3747
  }
3557
3748
  return { fromSource };
3558
3749
  }
@@ -3725,8 +3916,8 @@ async function saveImage(url) {
3725
3916
  }
3726
3917
  //#endregion
3727
3918
  //#region src/components/lightbox/Lightbox.vue?vue&type=script&setup=true&lang.ts
3728
- var _hoisted_1$84 = ["data-hn-phase"];
3729
- var _hoisted_2$40 = {
3919
+ var _hoisted_1$83 = ["data-hn-phase"];
3920
+ var _hoisted_2$39 = {
3730
3921
  "aria-hidden": "true",
3731
3922
  class: "pointer-events-none absolute inset-0 isolate"
3732
3923
  };
@@ -3887,7 +4078,7 @@ var Lightbox_default = /* @__PURE__ */ defineComponent({
3887
4078
  onWheel: _cache[9] || (_cache[9] = (...args) => unref(gesture).onWheel && unref(gesture).onWheel(...args)),
3888
4079
  onKeydown
3889
4080
  }, [
3890
- createElementVNode("div", _hoisted_2$40, [createVNode(unref(Motion), {
4081
+ createElementVNode("div", _hoisted_2$39, [createVNode(unref(Motion), {
3891
4082
  class: "hn-scrim",
3892
4083
  style: normalizeStyle({ opacity: unref(motion).presence })
3893
4084
  }, null, 8, ["style"])]),
@@ -3952,7 +4143,7 @@ var Lightbox_default = /* @__PURE__ */ defineComponent({
3952
4143
  "hint",
3953
4144
  "presence"
3954
4145
  ])
3955
- ], 42, _hoisted_1$84)]),
4146
+ ], 42, _hoisted_1$83)]),
3956
4147
  _: 1
3957
4148
  })]),
3958
4149
  _: 1
@@ -3964,15 +4155,22 @@ var Lightbox_default = /* @__PURE__ */ defineComponent({
3964
4155
  });
3965
4156
  //#endregion
3966
4157
  //#region src/components/image/image.variants.ts
4158
+ var imageRoot = tv({
4159
+ base: "relative block w-full overflow-hidden",
4160
+ variants: { preview: { true: "hn-focus-ring cursor-zoom-in" } }
4161
+ });
3967
4162
  var image = tv({
3968
- base: "block size-full",
3969
- variants: { fit: {
3970
- cover: "object-cover",
3971
- contain: "object-contain",
3972
- fill: "object-fill",
3973
- none: "object-none",
3974
- "scale-down": "object-scale-down"
3975
- } },
4163
+ base: "relative z-10 block size-full",
4164
+ variants: {
4165
+ lazy: { true: "transition-opacity duration-(--hn-duration-base) ease-enter motion-reduce:transition-none" },
4166
+ fit: {
4167
+ cover: "object-cover",
4168
+ contain: "object-contain",
4169
+ fill: "object-fill",
4170
+ none: "object-none",
4171
+ "scale-down": "object-scale-down"
4172
+ }
4173
+ },
3976
4174
  defaultVariants: { fit: "cover" }
3977
4175
  });
3978
4176
  //#endregion
@@ -4033,7 +4231,7 @@ function useImage(props, emit) {
4033
4231
  const style = getComputedStyle(el);
4034
4232
  try {
4035
4233
  return el.animate(frames, {
4036
- duration: Number.parseFloat(style.getPropertyValue("--hn-duration-base")) || 0,
4234
+ duration: Number.parseFloat(style.getPropertyValue("--hn-duration-fast")) || 0,
4037
4235
  easing: style.getPropertyValue("--hn-ease-enter").trim() || "linear",
4038
4236
  fill: "forwards"
4039
4237
  });
@@ -4045,13 +4243,17 @@ function useImage(props, emit) {
4045
4243
  return new Promise((res) => requestAnimationFrame(() => requestAnimationFrame(() => res())));
4046
4244
  }
4047
4245
  async function reveal() {
4048
- revealed.value = true;
4049
4246
  if (!props.lazy) {
4247
+ revealed.value = true;
4050
4248
  skeletonMounted.value = false;
4051
4249
  return;
4052
4250
  }
4251
+ const img = imageEl.value;
4252
+ const at = src.value;
4053
4253
  await nextTick();
4054
4254
  await afterPaint();
4255
+ if (imageEl.value !== img || src.value !== at) return;
4256
+ revealed.value = true;
4055
4257
  const layer = skeletonEl.value;
4056
4258
  const anim = layer && play(layer, [{ opacity: 1 }, { opacity: 0 }]);
4057
4259
  if (!anim) {
@@ -4113,7 +4315,7 @@ function useImageGroup() {
4113
4315
  }
4114
4316
  //#endregion
4115
4317
  //#region src/components/image/Image.vue?vue&type=script&setup=true&lang.ts
4116
- var _hoisted_1$83 = [
4318
+ var _hoisted_1$82 = [
4117
4319
  "src",
4118
4320
  "alt",
4119
4321
  "decoding",
@@ -4151,7 +4353,21 @@ var Image_default = /* @__PURE__ */ defineComponent({
4151
4353
  },
4152
4354
  draggable: { type: Boolean },
4153
4355
  class: {},
4154
- imageClass: {}
4356
+ style: { type: [
4357
+ Boolean,
4358
+ null,
4359
+ String,
4360
+ Object,
4361
+ Array
4362
+ ] },
4363
+ imageClass: {},
4364
+ imageStyle: { type: [
4365
+ Boolean,
4366
+ null,
4367
+ String,
4368
+ Object,
4369
+ Array
4370
+ ] }
4155
4371
  },
4156
4372
  emits: ["load", "error"],
4157
4373
  setup(__props, { emit: __emit }) {
@@ -4187,8 +4403,8 @@ var Image_default = /* @__PURE__ */ defineComponent({
4187
4403
  ref: rootEl,
4188
4404
  as: props.preview ? "button" : "span",
4189
4405
  type: props.preview ? "button" : void 0,
4190
- class: normalizeClass(unref(cn)("relative block overflow-hidden", props.preview && "hn-focus-ring cursor-zoom-in", props.class)),
4191
- style: normalizeStyle(props.ratio ? { aspectRatio: String(props.ratio) } : void 0),
4406
+ class: normalizeClass(unref(cn)(unref(imageRoot)({ preview: !!props.preview }), props.class)),
4407
+ style: normalizeStyle([props.ratio ? { aspectRatio: String(props.ratio) } : void 0, props.style]),
4192
4408
  onClick: openPreview
4193
4409
  }, {
4194
4410
  default: withCtx(() => [
@@ -4197,13 +4413,17 @@ var Image_default = /* @__PURE__ */ defineComponent({
4197
4413
  ref_key: "imageEl",
4198
4414
  ref: imageEl
4199
4415
  }, _ctx.$attrs, {
4416
+ style: props.imageStyle,
4200
4417
  src: unref(src),
4201
4418
  alt: props.alt,
4202
4419
  decoding: props.eager ? "sync" : "async",
4203
4420
  fetchpriority: props.eager ? "high" : void 0,
4204
4421
  draggable: props.draggable,
4205
- class: unref(cn)(unref(image)({ fit: props.fit }), props.lazy ? !unref(revealed) && "opacity-0" : "relative z-10", props.imageClass)
4206
- }), null, 16, _hoisted_1$83)) : unref(failed) ? renderSlot(_ctx.$slots, "error", {}, void 0, void 0, 1) : renderSlot(_ctx.$slots, "empty", {}, void 0, void 0, 2),
4422
+ class: unref(cn)(unref(image)({
4423
+ fit: props.fit,
4424
+ lazy: props.lazy
4425
+ }), props.lazy && !unref(revealed) && "opacity-0", props.imageClass)
4426
+ }), null, 16, _hoisted_1$82)) : unref(failed) ? renderSlot(_ctx.$slots, "error", {}, void 0, void 0, 1) : renderSlot(_ctx.$slots, "empty", {}, void 0, void 0, 2),
4207
4427
  unref(showSkeleton) ? (openBlock(), createElementBlock("span", {
4208
4428
  key: 3,
4209
4429
  ref_key: "skeletonEl",
@@ -4484,7 +4704,7 @@ var indicator = tv({
4484
4704
  });
4485
4705
  //#endregion
4486
4706
  //#region src/components/indicator/Indicator.vue?vue&type=script&setup=true&lang.ts
4487
- var _hoisted_1$82 = {
4707
+ var _hoisted_1$81 = {
4488
4708
  key: 0,
4489
4709
  "aria-hidden": "true",
4490
4710
  class: "hn-ping absolute inset-0 rounded-full bg-inherit"
@@ -4515,7 +4735,7 @@ var Indicator_default = /* @__PURE__ */ defineComponent({
4515
4735
  size: props.size
4516
4736
  }), props.class))
4517
4737
  }, {
4518
- default: withCtx(() => [props.pulse ? (openBlock(), createElementBlock("span", _hoisted_1$82)) : createCommentVNode("", true), props.label ? (openBlock(), createBlock(VisuallyHidden_default, { key: 1 }, {
4738
+ default: withCtx(() => [props.pulse ? (openBlock(), createElementBlock("span", _hoisted_1$81)) : createCommentVNode("", true), props.label ? (openBlock(), createBlock(VisuallyHidden_default, { key: 1 }, {
4519
4739
  default: withCtx(() => [createTextVNode(toDisplayString(props.label), 1)]),
4520
4740
  _: 1
4521
4741
  })) : createCommentVNode("", true)]),
@@ -4567,8 +4787,8 @@ var calloutIcons = {
4567
4787
  };
4568
4788
  //#endregion
4569
4789
  //#region src/components/callout/Callout.vue?vue&type=script&setup=true&lang.ts
4570
- var _hoisted_1$81 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
4571
- var _hoisted_2$39 = {
4790
+ var _hoisted_1$80 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
4791
+ var _hoisted_2$38 = {
4572
4792
  key: 0,
4573
4793
  class: "text-fg font-medium"
4574
4794
  };
@@ -4596,7 +4816,7 @@ var Callout_default = /* @__PURE__ */ defineComponent({
4596
4816
  key: 0,
4597
4817
  class: normalizeClass(unref(calloutIcon)({ tone: props.tone })),
4598
4818
  "aria-hidden": "true"
4599
- }, null, 8, ["class"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_1$81, [props.title ? (openBlock(), createElementBlock("p", _hoisted_2$39, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])], 2);
4819
+ }, null, 8, ["class"])) : createCommentVNode("", true)]), createElementVNode("div", _hoisted_1$80, [props.title ? (openBlock(), createElementBlock("p", _hoisted_2$38, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])], 2);
4600
4820
  };
4601
4821
  }
4602
4822
  });
@@ -4650,19 +4870,19 @@ function useCollapseGap() {
4650
4870
  }
4651
4871
  //#endregion
4652
4872
  //#region src/components/alert/Alert.vue?vue&type=script&setup=true&lang.ts
4653
- var _hoisted_1$80 = {
4873
+ var _hoisted_1$79 = {
4654
4874
  key: 0,
4655
4875
  "data-hn-alert": "",
4656
4876
  class: "hn-collapse"
4657
4877
  };
4658
- var _hoisted_2$38 = { class: "hn-collapse-body" };
4659
- var _hoisted_3$19 = ["role"];
4878
+ var _hoisted_2$37 = { class: "hn-collapse-body" };
4879
+ var _hoisted_3$18 = ["role"];
4660
4880
  var _hoisted_4$14 = { class: "flex min-w-0 flex-1 flex-col gap-1" };
4661
- var _hoisted_5$10 = {
4881
+ var _hoisted_5$9 = {
4662
4882
  key: 0,
4663
4883
  class: "text-fg font-medium"
4664
4884
  };
4665
- var _hoisted_6$8 = {
4885
+ var _hoisted_6$7 = {
4666
4886
  key: 0,
4667
4887
  class: "flex shrink-0 items-center gap-2 self-center"
4668
4888
  };
@@ -4706,7 +4926,7 @@ var Alert_default = /* @__PURE__ */ defineComponent({
4706
4926
  "leave-from-class": "hn-collapse-open",
4707
4927
  "leave-to-class": "hn-collapse-closed"
4708
4928
  }, toHandlers(unref(hooks))), {
4709
- default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$80, [createElementVNode("div", _hoisted_2$38, [createElementVNode("div", {
4929
+ default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_1$79, [createElementVNode("div", _hoisted_2$37, [createElementVNode("div", {
4710
4930
  role: role.value,
4711
4931
  class: normalizeClass(unref(cn)(unref(callout)({ tone: props.tone }), props.class))
4712
4932
  }, [
@@ -4715,15 +4935,15 @@ var Alert_default = /* @__PURE__ */ defineComponent({
4715
4935
  class: normalizeClass(unref(calloutIcon)({ tone: props.tone })),
4716
4936
  "aria-hidden": "true"
4717
4937
  }, null, 8, ["class"])) : createCommentVNode("", true)]),
4718
- createElementVNode("div", _hoisted_4$14, [props.title ? (openBlock(), createElementBlock("p", _hoisted_5$10, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")]),
4719
- unref(slots).actions ? (openBlock(), createElementBlock("div", _hoisted_6$8, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
4938
+ createElementVNode("div", _hoisted_4$14, [props.title ? (openBlock(), createElementBlock("p", _hoisted_5$9, toDisplayString(props.title), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")]),
4939
+ unref(slots).actions ? (openBlock(), createElementBlock("div", _hoisted_6$7, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
4720
4940
  props.closable ? (openBlock(), createBlock(CloseButton_default, {
4721
4941
  key: 1,
4722
4942
  size: "sm",
4723
4943
  class: "-my-0.5 -me-1",
4724
4944
  onClick: close
4725
4945
  })) : createCommentVNode("", true)
4726
- ], 10, _hoisted_3$19)])])) : createCommentVNode("", true)]),
4946
+ ], 10, _hoisted_3$18)])])) : createCommentVNode("", true)]),
4727
4947
  _: 3
4728
4948
  }, 16);
4729
4949
  };
@@ -4731,7 +4951,7 @@ var Alert_default = /* @__PURE__ */ defineComponent({
4731
4951
  });
4732
4952
  //#endregion
4733
4953
  //#region src/components/prev-next/PrevNext.vue?vue&type=script&setup=true&lang.ts
4734
- var _hoisted_1$79 = ["aria-label"];
4954
+ var _hoisted_1$78 = ["aria-label"];
4735
4955
  //#endregion
4736
4956
  //#region src/components/prev-next/PrevNext.vue
4737
4957
  var PrevNext_default = /* @__PURE__ */ defineComponent({
@@ -4748,7 +4968,7 @@ var PrevNext_default = /* @__PURE__ */ defineComponent({
4748
4968
  return openBlock(), createElementBlock("nav", {
4749
4969
  "aria-label": props.label ?? unref(t).pagination.navLabel,
4750
4970
  class: normalizeClass(unref(cn)("grid gap-4 sm:grid-cols-2", props.class))
4751
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$79);
4971
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$78);
4752
4972
  };
4753
4973
  }
4754
4974
  });
@@ -4772,7 +4992,7 @@ var prevNextEyebrow = tv({
4772
4992
  });
4773
4993
  //#endregion
4774
4994
  //#region src/components/prev-next/PrevNextLink.vue?vue&type=script&setup=true&lang.ts
4775
- var _hoisted_1$78 = { class: "text-fg font-medium" };
4995
+ var _hoisted_1$77 = { class: "text-fg font-medium" };
4776
4996
  //#endregion
4777
4997
  //#region src/components/prev-next/PrevNextLink.vue
4778
4998
  var PrevNextLink_default = /* @__PURE__ */ defineComponent({
@@ -4808,7 +5028,7 @@ var PrevNextLink_default = /* @__PURE__ */ defineComponent({
4808
5028
  class: "size-4",
4809
5029
  "aria-hidden": "true"
4810
5030
  })), createTextVNode(" " + toDisplayString(props.label ?? (props.direction === "prev" ? unref(t).pagination.prev : unref(t).pagination.next)), 1)], 2),
4811
- createElementVNode("span", _hoisted_1$78, [renderSlot(_ctx.$slots, "default")])
5031
+ createElementVNode("span", _hoisted_1$77, [renderSlot(_ctx.$slots, "default")])
4812
5032
  ]),
4813
5033
  _: 3
4814
5034
  }, 16, [
@@ -4885,8 +5105,8 @@ var tableCell = tv({
4885
5105
  });
4886
5106
  //#endregion
4887
5107
  //#region src/components/table/Table.vue?vue&type=script&setup=true&lang.ts
4888
- var _hoisted_1$77 = { class: "hn-table" };
4889
- var _hoisted_2$37 = { key: 0 };
5108
+ var _hoisted_1$76 = { class: "hn-table" };
5109
+ var _hoisted_2$36 = { key: 0 };
4890
5110
  //#endregion
4891
5111
  //#region src/components/table/Table.vue
4892
5112
  var Table_default = /* @__PURE__ */ defineComponent({
@@ -4916,7 +5136,7 @@ var Table_default = /* @__PURE__ */ defineComponent({
4916
5136
  stickyHeader: props.stickyHeader
4917
5137
  }), props.class))
4918
5138
  }, {
4919
- default: withCtx(() => [createElementVNode("table", _hoisted_1$77, [props.caption ? (openBlock(), createElementBlock("caption", _hoisted_2$37, [createElementVNode("span", null, toDisplayString(props.caption), 1)])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])]),
5139
+ default: withCtx(() => [createElementVNode("table", _hoisted_1$76, [props.caption ? (openBlock(), createElementBlock("caption", _hoisted_2$36, [createElementVNode("span", null, toDisplayString(props.caption), 1)])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default")])]),
4920
5140
  _: 3
4921
5141
  }, 8, ["direction", "class"]);
4922
5142
  };
@@ -4963,7 +5183,7 @@ var TableRow_default = /* @__PURE__ */ defineComponent({
4963
5183
  });
4964
5184
  //#endregion
4965
5185
  //#region src/components/table/TableHead.vue?vue&type=script&setup=true&lang.ts
4966
- var _hoisted_1$76 = ["scope"];
5186
+ var _hoisted_1$75 = ["scope"];
4967
5187
  //#endregion
4968
5188
  //#region src/components/table/TableHead.vue
4969
5189
  var TableHead_default = /* @__PURE__ */ defineComponent({
@@ -4988,7 +5208,7 @@ var TableHead_default = /* @__PURE__ */ defineComponent({
4988
5208
  sticky: props.sticky,
4989
5209
  head: true
4990
5210
  }), props.class))
4991
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$76);
5211
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$75);
4992
5212
  };
4993
5213
  }
4994
5214
  });
@@ -5298,11 +5518,16 @@ var TabsTrigger_default = /* @__PURE__ */ defineComponent({
5298
5518
  active.value ? (openBlock(), createBlock(Highlight_default, {
5299
5519
  key: 0,
5300
5520
  id: unref(highlightId),
5521
+ axis: unref(orientation) === "vertical" ? "y" : "x",
5301
5522
  class: normalizeClass(unref(tabsHighlight)({
5302
5523
  variant: unref(variant),
5303
5524
  orientation: unref(orientation)
5304
5525
  }))
5305
- }, null, 8, ["id", "class"])) : createCommentVNode("", true),
5526
+ }, null, 8, [
5527
+ "id",
5528
+ "axis",
5529
+ "class"
5530
+ ])) : createCommentVNode("", true),
5306
5531
  createVNode(Ripple_default),
5307
5532
  renderSlot(_ctx.$slots, "default")
5308
5533
  ]),
@@ -5487,12 +5712,12 @@ function injectInputGroup() {
5487
5712
  }
5488
5713
  //#endregion
5489
5714
  //#region src/components/input/InputBase.vue?vue&type=script&setup=true&lang.ts
5490
- var _hoisted_1$75 = [
5715
+ var _hoisted_1$74 = [
5491
5716
  "data-invalid",
5492
5717
  "data-disabled",
5493
5718
  "aria-busy"
5494
5719
  ];
5495
- var _hoisted_2$36 = [
5720
+ var _hoisted_2$35 = [
5496
5721
  "id",
5497
5722
  "disabled",
5498
5723
  "aria-invalid",
@@ -5579,7 +5804,7 @@ var InputBase_default = /* @__PURE__ */ defineComponent({
5579
5804
  leading: !!unref(slots).leading,
5580
5805
  trailing: clearing.value || trailingSpinner.value || !!unref(slots).trailing
5581
5806
  })
5582
- }), null, 16, _hoisted_2$36), [[vModelDynamic, model.value]]),
5807
+ }), null, 16, _hoisted_2$35), [[vModelDynamic, model.value]]),
5583
5808
  createVNode(Transition, {
5584
5809
  "enter-active-class": "hn-transition-base",
5585
5810
  "enter-from-class": "scale-90 opacity-0",
@@ -5615,7 +5840,7 @@ var InputBase_default = /* @__PURE__ */ defineComponent({
5615
5840
  key: 1,
5616
5841
  class: normalizeClass(unref(inputAdornment)())
5617
5842
  }, [renderSlot(_ctx.$slots, "trailing")], 2)) : createCommentVNode("", true)
5618
- ], 10, _hoisted_1$75);
5843
+ ], 10, _hoisted_1$74);
5619
5844
  };
5620
5845
  }
5621
5846
  });
@@ -5819,8 +6044,8 @@ var textareaField = tv({ base: [
5819
6044
  ] });
5820
6045
  //#endregion
5821
6046
  //#region src/components/textarea/Textarea.vue?vue&type=script&setup=true&lang.ts
5822
- var _hoisted_1$74 = ["data-invalid", "data-disabled"];
5823
- var _hoisted_2$35 = [
6047
+ var _hoisted_1$73 = ["data-invalid", "data-disabled"];
6048
+ var _hoisted_2$34 = [
5824
6049
  "id",
5825
6050
  "rows",
5826
6051
  "disabled",
@@ -5889,9 +6114,9 @@ var Textarea_default = /* @__PURE__ */ defineComponent({
5889
6114
  "aria-describedby": unref(describedBy),
5890
6115
  class: unref(textareaField)(),
5891
6116
  onInput: _cache[1] || (_cache[1] = (...args) => unref(fit) && unref(fit)(...args))
5892
- }), null, 16, _hoisted_2$35), [[vModelText, model.value]])]),
6117
+ }), null, 16, _hoisted_2$34), [[vModelText, model.value]])]),
5893
6118
  _: 1
5894
- }, 512)], 14, _hoisted_1$74);
6119
+ }, 512)], 14, _hoisted_1$73);
5895
6120
  };
5896
6121
  }
5897
6122
  });
@@ -6025,7 +6250,7 @@ var NumberInput_default = /* @__PURE__ */ defineComponent({
6025
6250
  });
6026
6251
  //#endregion
6027
6252
  //#region src/components/password-input/PasswordInput.vue?vue&type=script&setup=true&lang.ts
6028
- var _hoisted_1$73 = { class: "relative inline-flex" };
6253
+ var _hoisted_1$72 = { class: "relative inline-flex" };
6029
6254
  //#endregion
6030
6255
  //#region src/components/password-input/PasswordInput.vue
6031
6256
  var PasswordInput_default = /* @__PURE__ */ defineComponent({
@@ -6069,7 +6294,7 @@ var PasswordInput_default = /* @__PURE__ */ defineComponent({
6069
6294
  disabled: props.disabled,
6070
6295
  onClick: _cache[0] || (_cache[0] = ($event) => visible.value = !visible.value)
6071
6296
  }, {
6072
- default: withCtx(() => [createElementVNode("span", _hoisted_1$73, [createVNode(Transition, {
6297
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$72, [createVNode(Transition, {
6073
6298
  "enter-active-class": "hn-transition-base",
6074
6299
  "enter-from-class": "scale-90 opacity-0",
6075
6300
  "leave-active-class": "hn-transition absolute",
@@ -6164,7 +6389,7 @@ var inputGroup = tv({
6164
6389
  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)]" });
6165
6390
  //#endregion
6166
6391
  //#region src/components/input-group/InputGroup.vue?vue&type=script&setup=true&lang.ts
6167
- var _hoisted_1$72 = ["data-invalid", "data-disabled"];
6392
+ var _hoisted_1$71 = ["data-invalid", "data-disabled"];
6168
6393
  //#endregion
6169
6394
  //#region src/components/input-group/InputGroup.vue
6170
6395
  var InputGroup_default = /* @__PURE__ */ defineComponent({
@@ -6196,7 +6421,7 @@ var InputGroup_default = /* @__PURE__ */ defineComponent({
6196
6421
  size: props.size
6197
6422
  }), unref(inputGroup)({ divided: props.variant !== "bare" }), props.class)),
6198
6423
  onClick: _cache[0] || (_cache[0] = ($event) => unref(focusFieldFrom)($event.currentTarget, $event.target))
6199
- }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$72);
6424
+ }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1$71);
6200
6425
  };
6201
6426
  }
6202
6427
  });
@@ -6367,16 +6592,16 @@ function flattenOptions(items) {
6367
6592
  }
6368
6593
  //#endregion
6369
6594
  //#region src/components/select/SelectList.vue?vue&type=script&setup=true&lang.ts
6370
- var _hoisted_1$71 = { class: "min-w-0 flex-1" };
6371
- var _hoisted_2$34 = { class: "block truncate" };
6372
- var _hoisted_3$18 = {
6595
+ var _hoisted_1$70 = { class: "min-w-0 flex-1" };
6596
+ var _hoisted_2$33 = { class: "block truncate" };
6597
+ var _hoisted_3$17 = {
6373
6598
  key: 0,
6374
6599
  class: "text-muted block truncate text-xs"
6375
6600
  };
6376
6601
  var _hoisted_4$13 = { class: "flex size-4 shrink-0 items-center justify-center" };
6377
- var _hoisted_5$9 = { class: "min-w-0 flex-1" };
6378
- var _hoisted_6$7 = { class: "block truncate" };
6379
- var _hoisted_7$5 = {
6602
+ var _hoisted_5$8 = { class: "min-w-0 flex-1" };
6603
+ var _hoisted_6$6 = { class: "block truncate" };
6604
+ var _hoisted_7$4 = {
6380
6605
  key: 0,
6381
6606
  class: "text-muted block truncate text-xs"
6382
6607
  };
@@ -6426,7 +6651,7 @@ var SelectList_default = /* @__PURE__ */ defineComponent({
6426
6651
  class: normalizeClass(unref(selectItem)())
6427
6652
  }, {
6428
6653
  default: withCtx(() => [createVNode(unref(SelectItemText), { "as-child": "" }, {
6429
- default: withCtx(() => [createElementVNode("span", _hoisted_1$71, [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)])])]),
6654
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$70, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$33, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_3$17, toDisplayString(option.description), 1)) : createCommentVNode("", true)])])]),
6430
6655
  _: 2
6431
6656
  }, 1024), createElementVNode("span", _hoisted_4$13, [createVNode(unref(SelectItemIndicator), null, {
6432
6657
  default: withCtx(() => [createVNode(unref(Check))]),
@@ -6449,7 +6674,7 @@ var SelectList_default = /* @__PURE__ */ defineComponent({
6449
6674
  class: normalizeClass(unref(selectItem)())
6450
6675
  }, {
6451
6676
  default: withCtx(() => [createVNode(unref(SelectItemText), { "as-child": "" }, {
6452
- 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)])])]),
6677
+ default: withCtx(() => [createElementVNode("span", _hoisted_5$8, [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)])])]),
6453
6678
  _: 2
6454
6679
  }, 1024), createElementVNode("span", _hoisted_8$1, [createVNode(unref(SelectItemIndicator), null, {
6455
6680
  default: withCtx(() => [createVNode(unref(Check))]),
@@ -6505,7 +6730,7 @@ function useClearTransition(visible) {
6505
6730
  }
6506
6731
  //#endregion
6507
6732
  //#region src/components/select/Select.vue?vue&type=script&setup=true&lang.ts
6508
- var _hoisted_1$70 = [
6733
+ var _hoisted_1$69 = [
6509
6734
  "dir",
6510
6735
  "data-invalid",
6511
6736
  "data-disabled"
@@ -6623,7 +6848,7 @@ var Select_default = /* @__PURE__ */ defineComponent({
6623
6848
  _: 1
6624
6849
  }, 8, ["label"])], 2)) : createCommentVNode("", true)]),
6625
6850
  _: 1
6626
- }, 16)], 10, _hoisted_1$70), createVNode(SelectList_default, {
6851
+ }, 16)], 10, _hoisted_1$69), createVNode(SelectList_default, {
6627
6852
  options: props.options,
6628
6853
  keyboard: keyboard.value
6629
6854
  }, {
@@ -6652,12 +6877,12 @@ var multiSelectTrigger = tv({ base: [
6652
6877
  var multiSelectChips = tv({ base: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden" });
6653
6878
  //#endregion
6654
6879
  //#region src/components/multi-select/MultiSelect.vue?vue&type=script&setup=true&lang.ts
6655
- var _hoisted_1$69 = { class: "min-w-0 truncate" };
6656
- var _hoisted_2$33 = {
6880
+ var _hoisted_1$68 = { class: "min-w-0 truncate" };
6881
+ var _hoisted_2$32 = {
6657
6882
  key: 1,
6658
6883
  class: "min-w-0 truncate"
6659
6884
  };
6660
- var _hoisted_3$17 = [
6885
+ var _hoisted_3$16 = [
6661
6886
  "name",
6662
6887
  "required",
6663
6888
  "autocomplete",
@@ -6767,7 +6992,7 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
6767
6992
  onClick: isolate,
6768
6993
  onRemove: ($event) => remove(option.value)
6769
6994
  }, {
6770
- default: withCtx(() => [createElementVNode("span", _hoisted_1$69, toDisplayString(option.label), 1)]),
6995
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$68, toDisplayString(option.label), 1)]),
6771
6996
  _: 2
6772
6997
  }, 1032, [
6773
6998
  "size",
@@ -6782,7 +7007,7 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
6782
7007
  }, {
6783
7008
  default: withCtx(() => [createTextVNode(" +" + toDisplayString(overflow.value), 1)]),
6784
7009
  _: 1
6785
- }, 8, ["size", "disabled"])) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_2$33, toDisplayString(props.placeholder ?? unref(t).select.placeholder), 1))], 2),
7010
+ }, 8, ["size", "disabled"])) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("span", _hoisted_2$32, toDisplayString(props.placeholder ?? unref(t).select.placeholder), 1))], 2),
6786
7011
  createVNode(Transition, {
6787
7012
  "enter-active-class": "hn-transition-base",
6788
7013
  "enter-from-class": "scale-90 opacity-0",
@@ -6835,7 +7060,7 @@ var MultiSelect_default = /* @__PURE__ */ defineComponent({
6835
7060
  value: option.value,
6836
7061
  disabled: option.disabled
6837
7062
  }, toDisplayString(option.label), 9, _hoisted_4$12);
6838
- }), 128))], 8, _hoisted_3$17), [[vModelSelect, model.value]])]),
7063
+ }), 128))], 8, _hoisted_3$16), [[vModelSelect, model.value]])]),
6839
7064
  _: 1
6840
7065
  })) : createCommentVNode("", true),
6841
7066
  createVNode(SelectList_default, {
@@ -6862,16 +7087,16 @@ var comboboxContent = tv({ base: ["hn-anim-pop z-(--hn-z-overlay) flex w-[var(--
6862
7087
  var comboboxList = tv({ base: "max-h-[min(20rem,var(--reka-combobox-content-available-height))]" });
6863
7088
  //#endregion
6864
7089
  //#region src/components/combobox/ComboboxList.vue?vue&type=script&setup=true&lang.ts
6865
- var _hoisted_1$68 = { class: "min-w-0 flex-1" };
6866
- var _hoisted_2$32 = { class: "block truncate" };
6867
- var _hoisted_3$16 = {
7090
+ var _hoisted_1$67 = { class: "min-w-0 flex-1" };
7091
+ var _hoisted_2$31 = { class: "block truncate" };
7092
+ var _hoisted_3$15 = {
6868
7093
  key: 0,
6869
7094
  class: "text-muted block truncate text-xs"
6870
7095
  };
6871
7096
  var _hoisted_4$11 = { class: "flex size-4 shrink-0 items-center justify-center" };
6872
- var _hoisted_5$8 = { class: "min-w-0 flex-1" };
6873
- var _hoisted_6$6 = { class: "block truncate" };
6874
- var _hoisted_7$4 = {
7097
+ var _hoisted_5$7 = { class: "min-w-0 flex-1" };
7098
+ var _hoisted_6$5 = { class: "block truncate" };
7099
+ var _hoisted_7$3 = {
6875
7100
  key: 0,
6876
7101
  class: "text-muted block truncate text-xs"
6877
7102
  };
@@ -6920,7 +7145,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
6920
7145
  disabled: option.disabled,
6921
7146
  class: normalizeClass(unref(selectItem)())
6922
7147
  }, {
6923
- 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$16, toDisplayString(option.description), 1)) : createCommentVNode("", true)])]), createElementVNode("span", _hoisted_4$11, [createVNode(unref(ComboboxItemIndicator), null, {
7148
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$67, [renderSlot(_ctx.$slots, "option", { option }, () => [createElementVNode("span", _hoisted_2$31, 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, {
6924
7149
  default: withCtx(() => [createVNode(unref(Check))]),
6925
7150
  _: 1
6926
7151
  })])]),
@@ -6940,7 +7165,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
6940
7165
  disabled: item.disabled,
6941
7166
  class: normalizeClass(unref(selectItem)())
6942
7167
  }, {
6943
- default: withCtx(() => [createElementVNode("span", _hoisted_5$8, [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)])]), createElementVNode("span", _hoisted_8, [createVNode(unref(ComboboxItemIndicator), null, {
7168
+ 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, [createVNode(unref(ComboboxItemIndicator), null, {
6944
7169
  default: withCtx(() => [createVNode(unref(Check))]),
6945
7170
  _: 1
6946
7171
  })])]),
@@ -6968,7 +7193,7 @@ var ComboboxList_default = /* @__PURE__ */ defineComponent({
6968
7193
  });
6969
7194
  //#endregion
6970
7195
  //#region src/components/combobox/Combobox.vue?vue&type=script&setup=true&lang.ts
6971
- var _hoisted_1$67 = ["data-invalid", "data-disabled"];
7196
+ var _hoisted_1$66 = ["data-invalid", "data-disabled"];
6972
7197
  //#endregion
6973
7198
  //#region src/components/combobox/Combobox.vue
6974
7199
  var Combobox_default = /* @__PURE__ */ defineComponent({
@@ -7108,7 +7333,7 @@ var Combobox_default = /* @__PURE__ */ defineComponent({
7108
7333
  "disabled",
7109
7334
  "class"
7110
7335
  ])
7111
- ], 42, _hoisted_1$67)]),
7336
+ ], 42, _hoisted_1$66)]),
7112
7337
  _: 1
7113
7338
  }), createVNode(ComboboxList_default, {
7114
7339
  options: props.options,
@@ -7157,11 +7382,11 @@ var commandItemHint = tv({ base: "ms-auto flex shrink-0 items-center gap-1" });
7157
7382
  var commandEmpty = tv({ base: "text-muted px-4 py-8 text-center text-sm" });
7158
7383
  //#endregion
7159
7384
  //#region src/components/command-palette/CommandPaletteItem.vue?vue&type=script&setup=true&lang.ts
7160
- var _hoisted_1$66 = { class: "truncate" };
7161
- var _hoisted_2$31 = ["textContent"];
7162
- var _hoisted_3$15 = ["textContent"];
7385
+ var _hoisted_1$65 = { class: "truncate" };
7386
+ var _hoisted_2$30 = ["textContent"];
7387
+ var _hoisted_3$14 = ["textContent"];
7163
7388
  var _hoisted_4$10 = ["textContent"];
7164
- var _hoisted_5$7 = {
7389
+ var _hoisted_5$6 = {
7165
7390
  key: 0,
7166
7391
  class: "text-muted truncate text-xs"
7167
7392
  };
@@ -7202,18 +7427,18 @@ var CommandPaletteItem_default = /* @__PURE__ */ defineComponent({
7202
7427
  "aria-hidden": "true",
7203
7428
  class: "text-muted"
7204
7429
  })) : createCommentVNode("", true),
7205
- createElementVNode("span", { class: normalizeClass(unref(commandItemBody)()) }, [createElementVNode("span", _hoisted_1$66, [
7206
- createElementVNode("span", { textContent: toDisplayString(parts.value[0]) }, null, 8, _hoisted_2$31),
7430
+ createElementVNode("span", { class: normalizeClass(unref(commandItemBody)()) }, [createElementVNode("span", _hoisted_1$65, [
7431
+ createElementVNode("span", { textContent: toDisplayString(parts.value[0]) }, null, 8, _hoisted_2$30),
7207
7432
  parts.value[1] ? (openBlock(), createElementBlock("span", {
7208
7433
  key: 0,
7209
7434
  class: normalizeClass(unref(commandItemMatch)()),
7210
7435
  textContent: toDisplayString(parts.value[1])
7211
- }, null, 10, _hoisted_3$15)) : createCommentVNode("", true),
7436
+ }, null, 10, _hoisted_3$14)) : createCommentVNode("", true),
7212
7437
  parts.value[2] ? (openBlock(), createElementBlock("span", {
7213
7438
  key: 1,
7214
7439
  textContent: toDisplayString(parts.value[2])
7215
7440
  }, null, 8, _hoisted_4$10)) : createCommentVNode("", true)
7216
- ]), props.match.item.description ? (openBlock(), createElementBlock("span", _hoisted_5$7, toDisplayString(props.match.item.description), 1)) : createCommentVNode("", true)], 2),
7441
+ ]), props.match.item.description ? (openBlock(), createElementBlock("span", _hoisted_5$6, toDisplayString(props.match.item.description), 1)) : createCommentVNode("", true)], 2),
7217
7442
  props.match.item.kbd?.length ? (openBlock(), createElementBlock("span", {
7218
7443
  key: 1,
7219
7444
  class: normalizeClass(unref(commandItemHint)())
@@ -7554,9 +7779,9 @@ var CommandPalette_default = /* @__PURE__ */ defineComponent({
7554
7779
  });
7555
7780
  //#endregion
7556
7781
  //#region src/components/listbox/ListboxOptionContent.vue?vue&type=script&setup=true&lang.ts
7557
- var _hoisted_1$65 = { class: "min-w-0 flex-1" };
7558
- var _hoisted_2$30 = { class: "block truncate" };
7559
- var _hoisted_3$14 = {
7782
+ var _hoisted_1$64 = { class: "min-w-0 flex-1" };
7783
+ var _hoisted_2$29 = { class: "block truncate" };
7784
+ var _hoisted_3$13 = {
7560
7785
  key: 0,
7561
7786
  class: "text-muted block truncate text-xs"
7562
7787
  };
@@ -7576,10 +7801,10 @@ var ListboxOptionContent_default = /* @__PURE__ */ defineComponent({
7576
7801
  const slots = useSlots();
7577
7802
  const { isSelected: selected } = injectListboxItemContext();
7578
7803
  return (_ctx, _cache) => {
7579
- return openBlock(), createElementBlock(Fragment, null, [createElementVNode("span", _hoisted_1$65, [renderSlot(_ctx.$slots, "option", {
7804
+ return openBlock(), createElementBlock(Fragment, null, [createElementVNode("span", _hoisted_1$64, [renderSlot(_ctx.$slots, "option", {
7580
7805
  option: props.option,
7581
7806
  selected: unref(selected)
7582
- }, () => [createElementVNode("span", _hoisted_2$30, toDisplayString(props.option.label), 1), props.option.description ? (openBlock(), createElementBlock("span", _hoisted_3$14, toDisplayString(props.option.description), 1)) : createCommentVNode("", true)])]), slots.trailing ? renderSlot(_ctx.$slots, "trailing", {
7807
+ }, () => [createElementVNode("span", _hoisted_2$29, 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", {
7583
7808
  option: props.option,
7584
7809
  selected: unref(selected)
7585
7810
  }, void 0, void 0, 0) : (openBlock(), createElementBlock("span", _hoisted_4$9, [createVNode(unref(ListboxItemIndicator), null, {
@@ -7757,19 +7982,19 @@ function pathTo(nodes, value, trail = []) {
7757
7982
  }
7758
7983
  //#endregion
7759
7984
  //#region src/components/tree-select/TreeSelect.vue?vue&type=script&setup=true&lang.ts
7760
- var _hoisted_1$64 = { class: "min-w-0 flex-1 truncate" };
7761
- var _hoisted_2$29 = ["onClick"];
7762
- var _hoisted_3$13 = {
7985
+ var _hoisted_1$63 = { class: "min-w-0 flex-1 truncate" };
7986
+ var _hoisted_2$28 = ["onClick"];
7987
+ var _hoisted_3$12 = {
7763
7988
  key: 1,
7764
7989
  class: "size-5 shrink-0"
7765
7990
  };
7766
7991
  var _hoisted_4$8 = { class: "min-w-0 flex-1" };
7767
- var _hoisted_5$6 = { class: "block truncate" };
7768
- var _hoisted_6$5 = {
7992
+ var _hoisted_5$5 = { class: "block truncate" };
7993
+ var _hoisted_6$4 = {
7769
7994
  key: 0,
7770
7995
  class: "text-muted block truncate text-xs"
7771
7996
  };
7772
- var _hoisted_7$3 = { class: "flex size-4 shrink-0 items-center justify-center" };
7997
+ var _hoisted_7$2 = { class: "flex size-4 shrink-0 items-center justify-center" };
7773
7998
  //#endregion
7774
7999
  //#region src/components/tree-select/TreeSelect.vue
7775
8000
  var TreeSelect_default = /* @__PURE__ */ defineComponent({
@@ -7845,7 +8070,7 @@ var TreeSelect_default = /* @__PURE__ */ defineComponent({
7845
8070
  size: props.size
7846
8071
  }), unref(selectTrigger)(), props.class)
7847
8072
  }), {
7848
- default: withCtx(() => [createElementVNode("span", _hoisted_1$64, toDisplayString(selected.value ? selected.value.label : props.placeholder ?? unref(t).select.placeholder), 1), createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(DisclosureIcon_default)], 2)]),
8073
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$63, toDisplayString(selected.value ? selected.value.label : props.placeholder ?? unref(t).select.placeholder), 1), createElementVNode("span", { class: normalizeClass(unref(inputAdornment)()) }, [createVNode(DisclosureIcon_default)], 2)]),
7849
8074
  _: 1
7850
8075
  }, 16, [
7851
8076
  "id",
@@ -7896,9 +8121,9 @@ var TreeSelect_default = /* @__PURE__ */ defineComponent({
7896
8121
  }, [createVNode(DisclosureIcon_default, {
7897
8122
  direction: "end",
7898
8123
  open: isExpanded
7899
- }, null, 8, ["open"])], 10, _hoisted_2$29)) : (openBlock(), createElementBlock("span", _hoisted_3$13)),
7900
- createElementVNode("span", _hoisted_4$8, [renderSlot(_ctx.$slots, "node", { node: item.value }, () => [createElementVNode("span", _hoisted_5$6, toDisplayString(item.value.label), 1), item.value.description ? (openBlock(), createElementBlock("span", _hoisted_6$5, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)])]),
7901
- createElementVNode("span", _hoisted_7$3, [isSelected ? (openBlock(), createBlock(unref(Check), { key: 0 })) : createCommentVNode("", true)])
8124
+ }, null, 8, ["open"])], 10, _hoisted_2$28)) : (openBlock(), createElementBlock("span", _hoisted_3$12)),
8125
+ createElementVNode("span", _hoisted_4$8, [renderSlot(_ctx.$slots, "node", { node: item.value }, () => [createElementVNode("span", _hoisted_5$5, toDisplayString(item.value.label), 1), item.value.description ? (openBlock(), createElementBlock("span", _hoisted_6$4, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)])]),
8126
+ createElementVNode("span", _hoisted_7$2, [isSelected ? (openBlock(), createBlock(unref(Check), { key: 0 })) : createCommentVNode("", true)])
7902
8127
  ]),
7903
8128
  _: 2
7904
8129
  }, 1040, [
@@ -8019,7 +8244,7 @@ var checkboxDescription = tv({
8019
8244
  });
8020
8245
  //#endregion
8021
8246
  //#region src/components/checkbox/Checkbox.vue?vue&type=script&setup=true&lang.ts
8022
- var _hoisted_1$63 = ["data-disabled"];
8247
+ var _hoisted_1$62 = ["data-disabled"];
8023
8248
  //#endregion
8024
8249
  //#region src/components/checkbox/Checkbox.vue
8025
8250
  var Checkbox_default = /* @__PURE__ */ defineComponent({
@@ -8116,7 +8341,7 @@ var Checkbox_default = /* @__PURE__ */ defineComponent({
8116
8341
  controlPlacement: props.controlPlacement
8117
8342
  }))
8118
8343
  }, toDisplayString(props.description), 3)) : createCommentVNode("", true)
8119
- ], 10, _hoisted_1$63);
8344
+ ], 10, _hoisted_1$62);
8120
8345
  };
8121
8346
  }
8122
8347
  });
@@ -8239,7 +8464,7 @@ var CheckboxGroup_default = /* @__PURE__ */ defineComponent({
8239
8464
  var radioDot = tv({ base: "block size-[calc(var(--hn-checkbox-size)/2)] bg-surface rounded-full" });
8240
8465
  //#endregion
8241
8466
  //#region src/components/radio-group/RadioGroup.vue?vue&type=script&setup=true&lang.ts
8242
- var _hoisted_1$62 = ["data-disabled"];
8467
+ var _hoisted_1$61 = ["data-disabled"];
8243
8468
  //#endregion
8244
8469
  //#region src/components/radio-group/RadioGroup.vue
8245
8470
  var RadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -8333,7 +8558,7 @@ var RadioGroup_default = /* @__PURE__ */ defineComponent({
8333
8558
  controlPlacement: props.controlPlacement
8334
8559
  }))
8335
8560
  }, toDisplayString(option.description), 3)) : createCommentVNode("", true)
8336
- ], 10, _hoisted_1$62);
8561
+ ], 10, _hoisted_1$61);
8337
8562
  }), 128))]),
8338
8563
  _: 3
8339
8564
  }, 8, [
@@ -8374,7 +8599,7 @@ var switchThumb = tv({ base: [
8374
8599
  ] });
8375
8600
  //#endregion
8376
8601
  //#region src/components/switch/Switch.vue?vue&type=script&setup=true&lang.ts
8377
- var _hoisted_1$61 = ["data-disabled"];
8602
+ var _hoisted_1$60 = ["data-disabled"];
8378
8603
  //#endregion
8379
8604
  //#region src/components/switch/Switch.vue
8380
8605
  var Switch_default = /* @__PURE__ */ defineComponent({
@@ -8455,7 +8680,7 @@ var Switch_default = /* @__PURE__ */ defineComponent({
8455
8680
  controlPlacement: props.controlPlacement
8456
8681
  }))
8457
8682
  }, toDisplayString(props.description), 3)) : createCommentVNode("", true)
8458
- ], 10, _hoisted_1$61);
8683
+ ], 10, _hoisted_1$60);
8459
8684
  };
8460
8685
  }
8461
8686
  });
@@ -8601,7 +8826,7 @@ var SliderMarks_default = /* @__PURE__ */ defineComponent({
8601
8826
  });
8602
8827
  //#endregion
8603
8828
  //#region src/components/slider/Slider.vue?vue&type=script&setup=true&lang.ts
8604
- var _hoisted_1$60 = ["data-disabled", "data-dragging"];
8829
+ var _hoisted_1$59 = ["data-disabled", "data-dragging"];
8605
8830
  //#endregion
8606
8831
  //#region src/components/slider/Slider.vue
8607
8832
  var Slider_default = /* @__PURE__ */ defineComponent({
@@ -8711,13 +8936,13 @@ var Slider_default = /* @__PURE__ */ defineComponent({
8711
8936
  "marks",
8712
8937
  "min",
8713
8938
  "max"
8714
- ])) : createCommentVNode("", true)], 16, _hoisted_1$60);
8939
+ ])) : createCommentVNode("", true)], 16, _hoisted_1$59);
8715
8940
  };
8716
8941
  }
8717
8942
  });
8718
8943
  //#endregion
8719
8944
  //#region src/components/range-slider/RangeSlider.vue?vue&type=script&setup=true&lang.ts
8720
- var _hoisted_1$59 = [
8945
+ var _hoisted_1$58 = [
8721
8946
  "aria-labelledby",
8722
8947
  "aria-describedby",
8723
8948
  "aria-invalid",
@@ -8856,7 +9081,7 @@ var RangeSlider_default = /* @__PURE__ */ defineComponent({
8856
9081
  "marks",
8857
9082
  "min",
8858
9083
  "max"
8859
- ])) : createCommentVNode("", true)], 16, _hoisted_1$59);
9084
+ ])) : createCommentVNode("", true)], 16, _hoisted_1$58);
8860
9085
  };
8861
9086
  }
8862
9087
  });
@@ -8873,15 +9098,15 @@ var toggle = tv({
8873
9098
  });
8874
9099
  //#endregion
8875
9100
  //#region src/components/toggle/Toggle.vue?vue&type=script&setup=true&lang.ts
8876
- var _hoisted_1$58 = {
9101
+ var _hoisted_1$57 = {
8877
9102
  key: "on",
8878
9103
  class: "inline-flex items-center justify-center"
8879
9104
  };
8880
- var _hoisted_2$28 = {
9105
+ var _hoisted_2$27 = {
8881
9106
  key: "off",
8882
9107
  class: "inline-flex items-center justify-center"
8883
9108
  };
8884
- var _hoisted_3$12 = {
9109
+ var _hoisted_3$11 = {
8885
9110
  key: 2,
8886
9111
  class: "inline-flex items-center"
8887
9112
  };
@@ -8958,10 +9183,10 @@ var Toggle_default = /* @__PURE__ */ defineComponent({
8958
9183
  "leave-active-class": "hn-transition absolute",
8959
9184
  "leave-to-class": "scale-90 opacity-0"
8960
9185
  }, {
8961
- default: withCtx(() => [swapped.value ? (openBlock(), createElementBlock("span", _hoisted_1$58, [renderSlot(_ctx.$slots, "pressed-icon")])) : (openBlock(), createElementBlock("span", _hoisted_2$28, [renderSlot(_ctx.$slots, "icon", { pressed: pressed.value })]))]),
9186
+ 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 })]))]),
8962
9187
  _: 3
8963
9188
  })], 2)) : createCommentVNode("", true),
8964
- unref(slots).default ? (openBlock(), createElementBlock("span", _hoisted_3$12, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true)
9189
+ unref(slots).default ? (openBlock(), createElementBlock("span", _hoisted_3$11, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true)
8965
9190
  ]),
8966
9191
  _: 3
8967
9192
  }, 16, [
@@ -9017,7 +9242,7 @@ var tagsInputControl = tv({
9017
9242
  var tagsInputChip = tv({ base: "max-w-full min-w-0 shrink data-disabled:opacity-100" });
9018
9243
  //#endregion
9019
9244
  //#region src/components/tags-input/TagsInputChip.vue?vue&type=script&setup=true&lang.ts
9020
- var _hoisted_1$57 = { class: "min-w-0 truncate" };
9245
+ var _hoisted_1$56 = { class: "min-w-0 truncate" };
9021
9246
  //#endregion
9022
9247
  //#region src/components/tags-input/TagsInputChip.vue
9023
9248
  var TagsInputChip_default = /* @__PURE__ */ defineComponent({
@@ -9044,7 +9269,7 @@ var TagsInputChip_default = /* @__PURE__ */ defineComponent({
9044
9269
  onRemove: _cache[0] || (_cache[0] = ($event) => emit("remove"))
9045
9270
  }), {
9046
9271
  default: withCtx(() => [createVNode(unref(TagsInputItemText), { "as-child": "" }, {
9047
- default: withCtx(() => [createElementVNode("span", _hoisted_1$57, toDisplayString(props.tag), 1)]),
9272
+ default: withCtx(() => [createElementVNode("span", _hoisted_1$56, toDisplayString(props.tag), 1)]),
9048
9273
  _: 1
9049
9274
  })]),
9050
9275
  _: 1
@@ -9058,7 +9283,7 @@ var TagsInputChip_default = /* @__PURE__ */ defineComponent({
9058
9283
  });
9059
9284
  //#endregion
9060
9285
  //#region src/components/tags-input/TagsInput.vue?vue&type=script&setup=true&lang.ts
9061
- var _hoisted_1$56 = ["data-invalid", "data-disabled"];
9286
+ var _hoisted_1$55 = ["data-invalid", "data-disabled"];
9062
9287
  //#endregion
9063
9288
  //#region src/components/tags-input/TagsInput.vue
9064
9289
  var TagsInput_default = /* @__PURE__ */ defineComponent({
@@ -9209,7 +9434,7 @@ var TagsInput_default = /* @__PURE__ */ defineComponent({
9209
9434
  _: 1
9210
9435
  }, 8, ["label"])], 2)) : createCommentVNode("", true)]),
9211
9436
  _: 1
9212
- })], 10, _hoisted_1$56);
9437
+ })], 10, _hoisted_1$55);
9213
9438
  };
9214
9439
  }
9215
9440
  });
@@ -9270,12 +9495,12 @@ var multiComboboxHost = tv({
9270
9495
  var multiComboboxEnd = tv({ base: "absolute inset-y-0 end-0 flex items-stretch" });
9271
9496
  //#endregion
9272
9497
  //#region src/components/multi-combobox/MultiCombobox.vue?vue&type=script&setup=true&lang.ts
9273
- var _hoisted_1$55 = [
9498
+ var _hoisted_1$54 = [
9274
9499
  "data-invalid",
9275
9500
  "data-disabled",
9276
9501
  "aria-busy"
9277
9502
  ];
9278
- var _hoisted_2$27 = { class: "min-w-0 truncate" };
9503
+ var _hoisted_2$26 = { class: "min-w-0 truncate" };
9279
9504
  //#endregion
9280
9505
  //#region src/components/multi-combobox/MultiCombobox.vue
9281
9506
  var MultiCombobox_default = /* @__PURE__ */ defineComponent({
@@ -9368,7 +9593,7 @@ var MultiCombobox_default = /* @__PURE__ */ defineComponent({
9368
9593
  class: normalizeClass(unref(tagsInputChip)()),
9369
9594
  onRemove: ($event) => unref(remove)(option.value)
9370
9595
  }, {
9371
- default: withCtx(() => [createElementVNode("span", _hoisted_2$27, toDisplayString(option.label), 1)]),
9596
+ default: withCtx(() => [createElementVNode("span", _hoisted_2$26, toDisplayString(option.label), 1)]),
9372
9597
  _: 2
9373
9598
  }, 1032, [
9374
9599
  "size",
@@ -9435,7 +9660,7 @@ var MultiCombobox_default = /* @__PURE__ */ defineComponent({
9435
9660
  "aria-label",
9436
9661
  "disabled",
9437
9662
  "class"
9438
- ])], 2)], 10, _hoisted_1$55)]),
9663
+ ])], 2)], 10, _hoisted_1$54)]),
9439
9664
  _: 1
9440
9665
  }), createVNode(ComboboxList_default, {
9441
9666
  options: props.options,
@@ -10119,7 +10344,7 @@ var dateFieldSegment = tv({
10119
10344
  });
10120
10345
  //#endregion
10121
10346
  //#region src/components/date-field/DateField.vue?vue&type=script&setup=true&lang.ts
10122
- var _hoisted_1$54 = ["data-invalid", "data-disabled"];
10347
+ var _hoisted_1$53 = ["data-invalid", "data-disabled"];
10123
10348
  //#endregion
10124
10349
  //#region src/components/date-field/DateField.vue
10125
10350
  var DateField_default = /* @__PURE__ */ defineComponent({
@@ -10276,7 +10501,7 @@ var DateField_default = /* @__PURE__ */ defineComponent({
10276
10501
  key: 1,
10277
10502
  class: normalizeClass(unref(inputAdornment)())
10278
10503
  }, [renderSlot(_ctx.$slots, "trailing")], 2)) : createCommentVNode("", true)
10279
- ], 10, _hoisted_1$54);
10504
+ ], 10, _hoisted_1$53);
10280
10505
  };
10281
10506
  }
10282
10507
  });
@@ -10307,7 +10532,7 @@ var InputGroupScope_default = /* @__PURE__ */ defineComponent({
10307
10532
  var datePickerContent = tv({ base: "hn-anim-pop z-(--hn-z-overlay) p-2 shadow-md outline-none" });
10308
10533
  //#endregion
10309
10534
  //#region src/components/date-picker/DatePicker.vue?vue&type=script&setup=true&lang.ts
10310
- var _hoisted_1$53 = ["data-invalid", "data-disabled"];
10535
+ var _hoisted_1$52 = ["data-invalid", "data-disabled"];
10311
10536
  //#endregion
10312
10537
  //#region src/components/date-picker/DatePicker.vue
10313
10538
  var DatePicker_default = /* @__PURE__ */ defineComponent({
@@ -10424,7 +10649,7 @@ var DatePicker_default = /* @__PURE__ */ defineComponent({
10424
10649
  _: 1
10425
10650
  }, 8, ["label", "disabled"])]),
10426
10651
  _: 1
10427
- })], 10, _hoisted_1$53)]),
10652
+ })], 10, _hoisted_1$52)]),
10428
10653
  _: 3
10429
10654
  }), createVNode(unref(PopoverPortal), null, {
10430
10655
  default: withCtx(() => [createVNode(unref(PopoverContent), {
@@ -10489,7 +10714,7 @@ function isRangeInvalid({ start, end }, bounds) {
10489
10714
  }
10490
10715
  //#endregion
10491
10716
  //#region src/components/date-range-field/DateRangeField.vue?vue&type=script&setup=true&lang.ts
10492
- var _hoisted_1$52 = ["data-invalid", "data-disabled"];
10717
+ var _hoisted_1$51 = ["data-invalid", "data-disabled"];
10493
10718
  //#endregion
10494
10719
  //#region src/components/date-range-field/DateRangeField.vue
10495
10720
  var DateRangeField_default = /* @__PURE__ */ defineComponent({
@@ -10658,7 +10883,7 @@ var DateRangeField_default = /* @__PURE__ */ defineComponent({
10658
10883
  key: 1,
10659
10884
  class: normalizeClass(unref(inputAdornment)())
10660
10885
  }, [renderSlot(_ctx.$slots, "trailing")], 2)) : createCommentVNode("", true)
10661
- ], 10, _hoisted_1$52);
10886
+ ], 10, _hoisted_1$51);
10662
10887
  };
10663
10888
  }
10664
10889
  });
@@ -10906,7 +11131,7 @@ var RangeCalendar_default = /* @__PURE__ */ defineComponent({
10906
11131
  });
10907
11132
  //#endregion
10908
11133
  //#region src/components/date-range-picker/DateRangePicker.vue?vue&type=script&setup=true&lang.ts
10909
- var _hoisted_1$51 = ["data-invalid", "data-disabled"];
11134
+ var _hoisted_1$50 = ["data-invalid", "data-disabled"];
10910
11135
  //#endregion
10911
11136
  //#region src/components/date-range-picker/DateRangePicker.vue
10912
11137
  var DateRangePicker_default = /* @__PURE__ */ defineComponent({
@@ -11024,7 +11249,7 @@ var DateRangePicker_default = /* @__PURE__ */ defineComponent({
11024
11249
  _: 1
11025
11250
  }, 8, ["label", "disabled"])]),
11026
11251
  _: 1
11027
- })], 10, _hoisted_1$51)]),
11252
+ })], 10, _hoisted_1$50)]),
11028
11253
  _: 3
11029
11254
  }), createVNode(unref(PopoverPortal), null, {
11030
11255
  default: withCtx(() => [createVNode(unref(PopoverContent), {
@@ -11078,7 +11303,7 @@ var DateRangePicker_default = /* @__PURE__ */ defineComponent({
11078
11303
  });
11079
11304
  //#endregion
11080
11305
  //#region src/components/time-field/TimeField.vue?vue&type=script&setup=true&lang.ts
11081
- var _hoisted_1$50 = ["data-invalid", "data-disabled"];
11306
+ var _hoisted_1$49 = ["data-invalid", "data-disabled"];
11082
11307
  //#endregion
11083
11308
  //#region src/components/time-field/TimeField.vue
11084
11309
  var TimeField_default = /* @__PURE__ */ defineComponent({
@@ -11241,7 +11466,7 @@ var TimeField_default = /* @__PURE__ */ defineComponent({
11241
11466
  key: 1,
11242
11467
  class: normalizeClass(unref(inputAdornment)())
11243
11468
  }, [renderSlot(_ctx.$slots, "trailing")], 2)) : createCommentVNode("", true)
11244
- ], 10, _hoisted_1$50);
11469
+ ], 10, _hoisted_1$49);
11245
11470
  };
11246
11471
  }
11247
11472
  });
@@ -11250,7 +11475,7 @@ var TimeField_default = /* @__PURE__ */ defineComponent({
11250
11475
  var dateTimePickerFooter = tv({ base: "mt-2 flex items-center justify-between gap-2" });
11251
11476
  //#endregion
11252
11477
  //#region src/components/date-time-picker/DateTimePicker.vue?vue&type=script&setup=true&lang.ts
11253
- var _hoisted_1$49 = ["data-invalid", "data-disabled"];
11478
+ var _hoisted_1$48 = ["data-invalid", "data-disabled"];
11254
11479
  //#endregion
11255
11480
  //#region src/components/date-time-picker/DateTimePicker.vue
11256
11481
  var DateTimePicker_default = /* @__PURE__ */ defineComponent({
@@ -11383,7 +11608,7 @@ var DateTimePicker_default = /* @__PURE__ */ defineComponent({
11383
11608
  _: 1
11384
11609
  }, 8, ["label", "disabled"])]),
11385
11610
  _: 1
11386
- })], 10, _hoisted_1$49)]),
11611
+ })], 10, _hoisted_1$48)]),
11387
11612
  _: 3
11388
11613
  }), createVNode(unref(PopoverPortal), null, {
11389
11614
  default: withCtx(() => [createVNode(unref(PopoverContent), {
@@ -11492,7 +11717,7 @@ function starFill(value, index) {
11492
11717
  }
11493
11718
  //#endregion
11494
11719
  //#region src/components/rating/Rating.vue?vue&type=script&setup=true&lang.ts
11495
- var _hoisted_1$48 = ["aria-label"];
11720
+ var _hoisted_1$47 = ["aria-label"];
11496
11721
  //#endregion
11497
11722
  //#region src/components/rating/Rating.vue
11498
11723
  var Rating_default = /* @__PURE__ */ defineComponent({
@@ -11536,7 +11761,7 @@ var Rating_default = /* @__PURE__ */ defineComponent({
11536
11761
  class: normalizeClass(unref(ratingFill)()),
11537
11762
  style: normalizeStyle({ width: unref(starFill)(model.value, index) })
11538
11763
  }, [createVNode(unref(Star), { class: normalizeClass(unref(ratingStar)({ active: true })) }, null, 8, ["class"])], 6)], 2);
11539
- }), 128))], 16, _hoisted_1$48)) : (openBlock(), createBlock(unref(RatingRoot), mergeProps({ key: 1 }, _ctx.$attrs, {
11764
+ }), 128))], 16, _hoisted_1$47)) : (openBlock(), createBlock(unref(RatingRoot), mergeProps({ key: 1 }, _ctx.$attrs, {
11540
11765
  "data-hn-rating": "",
11541
11766
  "data-disabled": unref(disabled) ? "" : void 0,
11542
11767
  "data-invalid": unref(invalid) ? "" : void 0,
@@ -11825,13 +12050,13 @@ function formatSize(tag, bytes) {
11825
12050
  }
11826
12051
  //#endregion
11827
12052
  //#region src/components/file-upload/FileUpload.vue?vue&type=script&setup=true&lang.ts
11828
- var _hoisted_1$47 = [
12053
+ var _hoisted_1$46 = [
11829
12054
  "name",
11830
12055
  "accept",
11831
12056
  "multiple",
11832
12057
  "disabled"
11833
12058
  ];
11834
- var _hoisted_2$26 = [
12059
+ var _hoisted_2$25 = [
11835
12060
  "id",
11836
12061
  "aria-describedby",
11837
12062
  "aria-invalid",
@@ -11840,7 +12065,7 @@ var _hoisted_2$26 = [
11840
12065
  "aria-busy",
11841
12066
  "disabled"
11842
12067
  ];
11843
- var _hoisted_3$11 = ["src"];
12068
+ var _hoisted_3$10 = ["src"];
11844
12069
  //#endregion
11845
12070
  //#region src/components/file-upload/FileUpload.vue
11846
12071
  var FileUpload_default = /* @__PURE__ */ defineComponent({
@@ -11920,7 +12145,7 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
11920
12145
  multiple: props.multiple,
11921
12146
  disabled: unref(disabled),
11922
12147
  onChange: _cache[0] || (_cache[0] = (...args) => unref(onChange) && unref(onChange)(...args))
11923
- }, null, 40, _hoisted_1$47),
12148
+ }, null, 40, _hoisted_1$46),
11924
12149
  props.variant === "area" ? (openBlock(), createElementBlock("button", mergeProps({ key: 0 }, _ctx.$attrs, {
11925
12150
  type: "button",
11926
12151
  "data-hn-file-upload-area": "",
@@ -11944,7 +12169,7 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
11944
12169
  }, {
11945
12170
  default: withCtx(() => [renderSlot(_ctx.$slots, "icon", {}, () => [createVNode(unref(Upload), { "aria-hidden": "true" })])]),
11946
12171
  _: 3
11947
- }, 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, {
12172
+ }, 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, {
11948
12173
  id: unref(fieldId),
11949
12174
  "aria-describedby": unref(describedBy),
11950
12175
  "aria-invalid": unref(invalid) || void 0,
@@ -11976,7 +12201,7 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
11976
12201
  key: 0,
11977
12202
  src: unref(urls).get(file),
11978
12203
  alt: ""
11979
- }, null, 8, _hoisted_3$11)) : (openBlock(), createBlock(unref(File), {
12204
+ }, null, 8, _hoisted_3$10)) : (openBlock(), createBlock(unref(File), {
11980
12205
  key: 1,
11981
12206
  "aria-hidden": "true"
11982
12207
  }))], 2),
@@ -12017,6 +12242,46 @@ var FileUpload_default = /* @__PURE__ */ defineComponent({
12017
12242
  }
12018
12243
  });
12019
12244
  //#endregion
12245
+ //#region src/lib/overlay-portal.ts
12246
+ function useOverlayPortal(open) {
12247
+ const content = shallowRef(null);
12248
+ return {
12249
+ content,
12250
+ present: computed(() => !!open.value || !!content.value)
12251
+ };
12252
+ }
12253
+ //#endregion
12254
+ //#region src/lib/dialog-focus.ts
12255
+ function useDialogCloseFocus(onCloseAutoFocus) {
12256
+ const context = injectDialogRootContext();
12257
+ return (event) => {
12258
+ onCloseAutoFocus(event);
12259
+ if (event.defaultPrevented) return;
12260
+ event.preventDefault();
12261
+ const target = context.triggerElement.value;
12262
+ if (target?.isConnected) target.focus({ preventScroll: true });
12263
+ };
12264
+ }
12265
+ //#endregion
12266
+ //#region src/components/dialog/ModalContent.vue
12267
+ var ModalContent_default = /* @__PURE__ */ defineComponent({
12268
+ name: "HnModalContent",
12269
+ __name: "ModalContent",
12270
+ props: { alert: { type: Boolean } },
12271
+ emits: ["closeAutoFocus"],
12272
+ setup(__props, { emit: __emit }) {
12273
+ const props = __props;
12274
+ const emit = __emit;
12275
+ const closeAutoFocus = useDialogCloseFocus((event) => emit("closeAutoFocus", event));
12276
+ return (_ctx, _cache) => {
12277
+ return openBlock(), createBlock(resolveDynamicComponent(props.alert ? unref(AlertDialogContent) : unref(DialogContent)), { onCloseAutoFocus: unref(closeAutoFocus) }, {
12278
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
12279
+ _: 3
12280
+ }, 40, ["onCloseAutoFocus"]);
12281
+ };
12282
+ }
12283
+ });
12284
+ //#endregion
12020
12285
  //#region src/components/dialog/dialog.variants.ts
12021
12286
  var dialogWrapper = tv({
12022
12287
  base: "pointer-events-none fixed inset-0 z-(--hn-z-overlay) grid",
@@ -12120,13 +12385,71 @@ var Heading_default = /* @__PURE__ */ defineComponent({
12120
12385
  }
12121
12386
  });
12122
12387
  //#endregion
12123
- //#region src/components/alert-dialog/AlertDialog.vue?vue&type=script&setup=true&lang.ts
12124
- var _hoisted_1$46 = { class: "flex min-w-0 flex-col gap-1.5 px-(--hn-panel-p)" };
12125
- var _hoisted_2$25 = {
12126
- key: 0,
12127
- class: "px-(--hn-panel-p)"
12128
- };
12129
- var _hoisted_3$10 = { class: "flex justify-end gap-(--hn-inline-gap) px-(--hn-panel-p)" };
12388
+ //#region src/components/alert-dialog/composables/useAlertDialogConfirm.ts
12389
+ function useAlertDialogConfirm(props, open, onError, blocked = () => false) {
12390
+ const busy = ref(false);
12391
+ function guard(event) {
12392
+ if (busy.value) event.preventDefault();
12393
+ }
12394
+ async function confirm() {
12395
+ if (!open.value || busy.value || blocked()) return;
12396
+ busy.value = true;
12397
+ try {
12398
+ await props.onConfirm?.();
12399
+ open.value = false;
12400
+ } catch (error) {
12401
+ onError(error);
12402
+ } finally {
12403
+ busy.value = false;
12404
+ }
12405
+ }
12406
+ return {
12407
+ busy,
12408
+ guard,
12409
+ confirm
12410
+ };
12411
+ }
12412
+ //#endregion
12413
+ //#region src/components/alert-dialog/composables/useConfirmDelay.ts
12414
+ function useConfirmDelay(open, delay) {
12415
+ const remaining = ref(0);
12416
+ let mounted = false;
12417
+ let timer;
12418
+ function stop() {
12419
+ clearTimeout(timer);
12420
+ timer = void 0;
12421
+ }
12422
+ function restart() {
12423
+ stop();
12424
+ if (!open.value) return;
12425
+ const seconds = Math.ceil(delay());
12426
+ remaining.value = Number.isFinite(seconds) && seconds > 0 ? seconds : 0;
12427
+ if (!mounted || !remaining.value) return;
12428
+ const deadline = performance.now() + remaining.value * 1e3;
12429
+ function tick() {
12430
+ const milliseconds = deadline - performance.now();
12431
+ remaining.value = Math.max(0, Math.ceil(milliseconds / 1e3));
12432
+ timer = remaining.value > 0 ? setTimeout(tick, Math.min(1e3, milliseconds)) : void 0;
12433
+ }
12434
+ tick();
12435
+ }
12436
+ watch([open, delay], restart, {
12437
+ immediate: true,
12438
+ flush: "sync"
12439
+ });
12440
+ onMounted(() => {
12441
+ mounted = true;
12442
+ restart();
12443
+ });
12444
+ onScopeDispose(stop);
12445
+ return remaining;
12446
+ }
12447
+ //#endregion
12448
+ //#region src/components/alert-dialog/alert-dialog.variants.ts
12449
+ var alertDialogHeader = tv({ base: "flex min-w-0 flex-col gap-1.5 px-(--hn-panel-p)" });
12450
+ var alertDialogContent = tv({ base: "px-(--hn-panel-p)" });
12451
+ var alertDialogActions = tv({ base: "flex justify-end gap-(--hn-inline-gap) px-(--hn-panel-p)" });
12452
+ var alertDialogCountdown = tv({ base: "tabular-nums" });
12130
12453
  //#endregion
12131
12454
  //#region src/components/alert-dialog/AlertDialog.vue
12132
12455
  var AlertDialog_default = /* @__PURE__ */ defineComponent({
@@ -12136,6 +12459,7 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
12136
12459
  title: {},
12137
12460
  description: {},
12138
12461
  confirmText: {},
12462
+ confirmDelay: { default: 0 },
12139
12463
  cancelText: {},
12140
12464
  tone: { default: "accent" },
12141
12465
  size: { default: "sm" },
@@ -12146,29 +12470,15 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
12146
12470
  "open": { type: Boolean },
12147
12471
  "openModifiers": {}
12148
12472
  }),
12149
- emits: /*@__PURE__*/ mergeModels(["cancel"], ["update:open"]),
12473
+ emits: /*@__PURE__*/ mergeModels(["cancel", "error"], ["update:open"]),
12150
12474
  setup(__props, { emit: __emit }) {
12151
12475
  const props = __props;
12152
12476
  const emit = __emit;
12153
12477
  const open = useModel(__props, "open");
12154
- const busy = ref(false);
12478
+ const { content, present } = useOverlayPortal(open);
12155
12479
  const t = useUiLocale();
12156
- function guard(event) {
12157
- if (busy.value) event.preventDefault();
12158
- }
12159
- async function confirm() {
12160
- if (busy.value) return;
12161
- const result = props.onConfirm?.();
12162
- if (result instanceof Promise) {
12163
- busy.value = true;
12164
- try {
12165
- await result;
12166
- } finally {
12167
- busy.value = false;
12168
- }
12169
- }
12170
- open.value = false;
12171
- }
12480
+ const remaining = useConfirmDelay(open, () => props.confirmDelay);
12481
+ const { busy, guard, confirm } = useAlertDialogConfirm(props, open, (error) => emit("error", error), () => remaining.value > 0);
12172
12482
  return (_ctx, _cache) => {
12173
12483
  return openBlock(), createBlock(unref(AlertDialogRoot), {
12174
12484
  open: open.value,
@@ -12180,22 +12490,25 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
12180
12490
  }, {
12181
12491
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
12182
12492
  _: 3
12183
- })) : createCommentVNode("", true), createVNode(unref(AlertDialogPortal), null, {
12184
- default: withCtx(() => [createVNode(unref(AlertDialogOverlay), { class: "hn-scrim" }), createElementVNode("div", { class: normalizeClass(unref(cn)("pointer-events-none fixed inset-0 z-(--hn-z-overlay) grid", unref(dialogWrapper)({ placement: props.placement ?? "auto" }))) }, [createVNode(unref(AlertDialogContent), {
12493
+ })) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(AlertDialogPortal), { key: 1 }, {
12494
+ default: withCtx(() => [createVNode(unref(AlertDialogOverlay), { class: "hn-scrim" }), createElementVNode("div", { class: normalizeClass(unref(dialogWrapper)({ placement: props.placement ?? "auto" })) }, [createVNode(ModalContent_default, {
12495
+ alert: "",
12185
12496
  "as-child": "",
12186
- onEscapeKeyDown: guard
12497
+ onEscapeKeyDown: unref(guard)
12187
12498
  }, {
12188
12499
  default: withCtx(() => [createVNode(Card_default, {
12500
+ ref_key: "content",
12501
+ ref: content,
12189
12502
  padded: false,
12190
12503
  "data-hn-alert-dialog": "",
12191
- "aria-busy": busy.value || void 0,
12192
- class: normalizeClass(unref(cn)("pointer-events-auto flex w-full flex-col gap-4 shadow-lg outline-none", "py-(--hn-panel-p)", unref(dialogCard)({
12504
+ "aria-busy": unref(busy) || void 0,
12505
+ class: normalizeClass(unref(cn)(unref(dialogCard)({
12193
12506
  placement: props.placement ?? "auto",
12194
12507
  size: props.size
12195
12508
  }), props.class))
12196
12509
  }, {
12197
12510
  default: withCtx(() => [
12198
- createElementVNode("div", _hoisted_1$46, [createVNode(unref(AlertDialogTitle), { "as-child": "" }, {
12511
+ createElementVNode("div", { class: normalizeClass(unref(alertDialogHeader)()) }, [createVNode(unref(AlertDialogTitle), { "as-child": "" }, {
12199
12512
  default: withCtx(() => [createVNode(Heading_default, {
12200
12513
  level: 2,
12201
12514
  size: "lg"
@@ -12213,13 +12526,16 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
12213
12526
  _: 1
12214
12527
  })]),
12215
12528
  _: 1
12216
- })) : createCommentVNode("", true)]),
12217
- _ctx.$slots.content ? (openBlock(), createElementBlock("div", _hoisted_2$25, [renderSlot(_ctx.$slots, "content")])) : createCommentVNode("", true),
12218
- createElementVNode("div", _hoisted_3$10, [createVNode(unref(AlertDialogCancel), { "as-child": "" }, {
12529
+ })) : createCommentVNode("", true)], 2),
12530
+ _ctx.$slots.content ? (openBlock(), createElementBlock("div", {
12531
+ key: 0,
12532
+ class: normalizeClass(unref(alertDialogContent)())
12533
+ }, [renderSlot(_ctx.$slots, "content")], 2)) : createCommentVNode("", true),
12534
+ createElementVNode("div", { class: normalizeClass(unref(alertDialogActions)()) }, [createVNode(unref(AlertDialogCancel), { "as-child": "" }, {
12219
12535
  default: withCtx(() => [createVNode(Button_default, {
12220
12536
  variant: "soft",
12221
12537
  tone: "neutral",
12222
- disabled: busy.value,
12538
+ disabled: unref(busy),
12223
12539
  onClick: _cache[0] || (_cache[0] = ($event) => emit("cancel"))
12224
12540
  }, {
12225
12541
  default: withCtx(() => [createTextVNode(toDisplayString(props.cancelText ?? unref(t).common.cancel), 1)]),
@@ -12228,19 +12544,28 @@ var AlertDialog_default = /* @__PURE__ */ defineComponent({
12228
12544
  _: 1
12229
12545
  }), createVNode(Button_default, {
12230
12546
  tone: props.tone,
12231
- loading: busy.value,
12232
- onClick: confirm
12547
+ loading: unref(busy),
12548
+ disabled: unref(remaining) > 0,
12549
+ onClick: unref(confirm)
12233
12550
  }, {
12234
- default: withCtx(() => [createTextVNode(toDisplayString(props.confirmText ?? unref(t).common.confirm), 1)]),
12551
+ default: withCtx(() => [createTextVNode(toDisplayString(props.confirmText ?? unref(t).common.confirm) + " ", 1), unref(remaining) > 0 ? (openBlock(), createElementBlock("span", {
12552
+ key: 0,
12553
+ class: normalizeClass(unref(alertDialogCountdown)())
12554
+ }, "(" + toDisplayString(unref(remaining)) + ")", 3)) : createCommentVNode("", true)]),
12235
12555
  _: 1
12236
- }, 8, ["tone", "loading"])])
12556
+ }, 8, [
12557
+ "tone",
12558
+ "loading",
12559
+ "disabled",
12560
+ "onClick"
12561
+ ])], 2)
12237
12562
  ]),
12238
12563
  _: 3
12239
12564
  }, 8, ["aria-busy", "class"])]),
12240
12565
  _: 3
12241
- })], 2)]),
12566
+ }, 8, ["onEscapeKeyDown"])], 2)]),
12242
12567
  _: 3
12243
- })]),
12568
+ })) : createCommentVNode("", true)]),
12244
12569
  _: 3
12245
12570
  }, 8, ["open"]);
12246
12571
  };
@@ -12849,8 +13174,8 @@ var _hoisted_1$40 = ["data-dragging"];
12849
13174
  var _hoisted_2$21 = ["data-disabled"];
12850
13175
  var _hoisted_3$9 = { class: "flex items-start justify-between gap-4 px-(--hn-panel-p)" };
12851
13176
  var _hoisted_4$7 = { class: "flex min-w-0 flex-col gap-1.5" };
12852
- var _hoisted_5$5 = { class: "px-(--hn-panel-p) py-1" };
12853
- var _hoisted_6$4 = {
13177
+ var _hoisted_5$4 = { class: "px-(--hn-panel-p) py-1" };
13178
+ var _hoisted_6$3 = {
12854
13179
  key: 1,
12855
13180
  class: "flex shrink-0 justify-end gap-(--hn-inline-gap) px-(--hn-panel-p)"
12856
13181
  };
@@ -12965,10 +13290,10 @@ var Sheet_default = /* @__PURE__ */ defineComponent({
12965
13290
  key: 0,
12966
13291
  class: "min-h-0 grow"
12967
13292
  }, {
12968
- default: withCtx(() => [createElementVNode("div", _hoisted_5$5, [renderSlot(_ctx.$slots, "content", { close })])]),
13293
+ default: withCtx(() => [createElementVNode("div", _hoisted_5$4, [renderSlot(_ctx.$slots, "content", { close })])]),
12969
13294
  _: 3
12970
13295
  })) : createCommentVNode("", true),
12971
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6$4, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
13296
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6$3, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true)
12972
13297
  ]),
12973
13298
  _: 3
12974
13299
  }, 8, [
@@ -14726,13 +15051,13 @@ var _hoisted_1$26 = [
14726
15051
  var _hoisted_2$15 = ["id", "for"];
14727
15052
  var _hoisted_3$7 = ["id"];
14728
15053
  var _hoisted_4$5 = ["id"];
14729
- var _hoisted_5$4 = {
15054
+ var _hoisted_5$3 = {
14730
15055
  key: 0,
14731
15056
  "data-hn-form-field-message": "",
14732
15057
  class: "hn-collapse [--hn-collapse-out:var(--hn-duration-fast)]"
14733
15058
  };
14734
- var _hoisted_6$3 = { class: "hn-collapse-body" };
14735
- var _hoisted_7$2 = ["id"];
15059
+ var _hoisted_6$2 = { class: "hn-collapse-body" };
15060
+ var _hoisted_7$1 = ["id"];
14736
15061
  //#endregion
14737
15062
  //#region src/components/form-field/FormField.vue
14738
15063
  var FormField_default = /* @__PURE__ */ defineComponent({
@@ -14849,11 +15174,11 @@ var FormField_default = /* @__PURE__ */ defineComponent({
14849
15174
  "leave-from-class": "hn-collapse-open",
14850
15175
  "leave-to-class": "hn-collapse-closed"
14851
15176
  }, toHandlers(unref(hooks))), {
14852
- default: withCtx(() => [message.value ? (openBlock(), createElementBlock("div", _hoisted_5$4, [createElementVNode("div", _hoisted_6$3, [createElementVNode("p", {
15177
+ default: withCtx(() => [message.value ? (openBlock(), createElementBlock("div", _hoisted_5$3, [createElementVNode("div", _hoisted_6$2, [createElementVNode("p", {
14853
15178
  id: unref(messageId),
14854
15179
  class: normalizeClass(unref(formFieldMessage)()),
14855
15180
  "aria-live": "polite"
14856
- }, toDisplayString(message.value), 11, _hoisted_7$2)])])) : createCommentVNode("", true)]),
15181
+ }, toDisplayString(message.value), 11, _hoisted_7$1)])])) : createCommentVNode("", true)]),
14857
15182
  _: 1
14858
15183
  }, 16)
14859
15184
  ], 2)], 2)], 46, _hoisted_1$26);
@@ -15148,8 +15473,13 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
15148
15473
  option.value === current.value ? (openBlock(), createBlock(Highlight_default, {
15149
15474
  key: 0,
15150
15475
  id: unref(highlightId),
15476
+ axis: props.orientation === "vertical" ? "y" : "x",
15151
15477
  class: normalizeClass(unref(segmentedThumb)())
15152
- }, null, 8, ["id", "class"])) : createCommentVNode("", true),
15478
+ }, null, 8, [
15479
+ "id",
15480
+ "axis",
15481
+ "class"
15482
+ ])) : createCommentVNode("", true),
15153
15483
  createVNode(Ripple_default),
15154
15484
  renderSlot(_ctx.$slots, "option", { option }, () => [createTextVNode(toDisplayString(option.label), 1)])
15155
15485
  ]),
@@ -15367,17 +15697,43 @@ async function tokenize(code, lang) {
15367
15697
  }).tokens;
15368
15698
  }
15369
15699
  //#endregion
15700
+ //#region src/components/code-block/composables/useCodeHighlight.ts
15701
+ function useCodeHighlight(props) {
15702
+ const tokens = shallowRef(null);
15703
+ onMounted(() => {
15704
+ watch(() => [
15705
+ props.code,
15706
+ props.lang,
15707
+ props.html
15708
+ ], async ([code, lang, html]) => {
15709
+ if (html || !lang) {
15710
+ tokens.value = null;
15711
+ return;
15712
+ }
15713
+ try {
15714
+ const result = await tokenize(code, lang);
15715
+ if (code === props.code && lang === props.lang) tokens.value = result;
15716
+ } catch (error) {
15717
+ tokens.value = null;
15718
+ `${lang}${String(error)}`;
15719
+ }
15720
+ }, { immediate: true });
15721
+ });
15722
+ return tokens;
15723
+ }
15724
+ //#endregion
15725
+ //#region src/components/code-block/code-block.variants.ts
15726
+ var codeBlock = tv({ base: "relative flex min-h-0 min-w-0 flex-col" });
15727
+ var codeBlockArea = tv({ base: "hn-pre min-h-0 grow p-0" });
15728
+ var codeBlockContent = tv({ base: "hn-pre-content m-0 w-max min-w-full" });
15729
+ var codeBlockActions = tv({ base: "absolute top-2 end-2 flex items-center gap-2" });
15730
+ var codeBlockLabel = tv({ base: "text-faint font-mono text-xs select-none" });
15731
+ //#endregion
15370
15732
  //#region src/components/code-block/CodeBlock.vue?vue&type=script&setup=true&lang.ts
15371
15733
  var _hoisted_1$23 = ["data-lang"];
15372
- var _hoisted_2$13 = { class: "m-0" };
15373
- var _hoisted_3$6 = ["innerHTML"];
15374
- var _hoisted_4$4 = { key: 1 };
15375
- var _hoisted_5$3 = { key: 2 };
15376
- var _hoisted_6$2 = { class: "absolute top-2 end-2 flex items-center gap-2" };
15377
- var _hoisted_7$1 = {
15378
- key: 0,
15379
- class: "text-faint font-mono text-xs select-none"
15380
- };
15734
+ var _hoisted_2$13 = ["innerHTML"];
15735
+ var _hoisted_3$6 = { key: 1 };
15736
+ var _hoisted_4$4 = { key: 2 };
15381
15737
  //#endregion
15382
15738
  //#region src/components/code-block/CodeBlock.vue
15383
15739
  var CodeBlock_default = /* @__PURE__ */ defineComponent({
@@ -15398,53 +15754,37 @@ var CodeBlock_default = /* @__PURE__ */ defineComponent({
15398
15754
  const props = __props;
15399
15755
  const t = useUiLocale();
15400
15756
  const tag = computed(() => props.label ?? props.lang);
15401
- const tokens = shallowRef(null);
15402
- onMounted(() => {
15403
- watch(() => [
15404
- props.code,
15405
- props.lang,
15406
- props.html
15407
- ], async ([code, lang, html]) => {
15408
- if (html || !lang) {
15409
- tokens.value = null;
15410
- return;
15411
- }
15412
- try {
15413
- const result = await tokenize(code, lang);
15414
- if (code === props.code && lang === props.lang) tokens.value = result;
15415
- } catch (error) {
15416
- tokens.value = null;
15417
- `${lang}${String(error)}`;
15418
- }
15419
- }, { immediate: true });
15420
- });
15757
+ const tokens = useCodeHighlight(props);
15421
15758
  return (_ctx, _cache) => {
15422
15759
  return openBlock(), createElementBlock("div", {
15423
15760
  "data-lang": props.lang,
15424
- class: normalizeClass(unref(cn)("relative", props.class))
15761
+ class: normalizeClass(unref(cn)(unref(codeBlock)(), props.class))
15425
15762
  }, [createVNode(ScrollArea_default, {
15426
- direction: "horizontal",
15763
+ direction: "both",
15427
15764
  focusable: "",
15428
15765
  label: tag.value,
15429
- class: "hn-pre"
15766
+ class: normalizeClass(unref(codeBlockArea)())
15430
15767
  }, {
15431
- default: withCtx(() => [createElementVNode("pre", _hoisted_2$13, [props.html ? (openBlock(), createElementBlock("code", {
15768
+ default: withCtx(() => [createElementVNode("pre", { class: normalizeClass(unref(codeBlockContent)()) }, [props.html ? (openBlock(), createElementBlock("code", {
15432
15769
  key: 0,
15433
15770
  innerHTML: props.html
15434
- }, null, 8, _hoisted_3$6)) : tokens.value ? (openBlock(), createElementBlock("code", _hoisted_4$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(tokens.value, (line, i) => {
15771
+ }, null, 8, _hoisted_2$13)) : unref(tokens) ? (openBlock(), createElementBlock("code", _hoisted_3$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(tokens), (line, i) => {
15435
15772
  return openBlock(), createElementBlock(Fragment, { key: i }, [createTextVNode(toDisplayString(i ? "\n" : ""), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(line, (tk, j) => {
15436
15773
  return openBlock(), createElementBlock("span", {
15437
15774
  key: j,
15438
15775
  style: normalizeStyle(tk.htmlStyle)
15439
15776
  }, toDisplayString(tk.content), 5);
15440
15777
  }), 128))], 64);
15441
- }), 128))])) : (openBlock(), createElementBlock("code", _hoisted_5$3, toDisplayString(__props.code), 1))])]),
15778
+ }), 128))])) : (openBlock(), createElementBlock("code", _hoisted_4$4, toDisplayString(__props.code), 1))], 2)]),
15442
15779
  _: 1
15443
- }, 8, ["label"]), createElementVNode("div", _hoisted_6$2, [tag.value ? (openBlock(), createElementBlock("span", _hoisted_7$1, toDisplayString(tag.value), 1)) : createCommentVNode("", true), __props.copyable ? (openBlock(), createBlock(CopyButton_default, {
15780
+ }, 8, ["label", "class"]), createElementVNode("div", { class: normalizeClass(unref(codeBlockActions)()) }, [tag.value ? (openBlock(), createElementBlock("span", {
15781
+ key: 0,
15782
+ class: normalizeClass(unref(codeBlockLabel)())
15783
+ }, toDisplayString(tag.value), 3)) : createCommentVNode("", true), __props.copyable ? (openBlock(), createBlock(CopyButton_default, {
15444
15784
  key: 1,
15445
15785
  text: props.code,
15446
15786
  label: unref(t).codeblock.copy
15447
- }, null, 8, ["text", "label"])) : createCommentVNode("", true)])], 10, _hoisted_1$23);
15787
+ }, null, 8, ["text", "label"])) : createCommentVNode("", true)], 2)], 10, _hoisted_1$23);
15448
15788
  };
15449
15789
  }
15450
15790
  });
@@ -17141,6 +17481,7 @@ var Anchor_default = /* @__PURE__ */ defineComponent({
17141
17481
  default: withCtx(() => [unref(span) ? (openBlock(), createBlock(Highlight_default, {
17142
17482
  key: 0,
17143
17483
  as: "li",
17484
+ axis: "y",
17144
17485
  role: "presentation",
17145
17486
  style: normalizeStyle({ gridRow: unref(span) }),
17146
17487
  class: "bg-accent col-start-1 -ms-px w-0.5 self-stretch justify-self-start rounded-full"
@@ -17241,11 +17582,156 @@ var BreadcrumbSeparator_default = /* @__PURE__ */ defineComponent({
17241
17582
  }
17242
17583
  });
17243
17584
  //#endregion
17585
+ //#region src/components/popover/composables/usePopoverCloseFocus.ts
17586
+ function usePopoverCloseFocus(emit) {
17587
+ const root = injectPopoverRootContext();
17588
+ return (event) => {
17589
+ emit("closeAutoFocus", event);
17590
+ if (!event.defaultPrevented || !root.triggerElement.value) return;
17591
+ const trigger = root.triggerElement.value;
17592
+ root.triggerElement.value = void 0;
17593
+ nextTick(() => {
17594
+ root.triggerElement.value ??= trigger;
17595
+ });
17596
+ };
17597
+ }
17598
+ //#endregion
17599
+ //#region src/components/popover/PopoverContent.vue
17600
+ var PopoverContent_default = /* @__PURE__ */ defineComponent({
17601
+ name: "HnPopoverContent",
17602
+ __name: "PopoverContent",
17603
+ props: {
17604
+ forceMount: { type: Boolean },
17605
+ memoDependencies: {},
17606
+ side: {},
17607
+ sideOffset: {},
17608
+ sideFlip: { type: Boolean },
17609
+ align: {},
17610
+ alignOffset: {},
17611
+ alignFlip: { type: Boolean },
17612
+ avoidCollisions: { type: Boolean },
17613
+ collisionBoundary: {},
17614
+ collisionPadding: {},
17615
+ arrowPadding: {},
17616
+ hideShiftedArrow: { type: Boolean },
17617
+ sticky: {},
17618
+ hideWhenDetached: { type: Boolean },
17619
+ positionStrategy: {},
17620
+ updatePositionStrategy: {},
17621
+ disableUpdateOnLayoutShift: { type: Boolean },
17622
+ prioritizePosition: { type: Boolean },
17623
+ reference: {},
17624
+ dir: {},
17625
+ asChild: { type: Boolean },
17626
+ as: {},
17627
+ disableOutsidePointerEvents: { type: Boolean }
17628
+ },
17629
+ emits: [
17630
+ "escapeKeyDown",
17631
+ "pointerDownOutside",
17632
+ "focusOutside",
17633
+ "interactOutside",
17634
+ "openAutoFocus",
17635
+ "closeAutoFocus"
17636
+ ],
17637
+ setup(__props, { emit: __emit }) {
17638
+ const props = __props;
17639
+ const emit = __emit;
17640
+ const forwarded = useForwardPropsEmits(props, emit);
17641
+ const closeAutoFocus = usePopoverCloseFocus(emit);
17642
+ return (_ctx, _cache) => {
17643
+ return openBlock(), createBlock(unref(PopoverContent), mergeProps({
17644
+ ...unref(forwarded),
17645
+ onCloseAutoFocus: unref(closeAutoFocus)
17646
+ }, { reference: props.reference }), {
17647
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
17648
+ _: 3
17649
+ }, 16, ["reference"]);
17650
+ };
17651
+ }
17652
+ });
17653
+ //#endregion
17654
+ //#region src/lib/anchored-overlay.ts
17655
+ function useAnchoredOverlay(props, open, emit, openAutoFocus) {
17656
+ const { forwardRef: trigger, currentElement: triggerElement } = useForwardExpose();
17657
+ const retainedAnchor = shallowRef();
17658
+ const reference = computed(() => props.anchor ?? (open.value ? triggerElement.value ?? retainedAnchor.value : retainedAnchor.value ?? triggerElement.value));
17659
+ const visible = computed({
17660
+ get: () => !!open.value && !!(props.anchor || triggerElement.value),
17661
+ set: (value) => {
17662
+ open.value = value;
17663
+ }
17664
+ });
17665
+ watch(() => props.anchor, (anchor) => {
17666
+ if (anchor) retainedAnchor.value = anchor;
17667
+ }, {
17668
+ immediate: true,
17669
+ flush: "sync"
17670
+ });
17671
+ let previousFocus = null;
17672
+ let interactedOutside = false;
17673
+ function once(handler) {
17674
+ const handled = /* @__PURE__ */ new WeakSet();
17675
+ return (event) => {
17676
+ if (handled.has(event)) return;
17677
+ handled.add(event);
17678
+ handler(event);
17679
+ };
17680
+ }
17681
+ watch(visible, (active) => {
17682
+ if (!active) return;
17683
+ previousFocus = (props.anchor?.ownerDocument ?? triggerElement.value?.ownerDocument)?.activeElement;
17684
+ interactedOutside = false;
17685
+ }, {
17686
+ immediate: true,
17687
+ flush: "sync"
17688
+ });
17689
+ const onCloseAutoFocus = once((event) => {
17690
+ emit("closeAutoFocus", event);
17691
+ const cancelled = event.defaultPrevented;
17692
+ event.preventDefault();
17693
+ const panel = event.target;
17694
+ const target = triggerElement.value ?? previousFocus;
17695
+ const restore = !cancelled && !interactedOutside;
17696
+ nextTick(() => {
17697
+ const active = panel.ownerDocument.activeElement;
17698
+ if (restore && !visible.value && target?.isConnected && (active === panel.ownerDocument.body || panel.contains(active))) target.focus({ preventScroll: true });
17699
+ if (!visible.value) retainedAnchor.value = void 0;
17700
+ });
17701
+ });
17702
+ const onInteractOutside = once((event) => {
17703
+ if (!triggerElement.value && props.anchor?.contains(event.target)) event.preventDefault();
17704
+ emit("interactOutside", event);
17705
+ const original = event.detail.originalEvent;
17706
+ const rightClick = "button" in original && (original.button === 2 || original.button === 0 && original.ctrlKey);
17707
+ if (!event.defaultPrevented && (!props.modal || rightClick)) interactedOutside = true;
17708
+ });
17709
+ return {
17710
+ trigger,
17711
+ reference,
17712
+ visible,
17713
+ events: {
17714
+ ...openAutoFocus ? { onOpenAutoFocus: once(openAutoFocus) } : {},
17715
+ onCloseAutoFocus,
17716
+ onInteractOutside,
17717
+ onPointerDownOutside: once((event) => emit("pointerDownOutside", event)),
17718
+ onFocusOutside: once((event) => emit("focusOutside", event)),
17719
+ onEscapeKeyDown: once((event) => emit("escapeKeyDown", event))
17720
+ }
17721
+ };
17722
+ }
17723
+ //#endregion
17244
17724
  //#region src/components/popover/Popover.vue
17245
17725
  var Popover_default = /* @__PURE__ */ defineComponent({
17246
17726
  name: "HnPopover",
17727
+ inheritAttrs: false,
17247
17728
  __name: "Popover",
17248
17729
  props: /*@__PURE__*/ mergeModels({
17730
+ anchor: {},
17731
+ modal: {
17732
+ type: Boolean,
17733
+ default: true
17734
+ },
17249
17735
  side: { default: "bottom" },
17250
17736
  align: { default: "center" },
17251
17737
  sideOffset: { default: 8 },
@@ -17258,10 +17744,20 @@ var Popover_default = /* @__PURE__ */ defineComponent({
17258
17744
  "open": { type: Boolean },
17259
17745
  "openModifiers": {}
17260
17746
  }),
17261
- emits: ["update:open"],
17262
- setup(__props) {
17747
+ emits: /*@__PURE__*/ mergeModels([
17748
+ "escapeKeyDown",
17749
+ "pointerDownOutside",
17750
+ "focusOutside",
17751
+ "interactOutside",
17752
+ "openAutoFocus",
17753
+ "closeAutoFocus"
17754
+ ], ["update:open"]),
17755
+ setup(__props, { emit: __emit }) {
17263
17756
  const props = __props;
17264
17757
  const open = useModel(__props, "open");
17758
+ const emit = __emit;
17759
+ const { trigger, reference, visible, events } = useAnchoredOverlay(props, open, emit, (event) => emit("openAutoFocus", event));
17760
+ const { content, present } = useOverlayPortal(visible);
17265
17761
  const pressOrigin = computed(() => {
17266
17762
  if (props.side === "left") return "right";
17267
17763
  if (props.side === "right") return "left";
@@ -17271,24 +17767,32 @@ var Popover_default = /* @__PURE__ */ defineComponent({
17271
17767
  });
17272
17768
  return (_ctx, _cache) => {
17273
17769
  return openBlock(), createBlock(unref(PopoverRoot), {
17274
- open: open.value,
17275
- "onUpdate:open": _cache[0] || (_cache[0] = ($event) => open.value = $event),
17276
- modal: ""
17770
+ open: unref(visible),
17771
+ "onUpdate:open": _cache[0] || (_cache[0] = ($event) => isRef(visible) ? visible.value = $event : null),
17772
+ modal: props.modal
17277
17773
  }, {
17278
- default: withCtx(() => [createVNode(unref(PopoverTrigger), {
17774
+ default: withCtx(() => [_ctx.$slots.default ? (openBlock(), createBlock(unref(PopoverTrigger), {
17775
+ key: 0,
17776
+ ref: unref(trigger),
17279
17777
  "as-child": "",
17280
17778
  style: normalizeStyle({ transformOrigin: pressOrigin.value })
17281
17779
  }, {
17282
17780
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
17283
17781
  _: 3
17284
- }, 8, ["style"]), createVNode(unref(PopoverPortal), null, {
17285
- default: withCtx(() => [createVNode(unref(PopoverContent), {
17782
+ }, 8, ["style"])) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(PopoverPortal), { key: 1 }, {
17783
+ default: withCtx(() => [createVNode(PopoverContent_default, mergeProps({
17784
+ ..._ctx.$attrs,
17785
+ ...unref(events)
17786
+ }, {
17787
+ reference: unref(reference),
17286
17788
  "as-child": "",
17287
17789
  side: props.side,
17288
17790
  align: props.align,
17289
17791
  "side-offset": props.sideOffset
17290
- }, {
17792
+ }), {
17291
17793
  default: withCtx(() => [createVNode(Card_default, {
17794
+ ref_key: "content",
17795
+ ref: content,
17292
17796
  padded: props.padded,
17293
17797
  class: normalizeClass(unref(cn)("hn-anim-pop z-(--hn-z-overlay) max-w-sm shadow-md outline-none", props.class))
17294
17798
  }, {
@@ -17296,15 +17800,16 @@ var Popover_default = /* @__PURE__ */ defineComponent({
17296
17800
  _: 3
17297
17801
  }, 8, ["padded", "class"])]),
17298
17802
  _: 3
17299
- }, 8, [
17803
+ }, 16, [
17804
+ "reference",
17300
17805
  "side",
17301
17806
  "align",
17302
17807
  "side-offset"
17303
17808
  ])]),
17304
17809
  _: 3
17305
- })]),
17810
+ })) : createCommentVNode("", true)]),
17306
17811
  _: 3
17307
- }, 8, ["open"]);
17812
+ }, 8, ["open", "modal"]);
17308
17813
  };
17309
17814
  }
17310
17815
  });
@@ -17312,9 +17817,16 @@ var Popover_default = /* @__PURE__ */ defineComponent({
17312
17817
  //#region src/components/dropdown-menu/DropdownMenu.vue
17313
17818
  var DropdownMenu_default = /* @__PURE__ */ defineComponent({
17314
17819
  name: "HnDropdownMenu",
17820
+ inheritAttrs: false,
17315
17821
  __name: "DropdownMenu",
17316
17822
  props: /*@__PURE__*/ mergeModels({
17317
17823
  label: {},
17824
+ anchor: {},
17825
+ modal: {
17826
+ type: Boolean,
17827
+ default: true
17828
+ },
17829
+ dir: {},
17318
17830
  side: { default: "bottom" },
17319
17831
  align: { default: "center" },
17320
17832
  sideOffset: { default: 8 },
@@ -17323,10 +17835,16 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
17323
17835
  "open": { type: Boolean },
17324
17836
  "openModifiers": {}
17325
17837
  }),
17326
- emits: ["update:open"],
17327
- setup(__props) {
17838
+ emits: /*@__PURE__*/ mergeModels([
17839
+ "escapeKeyDown",
17840
+ "pointerDownOutside",
17841
+ "focusOutside",
17842
+ "interactOutside",
17843
+ "closeAutoFocus"
17844
+ ], ["update:open"]),
17845
+ setup(__props, { emit: __emit }) {
17328
17846
  const props = __props;
17329
- const open = useModel(__props, "open");
17847
+ const { trigger, reference, visible, events } = useAnchoredOverlay(props, useModel(__props, "open"), __emit);
17330
17848
  const pressOrigin = computed(() => {
17331
17849
  if (props.side === "left") return "right";
17332
17850
  if (props.side === "right") return "left";
@@ -17336,25 +17854,32 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
17336
17854
  });
17337
17855
  return (_ctx, _cache) => {
17338
17856
  return openBlock(), createBlock(unref(DropdownMenuRoot), {
17339
- open: open.value,
17340
- "onUpdate:open": _cache[0] || (_cache[0] = ($event) => open.value = $event),
17341
- modal: ""
17857
+ open: unref(visible),
17858
+ "onUpdate:open": _cache[0] || (_cache[0] = ($event) => isRef(visible) ? visible.value = $event : null),
17859
+ modal: props.modal,
17860
+ dir: props.dir
17342
17861
  }, {
17343
- default: withCtx(() => [createVNode(unref(DropdownMenuTrigger), {
17862
+ default: withCtx(() => [_ctx.$slots.default ? (openBlock(), createBlock(unref(DropdownMenuTrigger), {
17863
+ key: 0,
17864
+ ref: unref(trigger),
17344
17865
  "as-child": "",
17345
17866
  class: "group/hn-disclosure",
17346
17867
  style: normalizeStyle({ transformOrigin: pressOrigin.value })
17347
17868
  }, {
17348
17869
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
17349
17870
  _: 3
17350
- }, 8, ["style"]), createVNode(unref(DropdownMenuPortal), null, {
17351
- default: withCtx(() => [createVNode(unref(DropdownMenuContent), {
17352
- "as-child": "",
17871
+ }, 8, ["style"])) : createCommentVNode("", true), createVNode(unref(DropdownMenuPortal), null, {
17872
+ default: withCtx(() => [unref(reference) ? (openBlock(), createBlock(unref(DropdownMenuContent), mergeProps({ key: 0 }, {
17353
17873
  "aria-label": props.label,
17874
+ ..._ctx.$attrs,
17875
+ ...unref(events)
17876
+ }, {
17877
+ reference: unref(reference),
17878
+ "as-child": "",
17354
17879
  side: props.side,
17355
17880
  align: props.align,
17356
17881
  "side-offset": props.sideOffset
17357
- }, {
17882
+ }), {
17358
17883
  default: withCtx(() => [createVNode(Card_default, {
17359
17884
  padded: false,
17360
17885
  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))
@@ -17363,16 +17888,20 @@ var DropdownMenu_default = /* @__PURE__ */ defineComponent({
17363
17888
  _: 3
17364
17889
  }, 8, ["class"])]),
17365
17890
  _: 3
17366
- }, 8, [
17367
- "aria-label",
17891
+ }, 16, [
17892
+ "reference",
17368
17893
  "side",
17369
17894
  "align",
17370
17895
  "side-offset"
17371
- ])]),
17896
+ ])) : createCommentVNode("", true)]),
17372
17897
  _: 3
17373
17898
  })]),
17374
17899
  _: 3
17375
- }, 8, ["open"]);
17900
+ }, 8, [
17901
+ "open",
17902
+ "modal",
17903
+ "dir"
17904
+ ]);
17376
17905
  };
17377
17906
  }
17378
17907
  });
@@ -17690,6 +18219,7 @@ var Dialog_default = /* @__PURE__ */ defineComponent({
17690
18219
  if (props.locked) e.preventDefault();
17691
18220
  }
17692
18221
  const open = useModel(__props, "open");
18222
+ const { content, present } = useOverlayPortal(open);
17693
18223
  function close() {
17694
18224
  open.value = false;
17695
18225
  }
@@ -17704,13 +18234,16 @@ var Dialog_default = /* @__PURE__ */ defineComponent({
17704
18234
  }, {
17705
18235
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
17706
18236
  _: 3
17707
- })) : createCommentVNode("", true), createVNode(unref(DialogPortal), null, {
17708
- default: withCtx(() => [createVNode(unref(DialogOverlay), { class: "hn-scrim" }), createElementVNode("div", { class: normalizeClass(unref(dialogWrapper)({ placement: props.placement ?? "auto" })) }, [createVNode(unref(DialogContent), {
18237
+ })) : createCommentVNode("", true), unref(present) ? (openBlock(), createBlock(unref(DialogPortal), { key: 1 }, {
18238
+ default: withCtx(() => [createVNode(unref(DialogOverlay), { class: "hn-scrim" }), createElementVNode("div", { class: normalizeClass(unref(dialogWrapper)({ placement: props.placement ?? "auto" })) }, [createVNode(ModalContent_default, {
17709
18239
  "as-child": "",
17710
18240
  onEscapeKeyDown: guard,
17711
18241
  onInteractOutside: guard
17712
18242
  }, {
17713
- default: withCtx(() => [createVNode(Card_default, mergeProps(props.description ? {} : { "aria-describedby": void 0 }, {
18243
+ default: withCtx(() => [createVNode(Card_default, mergeProps({
18244
+ ref_key: "content",
18245
+ ref: content
18246
+ }, props.description ? {} : { "aria-describedby": void 0 }, {
17714
18247
  padded: false,
17715
18248
  class: unref(cn)(unref(dialogCard)({
17716
18249
  placement: props.placement ?? "auto",
@@ -17778,7 +18311,7 @@ var Dialog_default = /* @__PURE__ */ defineComponent({
17778
18311
  _: 3
17779
18312
  })], 2)]),
17780
18313
  _: 3
17781
- })]),
18314
+ })) : createCommentVNode("", true)]),
17782
18315
  _: 3
17783
18316
  }, 8, ["open"]);
17784
18317
  };
@@ -18869,6 +19402,6 @@ function createScrollRestorer(key, ports) {
18869
19402
  };
18870
19403
  }
18871
19404
  //#endregion
18872
- 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, 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, 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, writeScrollRecord, zhCN };
19405
+ 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, 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, writeScrollRecord, zhCN };
18873
19406
 
18874
19407
  //# sourceMappingURL=index.js.map