@leavepulse/ui 0.96.1 → 0.96.3

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 (58) hide show
  1. package/dist/chunks/{LpAppShell-DcAq93Yl.js → LpAppShell-CDIvTOCl.js} +1 -1
  2. package/dist/chunks/{LpColorPicker-DuuaWRsT.js → LpColorPicker-SVXbvc7r.js} +1 -1
  3. package/dist/chunks/{LpContextMenu-DEFirphS.js → LpContextMenu-BAlrTKQy.js} +4 -1
  4. package/dist/chunks/{LpFileTree-CLpVoqzu.js → LpFileTree-D0PDEQfB.js} +1 -1
  5. package/dist/chunks/{LpFileTreeNode-DkjdwSni.js → LpFileTreeNode-Cv01lHgt.js} +1 -1
  6. package/dist/chunks/{LpHintLayer-BG4cgJNr.js → LpHintLayer-rD3BTMfK.js} +8 -4
  7. package/dist/chunks/{LpHints-DuisuI5J.js → LpHints-lGLsGxOx.js} +2 -2
  8. package/dist/chunks/{LpLightbox-WjDnPgu_.js → LpLightbox-rimKYT6F.js} +1 -1
  9. package/dist/chunks/{LpLogViewer-Gftt0yf5.js → LpLogViewer-NpfkEfIo.js} +1 -1
  10. package/dist/chunks/{LpMediaGallery-D0KmXz0l.js → LpMediaGallery-Cw5PR7W1.js} +2 -2
  11. package/dist/chunks/{LpModalNav-Dr5uDX-e.js → LpModalNav-Bp8voRgM.js} +1 -1
  12. package/dist/chunks/{LpNotificationBell-MyueilyI.js → LpNotificationBell-CFOv3OXI.js} +2 -2
  13. package/dist/chunks/{LpNotificationFeed-Cuxbh_Mn.js → LpNotificationFeed-BFB0waIF.js} +1 -1
  14. package/dist/chunks/{LpPaletteTheme-I7SSv_pE.js → LpPaletteTheme-BBjf1HmS.js} +1 -1
  15. package/dist/chunks/{LpPie-CbSw86lM.js → LpPie-p1Kksd3z.js} +1 -1
  16. package/dist/chunks/{LpSidebar-DWMO2PBQ.js → LpSidebar-CCJAE3gl.js} +1 -1
  17. package/dist/chunks/{LpSidebarNav-C1glQiiz.js → LpSidebarNav-BlWY8s7e.js} +1 -1
  18. package/dist/chunks/{LpSidebarRow-D9WaZsrT.js → LpSidebarRow-DV_56zxo.js} +1 -1
  19. package/dist/chunks/{LpThemeStudio-D_rh_sLP.js → LpThemeStudio-B42nwbD8.js} +1 -1
  20. package/dist/chunks/{LpThemeSwitcher-CnA7Yp00.js → LpThemeSwitcher-CnkIH76z.js} +2 -2
  21. package/dist/chunks/{LpTour-iZNl_vdy.js → LpTour-DUzpkD8W.js} +7 -1
  22. package/dist/chunks/{LpVideoPlayer-B624umtt.js → LpVideoPlayer-D0dyg8ZY.js} +1 -1
  23. package/dist/components/LpAppShell.vue.js +1 -1
  24. package/dist/components/LpChart.vue.js +1 -1
  25. package/dist/components/LpColorPicker.vue.js +1 -1
  26. package/dist/components/LpContextMenu.vue.d.ts +5 -1
  27. package/dist/components/LpContextMenu.vue.js +1 -1
  28. package/dist/components/LpFileTree.vue.js +1 -1
  29. package/dist/components/LpFileTreeNode.vue.js +1 -1
  30. package/dist/components/LpHintLayer.vue.js +1 -1
  31. package/dist/components/LpHints.vue.js +1 -1
  32. package/dist/components/LpLightbox.vue.js +1 -1
  33. package/dist/components/LpLogViewer.vue.js +1 -1
  34. package/dist/components/LpMediaGallery.vue.js +1 -1
  35. package/dist/components/LpModalNav.vue.js +1 -1
  36. package/dist/components/LpNotificationBell.vue.js +1 -1
  37. package/dist/components/LpNotificationFeed.vue.js +1 -1
  38. package/dist/components/LpPaletteTheme.vue.js +1 -1
  39. package/dist/components/LpPie.vue.js +1 -1
  40. package/dist/components/LpSidebar.vue.js +1 -1
  41. package/dist/components/LpSidebarNav.vue.js +1 -1
  42. package/dist/components/LpSidebarRow.vue.js +1 -1
  43. package/dist/components/LpTable.vue.js +1 -1
  44. package/dist/components/LpTabs.vue.js +1 -1
  45. package/dist/components/LpThemeStudio.vue.js +1 -1
  46. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  47. package/dist/components/LpTour.vue.js +1 -1
  48. package/dist/components/LpVideoPlayer.vue.js +1 -1
  49. package/dist/components/LpVideoTrim.vue.js +1 -1
  50. package/dist/components/menuWhen.js +1 -1
  51. package/dist/composables/scroll.d.ts +6 -1
  52. package/dist/composables/scroll.js +2 -0
  53. package/dist/index.js +19 -19
  54. package/package.json +1 -1
  55. package/src/components/LpContextMenu.vue +5 -0
  56. package/src/components/LpHintLayer.vue +3 -1
  57. package/src/components/LpTour.vue +11 -1
  58. package/src/composables/scroll.ts +8 -1
@@ -14,7 +14,7 @@ import { _ as _sfc_main$4 } from "./LpIcon-CxHFPwKt.js";
14
14
  import { _ as _sfc_main$8 } from "./LpPageScrollbar-BniFeL2U.js";
15
15
  import { _ as _sfc_main$7 } from "./LpScrollArea-B_1KZOSS.js";
16
16
  import { _ as _sfc_main$5 } from "./LpShift-ta3RpuH8.js";
17
- import { _ as _sfc_main$1 } from "./LpSidebar-DWMO2PBQ.js";
17
+ import { _ as _sfc_main$1 } from "./LpSidebar-CCJAE3gl.js";
18
18
  import { mergeClass, useMergedAttrs } from "../composables/useMergedClass.js";
19
19
  import { nodeWindow, isHTMLElement } from "../composables/realm.js";
20
20
  const _hoisted_1 = ["href"];
@@ -10,7 +10,7 @@ import { DEFAULT_SWATCHES, formatColor, opaqueCss, parseColor, rgbToHsv, isLight
10
10
  import { useClipboard } from "../composables/useClipboard.js";
11
11
  import { useLabels } from "../composables/useLpConfig.js";
12
12
  import { POPOVER_PANEL, PANEL_FIT } from "../components/dropdown.js";
13
- import { _ as _sfc_main$2 } from "./LpContextMenu-DEFirphS.js";
13
+ import { _ as _sfc_main$2 } from "./LpContextMenu-BAlrTKQy.js";
14
14
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
15
15
  import { _ as _sfc_main$4 } from "./LpRollingText-B54Pje7P.js";
16
16
  import { usePortalTarget, useOutsideGuard } from "../composables/useView.js";
@@ -20,8 +20,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
20
20
  titleImage: {},
21
21
  noHint: { type: Boolean }
22
22
  },
23
- setup(__props) {
23
+ emits: ["update:open"],
24
+ setup(__props, { emit: __emit }) {
24
25
  const props = __props;
26
+ const emit = __emit;
25
27
  const enabled = computed(() => props.always || props.items.length > 0);
26
28
  const hinted = computed(() => enabled.value && !props.noHint);
27
29
  const PANEL = `${POPOVER_PANEL} ${PANEL_FIT} z-(--z-popover) min-w-48 p-1 outline-none`;
@@ -45,6 +47,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
45
47
  function opened(open) {
46
48
  if (open && !synthetic) hints.use(HINT_SIGNALS.contextMenu);
47
49
  synthetic = false;
50
+ emit("update:open", open);
48
51
  }
49
52
  const counted = /* @__PURE__ */ new WeakSet();
50
53
  function leftClick(event) {
@@ -5,7 +5,7 @@ import { isElement } from "../composables/realm.js";
5
5
  import { withLoadedChildren, computeStats, formatSize, isFilterEmpty, filterTree, sortNodes, flattenVisible, rowWindow, renameProblem, nodeTrail, subtreeIds, rangeIds, topmostIds, canDrop, ancestorIds } from "../components/fileTree.js";
6
6
  import { _ as _sfc_main$4 } from "./LpBreadcrumbs-CF-qfujt.js";
7
7
  import { _ as _sfc_main$2 } from "./LpEmptyState-DLOm07KH.js";
8
- import { _ as _sfc_main$6 } from "./LpFileTreeNode-DkjdwSni.js";
8
+ import { _ as _sfc_main$6 } from "./LpFileTreeNode-Cv01lHgt.js";
9
9
  import { _ as _sfc_main$3 } from "./LpInput-BOI2XFq_.js";
10
10
  import { _ as _sfc_main$5 } from "./LpScrollArea-B_1KZOSS.js";
11
11
  import { _ as _sfc_main$1 } from "./LpSkeleton-leTl53V9.js";
@@ -3,7 +3,7 @@ import { sortNodes, formatSize, formatModified, renameSelectionEnd, fileIcon } f
3
3
  import { _ as _sfc_main$5 } from "./LpBadge-D_TB_Iuv.js";
4
4
  import { _ as _sfc_main$4 } from "./LpCheckbox-BnQcOHbs.js";
5
5
  import { _ as _sfc_main$6 } from "./LpCollapse-DrAw5DBZ.js";
6
- import { _ as _sfc_main$1 } from "./LpContextMenu-DEFirphS.js";
6
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BAlrTKQy.js";
7
7
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
8
8
  import { _ as _sfc_main$2 } from "./LpLoader-2tO499NO.js";
9
9
  import { staggerDelay } from "../components/reveal.js";
@@ -1,4 +1,4 @@
1
- import { defineComponent, computed, ref, shallowRef, watch, onMounted, onBeforeUnmount, openBlock, createBlock, Teleport, unref, createElementBlock, Fragment, renderList, normalizeStyle, createElementVNode, createVNode, withCtx, createCommentVNode, normalizeClass, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, computed, ref, shallowRef, watch, onMounted, onBeforeUnmount, openBlock, createBlock, Teleport, unref, createElementBlock, Fragment, renderList, withModifiers, normalizeStyle, createElementVNode, createVNode, withCtx, createCommentVNode, normalizeClass, createTextVNode, toDisplayString } from "vue";
2
2
  import { PopoverRoot, PopoverAnchor, PopoverPortal, PopoverContent } from "reka-ui";
3
3
  import { hints } from "../composables/useHints.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
@@ -92,13 +92,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
92
92
  return openBlock(), createElementBlock("button", {
93
93
  key: spot.id,
94
94
  type: "button",
95
- class: "fixed z-(--z-popover) -translate-x-1/2 -translate-y-1/2 rounded-full p-1",
95
+ class: "pointer-events-auto fixed z-(--z-popover) -translate-x-1/2 -translate-y-1/2 rounded-full p-1",
96
96
  style: normalizeStyle({ left: `${spot.x}px`, top: `${spot.y}px` }),
97
97
  "aria-label": `${unref(labels).badge}: ${__props.notes[spot.id]?.title ?? ""}`,
98
+ onPointerdown: _cache[0] || (_cache[0] = withModifiers(() => {
99
+ }, ["stop"])),
98
100
  onPointerenter: ($event) => reveal(spot.id),
99
101
  onFocus: ($event) => reveal(spot.id),
100
102
  onClick: ($event) => reveal(spot.id)
101
- }, [..._cache[1] || (_cache[1] = [
103
+ }, [..._cache[3] || (_cache[3] = [
102
104
  createElementVNode("span", { class: "relative flex size-2" }, [
103
105
  createElementVNode("span", { class: "absolute inline-flex size-full animate-ping rounded-full bg-brand opacity-60 motion-reduce:animate-none" }),
104
106
  createElementVNode("span", { class: "relative inline-flex size-2 rounded-full bg-brand ring-2 ring-surface" })
@@ -107,7 +109,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
107
109
  }), 128)),
108
110
  createVNode(unref(PopoverRoot), {
109
111
  open: !!openId.value,
110
- "onUpdate:open": _cache[0] || (_cache[0] = (value) => !value && (openId.value = null))
112
+ "onUpdate:open": _cache[2] || (_cache[2] = (value) => !value && (openId.value = null))
111
113
  }, {
112
114
  default: withCtx(() => [
113
115
  anchor.value ? (openBlock(), createBlock(unref(PopoverAnchor), {
@@ -117,6 +119,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
117
119
  createVNode(unref(PopoverPortal), { to: unref(portalTo) }, {
118
120
  default: withCtx(() => [
119
121
  createVNode(unref(PopoverContent), {
122
+ onPointerdown: _cache[1] || (_cache[1] = withModifiers(() => {
123
+ }, ["stop"])),
120
124
  onInteractOutside: unref(guardOutside),
121
125
  onEscapeKeyDown: unref(guardOutside),
122
126
  side: "bottom",
@@ -3,8 +3,8 @@ import { provideHintSystem } from "../composables/useHintSystem.js";
3
3
  import { useAppleKeyboard, appleModifierLabel } from "../composables/useHotkeys.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
5
  import { _ as _sfc_main$3 } from "./LpActionBar-DuwBawji.js";
6
- import { _ as _sfc_main$2 } from "./LpHintLayer-BG4cgJNr.js";
7
- import { _ as _sfc_main$1 } from "./LpTour-iZNl_vdy.js";
6
+ import { _ as _sfc_main$2 } from "./LpHintLayer-rD3BTMfK.js";
7
+ import { _ as _sfc_main$1 } from "./LpTour-DUzpkD8W.js";
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
9
  __name: "LpHints",
10
10
  props: {
@@ -11,7 +11,7 @@ import { isVideoItem, fileNameOf } from "../components/lightbox.js";
11
11
  import { _ as _sfc_main$2 } from "./LpCopyButton-v0OyJuA9.js";
12
12
  import { _ as _sfc_main$1 } from "./LpIcon-CxHFPwKt.js";
13
13
  import { _ as _sfc_main$4 } from "./LpLoader-2tO499NO.js";
14
- import { _ as _sfc_main$3 } from "./LpVideoPlayer-B624umtt.js";
14
+ import { _ as _sfc_main$3 } from "./LpVideoPlayer-D0dyg8ZY.js";
15
15
  import { _ as _sfc_main$6 } from "./VideoThumb-BfDkIXqE.js";
16
16
  import { useModalLayer } from "../components/modalDepth.js";
17
17
  import { inTextField } from "../composables/textEntry.js";
@@ -5,7 +5,7 @@ import { prefersReducedMotion, durationToken, tokenEase } from "../composables/e
5
5
  import { useClipboard } from "../composables/useClipboard.js";
6
6
  import { useHotkeys } from "../composables/useHotkeys.js";
7
7
  import { _ as _sfc_main$7 } from "./LpBadge-D_TB_Iuv.js";
8
- import { _ as _sfc_main$6 } from "./LpContextMenu-DEFirphS.js";
8
+ import { _ as _sfc_main$6 } from "./LpContextMenu-BAlrTKQy.js";
9
9
  import { _ as _sfc_main$4 } from "./LpEmptyState-DLOm07KH.js";
10
10
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
11
11
  import { _ as _sfc_main$5 } from "./LpLoader-2tO499NO.js";
@@ -2,9 +2,9 @@ import { defineComponent, ref, watch, computed, openBlock, createElementBlock, r
2
2
  import { isVideoItem } from "../components/lightbox.js";
3
3
  import { useMergedAttrs } from "../composables/useMergedClass.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
- import { _ as _sfc_main$1 } from "./LpContextMenu-DEFirphS.js";
5
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BAlrTKQy.js";
6
6
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
7
- import { _ as _sfc_main$4 } from "./LpLightbox-WjDnPgu_.js";
7
+ import { _ as _sfc_main$4 } from "./LpLightbox-rimKYT6F.js";
8
8
  import { _ as _sfc_main$2 } from "./VideoThumb-BfDkIXqE.js";
9
9
  const _hoisted_1 = { key: 0 };
10
10
  const _hoisted_2 = ["aria-label"];
@@ -5,7 +5,7 @@ import { _ as _sfc_main$2 } from "./LpButton-78PtrlBs.js";
5
5
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
6
6
  import { MODAL_MAX_HEIGHT } from "../components/modalDepth.js";
7
7
  import { _ as _sfc_main$1 } from "./LpModal-COMHrBKL.js";
8
- import { _ as _sfc_main$4 } from "./LpSidebar-DWMO2PBQ.js";
8
+ import { _ as _sfc_main$4 } from "./LpSidebar-CCJAE3gl.js";
9
9
  const _hoisted_1 = { class: "flex items-center gap-2" };
10
10
  const _sfc_main = /* @__PURE__ */ defineComponent({
11
11
  __name: "LpModalNav",
@@ -2,9 +2,9 @@ import { defineComponent, useModel, computed, getCurrentInstance, openBlock, cre
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { _ as _sfc_main$6 } from "./LpBadge-D_TB_Iuv.js";
4
4
  import { _ as _sfc_main$4 } from "./LpButton-78PtrlBs.js";
5
- import { _ as _sfc_main$3 } from "./LpContextMenu-DEFirphS.js";
5
+ import { _ as _sfc_main$3 } from "./LpContextMenu-BAlrTKQy.js";
6
6
  import { _ as _sfc_main$5 } from "./LpIcon-CxHFPwKt.js";
7
- import { _ as _sfc_main$2 } from "./LpNotificationFeed-Cuxbh_Mn.js";
7
+ import { _ as _sfc_main$2 } from "./LpNotificationFeed-BFB0waIF.js";
8
8
  import { _ as _sfc_main$1 } from "./LpPopover-w2rr4x7n.js";
9
9
  import { _ as _sfc_main$7 } from "./LpRollingText-B54Pje7P.js";
10
10
  import { NOTIFICATION_LABELS } from "../components/notifications.js";
@@ -4,7 +4,7 @@ import { useNow } from "../composables/useNow.js";
4
4
  import { isHTMLElement } from "../composables/realm.js";
5
5
  import { _ as _sfc_main$8 } from "./LpAvatar-CfLBqlY1.js";
6
6
  import { _ as _sfc_main$a } from "./LpButton-78PtrlBs.js";
7
- import { _ as _sfc_main$7 } from "./LpContextMenu-DEFirphS.js";
7
+ import { _ as _sfc_main$7 } from "./LpContextMenu-BAlrTKQy.js";
8
8
  import { _ as _sfc_main$5 } from "./LpEmptyState-DLOm07KH.js";
9
9
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
10
10
  import { _ as _sfc_main$9 } from "./LpRelativeTime-BgCkXxBc.js";
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, ref, computed, openBlock, createElementBlock, createElementVNode, createVNode, withCtx, createTextVNode, toDisplayString, unref } from "vue";
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { suppressPaletteDiscovery } from "../composables/usePaletteCommands.js";
4
- import { _ as _sfc_main$4 } from "./LpThemeStudio-D_rh_sLP.js";
4
+ import { _ as _sfc_main$4 } from "./LpThemeStudio-B42nwbD8.js";
5
5
  import { _ as _sfc_main$2 } from "./LpThemeProvider-XK6ZeWAE.js";
6
6
  import { _ as _sfc_main$1 } from "./LpButton-78PtrlBs.js";
7
7
  import { _ as _sfc_main$3 } from "./LpInput-BOI2XFq_.js";
@@ -7,7 +7,7 @@ import { useReveal } from "../composables/useReveal.js";
7
7
  import { useTween, lerp, mixColor } from "../composables/useTween.js";
8
8
  import { resolveSlices, arcPath, calloutLabels, formatTick } from "../components/chart.js";
9
9
  import { _ as _sfc_main$9 } from "./LegendSwatch-BhRjrtzv.js";
10
- import { _ as _sfc_main$4 } from "./LpContextMenu-DEFirphS.js";
10
+ import { _ as _sfc_main$4 } from "./LpContextMenu-BAlrTKQy.js";
11
11
  import { _ as _sfc_main$3 } from "./LpEmptyState-DLOm07KH.js";
12
12
  import { _ as _sfc_main$6 } from "./LpNumberFlow-Vqj0tP7B.js";
13
13
  import { _ as _sfc_main$7 } from "./LpRollingText-B54Pje7P.js";
@@ -8,7 +8,7 @@ import { _ as _sfc_main$5 } from "./LpDrawer-BHlqi62K.js";
8
8
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
9
9
  import { _ as _sfc_main$3 } from "./LpInput-BOI2XFq_.js";
10
10
  import { _ as _sfc_main$1 } from "./LpTooltip-CzIfznts.js";
11
- import { _ as _sfc_main$4 } from "./LpSidebarNav-C1glQiiz.js";
11
+ import { _ as _sfc_main$4 } from "./LpSidebarNav-BlWY8s7e.js";
12
12
  const _hoisted_1 = ["data-compact", "aria-label"];
13
13
  const _hoisted_2 = {
14
14
  key: 0,
@@ -10,7 +10,7 @@ import '../assets/MenuShortcut-Cyub0frr.css';import '../assets/LpKeys-5ijsXX-M.c
10
10
  /* empty css */
11
11
  import { _ as _sfc_main$2 } from "./LpScrollArea-B_1KZOSS.js";
12
12
  import { _ as _sfc_main$1 } from "./LpSkeleton-leTl53V9.js";
13
- import { _ as _sfc_main$3 } from "./LpSidebarRow-D9WaZsrT.js";
13
+ import { _ as _sfc_main$3 } from "./LpSidebarRow-DV_56zxo.js";
14
14
  import { waiting } from "../components/sidebar.js";
15
15
  import { useMergedAttrs } from "../composables/useMergedClass.js";
16
16
  const _hoisted_1 = {
@@ -5,7 +5,7 @@ import { useLocale } from "../composables/useLocale.js";
5
5
  import { usePillTransition } from "../composables/usePillTransition.js";
6
6
  import { useLinkComponent } from "../composables/useLpConfig.js";
7
7
  import { _ as _sfc_main$2 } from "./LpBadge-D_TB_Iuv.js";
8
- import { _ as _sfc_main$4 } from "./LpContextMenu-DEFirphS.js";
8
+ import { _ as _sfc_main$4 } from "./LpContextMenu-BAlrTKQy.js";
9
9
  import { _ as _sfc_main$1 } from "./LpHoverCard-DYguY2AP.js";
10
10
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
11
11
  import LpKeys from "../components/LpKeys.vue.js";
@@ -4,7 +4,7 @@ import { useLabels } from "../composables/useLpConfig.js";
4
4
  import { useThemeStudio, STUDIO_BRANDS, STUDIO_SYSTEM } from "../theme/studio.js";
5
5
  import { _ as _sfc_main$1 } from "./LpButton-78PtrlBs.js";
6
6
  import { _ as _sfc_main$7 } from "./LpCodeBlock-BGQTuAtS.js";
7
- import { _ as _sfc_main$4 } from "./LpColorPicker-DuuaWRsT.js";
7
+ import { _ as _sfc_main$4 } from "./LpColorPicker-SVXbvc7r.js";
8
8
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
9
9
  import { _ as _sfc_main$5 } from "./LpSegmented-Dws26WdN.js";
10
10
  import { _ as _sfc_main$6 } from "./LpDisclosure-D4JZ-o8K.js";
@@ -7,11 +7,11 @@ import { presets } from "../theme/presets.js";
7
7
  import { useThemeStudio, STUDIO_SYSTEM } from "../theme/studio.js";
8
8
  import { useTheme } from "../theme/useTheme.js";
9
9
  import { POPOVER_PANEL, PANEL_FIT } from "../components/dropdown.js";
10
- import { _ as _sfc_main$1 } from "./LpContextMenu-DEFirphS.js";
10
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BAlrTKQy.js";
11
11
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
12
12
  import { _ as _sfc_main$4 } from "./LpRollingText-B54Pje7P.js";
13
13
  import { _ as _sfc_main$3 } from "./LpShift-ta3RpuH8.js";
14
- import { _ as _sfc_main$5 } from "./LpThemeStudio-D_rh_sLP.js";
14
+ import { _ as _sfc_main$5 } from "./LpThemeStudio-B42nwbD8.js";
15
15
  const _hoisted_1 = ["aria-label", "title"];
16
16
  const _hoisted_2 = {
17
17
  key: 1,
@@ -149,6 +149,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
149
149
  clearTimeout(glide);
150
150
  glide = window.setTimeout(() => gliding.value = false, durationToken("duration-medium", void 0, doc()) + 40);
151
151
  }
152
+ let shownRaw = void 0;
152
153
  function measure() {
153
154
  viewport.value = { width: win().innerWidth, height: win().innerHeight };
154
155
  const el = target.value;
@@ -156,7 +157,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
156
157
  box.value = null;
157
158
  return;
158
159
  }
159
- if (!el.isConnected) return;
160
+ if (!el.isConnected) {
161
+ const again = resolve(shownRaw);
162
+ glideTo(again && again.getClientRects().length ? again : null);
163
+ return;
164
+ }
160
165
  const r = el.getBoundingClientRect();
161
166
  const prev = box.value;
162
167
  if (!prev || prev.x !== r.x || prev.y !== r.y || prev.width !== r.width || prev.height !== r.height) {
@@ -193,6 +198,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
193
198
  }
194
199
  const el = current.enter || sampled.value ? await waitFor(raw, mine) : resolve(raw);
195
200
  if (mine !== token) return;
201
+ shownRaw = raw;
196
202
  if (!el || !el.getClientRects().length) return skip();
197
203
  await settled(el);
198
204
  if (mine !== token) return;
@@ -8,7 +8,7 @@ import { useToast } from "../composables/useToast.js";
8
8
  import { useVideoMedia } from "../composables/useVideoMedia.js";
9
9
  import { useView, provideView } from "../composables/useView.js";
10
10
  import { _ as _sfc_main$4 } from "./LpButton-78PtrlBs.js";
11
- import { _ as _sfc_main$1 } from "./LpContextMenu-DEFirphS.js";
11
+ import { _ as _sfc_main$1 } from "./LpContextMenu-BAlrTKQy.js";
12
12
  import { _ as _sfc_main$7 } from "./LpDropdownMenu-CdCe7D2d.js";
13
13
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
14
14
  import { _ as _sfc_main$3 } from "./LpLoader-2tO499NO.js";
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAppShell-DcAq93Yl.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAppShell-CDIvTOCl.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -16,7 +16,7 @@ import { _ as _sfc_main$8 } from "../chunks/ChartRangeSelector-HO0sMMz6.js";
16
16
  import { clampRange, chartView, sourceOf, slotOf, ZOOM_STEP, zoomRange } from "./chartWindow.js";
17
17
  import { PANEL_SURFACE } from "./dropdown.js";
18
18
  import { _ as _sfc_main$2 } from "../chunks/LegendSwatch-BhRjrtzv.js";
19
- import { _ as _sfc_main$3 } from "../chunks/LpContextMenu-DEFirphS.js";
19
+ import { _ as _sfc_main$3 } from "../chunks/LpContextMenu-BAlrTKQy.js";
20
20
  import { _ as _sfc_main$6 } from "../chunks/LpEmptyState-DLOm07KH.js";
21
21
  import { _ as _sfc_main$7 } from "../chunks/LpShift-ta3RpuH8.js";
22
22
  import { _ as _sfc_main$5 } from "../chunks/LpSkeleton-leTl53V9.js";
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpColorPicker-DuuaWRsT.js";
1
+ import { _ as _sfc_main } from "../chunks/LpColorPicker-SVXbvc7r.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -59,7 +59,11 @@ declare var __VLS_20: {};
59
59
  type __VLS_Slots = {} & {
60
60
  default?: (props: typeof __VLS_20) => any;
61
61
  };
62
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
62
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
63
+ "update:open": (open: boolean) => any;
64
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
65
+ "onUpdate:open"?: ((open: boolean) => any) | undefined;
66
+ }>, {
63
67
  palette: PaletteControlOptions;
64
68
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
65
69
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpContextMenu-DEFirphS.js";
1
+ import { _ as _sfc_main } from "../chunks/LpContextMenu-BAlrTKQy.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTree-CLpVoqzu.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTree-D0PDEQfB.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTreeNode-DkjdwSni.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTreeNode-Cv01lHgt.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpHintLayer-BG4cgJNr.js";
1
+ import { _ as _sfc_main } from "../chunks/LpHintLayer-rD3BTMfK.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpHints-DuisuI5J.js";
1
+ import { _ as _sfc_main } from "../chunks/LpHints-lGLsGxOx.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLightbox-WjDnPgu_.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLightbox-rimKYT6F.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLogViewer-Gftt0yf5.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLogViewer-NpfkEfIo.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpMediaGallery-D0KmXz0l.js";
1
+ import { _ as _sfc_main } from "../chunks/LpMediaGallery-Cw5PR7W1.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpModalNav-Dr5uDX-e.js";
1
+ import { _ as _sfc_main } from "../chunks/LpModalNav-Bp8voRgM.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpNotificationBell-MyueilyI.js";
1
+ import { _ as _sfc_main } from "../chunks/LpNotificationBell-CFOv3OXI.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpNotificationFeed-Cuxbh_Mn.js";
1
+ import { _ as _sfc_main } from "../chunks/LpNotificationFeed-BFB0waIF.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpPaletteTheme-I7SSv_pE.js";
1
+ import { _ as _sfc_main } from "../chunks/LpPaletteTheme-BBjf1HmS.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpPie-CbSw86lM.js";
1
+ import { _ as _sfc_main } from "../chunks/LpPie-p1Kksd3z.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebar-DWMO2PBQ.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebar-CCJAE3gl.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebarNav-C1glQiiz.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebarNav-BlWY8s7e.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpSidebarRow-D9WaZsrT.js";
1
+ import { _ as _sfc_main } from "../chunks/LpSidebarRow-DV_56zxo.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -3,7 +3,7 @@ import { usePaletteScope, suppressPaletteDiscovery, usePaletteCommands } from ".
3
3
  import { menuPaletteCommands } from "./commandPalette.js";
4
4
  import { _ as _sfc_main$1 } from "../chunks/LpDataList-zkZsRJQ8.js";
5
5
  import { _ as _sfc_main$d } from "../chunks/LpCheckbox-BnQcOHbs.js";
6
- import { _ as _sfc_main$c } from "../chunks/LpContextMenu-DEFirphS.js";
6
+ import { _ as _sfc_main$c } from "../chunks/LpContextMenu-BAlrTKQy.js";
7
7
  import { _ as _sfc_main$g } from "../chunks/LpEditable-CtulE7dP.js";
8
8
  import { _ as _sfc_main$f } from "../chunks/LpEmptyState-DLOm07KH.js";
9
9
  import { _ as _sfc_main$8 } from "../chunks/LpBadge-D_TB_Iuv.js";
@@ -6,7 +6,7 @@ import { TabsRoot, TabsList, TabsTrigger, TabsContent } from "reka-ui";
6
6
  import { useResizeObserver } from "../composables/useResizeObserver.js";
7
7
  import { usePillTransition } from "../composables/usePillTransition.js";
8
8
  import { useStepHistory } from "../composables/useOverlayHistory.js";
9
- import { _ as _sfc_main$2 } from "../chunks/LpContextMenu-DEFirphS.js";
9
+ import { _ as _sfc_main$2 } from "../chunks/LpContextMenu-BAlrTKQy.js";
10
10
  import { _ as _sfc_main$4 } from "../chunks/LpSkeleton-leTl53V9.js";
11
11
  import { _ as _sfc_main$3 } from "../chunks/LpTabFace-0ZdqEZMe.js";
12
12
  import { _ as _sfc_main$1 } from "../chunks/LpScrollStrip-D4tsOfAQ.js";
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpThemeStudio-D_rh_sLP.js";
1
+ import { _ as _sfc_main } from "../chunks/LpThemeStudio-B42nwbD8.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpThemeSwitcher-CnA7Yp00.js";
1
+ import { _ as _sfc_main } from "../chunks/LpThemeSwitcher-CnkIH76z.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpTour-iZNl_vdy.js";
1
+ import { _ as _sfc_main } from "../chunks/LpTour-DUzpkD8W.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpVideoPlayer-B624umtt.js";
1
+ import { _ as _sfc_main } from "../chunks/LpVideoPlayer-D0dyg8ZY.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -9,7 +9,7 @@ import { usePrefersReducedMotion } from "../composables/useReducedMotion.js";
9
9
  import { useVideoMedia } from "../composables/useVideoMedia.js";
10
10
  import { _ as _sfc_main$3 } from "../chunks/LpButton-78PtrlBs.js";
11
11
  import { _ as _sfc_main$2 } from "../chunks/LpIcon-CxHFPwKt.js";
12
- import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-DEFirphS.js";
12
+ import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-BAlrTKQy.js";
13
13
  import { _ as _sfc_main$6 } from "../chunks/LpInput-BOI2XFq_.js";
14
14
  import { _ as _sfc_main$4 } from "../chunks/SteadyText-CwH-kduj.js";
15
15
  import VideoFlash from "./VideoFlash.vue.js";
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, h } from "vue";
2
- import { _ as _sfc_main } from "../chunks/LpContextMenu-DEFirphS.js";
2
+ import { _ as _sfc_main } from "../chunks/LpContextMenu-BAlrTKQy.js";
3
3
  const MenuWhen = defineComponent({
4
4
  name: "MenuWhen",
5
5
  inheritAttrs: false,
@@ -12,7 +12,12 @@ export declare function scrollParent(el: Element | null | undefined, { axis, sel
12
12
  */
13
13
  export declare function atScrollEnd(el: Element | null | undefined, slack?: number): boolean;
14
14
  export interface ScrollToElementOptions {
15
- /** `nearest` scrolls only when the element is out of view. */
15
+ /**
16
+ * `nearest` scrolls only when the element is out of view. An element taller
17
+ * than the scroller is brought in by its start whatever the block: centring
18
+ * or meeting its far edge would show its middle or end, and a list that
19
+ * loads more at its end would start loading.
20
+ */
16
21
  block?: "nearest" | "center" | "start";
17
22
  behavior?: ScrollBehavior;
18
23
  /** Room kept between the element and the scroller's edge. */
@@ -35,8 +35,10 @@ function scrollToElement(el, { block = "nearest", behavior = "auto", margin = 0,
35
35
  const lo = x ? inner.left - outer.left : inner.top - outer.top;
36
36
  const hi = x ? inner.right - outer.right : inner.bottom - outer.bottom;
37
37
  const at = lo + from;
38
+ const fits = size + 2 * margin <= view;
38
39
  let target = from;
39
40
  if (block === "start") target = at - margin;
41
+ else if (!fits) target = lo < margin || lo > view - margin || block === "center" ? at - margin : from;
40
42
  else if (block === "center") target = at - (view - size) / 2;
41
43
  else if (lo < margin) target = at - margin;
42
44
  else if (hi > -margin) target = at - view + size + margin;
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { _ as _3 } from "./chunks/LpMapPicker-DACiiuSY.js";
4
4
  import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress, project, tileUrl, unproject } from "./components/address.js";
5
5
  import { _ as _4 } from "./chunks/LpActionBar-DuwBawji.js";
6
6
  import { _ as _5 } from "./chunks/LpAlert-CdzeGn72.js";
7
- import { _ as _6 } from "./chunks/LpAppShell-DcAq93Yl.js";
7
+ import { _ as _6 } from "./chunks/LpAppShell-CDIvTOCl.js";
8
8
  import { _ as _7 } from "./chunks/LpAutocomplete-C79ZI9mX.js";
9
9
  import { _ as _8 } from "./chunks/LpAvatar-CfLBqlY1.js";
10
10
  import { _ as _9 } from "./chunks/LpBadge-D_TB_Iuv.js";
@@ -21,7 +21,7 @@ import { createLinkedView, linkChart, linkLog, linkPipeline, linkTable, linkTopo
21
21
  import { _ as _14 } from "./chunks/LpCheckbox-BnQcOHbs.js";
22
22
  import { _ as _15 } from "./chunks/LpCodeBlock-BGQTuAtS.js";
23
23
  import { tokenizeLines } from "./components/codeHighlight.js";
24
- import { _ as _16 } from "./chunks/LpColorPicker-DuuaWRsT.js";
24
+ import { _ as _16 } from "./chunks/LpColorPicker-SVXbvc7r.js";
25
25
  import { DEFAULT_SWATCHES, clampHsv, formatColor, hsvToHsl, hsvToRgb, isLight, normalizeHue, opaqueCss, parseColor, parseHex, rgbToHex, rgbToHsv } from "./components/color.js";
26
26
  import { default as default3 } from "./components/LpCommandPalette.vue.js";
27
27
  import { applyQueryFilters, highlightParts, parseCommandQuery, parsePaletteQuery, rankCommandItems, searchCommandItems, swapCommandLayout } from "./components/commandSearch.js";
@@ -36,7 +36,7 @@ import { comboKeys, comboSteps } from "./components/keys.js";
36
36
  import { _ as _18 } from "./chunks/LpConfirmDialog-CvC-Uxk5.js";
37
37
  import { _ as _19 } from "./chunks/LpConfirmHost-BAuEU5wp.js";
38
38
  import { confirm, useConfirm } from "./components/confirm.js";
39
- import { _ as _20 } from "./chunks/LpContextMenu-DEFirphS.js";
39
+ import { _ as _20 } from "./chunks/LpContextMenu-BAlrTKQy.js";
40
40
  import { _ as _21 } from "./chunks/LpDatePicker-DawYC7Pg.js";
41
41
  import { _ as _22 } from "./chunks/LpDateRangePicker-DNTj2SDa.js";
42
42
  import { _ as _23 } from "./chunks/LpRangeCalendar-9BvaLZji.js";
@@ -47,7 +47,7 @@ import { _ as _26 } from "./chunks/LpDrawer-BHlqi62K.js";
47
47
  import { _ as _27 } from "./chunks/LpDropdownMenu-CdCe7D2d.js";
48
48
  import { default as default9 } from "./components/LpDropzone.vue.js";
49
49
  import { _ as _28 } from "./chunks/LpEmptyState-DLOm07KH.js";
50
- import { _ as _29 } from "./chunks/LpFileTree-CLpVoqzu.js";
50
+ import { _ as _29 } from "./chunks/LpFileTree-D0PDEQfB.js";
51
51
  import { ancestorIds, checkStateOf, checkedCount, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize } from "./components/fileTree.js";
52
52
  import { _ as _30 } from "./chunks/LpFieldNotice-DUPo1Yii.js";
53
53
  import { _ as _31 } from "./chunks/LpFormField-mIq_9UWb.js";
@@ -56,25 +56,25 @@ import { i, b, a, c } from "./chunks/icons-C8ccRCKw.js";
56
56
  import { default as default10 } from "./components/LpImageEditor.vue.js";
57
57
  import { _ as _33 } from "./chunks/LpInfraNode-CFSOir_N.js";
58
58
  import { _ as _34 } from "./chunks/LpInput-BOI2XFq_.js";
59
- import { _ as _35 } from "./chunks/LpLightbox-WjDnPgu_.js";
59
+ import { _ as _35 } from "./chunks/LpLightbox-rimKYT6F.js";
60
60
  import { fileNameOf, isVideoItem } from "./components/lightbox.js";
61
61
  import { _ as _36 } from "./chunks/LpLink-Krkjhe_y.js";
62
- import { _ as _37 } from "./chunks/LpLogViewer-Gftt0yf5.js";
62
+ import { _ as _37 } from "./chunks/LpLogViewer-NpfkEfIo.js";
63
63
  import { _ as _38 } from "./chunks/LpLogInspector-DPZWN5Ev.js";
64
64
  import { compilePattern, findIds, messageShape, structuredPayload, timeMs } from "./components/logTools.js";
65
65
  import { countLevels, matchPositions, matchesTerm, ringWindow, stepMatch } from "./components/logSearch.js";
66
- import { _ as _39 } from "./chunks/LpMediaGallery-D0KmXz0l.js";
66
+ import { _ as _39 } from "./chunks/LpMediaGallery-Cw5PR7W1.js";
67
67
  import { _ as _40 } from "./chunks/LpModal-COMHrBKL.js";
68
- import { _ as _41 } from "./chunks/LpModalNav-Dr5uDX-e.js";
69
- import { _ as _42 } from "./chunks/LpNotificationBell-MyueilyI.js";
70
- import { _ as _43 } from "./chunks/LpNotificationFeed-Cuxbh_Mn.js";
68
+ import { _ as _41 } from "./chunks/LpModalNav-Bp8voRgM.js";
69
+ import { _ as _42 } from "./chunks/LpNotificationBell-CFOv3OXI.js";
70
+ import { _ as _43 } from "./chunks/LpNotificationFeed-BFB0waIF.js";
71
71
  import { _ as _44 } from "./chunks/LpNumberField-BtVJ0pT4.js";
72
72
  import { _ as _45 } from "./chunks/LpTimeField-BHM_MEPZ.js";
73
73
  import { _ as _46 } from "./chunks/LpNumberFlow-Vqj0tP7B.js";
74
74
  import { _ as _47 } from "./chunks/LpOtpInput-DTX1w62e.js";
75
75
  import { _ as _48 } from "./chunks/LpPagination-DGLntZJN.js";
76
76
  import { _ as _49 } from "./chunks/LpPasswordInput-DMTpYcvq.js";
77
- import { _ as _50 } from "./chunks/LpPie-CbSw86lM.js";
77
+ import { _ as _50 } from "./chunks/LpPie-p1Kksd3z.js";
78
78
  import { _ as _51 } from "./chunks/LpPhoneInput-VtPE_Ipa.js";
79
79
  import { filterCountries, flagEmoji, loadCountries, matchCountryByValue } from "./components/countries.js";
80
80
  import { _ as _52 } from "./chunks/LpPopover-w2rr4x7n.js";
@@ -94,7 +94,7 @@ import { _ as _64 } from "./chunks/LpShift-ta3RpuH8.js";
94
94
  import { _ as _65 } from "./chunks/LpSwap-qCOwgde2.js";
95
95
  import { _ as _66 } from "./chunks/LpHintExample-YzCXiSUp.js";
96
96
  import { default as default11 } from "./components/LpShortcutsDialog.vue.js";
97
- import { _ as _67 } from "./chunks/LpSidebar-DWMO2PBQ.js";
97
+ import { _ as _67 } from "./chunks/LpSidebar-CCJAE3gl.js";
98
98
  import { _ as _68 } from "./chunks/LpContextSwitcher-COw6GHPW.js";
99
99
  import { _ as _69 } from "./chunks/LpSkeleton-leTl53V9.js";
100
100
  import { _ as _70 } from "./chunks/LpSlider-Cdfz-6mn.js";
@@ -104,7 +104,7 @@ import { formatClipTime, isNativeLoop, planLoop, seamProgress, seamReached } fro
104
104
  import { default as default12 } from "./components/LpVideoTrim.vue.js";
105
105
  import { _ as _73 } from "./chunks/LpVideoCompress-Cg0g2-S0.js";
106
106
  import { bitrateForHeight, canTranscodeVideo, estimateTranscodedBytes, probeVideo, transcodeVideo, transcodedName } from "./composables/videoTranscode.js";
107
- import { _ as _74 } from "./chunks/LpVideoPlayer-B624umtt.js";
107
+ import { _ as _74 } from "./chunks/LpVideoPlayer-D0dyg8ZY.js";
108
108
  import { useVideoMedia } from "./composables/useVideoMedia.js";
109
109
  import { dragEnd, normalizeRange as normalizeRange2, parseClipTime, setEnd } from "./components/videoTrim.js";
110
110
  import { _ as _75 } from "./chunks/LpSparkline-11ryFdPX.js";
@@ -123,14 +123,14 @@ import { _ as _80 } from "./chunks/LpBottomNav-SMIiebhK.js";
123
123
  import { _ as _81 } from "./chunks/LpTagsInput-CJCyr2p3.js";
124
124
  import { addTags, splitTags } from "./components/tags.js";
125
125
  import { _ as _82 } from "./chunks/LpTextarea-B0U99u5R.js";
126
- import { _ as _83 } from "./chunks/LpThemeSwitcher-CnA7Yp00.js";
126
+ import { _ as _83 } from "./chunks/LpThemeSwitcher-CnkIH76z.js";
127
127
  import { _ as _84 } from "./chunks/LpTilt-B7KHX1zH.js";
128
128
  import { _ as _85 } from "./chunks/LpToaster-CGHXxCie.js";
129
129
  import { _ as _86 } from "./chunks/LpTooltip-CzIfznts.js";
130
- import { _ as _87 } from "./chunks/LpTour-iZNl_vdy.js";
130
+ import { _ as _87 } from "./chunks/LpTour-DUzpkD8W.js";
131
131
  import { holeOf, openContextMenu, panelsAround } from "./components/tour.js";
132
- import { _ as _88 } from "./chunks/LpHintLayer-BG4cgJNr.js";
133
- import { _ as _89 } from "./chunks/LpHints-DuisuI5J.js";
132
+ import { _ as _88 } from "./chunks/LpHintLayer-rD3BTMfK.js";
133
+ import { _ as _89 } from "./chunks/LpHints-lGLsGxOx.js";
134
134
  import { HINT_SIGNALS, contextMenuTip, createHintSystem, dropzoneTip, hintKey, hintSummary, hotkeyTip, localHintStorage, noteDropzone, noteHotkeyTarget, paletteTip, provideHintSystem, runningHintSystem, useHintSystem } from "./composables/useHintSystem.js";
135
135
  import { _ as _90 } from "./chunks/LpTooltipProvider-CftjV7Xc.js";
136
136
  import { _ as _91 } from "./chunks/LpTopologyCanvas-DKn0Xcz4.js";
@@ -193,7 +193,7 @@ import { useScrollStrip } from "./composables/useScrollStrip.js";
193
193
  import { useToast } from "./composables/useToast.js";
194
194
  import { _ as _96 } from "./chunks/LpThemeProvider-XK6ZeWAE.js";
195
195
  import { _ as _97 } from "./chunks/LpFrame-Bv5Fphte.js";
196
- import { _ as _98 } from "./chunks/LpThemeStudio-D_rh_sLP.js";
196
+ import { _ as _98 } from "./chunks/LpThemeStudio-B42nwbD8.js";
197
197
  import { _ as _99 } from "./chunks/LpThemeStudioSection-B7bt8Iyg.js";
198
198
  import { isInternalHref, resolveLink } from "./components/link.js";
199
199
  import { _ as _100 } from "./chunks/LpRepeater-BRuVEF2M.js";
@@ -252,7 +252,7 @@ import { _ as _129 } from "./chunks/LpCommandScope-DRUvHiX7.js";
252
252
  import { createPaletteRegistry, mergePaletteCommands, usePaletteCommands, vPalette } from "./composables/usePaletteCommands.js";
253
253
  import { commandShortcuts, commandToHotkey, commandToMenuItem, commandToPalette, useCommands } from "./composables/useCommands.js";
254
254
  import { usePaletteTheme } from "./theme/palette.js";
255
- import { _ as _130 } from "./chunks/LpPaletteTheme-I7SSv_pE.js";
255
+ import { _ as _130 } from "./chunks/LpPaletteTheme-BBjf1HmS.js";
256
256
  const uk = {
257
257
  actionBar: { dismiss: "Закрити" },
258
258
  activityLine: { busy: "Завантаження" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavepulse/ui",
3
- "version": "0.96.1",
3
+ "version": "0.96.3",
4
4
  "type": "module",
5
5
  "description": "LeavePulse token-driven Vue component kit.",
6
6
  "repository": {
@@ -75,6 +75,10 @@ const props = withDefaults(defineProps<{
75
75
  noHint?: boolean
76
76
  }>(), { palette: undefined })
77
77
 
78
+ // Whether the menu is open, for a caller that has to react to it: a hover
79
+ // card on the same element closes while its menu is up.
80
+ const emit = defineEmits<{ "update:open": [open: boolean] }>()
81
+
78
82
  // With no items the trigger is disabled, so the element keeps the browser's
79
83
  // native context menu. Lets callers wrap unconditionally and pass [] to opt out
80
84
  // per element. `always` overrides this so a late-populated menu is ready on the
@@ -128,6 +132,7 @@ function keepContextMenu(event: Event) {
128
132
  function opened(open: boolean) {
129
133
  if (open && !synthetic) hints.use(HINT_SIGNALS.contextMenu)
130
134
  synthetic = false
135
+ emit("update:open", open)
131
136
  }
132
137
 
133
138
  /*
@@ -126,9 +126,10 @@ const guardOutside = useOutsideGuard()
126
126
  v-for="spot in spots"
127
127
  :key="spot.id"
128
128
  type="button"
129
- class="fixed z-(--z-popover) -translate-x-1/2 -translate-y-1/2 rounded-full p-1"
129
+ class="pointer-events-auto fixed z-(--z-popover) -translate-x-1/2 -translate-y-1/2 rounded-full p-1"
130
130
  :style="{ left: `${spot.x}px`, top: `${spot.y}px` }"
131
131
  :aria-label="`${labels.badge}: ${notes[spot.id]?.title ?? ''}`"
132
+ @pointerdown.stop
132
133
  @pointerenter="reveal(spot.id)"
133
134
  @focus="reveal(spot.id)"
134
135
  @click="reveal(spot.id)"
@@ -142,6 +143,7 @@ const guardOutside = useOutsideGuard()
142
143
  <PopoverAnchor v-if="anchor" :reference="anchor" />
143
144
  <PopoverPortal :to="portalTo">
144
145
  <PopoverContent
146
+ @pointerdown.stop
145
147
  @interact-outside="guardOutside"
146
148
  @escape-key-down="guardOutside"
147
149
  side="bottom"
@@ -256,6 +256,11 @@ function glideTo(el: Element | null) {
256
256
  glide = window.setTimeout(() => (gliding.value = false), durationToken("duration-medium", undefined, doc()) + 40)
257
257
  }
258
258
 
259
+ // What the shown step points at, kept to find it again: a list that re-renders
260
+ // replaces the element, and a card anchored to the old one would hang over
261
+ // nothing (or nowhere) with the page dimmed under it.
262
+ let shownRaw: TourStep["target"] = undefined
263
+
259
264
  function measure() {
260
265
  viewport.value = { width: win().innerWidth, height: win().innerHeight }
261
266
  const el = target.value
@@ -263,7 +268,11 @@ function measure() {
263
268
  box.value = null
264
269
  return
265
270
  }
266
- if (!el.isConnected) return
271
+ if (!el.isConnected) {
272
+ const again = resolve(shownRaw)
273
+ glideTo(again && again.getClientRects().length ? again : null)
274
+ return
275
+ }
267
276
  const r = el.getBoundingClientRect()
268
277
  const prev = box.value
269
278
  if (!prev || prev.x !== r.x || prev.y !== r.y || prev.width !== r.width || prev.height !== r.height) {
@@ -302,6 +311,7 @@ async function show(): Promise<void> {
302
311
  }
303
312
  const el = current.enter || sampled.value ? await waitFor(raw, mine) : resolve(raw)
304
313
  if (mine !== token) return
314
+ shownRaw = raw
305
315
  if (!el || !el.getClientRects().length) return skip()
306
316
  await settled(el)
307
317
  if (mine !== token) return
@@ -40,7 +40,12 @@ export function atScrollEnd(el: Element | null | undefined, slack = 2): boolean
40
40
  }
41
41
 
42
42
  export interface ScrollToElementOptions {
43
- /** `nearest` scrolls only when the element is out of view. */
43
+ /**
44
+ * `nearest` scrolls only when the element is out of view. An element taller
45
+ * than the scroller is brought in by its start whatever the block: centring
46
+ * or meeting its far edge would show its middle or end, and a list that
47
+ * loads more at its end would start loading.
48
+ */
44
49
  block?: "nearest" | "center" | "start"
45
50
  behavior?: ScrollBehavior
46
51
  /** Room kept between the element and the scroller's edge. */
@@ -76,8 +81,10 @@ export function scrollToElement(
76
81
  const lo = x ? inner.left - outer.left : inner.top - outer.top
77
82
  const hi = x ? inner.right - outer.right : inner.bottom - outer.bottom
78
83
  const at = lo + from
84
+ const fits = size + 2 * margin <= view
79
85
  let target = from
80
86
  if (block === "start") target = at - margin
87
+ else if (!fits) target = lo < margin || lo > view - margin || block === "center" ? at - margin : from
81
88
  else if (block === "center") target = at - (view - size) / 2
82
89
  else if (lo < margin) target = at - margin
83
90
  else if (hi > -margin) target = at - view + size + margin