@leavepulse/ui 0.93.3 → 0.94.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 (79) hide show
  1. package/README.md +53 -3
  2. package/dist/assets/LpTabs-7yQjX2ih.css +18 -0
  3. package/dist/assets/LpVideoTrim-D8JDg9Qn.css +8 -0
  4. package/dist/chunks/AppShellContextNav-BoH4ffnC.js +54 -0
  5. package/dist/chunks/{LpAppShell-BWaVRsDB.js → LpAppShell-DlpQierx.js} +12 -5
  6. package/dist/chunks/{LpDateRangePicker-CAn2yGbn.js → LpDateRangePicker-DRBB8z6t.js} +1 -1
  7. package/dist/chunks/{LpDrawer-iRHwJOGn.js → LpDrawer-BkWjFdV0.js} +81 -42
  8. package/dist/chunks/{LpLightbox-a24V_0Wk.js → LpLightbox-DPgz7IsT.js} +62 -49
  9. package/dist/chunks/{LpMapPicker-DVfiy3rR.js → LpMapPicker-V0Lybi10.js} +19 -52
  10. package/dist/chunks/{LpMediaGallery-CtWA5Uab.js → LpMediaGallery-CTejKF2-.js} +1 -1
  11. package/dist/chunks/{LpModalNav-DivqT1NV.js → LpModalNav-BFjiHWbr.js} +1 -1
  12. package/dist/chunks/{LpRangeCalendar-C9gkNMYw.js → LpRangeCalendar-9BvaLZji.js} +3 -4
  13. package/dist/chunks/LpScrollStrip-D4tsOfAQ.js +78 -0
  14. package/dist/chunks/{LpSidebar-DQtCYlT4.js → LpSidebar-BKhVDsMt.js} +3 -3
  15. package/dist/chunks/{LpSidebarNav-CFcI7--7.js → LpSidebarNav-DbCap8z1.js} +33 -19
  16. package/dist/component-names.d.ts +1 -1
  17. package/dist/components/AppShellContextNav.vue.js +1 -1
  18. package/dist/components/LpAppShell.vue.js +1 -1
  19. package/dist/components/LpChart.vue.js +3 -3
  20. package/dist/components/LpDateRangePicker.vue.js +1 -1
  21. package/dist/components/LpDrawer.vue.d.ts +10 -2
  22. package/dist/components/LpDrawer.vue.js +1 -1
  23. package/dist/components/LpDropzone.vue.d.ts +1 -1
  24. package/dist/components/LpLightbox.vue.js +1 -1
  25. package/dist/components/LpMapPicker.vue.js +1 -1
  26. package/dist/components/LpMediaGallery.vue.js +1 -1
  27. package/dist/components/LpModalNav.vue.js +1 -1
  28. package/dist/components/LpRangeCalendar.vue.js +1 -1
  29. package/dist/components/LpRevealOnScroll.vue.d.ts +1 -1
  30. package/dist/components/LpScrollStrip.vue.d.ts +48 -0
  31. package/dist/components/LpScrollStrip.vue.js +4 -0
  32. package/dist/components/LpSidebar.vue.js +1 -1
  33. package/dist/components/LpSidebarNav.vue.js +1 -1
  34. package/dist/components/LpTabs.vue.d.ts +4 -4
  35. package/dist/components/LpTabs.vue.js +111 -92
  36. package/dist/components/LpVideoTrim.vue.js +41 -54
  37. package/dist/composables/gesture.d.ts +141 -0
  38. package/dist/composables/gesture.js +176 -0
  39. package/dist/composables/scroll.d.ts +5 -1
  40. package/dist/composables/scroll.js +16 -9
  41. package/dist/composables/useAppUpdate.d.ts +26 -0
  42. package/dist/composables/useAppUpdate.js +91 -0
  43. package/dist/composables/useGesture.d.ts +107 -0
  44. package/dist/composables/useGesture.js +281 -0
  45. package/dist/composables/usePaintSelect.js +3 -4
  46. package/dist/composables/useScrollStrip.d.ts +27 -0
  47. package/dist/composables/useScrollStrip.js +194 -0
  48. package/dist/composables/useTouchHold.d.ts +3 -1
  49. package/dist/composables/useTouchHold.js +9 -51
  50. package/dist/composables/useZoomPan.js +4 -6
  51. package/dist/index.d.ts +9 -0
  52. package/dist/index.js +180 -152
  53. package/package.json +1 -1
  54. package/src/component-names.ts +1 -0
  55. package/src/components/AppShellContextNav.vue +3 -2
  56. package/src/components/LpAppShell.vue +10 -1
  57. package/src/components/LpChart.vue +2 -2
  58. package/src/components/LpDrawer.vue +121 -54
  59. package/src/components/LpLightbox.vue +33 -20
  60. package/src/components/LpMapPicker.vue +22 -64
  61. package/src/components/LpRangeCalendar.vue +4 -5
  62. package/src/components/LpScrollStrip.vue +96 -0
  63. package/src/components/LpSidebar.vue +3 -3
  64. package/src/components/LpSidebarNav.vue +18 -8
  65. package/src/components/LpTabs.vue +47 -19
  66. package/src/components/LpVideoTrim.vue +35 -46
  67. package/src/composables/gesture.ts +314 -0
  68. package/src/composables/scroll.ts +20 -9
  69. package/src/composables/useAppUpdate.ts +156 -0
  70. package/src/composables/useGesture.ts +451 -0
  71. package/src/composables/usePaintSelect.ts +4 -5
  72. package/src/composables/useScrollStrip.ts +249 -0
  73. package/src/composables/useTouchHold.ts +15 -73
  74. package/src/composables/useZoomPan.ts +6 -9
  75. package/src/index.ts +27 -0
  76. package/src/tokens/effects.css +40 -0
  77. package/dist/assets/LpTabs-Bh7a-Bdl.css +0 -18
  78. package/dist/assets/LpVideoTrim-CMoUw3dJ.css +0 -8
  79. package/dist/chunks/AppShellContextNav-C6Ho2mof.js +0 -49
@@ -4,13 +4,15 @@ import { clamp } from "../composables/clamp.js";
4
4
  import { DialogRoot, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription } from "reka-ui";
5
5
  import { useLabels } from "../composables/useLpConfig.js";
6
6
  import { useZoomPan } from "../composables/useZoomPan.js";
7
+ import { _ as _sfc_main$5 } from "./LpScrollStrip-D4tsOfAQ.js";
8
+ import { createDragSession, slopFor } from "../composables/gesture.js";
7
9
  import { clickLink } from "../components/exportData.js";
8
10
  import { isVideoItem, fileNameOf } from "../components/lightbox.js";
9
11
  import { _ as _sfc_main$2 } from "./LpCopyButton-BGzw95Xc.js";
10
12
  import { _ as _sfc_main$1 } from "./LpIcon-CxHFPwKt.js";
11
13
  import { _ as _sfc_main$4 } from "./LpLoader-Bf1yZwaU.js";
12
14
  import { _ as _sfc_main$3 } from "./LpVideoPlayer-FMuxTAU8.js";
13
- import { _ as _sfc_main$5 } from "./VideoThumb-BfDkIXqE.js";
15
+ import { _ as _sfc_main$6 } from "./VideoThumb-BfDkIXqE.js";
14
16
  import { useModalLayer } from "../components/modalDepth.js";
15
17
  import { inTextField } from "../composables/textEntry.js";
16
18
  import { useView, usePortalTarget, useOutsideGuard, viewDocument } from "../composables/useView.js";
@@ -56,8 +58,9 @@ const _hoisted_20 = {
56
58
  key: 1,
57
59
  class: "truncate text-xs text-white/55"
58
60
  };
59
- const _hoisted_21 = ["data-index", "aria-label", "onClick"];
60
- const _hoisted_22 = ["src", "alt"];
61
+ const _hoisted_21 = { class: "mx-auto flex w-max gap-2 p-1" };
62
+ const _hoisted_22 = ["data-index", "aria-label", "onClick"];
63
+ const _hoisted_23 = ["src", "alt"];
61
64
  const WHEEL_STEP = 60;
62
65
  const OWNS_KEYS = "input, textarea, select, [contenteditable]:not([contenteditable='false']), [role='textbox'], [role='searchbox'], [role='combobox']";
63
66
  const BTN = "flex size-9 items-center justify-center rounded-control text-white/80 outline-none transition-colors duration-[var(--duration-fast)] hover:bg-white/15 hover:text-white focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40";
@@ -182,8 +185,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
182
185
  if (!ok) failed.value = true;
183
186
  }
184
187
  function scrollThumbIntoView() {
185
- const el = stripEl.value?.querySelector(`[data-index="${current.value}"]`);
186
- el?.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" });
188
+ const el = stripEl.value?.scroller?.querySelector(`[data-index="${current.value}"]`);
189
+ stripEl.value?.reveal(el, { block: "center" });
187
190
  }
188
191
  function close() {
189
192
  emit("update:open", false);
@@ -250,37 +253,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
250
253
  rotation.value = (rotation.value + 90) % 360;
251
254
  zoom.reset();
252
255
  }
253
- let swipeStart = null;
256
+ let swipe = null;
254
257
  const fingers = /* @__PURE__ */ new Set();
258
+ function startSwipe(e) {
259
+ swipe = createDragSession({ x: e.clientX, y: e.clientY }, e.timeStamp, { slop: slopFor(e.pointerType), axis: "x" });
260
+ }
255
261
  function onPointerDown(e) {
256
262
  fingers.add(e.pointerId);
257
263
  if (fingers.size > 1) {
258
- swipeStart = null;
264
+ swipe = null;
259
265
  if (!isVideo.value) zoom.onPointerDown(e);
260
266
  return;
261
267
  }
262
268
  if (isVideo.value) {
263
- swipeStart = e.target.closest?.("[data-lp-player-controls]") ? null : { x: e.clientX, y: e.clientY };
269
+ if (e.target.closest?.("[data-lp-player-controls]")) swipe = null;
270
+ else startSwipe(e);
264
271
  return;
265
272
  }
266
273
  zoom.onPointerDown(e);
267
- swipeStart = zoom.zoomed.value ? null : { x: e.clientX, y: e.clientY };
274
+ if (zoom.zoomed.value) swipe = null;
275
+ else startSwipe(e);
276
+ }
277
+ function onPointerMove(e) {
278
+ if (!isVideo.value) zoom.onPointerMove(e);
279
+ if (swipe?.move({ x: e.clientX, y: e.clientY }, e.timeStamp).phase === "rejected") swipe = null;
268
280
  }
269
281
  function onPointerCancel(e) {
270
282
  fingers.delete(e.pointerId);
271
- swipeStart = null;
283
+ swipe = null;
272
284
  if (!isVideo.value) zoom.onPointerUp(e);
273
285
  }
274
286
  function onPointerUp(e) {
275
287
  fingers.delete(e.pointerId);
276
288
  if (!isVideo.value) zoom.onPointerUp(e);
277
- if (!swipeStart) return;
278
- const dx = e.clientX - swipeStart.x;
279
- const dy = e.clientY - swipeStart.y;
280
- swipeStart = null;
281
- if (Math.abs(dx) > 60 && Math.abs(dx) > Math.abs(dy) * 1.5) {
282
- go(current.value + (dx < 0 ? 1 : -1));
283
- }
289
+ const ended = swipe?.end({ x: e.clientX, y: e.clientY }, e.timeStamp, { axis: "x" });
290
+ swipe = null;
291
+ if (ended?.swipe === "left") go(current.value + 1);
292
+ else if (ended?.swipe === "right") go(current.value - 1);
284
293
  }
285
294
  function onDoubleClick(e) {
286
295
  if (isVideo.value) return;
@@ -366,7 +375,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
366
375
  return (_ctx, _cache) => {
367
376
  return openBlock(), createBlock(unref(DialogRoot), {
368
377
  open: __props.open,
369
- "onUpdate:open": _cache[10] || (_cache[10] = (v) => emit("update:open", v))
378
+ "onUpdate:open": _cache[9] || (_cache[9] = (v) => emit("update:open", v))
370
379
  }, {
371
380
  default: withCtx(() => [
372
381
  createVNode(unref(DialogPortal), { to: unref(portalTo) }, {
@@ -481,8 +490,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
481
490
  class: normalizeClass(["relative flex min-h-0 flex-1 touch-none items-center justify-center overflow-hidden", isPanning.value ? "cursor-grabbing" : isZoomed.value ? "cursor-grab" : ""]),
482
491
  onWheel: onStageWheel,
483
492
  onPointerdown: onPointerDown,
484
- onPointermove: _cache[9] || (_cache[9] = //@ts-ignore
485
- (...args) => unref(zoom).onPointerMove && unref(zoom).onPointerMove(...args)),
493
+ onPointermove: onPointerMove,
486
494
  onPointerup: onPointerUp,
487
495
  onPointercancel: onPointerCancel,
488
496
  onDblclick: onDoubleClick,
@@ -574,38 +582,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
574
582
  item.value.description ? (openBlock(), createElementBlock("p", _hoisted_20, toDisplayString(item.value.description), 1)) : createCommentVNode("", true)
575
583
  ])) : createCommentVNode("", true)
576
584
  ]),
577
- showStrip.value && total.value > 1 ? (openBlock(), createElementBlock("div", {
585
+ showStrip.value && total.value > 1 ? (openBlock(), createBlock(_sfc_main$5, {
578
586
  key: 0,
579
587
  ref_key: "stripEl",
580
588
  ref: stripEl,
581
- class: "lp-scrollbar-none flex justify-start gap-2 overflow-x-auto sm:justify-center"
582
- }, [
583
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (entry, i) => {
584
- return openBlock(), createElementBlock("button", {
585
- key: entry.src + i,
586
- "data-index": i,
587
- type: "button",
588
- style: normalizeStyle({ "--thumb-delay": `${Math.min(i * 30, 240)}ms` }),
589
- class: normalizeClass(["relative size-14 shrink-0 overflow-hidden rounded-control outline-none ring-2 transition-[opacity,box-shadow,scale] duration-[var(--duration-fast)] hover:scale-105 focus-visible:ring-ring animate-[lightbox-chrome-in_var(--duration-medium)_var(--ease-emphasized)_both] [animation-delay:var(--thumb-delay)] motion-reduce:animate-none", i === current.value ? "opacity-100 ring-brand" : "opacity-45 ring-transparent hover:opacity-80"]),
590
- "aria-label": entry.title ?? position(i),
591
- onClick: ($event) => go(i)
592
- }, [
593
- unref(isVideoItem)(entry) ? (openBlock(), createBlock(_sfc_main$5, {
594
- key: 0,
595
- item: entry,
596
- compact: "",
597
- alt: entry.title ?? "",
598
- "media-class": covered(i) ? "scale-110 blur-md" : void 0
599
- }, null, 8, ["item", "alt", "media-class"])) : (openBlock(), createElementBlock("img", {
600
- key: 1,
601
- src: entry.thumb ?? entry.src,
602
- alt: entry.title ?? "",
603
- class: normalizeClass(["size-full object-cover", covered(i) ? "scale-110 blur-md" : ""]),
604
- draggable: "false"
605
- }, null, 10, _hoisted_22))
606
- ], 14, _hoisted_21);
607
- }), 128))
608
- ], 512)) : createCommentVNode("", true)
589
+ buttons: false
590
+ }, {
591
+ default: withCtx(() => [
592
+ createElementVNode("div", _hoisted_21, [
593
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (entry, i) => {
594
+ return openBlock(), createElementBlock("button", {
595
+ key: entry.src + i,
596
+ "data-index": i,
597
+ type: "button",
598
+ style: normalizeStyle({ "--thumb-delay": `${Math.min(i * 30, 240)}ms` }),
599
+ class: normalizeClass(["relative size-14 shrink-0 overflow-hidden rounded-control outline-none ring-2 transition-[opacity,box-shadow,scale] duration-[var(--duration-fast)] hover:scale-105 focus-visible:ring-ring animate-[lightbox-chrome-in_var(--duration-medium)_var(--ease-emphasized)_both] [animation-delay:var(--thumb-delay)] motion-reduce:animate-none", i === current.value ? "opacity-100 ring-brand" : "opacity-45 ring-transparent hover:opacity-80"]),
600
+ "aria-label": entry.title ?? position(i),
601
+ onClick: ($event) => go(i)
602
+ }, [
603
+ unref(isVideoItem)(entry) ? (openBlock(), createBlock(_sfc_main$6, {
604
+ key: 0,
605
+ item: entry,
606
+ compact: "",
607
+ alt: entry.title ?? "",
608
+ "media-class": covered(i) ? "scale-110 blur-md" : void 0
609
+ }, null, 8, ["item", "alt", "media-class"])) : (openBlock(), createElementBlock("img", {
610
+ key: 1,
611
+ src: entry.thumb ?? entry.src,
612
+ alt: entry.title ?? "",
613
+ class: normalizeClass(["size-full object-cover", covered(i) ? "scale-110 blur-md" : ""]),
614
+ draggable: "false"
615
+ }, null, 10, _hoisted_23))
616
+ ], 14, _hoisted_22);
617
+ }), 128))
618
+ ])
619
+ ]),
620
+ _: 1
621
+ }, 512)) : createCommentVNode("", true)
609
622
  ])
610
623
  ]),
611
624
  _: 3
@@ -1,6 +1,8 @@
1
1
  import { defineComponent, computed, ref, watch, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, normalizeStyle, createVNode, createCommentVNode, createBlock, toDisplayString } from "vue";
2
2
  import { clamp } from "../composables/clamp.js";
3
- import { prefersReducedMotion } from "../composables/easing.js";
3
+ import { createDragSession, slopFor } from "../composables/gesture.js";
4
+ import { glide } from "../composables/useGesture.js";
5
+ import { nodeWindow } from "../composables/realm.js";
4
6
  import { OSM_TILES, project, tileUrl, unproject } from "../components/address.js";
5
7
  import { _ as _sfc_main$1 } from "./LpIcon-CxHFPwKt.js";
6
8
  import { _ as _sfc_main$2 } from "./LpLoader-Bf1yZwaU.js";
@@ -185,72 +187,37 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
185
187
  return unproject(origin.value.x + at.x, origin.value.y + at.y, level.value, tileSize.value);
186
188
  }
187
189
  const panning = ref(false);
188
- let moved = false;
189
- let last = { x: 0, y: 0 };
190
- let velocity = { x: 0, y: 0 };
191
- let lastMove = 0;
192
- let glideFrame;
190
+ let session = null;
191
+ let coast = null;
193
192
  function stopGlide() {
194
- if (glideFrame !== void 0) cancelAnimationFrame(glideFrame);
195
- glideFrame = void 0;
196
- velocity = { x: 0, y: 0 };
193
+ coast?.stop();
194
+ coast = null;
197
195
  }
198
196
  function onPointerDown(e) {
199
197
  if (props.disabled || e.button !== 0 || zooming.value) return;
200
198
  stopGlide();
201
199
  panning.value = true;
202
- moved = false;
203
- last = { x: e.clientX, y: e.clientY };
204
- lastMove = performance.now();
200
+ session = createDragSession({ x: e.clientX, y: e.clientY }, e.timeStamp, { slop: slopFor(e.pointerType) });
205
201
  e.currentTarget.setPointerCapture(e.pointerId);
206
202
  }
207
203
  function onPointerMove(e) {
208
- if (!panning.value) return;
209
- const dx = e.clientX - last.x;
210
- const dy = e.clientY - last.y;
211
- if (Math.abs(dx) > 2 || Math.abs(dy) > 2) moved = true;
212
- const now = performance.now();
213
- const dt = now - lastMove;
214
- if (dt > 0) {
215
- velocity = {
216
- x: velocity.x * 0.7 + dx / dt * 0.3,
217
- y: velocity.y * 0.7 + dy / dt * 0.3
218
- };
219
- }
220
- lastMove = now;
221
- last = { x: e.clientX, y: e.clientY };
222
- panBy(-dx, -dy);
204
+ if (!panning.value || !session) return;
205
+ const frame = session.move({ x: e.clientX, y: e.clientY }, e.timeStamp);
206
+ if (frame.phase !== "drag") return;
207
+ panBy(-(frame.first ? frame.movement.x : frame.delta.x), -(frame.first ? frame.movement.y : frame.delta.y));
223
208
  }
224
209
  function onPointerUp(e) {
225
- if (!panning.value) return;
210
+ if (!panning.value || !session) return;
226
211
  panning.value = false;
227
212
  e.currentTarget.releasePointerCapture?.(e.pointerId);
228
- if (!moved && !props.disabled) {
229
- emit("update:modelValue", toLatLon(viewportPoint(e)));
230
- return;
231
- }
232
- if (performance.now() - lastMove > 90) velocity = { x: 0, y: 0 };
233
- glide();
234
- }
235
- function glide() {
236
- if (prefersReducedMotion() || Math.hypot(velocity.x, velocity.y) < 0.05) {
237
- velocity = { x: 0, y: 0 };
213
+ const end = session.end({ x: e.clientX, y: e.clientY }, e.timeStamp);
214
+ session = null;
215
+ if (end.phase !== "drag") {
216
+ if (!props.disabled && e.type !== "pointercancel") emit("update:modelValue", toLatLon(viewportPoint(e)));
238
217
  return;
239
218
  }
240
- let previous = performance.now();
241
- const step = (now) => {
242
- const dt = Math.min(now - previous, 32);
243
- previous = now;
244
- const friction = Math.exp(-dt / 240);
245
- velocity = { x: velocity.x * friction, y: velocity.y * friction };
246
- panBy(-velocity.x * dt, -velocity.y * dt);
247
- if (Math.hypot(velocity.x, velocity.y) > 0.015) {
248
- glideFrame = requestAnimationFrame(step);
249
- } else {
250
- stopGlide();
251
- }
252
- };
253
- glideFrame = requestAnimationFrame(step);
219
+ if (e.type === "pointercancel") return;
220
+ coast = glide(end.velocity, (dx, dy) => panBy(-dx, -dy), { win: nodeWindow(e.currentTarget) });
254
221
  }
255
222
  function panBy(dx, dy) {
256
223
  mapCenter.value = unproject(
@@ -4,7 +4,7 @@ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
5
  import { _ as _sfc_main$1 } from "./LpContextMenu-DEFirphS.js";
6
6
  import { _ as _sfc_main$3 } from "./LpIcon-CxHFPwKt.js";
7
- import { _ as _sfc_main$4 } from "./LpLightbox-a24V_0Wk.js";
7
+ import { _ as _sfc_main$4 } from "./LpLightbox-DPgz7IsT.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-BvVoF-PO.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-D1E7rQzw.js";
8
- import { _ as _sfc_main$4 } from "./LpSidebar-DQtCYlT4.js";
8
+ import { _ as _sfc_main$4 } from "./LpSidebar-BKhVDsMt.js";
9
9
  const _hoisted_1 = { class: "flex items-center gap-2" };
10
10
  const _sfc_main = /* @__PURE__ */ defineComponent({
11
11
  __name: "LpModalNav",
@@ -1,4 +1,5 @@
1
1
  import { defineComponent, shallowRef, watch, computed, ref, onMounted, onBeforeUnmount, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, normalizeClass, createElementVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, nextTick } from "vue";
2
+ import { HOLD_TO_DRAG_MS, TOUCH_SLOP } from "../composables/gesture.js";
2
3
  import { today, getLocalTimeZone } from "@internationalized/date";
3
4
  import { RangeCalendarRoot, RangeCalendarHeader, RangeCalendarPrev, RangeCalendarHeading, RangeCalendarNext, RangeCalendarGrid, RangeCalendarGridHead, RangeCalendarGridRow, RangeCalendarHeadCell, RangeCalendarGridBody, RangeCalendarCell, RangeCalendarCellTrigger } from "reka-ui";
4
5
  import { useLabels } from "../composables/useLpConfig.js";
@@ -60,8 +61,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
61
  });
61
62
  }
62
63
  const root = ref(null);
63
- const HOLD_MS = 320;
64
- const SLOP_PX = 8;
65
64
  let anchor = null;
66
65
  let pointerId = -1;
67
66
  let armed = false;
@@ -113,12 +112,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
113
112
  dragging.value = true;
114
113
  draft.value = toReka({ start: day, end: day });
115
114
  navigator.vibrate?.(8);
116
- }, HOLD_MS);
115
+ }, HOLD_TO_DRAG_MS);
117
116
  }
118
117
  function onPointerMove(e) {
119
118
  if (anchor === null || e.pointerId !== pointerId) return;
120
119
  if (!armed) {
121
- if (Math.hypot(e.clientX - startX, e.clientY - startY) > SLOP_PX) reset();
120
+ if (Math.hypot(e.clientX - startX, e.clientY - startY) > TOUCH_SLOP) reset();
122
121
  return;
123
122
  }
124
123
  const day = cellAt(e.clientX, e.clientY)?.dataset.value;
@@ -0,0 +1,78 @@
1
+ import { defineComponent, useAttrs, computed, ref, openBlock, createElementBlock, normalizeStyle, unref, normalizeClass, createBlock, resolveDynamicComponent, mergeProps, withCtx, renderSlot, Fragment, renderList, createElementVNode, withModifiers, createVNode, createCommentVNode } from "vue";
2
+ import { useMediaQuery } from "../composables/useMediaQuery.js";
3
+ import { useScrollStrip } from "../composables/useScrollStrip.js";
4
+ import { _ as _sfc_main$1 } from "./LpIcon-CxHFPwKt.js";
5
+ const _hoisted_1 = ["data-lp-strip-button", "onClick"];
6
+ const BUTTON = "absolute top-1/2 z-10 grid size-7 -translate-y-1/2 place-items-center rounded-full border border-line bg-surface-raised text-muted shadow-sm outline-none transition-[opacity,color] duration-(--duration-fast) ease-(--ease-emphasized) hover:text-ink motion-reduce:transition-none";
7
+ const _sfc_main = /* @__PURE__ */ defineComponent({
8
+ ...{ inheritAttrs: false },
9
+ __name: "LpScrollStrip",
10
+ props: {
11
+ contentClass: {},
12
+ fade: { type: Boolean, default: true },
13
+ buttons: { type: [Boolean, String], default: "auto" },
14
+ wheel: { type: Boolean, default: true },
15
+ drag: { type: Boolean, default: true },
16
+ as: { default: "div" },
17
+ inline: { type: Boolean, default: false }
18
+ },
19
+ setup(__props, { expose: __expose }) {
20
+ const attrs = useAttrs();
21
+ const rowAttrs = computed(() => {
22
+ const { class: _class, style: _style, ...rest } = attrs;
23
+ return rest;
24
+ });
25
+ const props = __props;
26
+ const scroller = ref(null);
27
+ const strip = useScrollStrip(scroller, { wheel: () => props.wheel, drag: () => props.drag });
28
+ const fine = useMediaQuery("(hover: hover) and (pointer: fine)");
29
+ const withButtons = computed(() => props.buttons === true || props.buttons === "auto" && fine.value);
30
+ __expose({ scroller, page: strip.page, scrollBy: strip.scrollBy, reveal: strip.reveal, measure: strip.measure, overflowing: strip.overflowing, atStart: strip.atStart, atEnd: strip.atEnd });
31
+ return (_ctx, _cache) => {
32
+ return openBlock(), createElementBlock("div", {
33
+ class: normalizeClass(["group/strip relative min-w-0", [__props.inline ? "inline-flex max-w-full" : "flex", unref(attrs).class]]),
34
+ style: normalizeStyle(unref(attrs).style),
35
+ "data-lp-strip": ""
36
+ }, [
37
+ (openBlock(), createBlock(resolveDynamicComponent(__props.as), mergeProps(rowAttrs.value, {
38
+ ref_key: "scroller",
39
+ ref: scroller,
40
+ class: ["lp-scrollbar-none flex min-w-0 flex-1 overflow-x-auto", [__props.contentClass, __props.fade ? "lp-strip-fade" : "", unref(strip).dragging.value ? "cursor-grabbing select-none" : ""]],
41
+ "data-lp-more-start": unref(strip).overflowing.value && !unref(strip).atStart.value ? "" : void 0,
42
+ "data-lp-more-end": unref(strip).overflowing.value && !unref(strip).atEnd.value ? "" : void 0,
43
+ "data-lp-strip-row": ""
44
+ }), {
45
+ default: withCtx(() => [
46
+ renderSlot(_ctx.$slots, "default")
47
+ ]),
48
+ _: 3
49
+ }, 16, ["class", "data-lp-more-start", "data-lp-more-end"])),
50
+ withButtons.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, renderList([-1, 1], (side) => {
51
+ return createElementVNode("button", {
52
+ key: side,
53
+ type: "button",
54
+ tabindex: "-1",
55
+ "aria-hidden": "true",
56
+ class: normalizeClass([
57
+ BUTTON,
58
+ side < 0 ? "left-0.5" : "right-0.5",
59
+ unref(strip).overflowing.value && !(side < 0 ? unref(strip).atStart.value : unref(strip).atEnd.value) ? __props.buttons === true ? "opacity-100" : "opacity-0 group-hover/strip:opacity-100" : "pointer-events-none opacity-0"
60
+ ]),
61
+ "data-lp-strip-button": side < 0 ? "prev" : "next",
62
+ onPointerdown: _cache[0] || (_cache[0] = withModifiers(() => {
63
+ }, ["prevent"])),
64
+ onClick: ($event) => unref(strip).page(side)
65
+ }, [
66
+ createVNode(_sfc_main$1, {
67
+ name: side < 0 ? "lucide:chevron-left" : "lucide:chevron-right",
68
+ size: 16
69
+ }, null, 8, ["name"])
70
+ ], 42, _hoisted_1);
71
+ }), 64)) : createCommentVNode("", true)
72
+ ], 6);
73
+ };
74
+ }
75
+ });
76
+ export {
77
+ _sfc_main as _
78
+ };
@@ -4,11 +4,11 @@ import { useHotkeys, parseCombo } from "../composables/useHotkeys.js";
4
4
  import { startPointerDrag } from "../composables/pointerDrag.js";
5
5
  import { usePersisted } from "../composables/usePersisted.js";
6
6
  import { useLabels } from "../composables/useLpConfig.js";
7
- import { _ as _sfc_main$5 } from "./LpDrawer-iRHwJOGn.js";
7
+ import { _ as _sfc_main$5 } from "./LpDrawer-BkWjFdV0.js";
8
8
  import { _ as _sfc_main$2 } from "./LpIcon-CxHFPwKt.js";
9
9
  import { _ as _sfc_main$3 } from "./LpInput-DGMpxrcg.js";
10
10
  import { _ as _sfc_main$1 } from "./LpTooltip-BKde8Xjv.js";
11
- import { _ as _sfc_main$4 } from "./LpSidebarNav-CFcI7--7.js";
11
+ import { _ as _sfc_main$4 } from "./LpSidebarNav-DbCap8z1.js";
12
12
  const _hoisted_1 = ["data-compact", "aria-label"];
13
13
  const _hoisted_2 = {
14
14
  key: 0,
@@ -55,7 +55,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
55
55
  search: {},
56
56
  loading: { type: Boolean },
57
57
  skeletonRows: { default: 6 },
58
- skeletonHeader: { type: Boolean, default: true },
58
+ skeletonHeader: { type: Boolean, default: false },
59
59
  responsive: { type: Boolean, default: false },
60
60
  open: { type: Boolean },
61
61
  mobileBreakpoint: { default: "md" },
@@ -1,4 +1,4 @@
1
- import { defineComponent, computed, ref, openBlock, createBlock, mergeProps, unref, withCtx, createElementBlock, createElementVNode, createCommentVNode, Fragment, renderList, toDisplayString, createVNode, normalizeClass, createTextVNode, createSlots, renderSlot } from "vue";
1
+ import { defineComponent, computed, ref, openBlock, createBlock, mergeProps, unref, withCtx, createElementBlock, createElementVNode, createCommentVNode, Fragment, renderList, normalizeStyle, toDisplayString, createVNode, normalizeClass, createTextVNode, createSlots, renderSlot } from "vue";
2
2
  import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent } from "reka-ui";
3
3
  import { _ as _sfc_main$5 } from "./LpBadge-Bh5roBr_.js";
4
4
  import "../components/commandSearch.js";
@@ -17,25 +17,30 @@ const _hoisted_1 = {
17
17
  key: 0,
18
18
  class: "flex items-center gap-3 px-1"
19
19
  };
20
- const _hoisted_2 = { class: "space-y-1" };
20
+ const _hoisted_2 = { class: "flex flex-col gap-1" };
21
21
  const _hoisted_3 = {
22
+ key: 0,
23
+ class: "px-3 pb-1 pt-3"
24
+ };
25
+ const _hoisted_4 = { class: "flex h-9 items-center gap-3 px-3" };
26
+ const _hoisted_5 = {
22
27
  key: 0,
23
28
  class: "flex flex-col gap-0.5"
24
29
  };
25
- const _hoisted_4 = {
30
+ const _hoisted_6 = {
26
31
  key: 0,
27
32
  class: "px-2 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted"
28
33
  };
29
- const _hoisted_5 = {
34
+ const _hoisted_7 = {
30
35
  key: 0,
31
36
  class: "flex flex-col gap-0.5"
32
37
  };
33
- const _hoisted_6 = {
38
+ const _hoisted_8 = {
34
39
  key: 0,
35
40
  class: "mx-3 mb-1 border-t border-line"
36
41
  };
37
- const _hoisted_7 = { class: "min-w-0 flex-1 truncate text-left" };
38
- const _hoisted_8 = {
42
+ const _hoisted_9 = { class: "min-w-0 flex-1 truncate text-left" };
43
+ const _hoisted_10 = {
39
44
  key: 2,
40
45
  class: "px-2 pb-1 pt-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted"
41
46
  };
@@ -49,7 +54,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
49
54
  itemActive: {},
50
55
  loading: { type: Boolean },
51
56
  skeletonRows: { default: 6 },
52
- skeletonHeader: { type: Boolean, default: true },
57
+ skeletonHeader: { type: Boolean, default: false },
53
58
  collapsedKeys: { default: () => [] },
54
59
  hoverFollow: { type: Boolean, default: false },
55
60
  compact: { type: Boolean },
@@ -172,13 +177,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
172
177
  if (item.children?.length && !item.to && !item.href) toggle(item);
173
178
  emit("activate", item);
174
179
  }
180
+ const SKELETON_WIDTHS = ["55%", "70%", "45%", "62%", "50%", "68%"];
175
181
  const { class: rootClass, attrs: rest } = useMergedAttrs(
176
182
  "flex min-h-0 flex-1 flex-col gap-4"
177
183
  );
178
184
  return (_ctx, _cache) => {
179
185
  return __props.loading ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
180
186
  key: 0,
181
- class: unref(rootClass)
187
+ class: [unref(rootClass), "overflow-hidden"]
182
188
  }, unref(rest)), {
183
189
  default: withCtx(() => [
184
190
  __props.skeletonHeader ? (openBlock(), createElementBlock("div", _hoisted_1, [..._cache[1] || (_cache[1] = [
@@ -190,10 +196,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
190
196
  ])])) : createCommentVNode("", true),
191
197
  createElementVNode("div", _hoisted_2, [
192
198
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.skeletonRows, (n) => {
193
- return openBlock(), createElementBlock("div", {
194
- key: n,
195
- class: "lp-skeleton-item h-9 rounded-control bg-surface-soft"
196
- });
199
+ return openBlock(), createElementBlock(Fragment, { key: n }, [
200
+ n === 4 ? (openBlock(), createElementBlock("div", _hoisted_3, [..._cache[2] || (_cache[2] = [
201
+ createElementVNode("div", { class: "lp-skeleton-item h-2.5 w-20 rounded-small bg-surface-soft/60" }, null, -1)
202
+ ])])) : createCommentVNode("", true),
203
+ createElementVNode("div", _hoisted_4, [
204
+ _cache[3] || (_cache[3] = createElementVNode("div", { class: "lp-skeleton-item size-4 shrink-0 rounded-small bg-surface-soft" }, null, -1)),
205
+ createElementVNode("div", {
206
+ class: "lp-skeleton-item h-3 rounded-small bg-surface-soft",
207
+ style: normalizeStyle({ width: SKELETON_WIDTHS[(n - 1) % SKELETON_WIDTHS.length] })
208
+ }, null, 4)
209
+ ])
210
+ ], 64);
197
211
  }), 128))
198
212
  ])
199
213
  ]),
@@ -209,8 +223,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
209
223
  class: "contents",
210
224
  onKeydown: onKey
211
225
  }, [
212
- __props.pinned.length ? (openBlock(), createElementBlock("div", _hoisted_3, [
213
- !__props.compact ? (openBlock(), createElementBlock("p", _hoisted_4, toDisplayString(__props.labels.pinned), 1)) : createCommentVNode("", true),
226
+ __props.pinned.length ? (openBlock(), createElementBlock("div", _hoisted_5, [
227
+ !__props.compact ? (openBlock(), createElementBlock("p", _hoisted_6, toDisplayString(__props.labels.pinned), 1)) : createCommentVNode("", true),
214
228
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.pinned, (item) => {
215
229
  return openBlock(), createBlock(_sfc_main$3, {
216
230
  key: `pinned:${item.id}`,
@@ -230,7 +244,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
230
244
  return openBlock(), createElementBlock(Fragment, {
231
245
  key: sectionKey(section) || si
232
246
  }, [
233
- __props.compact && section.collapsible && section.title ? (openBlock(), createElementBlock("div", _hoisted_5, [
247
+ __props.compact && section.collapsible && section.title ? (openBlock(), createElementBlock("div", _hoisted_7, [
234
248
  createVNode(_sfc_main$3, {
235
249
  item: sectionItem(section),
236
250
  active: false,
@@ -252,7 +266,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
252
266
  "onUpdate:open": (o) => emit("toggle-section", sectionKey(section), !o)
253
267
  }, {
254
268
  default: withCtx(() => [
255
- __props.compact && (si > 0 || __props.pinned.length) ? (openBlock(), createElementBlock("div", _hoisted_6)) : !__props.compact && section.title && section.collapsible ? (openBlock(), createBlock(unref(CollapsibleTrigger), {
269
+ __props.compact && (si > 0 || __props.pinned.length) ? (openBlock(), createElementBlock("div", _hoisted_8)) : !__props.compact && section.title && section.collapsible ? (openBlock(), createBlock(unref(CollapsibleTrigger), {
256
270
  key: 1,
257
271
  "data-lp-nav-row": "",
258
272
  class: "group/section mt-2 flex cursor-pointer items-center gap-2 rounded-control px-2 py-1 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:bg-ink/[0.04] hover:text-ink focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"
@@ -264,7 +278,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
264
278
  size: 14,
265
279
  class: "shrink-0"
266
280
  }, null, 8, ["name"])) : createCommentVNode("", true),
267
- createElementVNode("span", _hoisted_7, toDisplayString(section.title), 1),
281
+ createElementVNode("span", _hoisted_9, toDisplayString(section.title), 1),
268
282
  section.items.some(unref(waiting)) ? (openBlock(), createElementBlock("span", {
269
283
  key: 1,
270
284
  class: normalizeClass(["size-1.5 shrink-0 rounded-full bg-brand transition-opacity duration-[var(--duration-fast)] motion-reduce:transition-none", isOpen(section) ? "opacity-0" : "opacity-100"])
@@ -286,7 +300,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
286
300
  })
287
301
  ]),
288
302
  _: 2
289
- }, 1024)) : !__props.compact && section.title ? (openBlock(), createElementBlock("p", _hoisted_8, toDisplayString(section.title), 1)) : createCommentVNode("", true),
303
+ }, 1024)) : !__props.compact && section.title ? (openBlock(), createElementBlock("p", _hoisted_10, toDisplayString(section.title), 1)) : createCommentVNode("", true),
290
304
  createVNode(unref(CollapsibleContent), { class: "flex flex-col gap-0.5 overflow-hidden data-[state=open]:animate-[collapsible-down_260ms_var(--ease-emphasized)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-emphasized)] motion-reduce:animate-none" }, {
291
305
  default: withCtx(() => [
292
306
  (openBlock(true), createElementBlock(Fragment, null, renderList(section.items, (item) => {
@@ -1 +1 @@
1
- export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LpActionBar", "LpActivityLine", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBottomNav", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpCodeDisplay", "LpCollapse", "LpColorPicker", "LpCommandPalette", "LpCommandScope", "LpConfirmDialog", "LpConfirmHost", "LpContextMenu", "LpContextSwitcher", "LpCopyButton", "LpCountdown", "LpDataList", "LpDatePicker", "LpDateRangePicker", "LpDisclosure", "LpDivider", "LpDock", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEditable", "LpEmptyState", "LpFieldNotice", "LpFileTree", "LpFormField", "LpFrame", "LpGauge", "LpGlowBorder", "LpHintExample", "LpHintLayer", "LpHints", "LpHoverCard", "LpIcon", "LpIdenticon", "LpImageEditor", "LpInfraNode", "LpInput", "LpInspector", "LpKeys", "LpLightbox", "LpLink", "LpLoader", "LpLogInspector", "LpLogViewer", "LpMagnetic", "LpMapPicker", "LpMasonry", "LpMediaGallery", "LpModal", "LpModalNav", "LpNotificationBell", "LpNotificationFeed", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPageScrollbar", "LpPagination", "LpPaletteFacts", "LpPaletteHeader", "LpPalettePreview", "LpPaletteStats", "LpPaletteSwatches", "LpPaletteTheme", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPipeline", "LpPopover", "LpProgress", "LpQuota", "LpRadio", "LpRadioGroup", "LpRangeCalendar", "LpRangeSlider", "LpRelativeTime", "LpRepeater", "LpRevealOnScroll", "LpRollingText", "LpScramble", "LpScrollArea", "LpSecretField", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShaderBackdrop", "LpShift", "LpShinyText", "LpShortcutsDialog", "LpSidebar", "LpSkeleton", "LpSlider", "LpSparkline", "LpSpotlight", "LpStat", "LpStatus", "LpStepMark", "LpStepper", "LpSwap", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTagsInput", "LpTextReveal", "LpTextarea", "LpThemeProvider", "LpThemeStudio", "LpThemeStudioSection", "LpThemeSwitcher", "LpTilt", "LpTimeField", "LpToaster", "LpTooltip", "LpTooltipProvider", "LpTopologyCanvas", "LpTour", "LpTruncate", "LpTypewriter", "LpUptimeBar", "LpVideoBackdrop", "LpVideoCompress", "LpVideoPlayer", "LpVideoTrim", "LpWindow", "LpWorkspaceSwitcher"];
1
+ export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LpActionBar", "LpActivityLine", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBottomNav", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpCodeDisplay", "LpCollapse", "LpColorPicker", "LpCommandPalette", "LpCommandScope", "LpConfirmDialog", "LpConfirmHost", "LpContextMenu", "LpContextSwitcher", "LpCopyButton", "LpCountdown", "LpDataList", "LpDatePicker", "LpDateRangePicker", "LpDisclosure", "LpDivider", "LpDock", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEditable", "LpEmptyState", "LpFieldNotice", "LpFileTree", "LpFormField", "LpFrame", "LpGauge", "LpGlowBorder", "LpHintExample", "LpHintLayer", "LpHints", "LpHoverCard", "LpIcon", "LpIdenticon", "LpImageEditor", "LpInfraNode", "LpInput", "LpInspector", "LpKeys", "LpLightbox", "LpLink", "LpLoader", "LpLogInspector", "LpLogViewer", "LpMagnetic", "LpMapPicker", "LpMasonry", "LpMediaGallery", "LpModal", "LpModalNav", "LpNotificationBell", "LpNotificationFeed", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPageScrollbar", "LpPagination", "LpPaletteFacts", "LpPaletteHeader", "LpPalettePreview", "LpPaletteStats", "LpPaletteSwatches", "LpPaletteTheme", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPipeline", "LpPopover", "LpProgress", "LpQuota", "LpRadio", "LpRadioGroup", "LpRangeCalendar", "LpRangeSlider", "LpRelativeTime", "LpRepeater", "LpRevealOnScroll", "LpRollingText", "LpScramble", "LpScrollArea", "LpScrollStrip", "LpSecretField", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShaderBackdrop", "LpShift", "LpShinyText", "LpShortcutsDialog", "LpSidebar", "LpSkeleton", "LpSlider", "LpSparkline", "LpSpotlight", "LpStat", "LpStatus", "LpStepMark", "LpStepper", "LpSwap", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTagsInput", "LpTextReveal", "LpTextarea", "LpThemeProvider", "LpThemeStudio", "LpThemeStudioSection", "LpThemeSwitcher", "LpTilt", "LpTimeField", "LpToaster", "LpTooltip", "LpTooltipProvider", "LpTopologyCanvas", "LpTour", "LpTruncate", "LpTypewriter", "LpUptimeBar", "LpVideoBackdrop", "LpVideoCompress", "LpVideoPlayer", "LpVideoTrim", "LpWindow", "LpWorkspaceSwitcher"];
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/AppShellContextNav-C6Ho2mof.js";
1
+ import { _ as _sfc_main } from "../chunks/AppShellContextNav-BoH4ffnC.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAppShell-BWaVRsDB.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAppShell-DlpQierx.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };