@leavepulse/ui 0.20.4 → 0.20.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{LpAddressInput-BV9M0aec.js → LpAddressInput-l2Znlwgc.js} +1 -1
- package/dist/chunks/{LpAppShell-oYlB1C9T.js → LpAppShell-D9KnS0j_.js} +2 -2
- package/dist/chunks/{LpConfirmDialog-BgaP-GJZ.js → LpConfirmDialog-gtsGL1kb.js} +1 -1
- package/dist/chunks/{LpDrawer-D1ubjU11.js → LpDrawer-CYVF8abJ.js} +1 -1
- package/dist/chunks/{LpFileTree-CmKJxz4K.js → LpFileTree-BGNzXknB.js} +1 -1
- package/dist/chunks/{LpLogViewer-CFckvccr.js → LpLogViewer-DQod8kXW.js} +1 -2
- package/dist/chunks/{LpModal-YaFleOpp.js → LpModal-BLOKvrJM.js} +1 -2
- package/dist/chunks/{LpNotificationBell-B1QTe4mK.js → LpNotificationBell-D1gdEtuI.js} +1 -1
- package/dist/chunks/{LpScrollArea-BjImFflN.js → LpScrollArea-CXy8dkTN.js} +30 -10
- package/dist/chunks/{LpSidebar-DlvoM3h6.js → LpSidebar-BaqVlOmo.js} +2 -2
- package/dist/chunks/{LpSidebarNav-Ds95Sp9b.js → LpSidebarNav-S1QPTGcg.js} +1 -1
- package/dist/chunks/{LpTable-i2AEwiPd.js → LpTable-pZmjnEti.js} +2 -1
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.js +1 -1
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpScrollArea.vue.d.ts +1 -0
- package/dist/components/LpScrollArea.vue.js +1 -1
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpTable.vue.js +1 -1
- package/dist/index.js +11 -11
- package/package.json +1 -1
- package/src/components/LpLogViewer.vue +0 -1
- package/src/components/LpModal.vue +0 -3
- package/src/components/LpScrollArea.vue +42 -12
- package/src/components/LpTable.vue +7 -1
|
@@ -6,7 +6,7 @@ import { _ as _sfc_main$3 } from "./LpButton-5VXXCjwF.js";
|
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpFormField-Bn-ZwC6z.js";
|
|
7
7
|
import { _ as _sfc_main$4 } from "./LpIcon-CCnX5_2j.js";
|
|
8
8
|
import { _ as _sfc_main$5 } from "./LpInput-BauZRyzm.js";
|
|
9
|
-
import { _ as _sfc_main$7 } from "./LpModal-
|
|
9
|
+
import { _ as _sfc_main$7 } from "./LpModal-BLOKvrJM.js";
|
|
10
10
|
import { _ as _sfc_main$6 } from "./LpSelect-D5mU4cZO.js";
|
|
11
11
|
const _hoisted_1 = { class: "flex flex-col gap-3" };
|
|
12
12
|
const _hoisted_2 = { class: "flex items-stretch gap-2" };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineComponent, computed, watch, openBlock, createElementBlock, createVNode, createSlots, withCtx, renderSlot, normalizeProps, guardReactiveProps, createElementVNode, normalizeClass, toDisplayString, createCommentVNode, createBlock } from "vue";
|
|
2
2
|
import { _ as _sfc_main$2 } from "./LpButton-5VXXCjwF.js";
|
|
3
3
|
import { _ as _sfc_main$3 } from "./LpIcon-CCnX5_2j.js";
|
|
4
|
-
import { _ as _sfc_main$4 } from "./LpScrollArea-
|
|
5
|
-
import { _ as _sfc_main$1 } from "./LpSidebar-
|
|
4
|
+
import { _ as _sfc_main$4 } from "./LpScrollArea-CXy8dkTN.js";
|
|
5
|
+
import { _ as _sfc_main$1 } from "./LpSidebar-BaqVlOmo.js";
|
|
6
6
|
const _hoisted_1 = { class: "flex h-dvh overflow-hidden bg-surface text-ink" };
|
|
7
7
|
const _hoisted_2 = { class: "flex min-w-0 flex-1 flex-col" };
|
|
8
8
|
const _hoisted_3 = { class: "flex h-16 shrink-0 items-center gap-3 border-b border-line bg-surface px-4 md:px-6" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, openBlock, createBlock, withCtx, renderSlot, createVNode, createTextVNode, toDisplayString } from "vue";
|
|
2
2
|
import { _ as _sfc_main$2 } from "./LpButton-5VXXCjwF.js";
|
|
3
|
-
import { _ as _sfc_main$1 } from "./LpModal-
|
|
3
|
+
import { _ as _sfc_main$1 } from "./LpModal-BLOKvrJM.js";
|
|
4
4
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
5
5
|
__name: "LpConfirmDialog",
|
|
6
6
|
props: {
|
|
@@ -3,7 +3,7 @@ import { usePointerSwipe } from "@vueuse/core";
|
|
|
3
3
|
import { DrawerRoot, DrawerPortal, DrawerOverlay, DrawerContent, DrawerHandle, DrawerTitle, DrawerDescription, DrawerClose } from "vaul-vue";
|
|
4
4
|
import { CLOSE_ICON } from "../components/dropdown.js";
|
|
5
5
|
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
6
|
-
import { _ as _sfc_main$2 } from "./LpScrollArea-
|
|
6
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-CXy8dkTN.js";
|
|
7
7
|
const _hoisted_1 = { class: "text-base font-semibold text-ink" };
|
|
8
8
|
const _hoisted_2 = { class: "flex flex-col gap-1" };
|
|
9
9
|
const _hoisted_3 = ["data-vaul-no-drag"];
|
|
@@ -2,7 +2,7 @@ import { defineComponent, ref, watch, computed, openBlock, createElementBlock, F
|
|
|
2
2
|
import { formatSize, sortNodes, computeStats, subtreeIds, ancestorIds } from "../components/fileTree.js";
|
|
3
3
|
import { _ as _sfc_main$1 } from "./LpEmptyState-CrfyRJUG.js";
|
|
4
4
|
import { _ as _sfc_main$3 } from "./LpFileTreeNode-DFg4PhOK.js";
|
|
5
|
-
import { _ as _sfc_main$2 } from "./LpScrollArea-
|
|
5
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-CXy8dkTN.js";
|
|
6
6
|
const _hoisted_1 = {
|
|
7
7
|
key: 0,
|
|
8
8
|
class: "flex h-full w-full min-w-0 flex-col gap-1 overflow-hidden"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, watch, nextTick, onMounted, onBeforeUnmount, openBlock, createElementBlock, createVNode, normalizeStyle, withCtx, createElementVNode, toDisplayString, createCommentVNode, Fragment, createBlock, resolveDynamicComponent, TransitionGroup, mergeProps, renderList, normalizeClass, createTextVNode, Transition } from "vue";
|
|
2
2
|
import { _ as _sfc_main$3 } from "./LpContextMenu-D0mzXqA7.js";
|
|
3
3
|
import { _ as _sfc_main$2 } from "./LpIcon-CCnX5_2j.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpScrollArea-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpScrollArea-CXy8dkTN.js";
|
|
5
5
|
const _hoisted_1 = { class: "relative overflow-hidden rounded-card border border-line bg-surface font-mono text-xs leading-relaxed" };
|
|
6
6
|
const _hoisted_2 = {
|
|
7
7
|
key: 0,
|
|
@@ -353,7 +353,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
353
353
|
createVNode(_sfc_main$1, {
|
|
354
354
|
ref_key: "scrollRef",
|
|
355
355
|
ref: scrollRef,
|
|
356
|
-
fade: "",
|
|
357
356
|
instant: "",
|
|
358
357
|
"content-class": __props.wrap ? "" : "min-w-max",
|
|
359
358
|
style: normalizeStyle({ height: __props.height }),
|
|
@@ -2,7 +2,7 @@ import { defineComponent, computed, useSlots, ref, watch, onBeforeUnmount, openB
|
|
|
2
2
|
import { DialogRoot, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose } from "reka-ui";
|
|
3
3
|
import { CLOSE_ICON } from "../components/dropdown.js";
|
|
4
4
|
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
5
|
-
import { _ as _sfc_main$2 } from "./LpScrollArea-
|
|
5
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-CXy8dkTN.js";
|
|
6
6
|
const _hoisted_1 = { class: "fixed inset-0 z-(--z-modal) flex items-center justify-center pointer-events-none" };
|
|
7
7
|
const _hoisted_2 = {
|
|
8
8
|
key: 0,
|
|
@@ -185,7 +185,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
185
185
|
renderSlot(_ctx.$slots, "default")
|
|
186
186
|
], 2)) : (openBlock(), createBlock(_sfc_main$2, {
|
|
187
187
|
key: 2,
|
|
188
|
-
fade: "",
|
|
189
188
|
class: normalizeClass(["min-h-0 flex-1 text-sm text-ink/90", resizing.value ? "[&_[data-scrollbarimpl]]:invisible" : ""]),
|
|
190
189
|
"content-class": bodyPad.value
|
|
191
190
|
}, {
|
|
@@ -5,7 +5,7 @@ import { _ as _sfc_main$4 } from "./LpContextMenu-D0mzXqA7.js";
|
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpEmptyState-CrfyRJUG.js";
|
|
6
6
|
import { _ as _sfc_main$5 } from "./LpIcon-CCnX5_2j.js";
|
|
7
7
|
import { _ as _sfc_main$1 } from "./LpPopover-8268UmlC.js";
|
|
8
|
-
import { _ as _sfc_main$3 } from "./LpScrollArea-
|
|
8
|
+
import { _ as _sfc_main$3 } from "./LpScrollArea-CXy8dkTN.js";
|
|
9
9
|
const _hoisted_1 = { class: "flex items-center justify-between gap-2 px-3 py-2.5" };
|
|
10
10
|
const _hoisted_2 = { class: "text-sm font-semibold" };
|
|
11
11
|
const _hoisted_3 = {
|
|
@@ -5,7 +5,7 @@ const FADE_PX = 14;
|
|
|
5
5
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
6
|
__name: "LpScrollArea",
|
|
7
7
|
props: {
|
|
8
|
-
fade: { type: Boolean },
|
|
8
|
+
fade: { type: Boolean, default: true },
|
|
9
9
|
instant: { type: Boolean, default: false },
|
|
10
10
|
contentClass: {},
|
|
11
11
|
barInsetTop: {}
|
|
@@ -35,21 +35,41 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
35
35
|
if (props.fade) measureEdges(event.target);
|
|
36
36
|
emit("scroll", event);
|
|
37
37
|
}
|
|
38
|
-
let
|
|
38
|
+
let edgeResize;
|
|
39
|
+
let edgeMutation;
|
|
40
|
+
function stopEdgeWatch() {
|
|
41
|
+
edgeResize?.disconnect();
|
|
42
|
+
edgeMutation?.disconnect();
|
|
43
|
+
edgeResize = void 0;
|
|
44
|
+
edgeMutation = void 0;
|
|
45
|
+
}
|
|
39
46
|
watch(
|
|
40
47
|
[viewportEl, () => props.fade],
|
|
41
48
|
([el, enabled]) => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
stopEdgeWatch();
|
|
50
|
+
if (!el || !enabled) return;
|
|
51
|
+
const remeasure = () => measureEdges(el);
|
|
52
|
+
remeasure();
|
|
53
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
54
|
+
edgeResize = new ResizeObserver(remeasure);
|
|
55
|
+
edgeResize.observe(el);
|
|
56
|
+
for (const child of Array.from(el.children)) edgeResize.observe(child);
|
|
57
|
+
}
|
|
58
|
+
if (typeof MutationObserver !== "undefined") {
|
|
59
|
+
edgeMutation = new MutationObserver(() => {
|
|
60
|
+
if (edgeResize) {
|
|
61
|
+
edgeResize.disconnect();
|
|
62
|
+
edgeResize.observe(el);
|
|
63
|
+
for (const child of Array.from(el.children)) edgeResize.observe(child);
|
|
64
|
+
}
|
|
65
|
+
remeasure();
|
|
66
|
+
});
|
|
67
|
+
edgeMutation.observe(el, { childList: true, subtree: true });
|
|
68
|
+
}
|
|
49
69
|
},
|
|
50
70
|
{ immediate: true, flush: "post" }
|
|
51
71
|
);
|
|
52
|
-
onBeforeUnmount(
|
|
72
|
+
onBeforeUnmount(stopEdgeWatch);
|
|
53
73
|
function onThumbPointerDown() {
|
|
54
74
|
dragging.value = true;
|
|
55
75
|
const stop = () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, useId, openBlock, createElementBlock, Fragment, createElementVNode, mergeProps, normalizeClass, renderSlot, createCommentVNode, createVNode, createSlots, withCtx, normalizeProps, guardReactiveProps, createBlock } from "vue";
|
|
2
|
-
import { _ as _sfc_main$2 } from "./LpDrawer-
|
|
3
|
-
import { _ as _sfc_main$1 } from "./LpSidebarNav-
|
|
2
|
+
import { _ as _sfc_main$2 } from "./LpDrawer-CYVF8abJ.js";
|
|
3
|
+
import { _ as _sfc_main$1 } from "./LpSidebarNav-S1QPTGcg.js";
|
|
4
4
|
const _hoisted_1 = {
|
|
5
5
|
key: 1,
|
|
6
6
|
class: "mt-2 flex shrink-0 flex-col gap-2"
|
|
@@ -4,7 +4,7 @@ import { usePillTransition } from "../composables/usePillTransition.js";
|
|
|
4
4
|
import { _ as _sfc_main$4 } from "./LpBadge-CXzBPnwO.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpContextMenu-D0mzXqA7.js";
|
|
6
6
|
import { _ as _sfc_main$3 } from "./LpIcon-CCnX5_2j.js";
|
|
7
|
-
import { _ as _sfc_main$1 } from "./LpScrollArea-
|
|
7
|
+
import { _ as _sfc_main$1 } from "./LpScrollArea-CXy8dkTN.js";
|
|
8
8
|
const _hoisted_1 = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "flex min-h-0 flex-1 flex-col gap-4"
|
|
@@ -2,7 +2,7 @@ import { defineComponent, computed, ref, watch, onBeforeUnmount, openBlock, crea
|
|
|
2
2
|
import { _ as _sfc_main$2 } from "./LpCheckbox-BO0zuuPh.js";
|
|
3
3
|
import { _ as _sfc_main$4 } from "./LpContextMenu-D0mzXqA7.js";
|
|
4
4
|
import { _ as _sfc_main$3 } from "./LpIcon-CCnX5_2j.js";
|
|
5
|
-
import { _ as _sfc_main$1 } from "./LpScrollArea-
|
|
5
|
+
import { _ as _sfc_main$1 } from "./LpScrollArea-CXy8dkTN.js";
|
|
6
6
|
const _hoisted_1 = { class: "w-full border-collapse text-sm" };
|
|
7
7
|
const _hoisted_2 = { class: "border-b border-line bg-surface-soft" };
|
|
8
8
|
const _hoisted_3 = {
|
|
@@ -116,6 +116,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
116
116
|
);
|
|
117
117
|
return (_ctx, _cache) => {
|
|
118
118
|
return openBlock(), createBlock(_sfc_main$1, {
|
|
119
|
+
fade: false,
|
|
119
120
|
class: "rounded-card border border-line",
|
|
120
121
|
"bar-inset-top": barInsetTop.value
|
|
121
122
|
}, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, watch, nextTick, onMounted, onBeforeUnmount, openBlock, createBlock, unref, withCtx, createVNode, withModifiers, createTextVNode, createElementVNode, withDirectives, withKeys, vModelText, createElementBlock, toDisplayString, createCommentVNode, Fragment, renderList, normalizeClass } from "vue";
|
|
2
2
|
import { DialogRoot, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription } from "reka-ui";
|
|
3
3
|
import { _ as _sfc_main$1 } from "../chunks/LpIcon-CCnX5_2j.js";
|
|
4
|
-
import { _ as _sfc_main$2 } from "../chunks/LpScrollArea-
|
|
4
|
+
import { _ as _sfc_main$2 } from "../chunks/LpScrollArea-CXy8dkTN.js";
|
|
5
5
|
import '../assets/LpCommandPalette-Cp6Y-j7g.css';const _hoisted_1 = { class: "flex shrink-0 items-center gap-2.5 border-b border-line px-4" };
|
|
6
6
|
const _hoisted_2 = ["placeholder", "onKeydown"];
|
|
7
7
|
const _hoisted_3 = {
|
|
@@ -15,6 +15,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
15
15
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
16
16
|
onScroll?: ((event: Event) => any) | undefined;
|
|
17
17
|
}>, {
|
|
18
|
+
fade: boolean;
|
|
18
19
|
instant: boolean;
|
|
19
20
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
20
21
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { _ } from "./chunks/LayoutCanvas-Dd20boUG.js";
|
|
2
|
-
import { _ as _2 } from "./chunks/LpAddressInput-
|
|
2
|
+
import { _ as _2 } from "./chunks/LpAddressInput-l2Znlwgc.js";
|
|
3
3
|
import { _ as _3 } from "./chunks/LpMapPicker-DFKrd1Ne.js";
|
|
4
4
|
import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress, project, tileUrl, unproject } from "./components/address.js";
|
|
5
5
|
import { _ as _4 } from "./chunks/LpAlert-BAYHDSS1.js";
|
|
6
|
-
import { _ as _5 } from "./chunks/LpAppShell-
|
|
6
|
+
import { _ as _5 } from "./chunks/LpAppShell-D9KnS0j_.js";
|
|
7
7
|
import { _ as _6 } from "./chunks/LpAutocomplete-DIgXmtCA.js";
|
|
8
8
|
import { _ as _7 } from "./chunks/LpAvatar-B1Ez0ZAx.js";
|
|
9
9
|
import { _ as _8 } from "./chunks/LpBadge-CXzBPnwO.js";
|
|
@@ -14,15 +14,15 @@ import { _ as _12 } from "./chunks/LpCard-BmrTvWOe.js";
|
|
|
14
14
|
import { _ as _13 } from "./chunks/LpCheckbox-BO0zuuPh.js";
|
|
15
15
|
import { _ as _14 } from "./chunks/LpCodeBlock-CSiOSPs8.js";
|
|
16
16
|
import { default as default2 } from "./components/LpCommandPalette.vue.js";
|
|
17
|
-
import { _ as _15 } from "./chunks/LpConfirmDialog-
|
|
17
|
+
import { _ as _15 } from "./chunks/LpConfirmDialog-gtsGL1kb.js";
|
|
18
18
|
import { _ as _16 } from "./chunks/LpContextMenu-D0mzXqA7.js";
|
|
19
19
|
import { _ as _17 } from "./chunks/LpDatePicker-dY2q4dr4.js";
|
|
20
20
|
import { _ as _18 } from "./chunks/LpDisclosure-DP6yfgfM.js";
|
|
21
21
|
import { _ as _19 } from "./chunks/LpDivider-CUX46KR0.js";
|
|
22
|
-
import { _ as _20 } from "./chunks/LpDrawer-
|
|
22
|
+
import { _ as _20 } from "./chunks/LpDrawer-CYVF8abJ.js";
|
|
23
23
|
import { _ as _21 } from "./chunks/LpDropdownMenu-DJpoqRCb.js";
|
|
24
24
|
import { _ as _22 } from "./chunks/LpEmptyState-CrfyRJUG.js";
|
|
25
|
-
import { _ as _23 } from "./chunks/LpFileTree-
|
|
25
|
+
import { _ as _23 } from "./chunks/LpFileTree-BGNzXknB.js";
|
|
26
26
|
import { ancestorIds, checkStateOf, checkedCount, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize } from "./components/fileTree.js";
|
|
27
27
|
import { _ as _24 } from "./chunks/LpFormField-Bn-ZwC6z.js";
|
|
28
28
|
import { _ as _25 } from "./chunks/LpIcon-CCnX5_2j.js";
|
|
@@ -31,9 +31,9 @@ import { _ as _27 } from "./chunks/LpInput-BauZRyzm.js";
|
|
|
31
31
|
import { _ as _28 } from "./chunks/LpLightbox-CzhFe9wZ.js";
|
|
32
32
|
import { fileNameOf } from "./components/lightbox.js";
|
|
33
33
|
import { _ as _29 } from "./chunks/LpLink-DHwOEp4e.js";
|
|
34
|
-
import { _ as _30 } from "./chunks/LpLogViewer-
|
|
35
|
-
import { _ as _31 } from "./chunks/LpModal-
|
|
36
|
-
import { _ as _32 } from "./chunks/LpNotificationBell-
|
|
34
|
+
import { _ as _30 } from "./chunks/LpLogViewer-DQod8kXW.js";
|
|
35
|
+
import { _ as _31 } from "./chunks/LpModal-BLOKvrJM.js";
|
|
36
|
+
import { _ as _32 } from "./chunks/LpNotificationBell-D1gdEtuI.js";
|
|
37
37
|
import { _ as _33 } from "./chunks/LpNumberField-C5ar-OwE.js";
|
|
38
38
|
import { _ as _34 } from "./chunks/LpOtpInput-DqaT0Z75.js";
|
|
39
39
|
import { _ as _35 } from "./chunks/LpPagination-CeGuNe_q.js";
|
|
@@ -44,17 +44,17 @@ import { _ as _38 } from "./chunks/LpPopover-8268UmlC.js";
|
|
|
44
44
|
import { _ as _39 } from "./chunks/LpProgress-BhI0IbjC.js";
|
|
45
45
|
import { _ as _40 } from "./chunks/LpRadio-CL-pI0_O.js";
|
|
46
46
|
import { _ as _41 } from "./chunks/LpRadioGroup-B4yDTmi6.js";
|
|
47
|
-
import { _ as _42 } from "./chunks/LpScrollArea-
|
|
47
|
+
import { _ as _42 } from "./chunks/LpScrollArea-CXy8dkTN.js";
|
|
48
48
|
import { _ as _43 } from "./chunks/LpSegmented-BmpanyAo.js";
|
|
49
49
|
import { _ as _44 } from "./chunks/LpSelect-D5mU4cZO.js";
|
|
50
50
|
import { _ as _45 } from "./chunks/LpServiceNode-Dc-Ut5RS.js";
|
|
51
|
-
import { _ as _46 } from "./chunks/LpSidebar-
|
|
51
|
+
import { _ as _46 } from "./chunks/LpSidebar-BaqVlOmo.js";
|
|
52
52
|
import { _ as _47 } from "./chunks/LpSkeleton-eSFIo4kD.js";
|
|
53
53
|
import { _ as _48 } from "./chunks/LpSlider-B1SF3pRV.js";
|
|
54
54
|
import { _ as _49 } from "./chunks/LpStat-CdbEFOvn.js";
|
|
55
55
|
import { _ as _50 } from "./chunks/LpStepper-5dFTrW21.js";
|
|
56
56
|
import { _ as _51 } from "./chunks/LpSwitch-v6fnccSM.js";
|
|
57
|
-
import { _ as _52 } from "./chunks/LpTable-
|
|
57
|
+
import { _ as _52 } from "./chunks/LpTable-pZmjnEti.js";
|
|
58
58
|
import { _ as _53 } from "./chunks/LpTableOfContents-CjvxPMpU.js";
|
|
59
59
|
import { _ as _54 } from "./chunks/LpTabs-D7aTVPOb.js";
|
|
60
60
|
import { _ as _55 } from "./chunks/LpTextarea-CRAkhemZ.js";
|
package/package.json
CHANGED
|
@@ -283,11 +283,8 @@ onBeforeUnmount(() => {
|
|
|
283
283
|
it already holds, so the scroll area raises a bar for an overflow
|
|
284
284
|
that resolves itself as the transition lands. Hiding just the bar
|
|
285
285
|
for the length of the tween leaves scrolling itself untouched. -->
|
|
286
|
-
<!-- Faded because a capped panel cuts its body mid-row, and a hard edge
|
|
287
|
-
at the crop reads as the content ending there. -->
|
|
288
286
|
<LpScrollArea
|
|
289
287
|
v-else
|
|
290
|
-
fade
|
|
291
288
|
class="min-h-0 flex-1 text-sm text-ink/90"
|
|
292
289
|
:class="resizing ? '[&_[data-scrollbarimpl]]:invisible' : ''"
|
|
293
290
|
:content-class="bodyPad"
|
|
@@ -15,7 +15,10 @@ import {
|
|
|
15
15
|
} from "reka-ui"
|
|
16
16
|
|
|
17
17
|
// `fade` softens whichever of the top/bottom edges currently has content beyond
|
|
18
|
-
// it, so a clipped list reads as continuing rather than as cut off.
|
|
18
|
+
// it, so a clipped list reads as continuing rather than as cut off. On by
|
|
19
|
+
// default: a hard crop through a row looks like damage wherever it happens, and
|
|
20
|
+
// every consumer wanted it. Pass `:fade="false"` where the edge must stay
|
|
21
|
+
// crisp — content that has to be read to its last pixel.
|
|
19
22
|
// `contentClass` styles the scrollable CONTENT container (the viewport's inner
|
|
20
23
|
// wrapper) — put list layout here (display:grid / gap / padding), not on the
|
|
21
24
|
// component root, since items live inside reka's viewport.
|
|
@@ -34,7 +37,7 @@ const props = withDefaults(
|
|
|
34
37
|
contentClass?: string
|
|
35
38
|
barInsetTop?: string
|
|
36
39
|
}>(),
|
|
37
|
-
{ instant: false },
|
|
40
|
+
{ fade: true, instant: false },
|
|
38
41
|
)
|
|
39
42
|
|
|
40
43
|
// Re-emit the native scroll event of the underlying viewport so consumers that
|
|
@@ -98,24 +101,51 @@ function onViewportScroll(event: Event) {
|
|
|
98
101
|
// that fills in, a panel that resizes, or content short enough to need no fade
|
|
99
102
|
// at all never fire a scroll event. Watched only when `fade` is on, since
|
|
100
103
|
// nothing else here depends on the measurements.
|
|
101
|
-
let
|
|
104
|
+
let edgeResize: ResizeObserver | undefined
|
|
105
|
+
let edgeMutation: MutationObserver | undefined
|
|
106
|
+
|
|
107
|
+
function stopEdgeWatch() {
|
|
108
|
+
edgeResize?.disconnect()
|
|
109
|
+
edgeMutation?.disconnect()
|
|
110
|
+
edgeResize = undefined
|
|
111
|
+
edgeMutation = undefined
|
|
112
|
+
}
|
|
102
113
|
|
|
103
114
|
watch(
|
|
104
115
|
[viewportEl, () => props.fade],
|
|
105
116
|
([el, enabled]) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
measureEdges(el)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
117
|
+
stopEdgeWatch()
|
|
118
|
+
if (!el || !enabled) return
|
|
119
|
+
|
|
120
|
+
const remeasure = () => measureEdges(el)
|
|
121
|
+
remeasure()
|
|
122
|
+
|
|
123
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
124
|
+
edgeResize = new ResizeObserver(remeasure)
|
|
125
|
+
edgeResize.observe(el)
|
|
126
|
+
// Watching the children too, since a grid that reflows into more rows
|
|
127
|
+
// grows the content box without the viewport's own size moving.
|
|
128
|
+
for (const child of Array.from(el.children)) edgeResize.observe(child)
|
|
129
|
+
}
|
|
130
|
+
// Rows arriving after the first paint are the common case — a list waiting
|
|
131
|
+
// on a query renders empty, and observing only the boxes that existed then
|
|
132
|
+
// left the fade off until something else happened to trigger a measure.
|
|
133
|
+
if (typeof MutationObserver !== "undefined") {
|
|
134
|
+
edgeMutation = new MutationObserver(() => {
|
|
135
|
+
if (edgeResize) {
|
|
136
|
+
edgeResize.disconnect()
|
|
137
|
+
edgeResize.observe(el)
|
|
138
|
+
for (const child of Array.from(el.children)) edgeResize.observe(child)
|
|
139
|
+
}
|
|
140
|
+
remeasure()
|
|
141
|
+
})
|
|
142
|
+
edgeMutation.observe(el, { childList: true, subtree: true })
|
|
143
|
+
}
|
|
114
144
|
},
|
|
115
145
|
{ immediate: true, flush: "post" },
|
|
116
146
|
)
|
|
117
147
|
|
|
118
|
-
onBeforeUnmount(
|
|
148
|
+
onBeforeUnmount(stopEdgeWatch)
|
|
119
149
|
|
|
120
150
|
function onThumbPointerDown() {
|
|
121
151
|
dragging.value = true
|
|
@@ -164,7 +164,13 @@ const barInsetTop = computed(() =>
|
|
|
164
164
|
</script>
|
|
165
165
|
|
|
166
166
|
<template>
|
|
167
|
-
|
|
167
|
+
<!-- No top fade: a sticky header sits in the masked band and would be dimmed
|
|
168
|
+
by it. The bottom edge is left crisp with it for symmetry. -->
|
|
169
|
+
<LpScrollArea
|
|
170
|
+
:fade="false"
|
|
171
|
+
class="rounded-card border border-line"
|
|
172
|
+
:bar-inset-top="barInsetTop"
|
|
173
|
+
>
|
|
168
174
|
<table class="w-full border-collapse text-sm">
|
|
169
175
|
<thead ref="headEl" :class="stickyHeader ? 'sticky top-0 z-10' : ''">
|
|
170
176
|
<tr class="border-b border-line bg-surface-soft">
|