@leavepulse/ui 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{LpTable-Ckoi05Am.css → LpTable-DfSwPCJ-.css} +21 -8
- package/dist/chunks/{LpAddressInput-FZXfljWV.js → LpAddressInput-D4t8WFD-.js} +1 -1
- package/dist/chunks/{LpConfirmDialog-CQBVaLpo.js → LpConfirmDialog-CxbizvSB.js} +1 -1
- package/dist/chunks/LpModal-7LvuAA7U.js +224 -0
- package/dist/chunks/LpModalNav-DBMGlq_x.js +166 -0
- package/dist/component-names.d.ts +1 -1
- package/dist/components/LpActionBar.vue.d.ts +1 -1
- package/dist/components/LpAddressInput.vue.d.ts +3 -3
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +4 -1
- package/dist/components/LpAutocomplete.vue.d.ts +1 -1
- package/dist/components/LpBadge.vue.d.ts +2 -2
- package/dist/components/LpCodeBlock.vue.d.ts +1 -1
- package/dist/components/LpColorPicker.vue.d.ts +9 -4
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpDropzone.vue.d.ts +4 -4
- package/dist/components/LpFileTree.vue.d.ts +4 -4
- package/dist/components/LpFormField.vue.d.ts +1 -1
- package/dist/components/LpLaneNode.vue.d.ts +11 -0
- package/dist/components/LpLightbox.vue.d.ts +2 -2
- package/dist/components/LpLogViewer.vue.d.ts +1 -1
- package/dist/components/LpMapPicker.vue.d.ts +1 -1
- package/dist/components/LpMediaGallery.vue.d.ts +1 -1
- package/dist/components/LpModal.vue.d.ts +9 -5
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.d.ts +63 -0
- package/dist/components/LpModalNav.vue.js +4 -0
- package/dist/components/LpPie.vue.d.ts +22 -4
- package/dist/components/LpPopover.vue.d.ts +1 -1
- package/dist/components/LpProgress.vue.d.ts +2 -2
- package/dist/components/LpRollingText.vue.d.ts +3 -3
- package/dist/components/LpSelect.vue.d.ts +6 -6
- package/dist/components/LpShift.vue.d.ts +1 -1
- package/dist/components/LpShortcutsDialog.vue.d.ts +1 -1
- package/dist/components/LpShortcutsDialog.vue.js +1 -1
- package/dist/components/LpSidebar.vue.d.ts +7 -1
- package/dist/components/LpSidebarNav.vue.d.ts +2 -2
- package/dist/components/LpSlider.vue.d.ts +2 -2
- package/dist/components/LpSparkline.vue.d.ts +2 -2
- package/dist/components/LpTable.vue.d.ts +9 -9
- package/dist/components/LpTable.vue.js +7 -4
- package/dist/components/LpTabs.vue.d.ts +1 -1
- package/dist/components/LpThemeSwitcher.vue.d.ts +1 -1
- package/dist/components/LpTilt.vue.d.ts +1 -1
- package/dist/components/LpTooltip.vue.d.ts +1 -1
- package/dist/components/LpTopologyCanvas.vue.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +75 -73
- package/package.json +1 -1
- package/src/component-names.ts +1 -0
- package/src/components/LpModal.vue +69 -1
- package/src/components/LpModalNav.vue +202 -0
- package/src/components/LpTable.vue +22 -2
- package/src/index.ts +1 -0
- package/dist/chunks/LpModal-DAqXzsm-.js +0 -192
|
@@ -11,21 +11,34 @@
|
|
|
11
11
|
* fade before closing the gap and the whole list lurches at the end instead of
|
|
12
12
|
* gliding.
|
|
13
13
|
*/
|
|
14
|
-
.lp-row-enter-active[data-v-
|
|
15
|
-
.lp-row-leave-active[data-v-
|
|
14
|
+
.lp-row-enter-active[data-v-1fada8e7],
|
|
15
|
+
.lp-row-leave-active[data-v-1fada8e7] {
|
|
16
16
|
transition:
|
|
17
17
|
opacity var(--duration-fast) var(--ease-emphasized),
|
|
18
18
|
transform var(--duration-fast) var(--ease-emphasized);
|
|
19
19
|
}
|
|
20
|
-
.lp-row-move[data-v-
|
|
20
|
+
.lp-row-move[data-v-1fada8e7] {
|
|
21
21
|
transition: transform var(--duration-medium) var(--ease-emphasized);
|
|
22
22
|
}
|
|
23
|
-
.lp-row-enter-from[data-v-
|
|
24
|
-
.lp-row-leave-to[data-v-
|
|
23
|
+
.lp-row-enter-from[data-v-1fada8e7],
|
|
24
|
+
.lp-row-leave-to[data-v-1fada8e7] {
|
|
25
25
|
opacity: 0;
|
|
26
26
|
transform: translateX(-0.5rem);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/*
|
|
30
|
+
* The empty-state row leaves at once, without the fade. It and the first real
|
|
31
|
+
* rows would otherwise share the table for the length of the animation, and a
|
|
32
|
+
* row of blank height sits above them — the table jumps once on every load.
|
|
33
|
+
*
|
|
34
|
+
* `position: absolute` is what a list would use here, but a positioned `<tr>`
|
|
35
|
+
* drops out of the table layout entirely. Nothing sits below this row to be
|
|
36
|
+
* dragged around, so simply not animating its exit costs nothing.
|
|
37
|
+
*/
|
|
38
|
+
.lp-row-empty.lp-row-leave-active[data-v-1fada8e7] {
|
|
39
|
+
display: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
29
42
|
/*
|
|
30
43
|
* The leaving row stays in the flow. Taking it out with `position: absolute` is
|
|
31
44
|
* the usual trick for a list, but a `<tr>` positioned that way loses the table's
|
|
@@ -37,9 +50,9 @@
|
|
|
37
50
|
/* A filter that redraws the list is information, not decoration: with motion
|
|
38
51
|
turned down the rows change without animating rather than not changing. */
|
|
39
52
|
@media (prefers-reduced-motion: reduce) {
|
|
40
|
-
.lp-row-enter-active[data-v-
|
|
41
|
-
.lp-row-leave-active[data-v-
|
|
42
|
-
.lp-row-move[data-v-
|
|
53
|
+
.lp-row-enter-active[data-v-1fada8e7],
|
|
54
|
+
.lp-row-leave-active[data-v-1fada8e7],
|
|
55
|
+
.lp-row-move[data-v-1fada8e7] {
|
|
43
56
|
transition: none;
|
|
44
57
|
}
|
|
45
58
|
}
|
|
@@ -6,7 +6,7 @@ import { _ as _sfc_main$3 } from "./LpButton-5VXXCjwF.js";
|
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpFormField-CazBc2-a.js";
|
|
7
7
|
import { _ as _sfc_main$4 } from "./LpIcon-CCnX5_2j.js";
|
|
8
8
|
import { _ as _sfc_main$5 } from "./LpInput-9EXWUM9B.js";
|
|
9
|
-
import { _ as _sfc_main$7 } from "./LpModal-
|
|
9
|
+
import { _ as _sfc_main$7 } from "./LpModal-7LvuAA7U.js";
|
|
10
10
|
import { _ as _sfc_main$6 } from "./LpSelect-ANIVtrpM.js";
|
|
11
11
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
12
12
|
const _hoisted_1 = { class: "flex items-stretch gap-2" };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, openBlock, createBlock, createSlots, withCtx, renderSlot, createVNode, createTextVNode, toDisplayString, createElementVNode, normalizeClass } 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$1 } from "./LpModal-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpModal-7LvuAA7U.js";
|
|
5
5
|
const _hoisted_1 = { class: "inline-flex items-center gap-2.5" };
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
7
7
|
__name: "LpConfirmDialog",
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { defineComponent, computed, useSlots, watch, onBeforeUnmount, ref, openBlock, createBlock, unref, withCtx, createVNode, normalizeStyle, createElementVNode, createElementBlock, renderSlot, createCommentVNode, mergeProps, createTextVNode, toDisplayString, normalizeClass } from "vue";
|
|
2
|
+
import { DialogRoot, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose } from "reka-ui";
|
|
3
|
+
import { useShift } from "../composables/useShift.js";
|
|
4
|
+
import { useModalLayer } from "../components/modalDepth.js";
|
|
5
|
+
import { CLOSE_ICON } from "../components/dropdown.js";
|
|
6
|
+
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
7
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-D8xyKXcF.js";
|
|
8
|
+
const _hoisted_1 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
"data-lp-modal-aside": "",
|
|
11
|
+
class: "pointer-events-auto flex min-h-0 flex-col"
|
|
12
|
+
};
|
|
13
|
+
const _hoisted_2 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "flex shrink-0 items-start justify-between gap-4 p-5 pb-3"
|
|
16
|
+
};
|
|
17
|
+
const _hoisted_3 = { class: "flex flex-col gap-1" };
|
|
18
|
+
const _hoisted_4 = {
|
|
19
|
+
key: 3,
|
|
20
|
+
class: "flex shrink-0 justify-end gap-2 p-5 pt-4"
|
|
21
|
+
};
|
|
22
|
+
const _hoisted_5 = {
|
|
23
|
+
key: 1,
|
|
24
|
+
"data-lp-modal-aside": "",
|
|
25
|
+
class: "pointer-events-auto flex min-h-0 flex-col"
|
|
26
|
+
};
|
|
27
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
28
|
+
__name: "LpModal",
|
|
29
|
+
props: {
|
|
30
|
+
open: { type: Boolean },
|
|
31
|
+
title: {},
|
|
32
|
+
description: {},
|
|
33
|
+
size: { default: "md" },
|
|
34
|
+
width: {},
|
|
35
|
+
fillBody: { type: Boolean },
|
|
36
|
+
autoFocus: { default: "auto" }
|
|
37
|
+
},
|
|
38
|
+
emits: ["update:open"],
|
|
39
|
+
setup(__props) {
|
|
40
|
+
const { claim, release, layer } = useModalLayer();
|
|
41
|
+
const props = __props;
|
|
42
|
+
const onInteractOutside = (event) => {
|
|
43
|
+
const target = event.target;
|
|
44
|
+
if (target instanceof Element && target.closest("[data-lp-modal-aside]")) {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const describedByAttrs = computed(
|
|
49
|
+
() => props.description ? {} : { "aria-describedby": void 0 }
|
|
50
|
+
);
|
|
51
|
+
const widthClass = computed(() => {
|
|
52
|
+
if (props.width) return "";
|
|
53
|
+
return {
|
|
54
|
+
sm: "w-[min(92vw,24rem)]",
|
|
55
|
+
md: "w-[min(92vw,28rem)]",
|
|
56
|
+
lg: "w-[min(92vw,34rem)]",
|
|
57
|
+
xl: "w-[min(92vw,42rem)]",
|
|
58
|
+
"2xl": "w-[min(94vw,56rem)]",
|
|
59
|
+
"3xl": "w-[min(95vw,72rem)]",
|
|
60
|
+
full: "w-[96vw]"
|
|
61
|
+
}[props.size];
|
|
62
|
+
});
|
|
63
|
+
const slots = useSlots();
|
|
64
|
+
const hasAside = computed(() => Boolean(slots.aside || slots.asideEnd));
|
|
65
|
+
watch(() => props.open, (open) => open ? claim() : release(), { immediate: true });
|
|
66
|
+
onBeforeUnmount(release);
|
|
67
|
+
const bodyPad = computed(
|
|
68
|
+
() => [
|
|
69
|
+
"px-5",
|
|
70
|
+
props.title || slots.title ? "pt-1" : "pt-5",
|
|
71
|
+
slots.footer ? "" : "pb-5"
|
|
72
|
+
].filter(Boolean).join(" ")
|
|
73
|
+
);
|
|
74
|
+
const panelRef = ref(null);
|
|
75
|
+
const AUTO_FOCUS_ORDER = [
|
|
76
|
+
"input:not([type=hidden]):not([disabled]):not([readonly])",
|
|
77
|
+
"textarea:not([disabled]):not([readonly])",
|
|
78
|
+
"select:not([disabled])",
|
|
79
|
+
"[data-lp-autofocus]",
|
|
80
|
+
"button:not([disabled]):not([data-lp-dialog-close])",
|
|
81
|
+
"[href]",
|
|
82
|
+
"[tabindex]:not([tabindex='-1'])"
|
|
83
|
+
];
|
|
84
|
+
function onOpenAutoFocus(event) {
|
|
85
|
+
if (props.autoFocus === "none") return;
|
|
86
|
+
const panel = panelRef.value?.$el;
|
|
87
|
+
if (!(panel instanceof HTMLElement)) return;
|
|
88
|
+
const selectors = props.autoFocus === "auto" ? AUTO_FOCUS_ORDER : [props.autoFocus];
|
|
89
|
+
for (const selector of selectors) {
|
|
90
|
+
const target = panel.querySelector(selector);
|
|
91
|
+
if (!target || target.hasAttribute("disabled")) continue;
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
if (!target.closest("[data-lp-ring-owner]")) {
|
|
94
|
+
target.setAttribute("data-lp-focus-ring", "");
|
|
95
|
+
target.addEventListener(
|
|
96
|
+
"blur",
|
|
97
|
+
() => target.removeAttribute("data-lp-focus-ring"),
|
|
98
|
+
{ once: true }
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
target.focus();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const {
|
|
106
|
+
el: sizedEl,
|
|
107
|
+
tweening,
|
|
108
|
+
resizing
|
|
109
|
+
} = useShift({ axis: "height", enabled: () => props.open });
|
|
110
|
+
watch(
|
|
111
|
+
() => props.open ? panelRef.value : null,
|
|
112
|
+
(panel) => {
|
|
113
|
+
const el = panel?.$el;
|
|
114
|
+
sizedEl.value = el instanceof HTMLElement ? el : null;
|
|
115
|
+
},
|
|
116
|
+
{ flush: "post" }
|
|
117
|
+
);
|
|
118
|
+
return (_ctx, _cache) => {
|
|
119
|
+
return openBlock(), createBlock(unref(DialogRoot), {
|
|
120
|
+
open: __props.open,
|
|
121
|
+
"onUpdate:open": _cache[0] || (_cache[0] = (v) => _ctx.$emit("update:open", v))
|
|
122
|
+
}, {
|
|
123
|
+
default: withCtx(() => [
|
|
124
|
+
createVNode(unref(DialogPortal), null, {
|
|
125
|
+
default: withCtx(() => [
|
|
126
|
+
createVNode(unref(DialogOverlay), {
|
|
127
|
+
class: "lp-scrim fixed inset-0 data-[state=open]:animate-[fade-in_var(--duration-medium)_var(--ease-emphasized)] data-[state=closed]:animate-[fade-out_120ms_ease]",
|
|
128
|
+
style: normalizeStyle({ zIndex: unref(layer).scrim })
|
|
129
|
+
}, null, 8, ["style"]),
|
|
130
|
+
createElementVNode("div", {
|
|
131
|
+
class: "fixed inset-0 flex items-center justify-center pointer-events-none",
|
|
132
|
+
style: normalizeStyle({ zIndex: unref(layer).panel })
|
|
133
|
+
}, [
|
|
134
|
+
createElementVNode("div", {
|
|
135
|
+
class: "flex items-start",
|
|
136
|
+
style: normalizeStyle(hasAside.value ? { maxHeight: "min(90vh, calc(100dvh - 2rem))" } : void 0)
|
|
137
|
+
}, [
|
|
138
|
+
_ctx.$slots.aside ? (openBlock(), createElementBlock("aside", _hoisted_1, [
|
|
139
|
+
renderSlot(_ctx.$slots, "aside")
|
|
140
|
+
])) : createCommentVNode("", true),
|
|
141
|
+
createVNode(unref(DialogContent), mergeProps({
|
|
142
|
+
ref_key: "panelRef",
|
|
143
|
+
ref: panelRef,
|
|
144
|
+
class: ["pointer-events-auto flex max-h-[min(90vh,calc(100dvh-2rem))] min-h-0 flex-col overflow-hidden rounded-card border border-line bg-surface-raised shadow-panel outline-none data-[state=open]:animate-[rise-in_var(--duration-medium)_var(--ease-emphasized)] data-[state=closed]:animate-[rise-out_120ms_cubic-bezier(0.4,0,1,1)]", [widthClass.value, unref(tweening) ? "transition-[height] duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none" : ""]],
|
|
145
|
+
style: { ...__props.width ? { width: __props.width } : {}, ...hasAside.value ? { alignSelf: "stretch" } : {} }
|
|
146
|
+
}, describedByAttrs.value, {
|
|
147
|
+
onOpenAutoFocus,
|
|
148
|
+
onInteractOutside,
|
|
149
|
+
onPointerDownOutside: onInteractOutside
|
|
150
|
+
}), {
|
|
151
|
+
default: withCtx(() => [
|
|
152
|
+
__props.title || _ctx.$slots.title ? (openBlock(), createElementBlock("header", _hoisted_2, [
|
|
153
|
+
createElementVNode("div", _hoisted_3, [
|
|
154
|
+
createVNode(unref(DialogTitle), { class: "text-base font-semibold text-ink" }, {
|
|
155
|
+
default: withCtx(() => [
|
|
156
|
+
renderSlot(_ctx.$slots, "title", {}, () => [
|
|
157
|
+
createTextVNode(toDisplayString(__props.title), 1)
|
|
158
|
+
])
|
|
159
|
+
]),
|
|
160
|
+
_: 3
|
|
161
|
+
}),
|
|
162
|
+
__props.description ? (openBlock(), createBlock(unref(DialogDescription), {
|
|
163
|
+
key: 0,
|
|
164
|
+
class: "text-sm text-muted"
|
|
165
|
+
}, {
|
|
166
|
+
default: withCtx(() => [
|
|
167
|
+
createTextVNode(toDisplayString(__props.description), 1)
|
|
168
|
+
]),
|
|
169
|
+
_: 1
|
|
170
|
+
})) : createCommentVNode("", true)
|
|
171
|
+
]),
|
|
172
|
+
createVNode(unref(DialogClose), {
|
|
173
|
+
"data-lp-dialog-close": "",
|
|
174
|
+
class: "group flex shrink-0 items-center rounded-md p-1 text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
175
|
+
"aria-label": "Close"
|
|
176
|
+
}, {
|
|
177
|
+
default: withCtx(() => [
|
|
178
|
+
createVNode(_sfc_main$1, {
|
|
179
|
+
name: "lucide:x",
|
|
180
|
+
size: 18,
|
|
181
|
+
class: normalizeClass(unref(CLOSE_ICON))
|
|
182
|
+
}, null, 8, ["class"])
|
|
183
|
+
]),
|
|
184
|
+
_: 1
|
|
185
|
+
})
|
|
186
|
+
])) : createCommentVNode("", true),
|
|
187
|
+
__props.fillBody ? (openBlock(), createElementBlock("div", {
|
|
188
|
+
key: 1,
|
|
189
|
+
class: normalizeClass(["flex min-h-0 flex-1 flex-col overflow-hidden text-sm text-ink/90", bodyPad.value])
|
|
190
|
+
}, [
|
|
191
|
+
renderSlot(_ctx.$slots, "default")
|
|
192
|
+
], 2)) : (openBlock(), createBlock(_sfc_main$2, {
|
|
193
|
+
key: 2,
|
|
194
|
+
class: normalizeClass(["min-h-0 flex-1 text-sm text-ink/90", unref(resizing) ? "[&_[data-scrollbarimpl]]:invisible" : ""]),
|
|
195
|
+
"content-class": bodyPad.value
|
|
196
|
+
}, {
|
|
197
|
+
default: withCtx(() => [
|
|
198
|
+
renderSlot(_ctx.$slots, "default")
|
|
199
|
+
]),
|
|
200
|
+
_: 3
|
|
201
|
+
}, 8, ["class", "content-class"])),
|
|
202
|
+
_ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_4, [
|
|
203
|
+
renderSlot(_ctx.$slots, "footer")
|
|
204
|
+
])) : createCommentVNode("", true)
|
|
205
|
+
]),
|
|
206
|
+
_: 3
|
|
207
|
+
}, 16, ["class", "style"]),
|
|
208
|
+
_ctx.$slots.asideEnd ? (openBlock(), createElementBlock("aside", _hoisted_5, [
|
|
209
|
+
renderSlot(_ctx.$slots, "asideEnd")
|
|
210
|
+
])) : createCommentVNode("", true)
|
|
211
|
+
], 4)
|
|
212
|
+
], 4)
|
|
213
|
+
]),
|
|
214
|
+
_: 3
|
|
215
|
+
})
|
|
216
|
+
]),
|
|
217
|
+
_: 3
|
|
218
|
+
}, 8, ["open"]);
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
export {
|
|
223
|
+
_sfc_main as _
|
|
224
|
+
};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { defineComponent, ref, computed, openBlock, createBlock, createSlots, withCtx, renderSlot, createElementVNode, normalizeClass, createVNode, createCommentVNode, createTextVNode, toDisplayString } from "vue";
|
|
2
|
+
import { _ as _sfc_main$2 } from "./LpButton-5VXXCjwF.js";
|
|
3
|
+
import { _ as _sfc_main$3 } from "./LpIcon-CCnX5_2j.js";
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpModal-7LvuAA7U.js";
|
|
5
|
+
import { _ as _sfc_main$4 } from "./LpSidebar-DcYavim2.js";
|
|
6
|
+
const _hoisted_1 = { class: "flex items-center gap-2" };
|
|
7
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
__name: "LpModalNav",
|
|
9
|
+
props: {
|
|
10
|
+
open: { type: Boolean },
|
|
11
|
+
modelValue: {},
|
|
12
|
+
items: {},
|
|
13
|
+
sections: {},
|
|
14
|
+
title: {},
|
|
15
|
+
description: {},
|
|
16
|
+
size: { default: "2xl" },
|
|
17
|
+
width: {},
|
|
18
|
+
navWidth: { default: "13rem" },
|
|
19
|
+
searchable: { type: Boolean },
|
|
20
|
+
searchPlaceholder: {},
|
|
21
|
+
loading: { type: Boolean },
|
|
22
|
+
mobileBreakpoint: { default: "lg" },
|
|
23
|
+
navLabel: { default: "Sections" },
|
|
24
|
+
navSide: { default: "start" },
|
|
25
|
+
fillBody: { type: Boolean }
|
|
26
|
+
},
|
|
27
|
+
emits: ["update:open", "update:modelValue"],
|
|
28
|
+
setup(__props, { emit: __emit }) {
|
|
29
|
+
const props = __props;
|
|
30
|
+
const emit = __emit;
|
|
31
|
+
const navOpen = ref(false);
|
|
32
|
+
const active = computed({
|
|
33
|
+
get: () => props.modelValue ?? "",
|
|
34
|
+
set: (v) => emit("update:modelValue", v)
|
|
35
|
+
});
|
|
36
|
+
const hasNav = computed(() => Boolean(props.items?.length || props.sections?.length));
|
|
37
|
+
const RAIL_GAP = {
|
|
38
|
+
sm: "sm:mr-3",
|
|
39
|
+
md: "md:mr-3",
|
|
40
|
+
lg: "lg:mr-3",
|
|
41
|
+
xl: "xl:mr-3"
|
|
42
|
+
};
|
|
43
|
+
const RAIL_GAP_END = {
|
|
44
|
+
sm: "sm:ml-3",
|
|
45
|
+
md: "md:ml-3",
|
|
46
|
+
lg: "lg:ml-3",
|
|
47
|
+
xl: "xl:ml-3"
|
|
48
|
+
};
|
|
49
|
+
const TRIGGER_VISIBILITY = {
|
|
50
|
+
sm: "sm:hidden",
|
|
51
|
+
md: "md:hidden",
|
|
52
|
+
lg: "lg:hidden",
|
|
53
|
+
xl: "xl:hidden"
|
|
54
|
+
};
|
|
55
|
+
const railClass = computed(
|
|
56
|
+
() => (props.navSide === "end" ? RAIL_GAP_END : RAIL_GAP)[props.mobileBreakpoint]
|
|
57
|
+
);
|
|
58
|
+
const triggerClass = computed(() => TRIGGER_VISIBILITY[props.mobileBreakpoint]);
|
|
59
|
+
const railStyle = { maxHeight: "min(90vh, calc(100dvh - 2rem))" };
|
|
60
|
+
return (_ctx, _cache) => {
|
|
61
|
+
return openBlock(), createBlock(_sfc_main$1, {
|
|
62
|
+
open: __props.open,
|
|
63
|
+
title: __props.title,
|
|
64
|
+
description: __props.description,
|
|
65
|
+
size: __props.size,
|
|
66
|
+
width: __props.width,
|
|
67
|
+
"fill-body": __props.fillBody,
|
|
68
|
+
"onUpdate:open": _cache[5] || (_cache[5] = ($event) => emit("update:open", $event))
|
|
69
|
+
}, createSlots({
|
|
70
|
+
title: withCtx(() => [
|
|
71
|
+
createElementVNode("div", _hoisted_1, [
|
|
72
|
+
hasNav.value ? (openBlock(), createBlock(_sfc_main$2, {
|
|
73
|
+
key: 0,
|
|
74
|
+
variant: "ghost",
|
|
75
|
+
size: "sm",
|
|
76
|
+
square: "",
|
|
77
|
+
"aria-label": __props.navLabel,
|
|
78
|
+
class: normalizeClass(triggerClass.value),
|
|
79
|
+
onClick: _cache[4] || (_cache[4] = ($event) => navOpen.value = true)
|
|
80
|
+
}, {
|
|
81
|
+
default: withCtx(() => [
|
|
82
|
+
createVNode(_sfc_main$3, {
|
|
83
|
+
name: "lucide:menu",
|
|
84
|
+
size: 18
|
|
85
|
+
})
|
|
86
|
+
]),
|
|
87
|
+
_: 1
|
|
88
|
+
}, 8, ["aria-label", "class"])) : createCommentVNode("", true),
|
|
89
|
+
renderSlot(_ctx.$slots, "title", {}, () => [
|
|
90
|
+
createTextVNode(toDisplayString(__props.title), 1)
|
|
91
|
+
])
|
|
92
|
+
])
|
|
93
|
+
]),
|
|
94
|
+
default: withCtx(() => [
|
|
95
|
+
renderSlot(_ctx.$slots, "default")
|
|
96
|
+
]),
|
|
97
|
+
_: 2
|
|
98
|
+
}, [
|
|
99
|
+
hasNav.value && __props.navSide === "start" ? {
|
|
100
|
+
name: "aside",
|
|
101
|
+
fn: withCtx(() => [
|
|
102
|
+
createElementVNode("div", {
|
|
103
|
+
class: normalizeClass(railClass.value)
|
|
104
|
+
}, [
|
|
105
|
+
createVNode(_sfc_main$4, {
|
|
106
|
+
modelValue: active.value,
|
|
107
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => active.value = $event),
|
|
108
|
+
open: navOpen.value,
|
|
109
|
+
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => navOpen.value = $event),
|
|
110
|
+
variant: "panel",
|
|
111
|
+
items: __props.items,
|
|
112
|
+
sections: __props.sections,
|
|
113
|
+
width: __props.navWidth,
|
|
114
|
+
searchable: __props.searchable,
|
|
115
|
+
"search-placeholder": __props.searchPlaceholder,
|
|
116
|
+
loading: __props.loading,
|
|
117
|
+
responsive: "",
|
|
118
|
+
"mobile-breakpoint": __props.mobileBreakpoint,
|
|
119
|
+
style: railStyle,
|
|
120
|
+
class: "rounded-card border border-line bg-surface-raised p-2 shadow-panel"
|
|
121
|
+
}, null, 8, ["modelValue", "open", "items", "sections", "width", "searchable", "search-placeholder", "loading", "mobile-breakpoint"])
|
|
122
|
+
], 2)
|
|
123
|
+
]),
|
|
124
|
+
key: "0"
|
|
125
|
+
} : void 0,
|
|
126
|
+
hasNav.value && __props.navSide === "end" ? {
|
|
127
|
+
name: "asideEnd",
|
|
128
|
+
fn: withCtx(() => [
|
|
129
|
+
createElementVNode("div", {
|
|
130
|
+
class: normalizeClass(railClass.value)
|
|
131
|
+
}, [
|
|
132
|
+
createVNode(_sfc_main$4, {
|
|
133
|
+
modelValue: active.value,
|
|
134
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => active.value = $event),
|
|
135
|
+
open: navOpen.value,
|
|
136
|
+
"onUpdate:open": _cache[3] || (_cache[3] = ($event) => navOpen.value = $event),
|
|
137
|
+
variant: "panel",
|
|
138
|
+
items: __props.items,
|
|
139
|
+
sections: __props.sections,
|
|
140
|
+
width: __props.navWidth,
|
|
141
|
+
searchable: __props.searchable,
|
|
142
|
+
"search-placeholder": __props.searchPlaceholder,
|
|
143
|
+
loading: __props.loading,
|
|
144
|
+
responsive: "",
|
|
145
|
+
"mobile-breakpoint": __props.mobileBreakpoint,
|
|
146
|
+
style: railStyle,
|
|
147
|
+
class: "rounded-card border border-line bg-surface-raised p-2 shadow-panel"
|
|
148
|
+
}, null, 8, ["modelValue", "open", "items", "sections", "width", "searchable", "search-placeholder", "loading", "mobile-breakpoint"])
|
|
149
|
+
], 2)
|
|
150
|
+
]),
|
|
151
|
+
key: "1"
|
|
152
|
+
} : void 0,
|
|
153
|
+
_ctx.$slots.footer ? {
|
|
154
|
+
name: "footer",
|
|
155
|
+
fn: withCtx(() => [
|
|
156
|
+
renderSlot(_ctx.$slots, "footer")
|
|
157
|
+
]),
|
|
158
|
+
key: "2"
|
|
159
|
+
} : void 0
|
|
160
|
+
]), 1032, ["open", "title", "description", "size", "width", "fill-body"]);
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
export {
|
|
165
|
+
_sfc_main as _
|
|
166
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LayoutNode", "LpActionBar", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpColorPicker", "LpCommandPalette", "LpConfirmDialog", "LpContextMenu", "LpDatePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEmptyState", "LpFileTree", "LpFileTreeNode", "LpFormField", "LpIcon", "LpImageEditor", "LpInfraNode", "LpInput", "LpLaneNode", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpMediaGallery", "LpModal", "LpNotificationBell", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpRollingText", "LpScrollArea", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShift", "LpShortcutsDialog", "LpSidebar", "LpSidebarNav", "LpSkeleton", "LpSlider", "LpSparkline", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTextarea", "LpThemeSwitcher", "LpTilt", "LpToaster", "LpTooltip", "LpTopologyCanvas", "LpUptimeBar", "LpWaypointEdge"];
|
|
1
|
+
export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LayoutNode", "LpActionBar", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpChart", "LpCheckbox", "LpCodeBlock", "LpColorPicker", "LpCommandPalette", "LpConfirmDialog", "LpContextMenu", "LpDatePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpDropzone", "LpEmptyState", "LpFileTree", "LpFileTreeNode", "LpFormField", "LpIcon", "LpImageEditor", "LpInfraNode", "LpInput", "LpLaneNode", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpMediaGallery", "LpModal", "LpModalNav", "LpNotificationBell", "LpNumberField", "LpNumberFlow", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPie", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpRollingText", "LpScrollArea", "LpSection", "LpSegmented", "LpSelect", "LpServiceNode", "LpShift", "LpShortcutsDialog", "LpSidebar", "LpSidebarNav", "LpSkeleton", "LpSlider", "LpSparkline", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTextarea", "LpThemeSwitcher", "LpTilt", "LpToaster", "LpTooltip", "LpTopologyCanvas", "LpUptimeBar", "LpWaypointEdge"];
|
|
@@ -70,8 +70,8 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
70
70
|
onDismiss?: (() => any) | undefined;
|
|
71
71
|
}>, {
|
|
72
72
|
width: "contained" | "full";
|
|
73
|
-
variant: "default" | "danger";
|
|
74
73
|
open: boolean;
|
|
74
|
+
variant: "default" | "danger";
|
|
75
75
|
actions: ActionBarAction[];
|
|
76
76
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
77
77
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -58,9 +58,9 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
58
58
|
debounce: number;
|
|
59
59
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {
|
|
60
60
|
map?: (props: {
|
|
61
|
-
point:
|
|
62
|
-
setPoint:
|
|
63
|
-
tiles:
|
|
61
|
+
point: LatLon | undefined;
|
|
62
|
+
setPoint: (next: LatLon) => Promise<void>;
|
|
63
|
+
tiles: TileSource;
|
|
64
64
|
}) => any;
|
|
65
65
|
}>;
|
|
66
66
|
type __VLS_WithSlots<T, S> = T & {
|
|
@@ -101,7 +101,10 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
101
101
|
} & {
|
|
102
102
|
'sidebar-footer'?: (props: {}) => any;
|
|
103
103
|
} & {
|
|
104
|
-
'sidebar-item'?: (props:
|
|
104
|
+
'sidebar-item'?: (props: {
|
|
105
|
+
item: SidebarItem;
|
|
106
|
+
active: boolean;
|
|
107
|
+
}) => any;
|
|
105
108
|
} & {
|
|
106
109
|
'header-title'?: (props: {}) => any;
|
|
107
110
|
} & {
|
|
@@ -40,9 +40,9 @@ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {
|
|
|
40
40
|
size: "sm" | "md" | "lg";
|
|
41
41
|
filter: boolean;
|
|
42
42
|
placeholder: string;
|
|
43
|
+
loading: boolean;
|
|
43
44
|
clearable: boolean;
|
|
44
45
|
emptyText: string;
|
|
45
|
-
loading: boolean;
|
|
46
46
|
loadingText: string;
|
|
47
47
|
minChars: number;
|
|
48
48
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
declare const _default: typeof __VLS_export;
|
|
2
2
|
export default _default;
|
|
3
3
|
declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
4
|
-
tone?: "
|
|
4
|
+
tone?: "action" | "outline" | "danger" | "success" | "warning" | "neutral" | "brand" | undefined;
|
|
5
5
|
/** `sm` is the one that does not disturb a text-sm line it sits on. */
|
|
6
6
|
size?: "sm" | "md" | "lg" | undefined;
|
|
7
7
|
dot?: boolean;
|
|
8
8
|
}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
|
|
9
|
-
tone?: "
|
|
9
|
+
tone?: "action" | "outline" | "danger" | "success" | "warning" | "neutral" | "brand" | undefined;
|
|
10
10
|
/** `sm` is the one that does not disturb a text-sm line it sits on. */
|
|
11
11
|
size?: "sm" | "md" | "lg" | undefined;
|
|
12
12
|
dot?: boolean;
|
|
@@ -49,8 +49,8 @@ declare const __VLS_export: import('vue').DefineComponent<{
|
|
|
49
49
|
"onUpdate:locked"?: ((value: boolean) => any) | undefined;
|
|
50
50
|
}>, {
|
|
51
51
|
lang: CodeLang;
|
|
52
|
-
lineNumbers: boolean;
|
|
53
52
|
wrap: boolean;
|
|
53
|
+
lineNumbers: boolean;
|
|
54
54
|
locked: boolean;
|
|
55
55
|
lockToggle: boolean;
|
|
56
56
|
copyable: boolean;
|
|
@@ -82,8 +82,13 @@ type __VLS_Props = {
|
|
|
82
82
|
copyToast?: string | false;
|
|
83
83
|
};
|
|
84
84
|
declare var __VLS_56: {
|
|
85
|
-
color:
|
|
86
|
-
hsv:
|
|
85
|
+
color: string;
|
|
86
|
+
hsv: {
|
|
87
|
+
h: number;
|
|
88
|
+
s: number;
|
|
89
|
+
v: number;
|
|
90
|
+
a: number;
|
|
91
|
+
};
|
|
87
92
|
};
|
|
88
93
|
type __VLS_Slots = {} & {
|
|
89
94
|
default?: (props: typeof __VLS_56) => any;
|
|
@@ -98,10 +103,10 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
98
103
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
99
104
|
}>, {
|
|
100
105
|
size: "sm" | "md" | "lg";
|
|
101
|
-
modelValue: string;
|
|
102
106
|
format: ColorFormat;
|
|
103
|
-
side: "top" | "right" | "bottom" | "left";
|
|
104
107
|
align: "start" | "center" | "end";
|
|
108
|
+
modelValue: string;
|
|
109
|
+
side: "top" | "right" | "bottom" | "left";
|
|
105
110
|
alpha: boolean;
|
|
106
111
|
swatches: readonly string[];
|
|
107
112
|
recent: boolean;
|
|
@@ -71,16 +71,16 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
71
71
|
cause: "type" | "size";
|
|
72
72
|
}[]) => any) | undefined;
|
|
73
73
|
}>, {
|
|
74
|
-
icon: string;
|
|
75
|
-
hint: string;
|
|
76
74
|
title: string;
|
|
77
75
|
animate: boolean;
|
|
76
|
+
icon: string;
|
|
77
|
+
accept: string;
|
|
78
78
|
multiple: boolean;
|
|
79
|
+
hint: string;
|
|
79
80
|
tone: "sunken" | "flush" | "soft";
|
|
80
|
-
accept: string;
|
|
81
81
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {
|
|
82
82
|
default?: (props: {
|
|
83
|
-
over:
|
|
83
|
+
over: boolean;
|
|
84
84
|
}) => any;
|
|
85
85
|
}>;
|
|
86
86
|
type __VLS_WithSlots<T, S> = T & {
|
|
@@ -53,11 +53,11 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
53
53
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
54
54
|
expand: (node: FileNode) => any;
|
|
55
55
|
select: (node: FileNode) => any;
|
|
56
|
-
open: (node: FileNode) => any;
|
|
57
56
|
summary: (summary: FileTreeSummary) => any;
|
|
57
|
+
open: (node: FileNode) => any;
|
|
58
|
+
collapse: (node: FileNode) => any;
|
|
58
59
|
"update:selected": (id: string) => any;
|
|
59
60
|
"update:expanded": (ids: string[]) => any;
|
|
60
|
-
collapse: (node: FileNode) => any;
|
|
61
61
|
"update:checked": (ids: string[]) => any;
|
|
62
62
|
}, string, import('vue').PublicProps, Readonly<{
|
|
63
63
|
nodes: FileNode[];
|
|
@@ -92,11 +92,11 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
92
92
|
}> & Readonly<{
|
|
93
93
|
onExpand?: ((node: FileNode) => any) | undefined;
|
|
94
94
|
onSelect?: ((node: FileNode) => any) | undefined;
|
|
95
|
-
onOpen?: ((node: FileNode) => any) | undefined;
|
|
96
95
|
onSummary?: ((summary: FileTreeSummary) => any) | undefined;
|
|
96
|
+
onOpen?: ((node: FileNode) => any) | undefined;
|
|
97
|
+
onCollapse?: ((node: FileNode) => any) | undefined;
|
|
97
98
|
"onUpdate:selected"?: ((id: string) => any) | undefined;
|
|
98
99
|
"onUpdate:expanded"?: ((ids: string[]) => any) | undefined;
|
|
99
|
-
onCollapse?: ((node: FileNode) => any) | undefined;
|
|
100
100
|
"onUpdate:checked"?: ((ids: string[]) => any) | undefined;
|
|
101
101
|
}>, {
|
|
102
102
|
sort: boolean;
|
|
@@ -12,7 +12,7 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
|
|
|
12
12
|
required?: boolean;
|
|
13
13
|
}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {
|
|
14
14
|
default?: (props: {
|
|
15
|
-
id:
|
|
15
|
+
id: string;
|
|
16
16
|
}) => any;
|
|
17
17
|
} & {
|
|
18
18
|
hint?: (props: {}) => any;
|