@leavepulse/ui 0.52.0 → 0.53.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.
- package/dist/assets/{LpTable-D8jvowDb.css → LpTable-BNzavdlv.css} +19 -19
- package/dist/chunks/{LpAppShell-BmMYcEVx.js → LpAppShell-DcSXik4a.js} +1 -1
- package/dist/chunks/{LpAvatar-Cb1jtOVv.js → LpAvatar-LTvy0OkE.js} +1 -1
- package/dist/chunks/{LpBreadcrumbs-CQJd73Gm.js → LpBreadcrumbs-D4TsoFju.js} +15 -12
- package/dist/chunks/{LpCard-BdxkMXjo.js → LpCard-DbjO5yaF.js} +1 -1
- package/dist/chunks/{LpCheckbox-Bkj13CbW.js → LpCheckbox-DvVYeOD-.js} +2 -2
- package/dist/chunks/{LpColorPicker-BLqPX5Vw.js → LpColorPicker-D1sQqtXS.js} +1 -1
- package/dist/chunks/{LpContextMenu-1cKew_Dc.js → LpContextMenu-EF_90u3g.js} +5 -1
- package/dist/chunks/{LpFileTree-bk5VjBey.js → LpFileTree-3E4w4Rjr.js} +1 -1
- package/dist/chunks/{LpFileTreeNode-BvMSBM7X.js → LpFileTreeNode-B4uB8Ks_.js} +2 -2
- package/dist/chunks/{LpLogViewer-BDFXzvcl.js → LpLogViewer-BfgtXVKm.js} +1 -1
- package/dist/chunks/{LpModalNav-BAxC9et7.js → LpModalNav-aWwc_5CD.js} +1 -1
- package/dist/chunks/{LpNotificationBell-DsqSyMwS.js → LpNotificationBell-wZ3meeim.js} +1 -1
- package/dist/chunks/{LpPie-BdSnta11.js → LpPie-B7ti5qCH.js} +1 -1
- package/dist/chunks/{LpRadio-B5AfqTpZ.js → LpRadio-CWA5Eb3M.js} +2 -2
- package/dist/chunks/{LpRadioGroup-DmEW0l78.js → LpRadioGroup-CCn-Q2_c.js} +2 -2
- package/dist/chunks/{LpSidebar-DpEiGi8L.js → LpSidebar-C2oolgwy.js} +1 -1
- package/dist/chunks/{LpSidebarNav-BUuxipX-.js → LpSidebarNav-C9dHu-2b.js} +1 -1
- package/dist/chunks/{LpSwitch-OrcOJX9m.js → LpSwitch-DG2AhXIL.js} +2 -2
- package/dist/chunks/{LpTableFilter-BV8PpLM9.js → LpTableFilter-CrW7_Rj4.js} +1 -1
- package/dist/chunks/{LpThemeSwitcher-BbYFFT5w.js → LpThemeSwitcher-CPmhYOjX.js} +1 -1
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.js +1 -1
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.js +1 -1
- package/dist/components/LpContextMenu.vue.d.ts +2 -2
- package/dist/components/LpContextMenu.vue.js +1 -1
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpPaletteHeader.vue.js +1 -1
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpRadio.vue.js +1 -1
- package/dist/components/LpRadioGroup.vue.js +1 -1
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTable.vue.d.ts +1 -0
- package/dist/components/LpTable.vue.js +15 -6
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/index.js +17 -17
- package/package.json +1 -1
- package/src/components/LpBreadcrumbs.vue +12 -8
- package/src/components/LpCheckbox.vue +2 -2
- package/src/components/LpContextMenu.vue +18 -1
- package/src/components/LpRadio.vue +2 -2
- package/src/components/LpRadioGroup.vue +2 -2
- package/src/components/LpSwitch.vue +2 -2
- package/src/components/LpTable.vue +18 -1
|
@@ -11,17 +11,17 @@
|
|
|
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-a6bdc221],
|
|
15
|
+
.lp-row-leave-active[data-v-a6bdc221] {
|
|
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-a6bdc221] {
|
|
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-a6bdc221],
|
|
24
|
+
.lp-row-leave-to[data-v-a6bdc221] {
|
|
25
25
|
opacity: 0;
|
|
26
26
|
transform: translateX(-0.5rem);
|
|
27
27
|
}
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
* drops out of the table layout entirely. Nothing sits below this row to be
|
|
36
36
|
* dragged around, so simply not animating its exit costs nothing.
|
|
37
37
|
*/
|
|
38
|
-
.lp-row-empty.lp-row-leave-active[data-v-
|
|
38
|
+
.lp-row-empty.lp-row-leave-active[data-v-a6bdc221] {
|
|
39
39
|
display: none;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
* once anything is selected. An earlier version collapsed the column to nothing
|
|
55
55
|
* and floated the hover box over the first cell, where it sat on the text.
|
|
56
56
|
*/
|
|
57
|
-
.lp-tick[data-v-
|
|
57
|
+
.lp-tick[data-v-a6bdc221] {
|
|
58
58
|
display: flex;
|
|
59
59
|
align-items: center;
|
|
60
60
|
max-width: 0;
|
|
@@ -66,17 +66,17 @@
|
|
|
66
66
|
padding var(--duration-medium) var(--ease-emphasized),
|
|
67
67
|
opacity var(--duration-fast) ease;
|
|
68
68
|
}
|
|
69
|
-
.lp-tick-open[data-v-
|
|
69
|
+
.lp-tick-open[data-v-a6bdc221] {
|
|
70
70
|
max-width: 3.25rem;
|
|
71
71
|
padding-inline: 1rem;
|
|
72
72
|
opacity: 1;
|
|
73
73
|
}
|
|
74
|
-
.lp-tick-hidden[data-v-
|
|
75
|
-
.lp-tick-cue[data-v-
|
|
74
|
+
.lp-tick-hidden[data-v-a6bdc221],
|
|
75
|
+
.lp-tick-cue[data-v-a6bdc221] {
|
|
76
76
|
opacity: 0;
|
|
77
77
|
}
|
|
78
|
-
tr:hover .lp-tick-cue[data-v-
|
|
79
|
-
.lp-tick-cue[data-v-
|
|
78
|
+
tr:hover .lp-tick-cue[data-v-a6bdc221],
|
|
79
|
+
.lp-tick-cue[data-v-a6bdc221]:focus-within {
|
|
80
80
|
opacity: 1;
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -84,24 +84,24 @@ tr:hover .lp-tick-cue[data-v-602c1271],
|
|
|
84
84
|
turned down the rows change without animating rather than not changing. */
|
|
85
85
|
/* Only where there is a hover to reveal it; a finger long-presses instead. */
|
|
86
86
|
@media (hover: none) {
|
|
87
|
-
tr:hover .lp-tick-cue[data-v-
|
|
87
|
+
tr:hover .lp-tick-cue[data-v-a6bdc221] {
|
|
88
88
|
opacity: 0;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/* Nor is there anything for the column's width to hold until then: on a
|
|
92
92
|
touch screen it stays closed until a long press starts selecting, and
|
|
93
93
|
eases open like the rest of the column. */
|
|
94
|
-
.lp-tick-hidden[data-v-
|
|
95
|
-
.lp-tick-cue[data-v-
|
|
94
|
+
.lp-tick-hidden[data-v-a6bdc221],
|
|
95
|
+
.lp-tick-cue[data-v-a6bdc221] {
|
|
96
96
|
max-width: 0;
|
|
97
97
|
padding-inline: 0;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
@media (prefers-reduced-motion: reduce) {
|
|
101
|
-
.lp-row-enter-active[data-v-
|
|
102
|
-
.lp-row-leave-active[data-v-
|
|
103
|
-
.lp-row-move[data-v-
|
|
104
|
-
.lp-tick[data-v-
|
|
101
|
+
.lp-row-enter-active[data-v-a6bdc221],
|
|
102
|
+
.lp-row-leave-active[data-v-a6bdc221],
|
|
103
|
+
.lp-row-move[data-v-a6bdc221],
|
|
104
|
+
.lp-tick[data-v-a6bdc221] {
|
|
105
105
|
transition: none;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -4,7 +4,7 @@ import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
|
|
|
4
4
|
import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
|
|
5
5
|
import { _ as _sfc_main$5 } from "./LpScrollArea-Hz3-JWUG.js";
|
|
6
6
|
import { _ as _sfc_main$4 } from "./LpShift-DXNsauQZ.js";
|
|
7
|
-
import { _ as _sfc_main$1 } from "./LpSidebar-
|
|
7
|
+
import { _ as _sfc_main$1 } from "./LpSidebar-C2oolgwy.js";
|
|
8
8
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
9
9
|
const _hoisted_1 = ["href"];
|
|
10
10
|
const _hoisted_2 = { class: "flex min-w-0 flex-1 flex-col" };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, openBlock, createBlock, withCtx, createVNode, unref, mergeProps, createCommentVNode, createElementBlock, Fragment, createTextVNode, toDisplayString } from "vue";
|
|
2
2
|
import { AvatarRoot, AvatarImage, AvatarFallback } from "reka-ui";
|
|
3
3
|
import { tv } from "tailwind-variants";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-EF_90u3g.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
|
|
6
6
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
7
7
|
const __default__ = { inheritAttrs: false };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, createBlock, createCommentVNode, resolveDynamicComponent, withCtx,
|
|
1
|
+
import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, createBlock, createCommentVNode, resolveDynamicComponent, withCtx, toDisplayString } from "vue";
|
|
2
2
|
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
3
3
|
import { useLabels, useLinkComponent } from "../composables/useLpConfig.js";
|
|
4
4
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
5
5
|
import { resolveLink } from "../components/link.js";
|
|
6
6
|
const _hoisted_1 = ["aria-label"];
|
|
7
|
-
const _hoisted_2 =
|
|
7
|
+
const _hoisted_2 = { class: "truncate" };
|
|
8
|
+
const _hoisted_3 = ["aria-current"];
|
|
9
|
+
const _hoisted_4 = { class: "truncate" };
|
|
8
10
|
const __default__ = { inheritAttrs: false };
|
|
9
11
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
10
12
|
...__default__,
|
|
@@ -34,11 +36,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
34
36
|
}))
|
|
35
37
|
);
|
|
36
38
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
37
|
-
"flex items-center gap-1.5 text-sm"
|
|
39
|
+
"flex min-w-0 items-center gap-1.5 text-sm"
|
|
38
40
|
);
|
|
39
41
|
return (_ctx, _cache) => {
|
|
40
42
|
return openBlock(), createElementBlock("nav", mergeProps({
|
|
41
|
-
"aria-label": unref(text).nav
|
|
43
|
+
"aria-label": unref(text).nav,
|
|
44
|
+
class: "min-w-0"
|
|
42
45
|
}, unref(rest)), [
|
|
43
46
|
createElementVNode("ol", {
|
|
44
47
|
class: normalizeClass(unref(rootClass))
|
|
@@ -46,20 +49,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
46
49
|
(openBlock(true), createElementBlock(Fragment, null, renderList(crumbs.value, ({ item, last, link }, i) => {
|
|
47
50
|
return openBlock(), createElementBlock("li", {
|
|
48
51
|
key: i,
|
|
49
|
-
class: "inline-flex items-center gap-1.5"
|
|
52
|
+
class: normalizeClass(["inline-flex min-w-0 items-center gap-1.5", last ? "shrink" : "shrink-0"])
|
|
50
53
|
}, [
|
|
51
54
|
i > 0 ? (openBlock(), createBlock(_sfc_main$1, {
|
|
52
55
|
key: 0,
|
|
53
56
|
name: "lucide:chevron-right",
|
|
54
57
|
size: 14,
|
|
55
|
-
class: "text-muted",
|
|
58
|
+
class: "shrink-0 text-muted",
|
|
56
59
|
"aria-hidden": "true"
|
|
57
60
|
})) : createCommentVNode("", true),
|
|
58
61
|
link ? (openBlock(), createBlock(resolveDynamicComponent(link.is), mergeProps({
|
|
59
62
|
key: 1,
|
|
60
63
|
ref_for: true
|
|
61
64
|
}, link.props, {
|
|
62
|
-
class: "inline-flex items-center gap-1.5 rounded-xs text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
65
|
+
class: "inline-flex min-w-0 items-center gap-1.5 rounded-xs text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
63
66
|
onClick: ($event) => _ctx.$emit("navigate", item, i)
|
|
64
67
|
}), {
|
|
65
68
|
default: withCtx(() => [
|
|
@@ -68,12 +71,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
68
71
|
name: item.icon,
|
|
69
72
|
size: 14
|
|
70
73
|
}, null, 8, ["name"])) : createCommentVNode("", true),
|
|
71
|
-
|
|
74
|
+
createElementVNode("span", _hoisted_2, toDisplayString(item.label), 1)
|
|
72
75
|
]),
|
|
73
76
|
_: 2
|
|
74
77
|
}, 1040, ["onClick"])) : (openBlock(), createElementBlock("span", {
|
|
75
78
|
key: 2,
|
|
76
|
-
class: normalizeClass(["inline-flex items-center gap-1.5", last ? "text-ink" : "text-muted"]),
|
|
79
|
+
class: normalizeClass(["inline-flex min-w-0 items-center gap-1.5", last ? "text-ink" : "text-muted"]),
|
|
77
80
|
"aria-current": last ? "page" : void 0
|
|
78
81
|
}, [
|
|
79
82
|
item.icon ? (openBlock(), createBlock(_sfc_main$1, {
|
|
@@ -81,9 +84,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
81
84
|
name: item.icon,
|
|
82
85
|
size: 14
|
|
83
86
|
}, null, 8, ["name"])) : createCommentVNode("", true),
|
|
84
|
-
|
|
85
|
-
], 10,
|
|
86
|
-
]);
|
|
87
|
+
createElementVNode("span", _hoisted_4, toDisplayString(item.label), 1)
|
|
88
|
+
], 10, _hoisted_3))
|
|
89
|
+
], 2);
|
|
87
90
|
}), 128))
|
|
88
91
|
], 2)
|
|
89
92
|
], 16, _hoisted_1);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, openBlock, createBlock, withCtx, resolveDynamicComponent, mergeProps, unref, renderSlot } from "vue";
|
|
2
2
|
import { tv } from "tailwind-variants";
|
|
3
3
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-EF_90u3g.js";
|
|
5
5
|
const __default__ = { inheritAttrs: false };
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
7
7
|
...__default__,
|
|
@@ -26,7 +26,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
26
26
|
}
|
|
27
27
|
const field = useFieldControl(() => ({ wrapped: false, id: props.id, disabled: props.disabled }));
|
|
28
28
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
29
|
-
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
29
|
+
"group/check inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
30
30
|
);
|
|
31
31
|
return (_ctx, _cache) => {
|
|
32
32
|
return openBlock(), createElementBlock("label", mergeProps({ class: unref(rootClass) }, unref(rest)), [
|
|
@@ -36,7 +36,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
36
36
|
"model-value": __props.indeterminate ? "indeterminate" : __props.modelValue,
|
|
37
37
|
disabled: unref(field).disabled,
|
|
38
38
|
"aria-describedby": unref(field).describedBy,
|
|
39
|
-
class: "flex size-[18px] items-center justify-center rounded-[5px] border border-line-strong bg-surface-soft outline-none transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:not-data-[state=indeterminate]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand data-[state=indeterminate]:border-transparent data-[state=indeterminate]:bg-brand disabled:cursor-not-allowed disabled:opacity-55",
|
|
39
|
+
class: "flex size-[18px] items-center justify-center rounded-[5px] border border-line-strong bg-surface-soft outline-none transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:not-data-[state=indeterminate]:group-hover/check:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand data-[state=indeterminate]:border-transparent data-[state=indeterminate]:bg-brand disabled:cursor-not-allowed disabled:opacity-55",
|
|
40
40
|
"onUpdate:modelValue": onUpdate
|
|
41
41
|
}, {
|
|
42
42
|
default: withCtx(() => [
|
|
@@ -5,7 +5,7 @@ import { useFieldControl } from "../composables/useField.js";
|
|
|
5
5
|
import { DEFAULT_SWATCHES, formatColor, opaqueCss, parseColor, rgbToHsv, isLight, clampHsv } from "../components/color.js";
|
|
6
6
|
import { useClipboard } from "../composables/useClipboard.js";
|
|
7
7
|
import { POPOVER_PANEL } from "../components/dropdown.js";
|
|
8
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
8
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-EF_90u3g.js";
|
|
9
9
|
import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
|
|
10
10
|
import { _ as _sfc_main$3 } from "./LpRollingText-DB7upf-5.js";
|
|
11
11
|
const _hoisted_1 = ["id", "disabled", "aria-label", "aria-invalid", "aria-describedby"];
|
|
@@ -24,6 +24,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
24
24
|
const text = el instanceof HTMLTextAreaElement || el instanceof HTMLInputElement && SELECTABLE.has(el.type);
|
|
25
25
|
field = text ? { el, value: el.value, start: el.selectionStart ?? 0, end: el.selectionEnd ?? 0 } : null;
|
|
26
26
|
}
|
|
27
|
+
function keepContextMenu(event) {
|
|
28
|
+
if (enabled.value) event.stopPropagation();
|
|
29
|
+
}
|
|
27
30
|
function returnFocus(event) {
|
|
28
31
|
const saved = field;
|
|
29
32
|
field = null;
|
|
@@ -38,7 +41,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
38
41
|
createVNode(unref(ContextMenuTrigger), {
|
|
39
42
|
"as-child": "",
|
|
40
43
|
disabled: !enabled.value,
|
|
41
|
-
onContextmenuCapture: rememberField
|
|
44
|
+
onContextmenuCapture: rememberField,
|
|
45
|
+
onContextmenu: keepContextMenu
|
|
42
46
|
}, {
|
|
43
47
|
default: withCtx(() => [
|
|
44
48
|
renderSlot(_ctx.$slots, "default")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, ref, watch, computed, openBlock, createElementBlock, mergeProps, unref, Fragment, renderList, normalizeStyle, createBlock, createVNode, withCtx, createElementVNode, renderSlot, normalizeProps, guardReactiveProps, createTextVNode, toDisplayString, createCommentVNode } from "vue";
|
|
2
2
|
import { computeStats, formatSize, sortNodes, subtreeIds, ancestorIds } from "../components/fileTree.js";
|
|
3
3
|
import { _ as _sfc_main$1 } from "./LpEmptyState-BJbZXC8D.js";
|
|
4
|
-
import { _ as _sfc_main$3 } from "./LpFileTreeNode-
|
|
4
|
+
import { _ as _sfc_main$3 } from "./LpFileTreeNode-B4uB8Ks_.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
|
|
6
6
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
7
7
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineComponent, computed, resolveComponent, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, createElementVNode, withModifiers, normalizeStyle, normalizeClass, createBlock, createCommentVNode, renderSlot, createTextVNode, toDisplayString, Transition, Fragment, renderList } from "vue";
|
|
2
2
|
import { prefersReducedMotion, easingToken } from "../composables/easing.js";
|
|
3
3
|
import { sortNodes, formatSize, formatModified, fileIcon } from "../components/fileTree.js";
|
|
4
|
-
import { _ as _sfc_main$3 } from "./LpCheckbox-
|
|
5
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$3 } from "./LpCheckbox-DvVYeOD-.js";
|
|
5
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-EF_90u3g.js";
|
|
6
6
|
import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
|
|
7
7
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
8
8
|
const _hoisted_1 = ["aria-level", "aria-selected", "aria-expanded", "aria-disabled"];
|
|
@@ -2,7 +2,7 @@ import { defineComponent, useModel, computed, ref, shallowRef, onMounted, onBefo
|
|
|
2
2
|
import { prefersReducedMotion } from "../composables/easing.js";
|
|
3
3
|
import { useClipboard } from "../composables/useClipboard.js";
|
|
4
4
|
import { useHotkeys } from "../composables/useHotkeys.js";
|
|
5
|
-
import { _ as _sfc_main$3 } from "./LpContextMenu-
|
|
5
|
+
import { _ as _sfc_main$3 } from "./LpContextMenu-EF_90u3g.js";
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
7
7
|
import { _ as _sfc_main$2 } from "./LpScrollArea-Hz3-JWUG.js";
|
|
8
8
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
@@ -4,7 +4,7 @@ import { useLabels } from "../composables/useLpConfig.js";
|
|
|
4
4
|
import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
|
|
5
5
|
import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpModal-JNa3B_Lr.js";
|
|
7
|
-
import { _ as _sfc_main$4 } from "./LpSidebar-
|
|
7
|
+
import { _ as _sfc_main$4 } from "./LpSidebar-C2oolgwy.js";
|
|
8
8
|
const _hoisted_1 = { class: "flex items-center gap-2" };
|
|
9
9
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
10
10
|
__name: "LpModalNav",
|
|
@@ -2,7 +2,7 @@ import { defineComponent, computed, useModel, getCurrentInstance, ref, onMounted
|
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { _ as _sfc_main$8 } from "./LpBadge-Fe0D1bYx.js";
|
|
4
4
|
import { _ as _sfc_main$7 } from "./LpButton-CKSwC6Mu.js";
|
|
5
|
-
import { _ as _sfc_main$5 } from "./LpContextMenu-
|
|
5
|
+
import { _ as _sfc_main$5 } from "./LpContextMenu-EF_90u3g.js";
|
|
6
6
|
import { _ as _sfc_main$3 } from "./LpEmptyState-BJbZXC8D.js";
|
|
7
7
|
import { _ as _sfc_main$6 } from "./LpIcon-DYtaid0K.js";
|
|
8
8
|
import { _ as _sfc_main$1 } from "./LpPopover-DCKeqiVn.js";
|
|
@@ -2,7 +2,7 @@ import { defineComponent, computed, ref, watch, onBeforeUnmount, openBlock, crea
|
|
|
2
2
|
import { prefersReducedMotion, easeTravel } from "../composables/easing.js";
|
|
3
3
|
import { useReveal } from "../composables/useReveal.js";
|
|
4
4
|
import { resolveSlices, arcPath, calloutLabels, formatTick } from "../components/chart.js";
|
|
5
|
-
import { _ as _sfc_main$2 } from "./LpContextMenu-
|
|
5
|
+
import { _ as _sfc_main$2 } from "./LpContextMenu-EF_90u3g.js";
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
7
7
|
import { _ as _sfc_main$4 } from "./LpNumberFlow-z4WPZcZu.js";
|
|
8
8
|
import { _ as _sfc_main$5 } from "./LpRollingText-DB7upf-5.js";
|
|
@@ -14,7 +14,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
14
14
|
const props = __props;
|
|
15
15
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
16
16
|
() => [
|
|
17
|
-
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
17
|
+
"group/radio inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
18
18
|
props.disabled ? "cursor-not-allowed opacity-55" : ""
|
|
19
19
|
].join(" ")
|
|
20
20
|
);
|
|
@@ -23,7 +23,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
23
23
|
createVNode(unref(RadioGroupItem), {
|
|
24
24
|
value: __props.value,
|
|
25
25
|
disabled: __props.disabled,
|
|
26
|
-
class: "flex size-[18px] shrink-0 items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
26
|
+
class: "flex size-[18px] shrink-0 items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover/radio:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
27
27
|
}, {
|
|
28
28
|
default: withCtx(() => [
|
|
29
29
|
createVNode(unref(RadioGroupIndicator), { class: "flex data-[state=checked]:animate-[indicator-in_140ms_var(--ease-emphasized)]" }, {
|
|
@@ -35,11 +35,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
35
35
|
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (opt) => {
|
|
36
36
|
return openBlock(), createElementBlock("label", {
|
|
37
37
|
key: opt.value,
|
|
38
|
-
class: "group inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
38
|
+
class: "group/radio inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
39
39
|
}, [
|
|
40
40
|
createVNode(unref(RadioGroupItem), {
|
|
41
41
|
value: opt.value,
|
|
42
|
-
class: "flex size-[18px] items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
42
|
+
class: "flex size-[18px] items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover/radio:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
43
43
|
}, {
|
|
44
44
|
default: withCtx(() => [
|
|
45
45
|
createVNode(unref(RadioGroupIndicator), { class: "flex data-[state=checked]:animate-[indicator-in_140ms_var(--ease-emphasized)]" }, {
|
|
@@ -2,7 +2,7 @@ import { defineComponent, computed, ref, useId, openBlock, createElementBlock, F
|
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { _ as _sfc_main$3 } from "./LpDrawer-CBFVD624.js";
|
|
4
4
|
import { _ as _sfc_main$1 } from "./LpInput-D-YGQbEv.js";
|
|
5
|
-
import { _ as _sfc_main$2 } from "./LpSidebarNav-
|
|
5
|
+
import { _ as _sfc_main$2 } from "./LpSidebarNav-C9dHu-2b.js";
|
|
6
6
|
const _hoisted_1 = ["aria-label"];
|
|
7
7
|
const _hoisted_2 = {
|
|
8
8
|
key: 2,
|
|
@@ -3,7 +3,7 @@ import { Motion } from "motion-v";
|
|
|
3
3
|
import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent } from "reka-ui";
|
|
4
4
|
import { usePillTransition } from "../composables/usePillTransition.js";
|
|
5
5
|
import { _ as _sfc_main$3 } from "./LpBadge-Fe0D1bYx.js";
|
|
6
|
-
import { _ as _sfc_main$4 } from "./LpContextMenu-
|
|
6
|
+
import { _ as _sfc_main$4 } from "./LpContextMenu-EF_90u3g.js";
|
|
7
7
|
import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
|
|
8
8
|
import { _ as _sfc_main$1 } from "./LpScrollArea-Hz3-JWUG.js";
|
|
9
9
|
import { resolveLink } from "../components/link.js";
|
|
@@ -27,8 +27,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
27
27
|
const emit = __emit;
|
|
28
28
|
const slots = useSlots();
|
|
29
29
|
const labelled = computed(() => Boolean(props.label || props.description || slots.default));
|
|
30
|
-
const TRACK = "group inline-flex h-5 w-9 shrink-0 items-center rounded-pill border border-line bg-surface-soft px-0.5 outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-55";
|
|
31
|
-
const THUMB = "h-3.5 w-3.5 rounded-full bg-ink shadow transition-[translate,width,background-color] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active:w-5 group-data-[state=checked]:translate-x-4 group-data-[state=checked]:bg-ink-inverse group-data-[state=checked]:group-active:translate-x-2.5 motion-reduce:group-active:w-3.5";
|
|
30
|
+
const TRACK = "group/switch inline-flex h-5 w-9 shrink-0 items-center rounded-pill border border-line bg-surface-soft px-0.5 outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-55";
|
|
31
|
+
const THUMB = "h-3.5 w-3.5 rounded-full bg-ink shadow transition-[translate,width,background-color] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active/switch:w-5 group-data-[state=checked]/switch:translate-x-4 group-data-[state=checked]/switch:bg-ink-inverse group-data-[state=checked]/switch:group-active/switch:translate-x-2.5 motion-reduce:group-active/switch:w-3.5";
|
|
32
32
|
const { class: rootClass, attrs: rest } = useMergedAttrs(() => {
|
|
33
33
|
if (!labelled.value) return TRACK;
|
|
34
34
|
return props.labelPosition === "start" ? "flex w-full cursor-pointer items-center justify-between gap-3 text-sm text-ink" : "inline-flex cursor-pointer items-center gap-2 text-sm text-ink";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, openBlock, createElementBlock, createBlock, createCommentVNode, createElementVNode, Fragment, unref, normalizeClass, toDisplayString, createVNode, withCtx, renderList } from "vue";
|
|
2
|
-
import { _ as _sfc_main$3 } from "./LpCheckbox-
|
|
2
|
+
import { _ as _sfc_main$3 } from "./LpCheckbox-DvVYeOD-.js";
|
|
3
3
|
import { _ as _sfc_main$1 } from "./LpInput-D-YGQbEv.js";
|
|
4
4
|
import { _ as _sfc_main$2 } from "./LpShift-DXNsauQZ.js";
|
|
5
5
|
import { usePaintSelect } from "../composables/usePaintSelect.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, onMounted, ref, openBlock, createBlock, withCtx, createElementVNode, normalizeClass, createElementBlock, createVNode, toDisplayString, createCommentVNode } from "vue";
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { u as useTheme, p as presets } from "./useTheme-DJm1JSsY.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-EF_90u3g.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpIcon-DYtaid0K.js";
|
|
6
6
|
const _hoisted_1 = ["aria-label", "title"];
|
|
7
7
|
const _hoisted_2 = {
|
|
@@ -5,7 +5,7 @@ import { prefersReducedMotion, easeTravel } from "../composables/easing.js";
|
|
|
5
5
|
import { usePillTransition } from "../composables/usePillTransition.js";
|
|
6
6
|
import { useReveal } from "../composables/useReveal.js";
|
|
7
7
|
import { normalise, pointCount, resolveLabels, extent, axisTicks, plotHeight, plotWidth, xAt, yAt, areaPath, linePath, barPath, markerIndex, chartSummary, niceScale, nearestIndex, formatTick } from "./chart.js";
|
|
8
|
-
import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-
|
|
8
|
+
import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-EF_90u3g.js";
|
|
9
9
|
import { _ as _sfc_main$2 } from "../chunks/LpIcon-DYtaid0K.js";
|
|
10
10
|
import { _ as _sfc_main$3 } from "../chunks/LpShift-DXNsauQZ.js";
|
|
11
11
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, ref, useId, computed, shallowRef, watch, useSlots, onBeforeUnmount, nextTick, openBlock, createBlock, unref, withCtx, createVNode, normalizeStyle, normalizeClass, withModifiers, createTextVNode, toDisplayString, createElementVNode, createElementBlock, Fragment, renderList, createCommentVNode, withDirectives, withKeys, vModelText, resolveDynamicComponent, Transition, renderSlot } from "vue";
|
|
2
2
|
import { DialogRoot, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription } from "reka-ui";
|
|
3
|
-
import { _ as _sfc_main$3 } from "../chunks/LpAvatar-
|
|
3
|
+
import { _ as _sfc_main$3 } from "../chunks/LpAvatar-LTvy0OkE.js";
|
|
4
4
|
import { _ as _sfc_main$1 } from "../chunks/LpIcon-DYtaid0K.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "../chunks/LpScrollArea-Hz3-JWUG.js";
|
|
6
6
|
import { useAsyncTask } from "../composables/useAsyncTask.js";
|
|
@@ -38,9 +38,9 @@ type __VLS_Props = {
|
|
|
38
38
|
titleIcon?: string;
|
|
39
39
|
titleImage?: string;
|
|
40
40
|
};
|
|
41
|
-
declare var
|
|
41
|
+
declare var __VLS_17: {};
|
|
42
42
|
type __VLS_Slots = {} & {
|
|
43
|
-
default?: (props: typeof
|
|
43
|
+
default?: (props: typeof __VLS_17) => any;
|
|
44
44
|
};
|
|
45
45
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
46
46
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, computed, openBlock, createElementBlock, createElementVNode, renderSlot, createBlock, createVNode, createCommentVNode, toDisplayString } from "vue";
|
|
2
|
-
import { _ as _sfc_main$1 } from "../chunks/LpAvatar-
|
|
2
|
+
import { _ as _sfc_main$1 } from "../chunks/LpAvatar-LTvy0OkE.js";
|
|
3
3
|
import { _ as _sfc_main$2 } from "../chunks/LpIcon-DYtaid0K.js";
|
|
4
4
|
import { _ as _sfc_main$3 } from "../chunks/HighlightText-BvnYZkhi.js";
|
|
5
5
|
import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createElementVNode, Transition, renderSlot, mergeProps, normalizeStyle, createBlock, TransitionGroup, unref, withModifiers, nextTick } from "vue";
|
|
2
|
-
import { _ as _sfc_main$7 } from "../chunks/LpCheckbox-
|
|
3
|
-
import { _ as _sfc_main$6 } from "../chunks/LpContextMenu-
|
|
2
|
+
import { _ as _sfc_main$7 } from "../chunks/LpCheckbox-DvVYeOD-.js";
|
|
3
|
+
import { _ as _sfc_main$6 } from "../chunks/LpContextMenu-EF_90u3g.js";
|
|
4
4
|
import { _ as _sfc_main$2 } from "../chunks/LpIcon-DYtaid0K.js";
|
|
5
5
|
import { _ as _sfc_main$a } from "../chunks/LpPagination-BcDlo3r_.js";
|
|
6
6
|
import { _ as _sfc_main$8 } from "../chunks/LpPopover-DCKeqiVn.js";
|
|
7
7
|
import { _ as _sfc_main$5 } from "../chunks/LpScrollArea-Hz3-JWUG.js";
|
|
8
8
|
import { _ as _sfc_main$4 } from "../chunks/LpRollingText-DB7upf-5.js";
|
|
9
9
|
import { _ as _sfc_main$3 } from "../chunks/LpShift-DXNsauQZ.js";
|
|
10
|
-
import { _ as _sfc_main$9 } from "../chunks/LpTableFilter-
|
|
10
|
+
import { _ as _sfc_main$9 } from "../chunks/LpTableFilter-CrW7_Rj4.js";
|
|
11
11
|
import { useAsyncTask } from "../composables/useAsyncTask.js";
|
|
12
12
|
import { useHotkeys } from "../composables/useHotkeys.js";
|
|
13
13
|
import { usePaintSelect } from "../composables/usePaintSelect.js";
|
|
@@ -18,7 +18,7 @@ import { _ as _sfc_main$1 } from "../chunks/LpButton-CKSwC6Mu.js";
|
|
|
18
18
|
import { toCsv, downloadFile, fileStem } from "./exportData.js";
|
|
19
19
|
import { summarizeShown, parseTableState, serializeTableState, countValues } from "./tableFilter.js";
|
|
20
20
|
import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
|
|
21
|
-
import '../assets/LpTable-
|
|
21
|
+
import '../assets/LpTable-BNzavdlv.css';const _hoisted_1 = {
|
|
22
22
|
key: 0,
|
|
23
23
|
class: "flex justify-end"
|
|
24
24
|
};
|
|
@@ -164,6 +164,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
164
164
|
function onRowContextMenu(row) {
|
|
165
165
|
menuRow.value = row;
|
|
166
166
|
}
|
|
167
|
+
function openRowMenu(event) {
|
|
168
|
+
const button = event.currentTarget;
|
|
169
|
+
if (!(button instanceof HTMLElement)) return;
|
|
170
|
+
const rect = button.getBoundingClientRect();
|
|
171
|
+
button.dispatchEvent(
|
|
172
|
+
new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX: rect.left, clientY: rect.bottom })
|
|
173
|
+
);
|
|
174
|
+
}
|
|
167
175
|
const contextMenu = computed(() => {
|
|
168
176
|
if (paint.painting.value) return [];
|
|
169
177
|
const table = tableMenu();
|
|
@@ -917,7 +925,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
917
925
|
}, [
|
|
918
926
|
renderSlot(_ctx.$slots, `cell-${col.key}`, {
|
|
919
927
|
row,
|
|
920
|
-
value: row[col.key]
|
|
928
|
+
value: row[col.key],
|
|
929
|
+
openMenu: openRowMenu
|
|
921
930
|
}, () => [
|
|
922
931
|
createTextVNode(toDisplayString(row[col.key]), 1)
|
|
923
932
|
], true)
|
|
@@ -947,7 +956,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
947
956
|
};
|
|
948
957
|
}
|
|
949
958
|
});
|
|
950
|
-
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
959
|
+
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a6bdc221"]]);
|
|
951
960
|
export {
|
|
952
961
|
LpTable as default
|
|
953
962
|
};
|
package/dist/index.js
CHANGED
|
@@ -4,21 +4,21 @@ import { _ as _3 } from "./chunks/LpMapPicker-Cc84LaM3.js";
|
|
|
4
4
|
import { OSM_TILES, createNominatimProvider, emptyAddress, formatAddress, project, tileUrl, unproject } from "./components/address.js";
|
|
5
5
|
import { _ as _4 } from "./chunks/LpActionBar-CnfFVIwC.js";
|
|
6
6
|
import { _ as _5 } from "./chunks/LpAlert-B6ilrM7T.js";
|
|
7
|
-
import { _ as _6 } from "./chunks/LpAppShell-
|
|
7
|
+
import { _ as _6 } from "./chunks/LpAppShell-DcSXik4a.js";
|
|
8
8
|
import { _ as _7 } from "./chunks/LpAutocomplete-C8IgSMsi.js";
|
|
9
|
-
import { _ as _8 } from "./chunks/LpAvatar-
|
|
9
|
+
import { _ as _8 } from "./chunks/LpAvatar-LTvy0OkE.js";
|
|
10
10
|
import { _ as _9 } from "./chunks/LpBadge-Fe0D1bYx.js";
|
|
11
|
-
import { _ as _10 } from "./chunks/LpBreadcrumbs-
|
|
11
|
+
import { _ as _10 } from "./chunks/LpBreadcrumbs-D4TsoFju.js";
|
|
12
12
|
import { _ as _11 } from "./chunks/LpButton-CKSwC6Mu.js";
|
|
13
13
|
import { _ as _12 } from "./chunks/LpCalendar-DrA2McTU.js";
|
|
14
|
-
import { _ as _13 } from "./chunks/LpCard-
|
|
14
|
+
import { _ as _13 } from "./chunks/LpCard-DbjO5yaF.js";
|
|
15
15
|
import { default as default2 } from "./components/LpChart.vue.js";
|
|
16
16
|
import { backgroundOf, csvField, downloadFile, fileStem, inlineSvg, resolveCssColor, svgToPng, toCsv } from "./components/exportData.js";
|
|
17
17
|
import { CHART_PALETTE, axisTicks, chartSummary, formatTick, markerIndex, niceScale, resolveSlices } from "./components/chart.js";
|
|
18
|
-
import { _ as _14 } from "./chunks/LpCheckbox-
|
|
18
|
+
import { _ as _14 } from "./chunks/LpCheckbox-DvVYeOD-.js";
|
|
19
19
|
import { _ as _15 } from "./chunks/LpCodeBlock-ca7ANFyW.js";
|
|
20
20
|
import { tokenizeLines } from "./components/codeHighlight.js";
|
|
21
|
-
import { _ as _16 } from "./chunks/LpColorPicker-
|
|
21
|
+
import { _ as _16 } from "./chunks/LpColorPicker-D1sQqtXS.js";
|
|
22
22
|
import { DEFAULT_SWATCHES, clampHsv, formatColor, hsvToHsl, hsvToRgb, isLight, normalizeHue, opaqueCss, parseColor, parseHex, rgbToHex, rgbToHsv } from "./components/color.js";
|
|
23
23
|
import { default as default3 } from "./components/LpCommandPalette.vue.js";
|
|
24
24
|
import { applyQueryFilters, highlightParts, parseCommandQuery, parsePaletteQuery, rankCommandItems } from "./components/commandSearch.js";
|
|
@@ -33,7 +33,7 @@ import { comboKeys, comboSteps } from "./components/keys.js";
|
|
|
33
33
|
import { _ as _18 } from "./chunks/LpConfirmDialog-Ca-CTlxT.js";
|
|
34
34
|
import { _ as _19 } from "./chunks/LpConfirmHost-BAaSaT2b.js";
|
|
35
35
|
import { confirm, useConfirm } from "./components/confirm.js";
|
|
36
|
-
import { _ as _20 } from "./chunks/LpContextMenu-
|
|
36
|
+
import { _ as _20 } from "./chunks/LpContextMenu-EF_90u3g.js";
|
|
37
37
|
import { _ as _21 } from "./chunks/LpDatePicker-BrdFtSTy.js";
|
|
38
38
|
import { _ as _22 } from "./chunks/LpDateRangePicker-Drd7EbIz.js";
|
|
39
39
|
import { _ as _23 } from "./chunks/LpRangeCalendar-DZuaRV0W.js";
|
|
@@ -44,7 +44,7 @@ import { _ as _26 } from "./chunks/LpDrawer-CBFVD624.js";
|
|
|
44
44
|
import { _ as _27 } from "./chunks/LpDropdownMenu-DrpJJBp0.js";
|
|
45
45
|
import { default as default9 } from "./components/LpDropzone.vue.js";
|
|
46
46
|
import { _ as _28 } from "./chunks/LpEmptyState-BJbZXC8D.js";
|
|
47
|
-
import { _ as _29 } from "./chunks/LpFileTree-
|
|
47
|
+
import { _ as _29 } from "./chunks/LpFileTree-3E4w4Rjr.js";
|
|
48
48
|
import { ancestorIds, checkStateOf, checkedCount, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize } from "./components/fileTree.js";
|
|
49
49
|
import { _ as _30 } from "./chunks/LpFieldNotice-wtieLUTj.js";
|
|
50
50
|
import { _ as _31 } from "./chunks/LpFormField-CtVYj6tO.js";
|
|
@@ -56,25 +56,25 @@ import { _ as _34 } from "./chunks/LpInput-D-YGQbEv.js";
|
|
|
56
56
|
import { _ as _35 } from "./chunks/LpLightbox-EVXzAq62.js";
|
|
57
57
|
import { fileNameOf } from "./components/lightbox.js";
|
|
58
58
|
import { _ as _36 } from "./chunks/LpLink-Krkjhe_y.js";
|
|
59
|
-
import { _ as _37 } from "./chunks/LpLogViewer-
|
|
59
|
+
import { _ as _37 } from "./chunks/LpLogViewer-BfgtXVKm.js";
|
|
60
60
|
import { countLevels, matchPositions, matchesTerm, ringWindow, stepMatch } from "./components/logSearch.js";
|
|
61
61
|
import { _ as _38 } from "./chunks/LpMediaGallery-BnlkN_1f.js";
|
|
62
62
|
import { _ as _39 } from "./chunks/LpModal-JNa3B_Lr.js";
|
|
63
|
-
import { _ as _40 } from "./chunks/LpModalNav-
|
|
64
|
-
import { _ as _41 } from "./chunks/LpNotificationBell-
|
|
63
|
+
import { _ as _40 } from "./chunks/LpModalNav-aWwc_5CD.js";
|
|
64
|
+
import { _ as _41 } from "./chunks/LpNotificationBell-wZ3meeim.js";
|
|
65
65
|
import { _ as _42 } from "./chunks/LpNumberField-B77O-z28.js";
|
|
66
66
|
import { _ as _43 } from "./chunks/LpTimeField-Cqe7fXnh.js";
|
|
67
67
|
import { _ as _44 } from "./chunks/LpNumberFlow-z4WPZcZu.js";
|
|
68
68
|
import { _ as _45 } from "./chunks/LpOtpInput-CziPF3Oq.js";
|
|
69
69
|
import { _ as _46 } from "./chunks/LpPagination-BcDlo3r_.js";
|
|
70
70
|
import { _ as _47 } from "./chunks/LpPasswordInput-eKzQhbQP.js";
|
|
71
|
-
import { _ as _48 } from "./chunks/LpPie-
|
|
71
|
+
import { _ as _48 } from "./chunks/LpPie-B7ti5qCH.js";
|
|
72
72
|
import { _ as _49 } from "./chunks/LpPhoneInput-BCbrrhgE.js";
|
|
73
73
|
import { filterCountries, flagEmoji, loadCountries, matchCountryByValue } from "./components/countries.js";
|
|
74
74
|
import { _ as _50 } from "./chunks/LpPopover-DCKeqiVn.js";
|
|
75
75
|
import { _ as _51 } from "./chunks/LpProgress-CBU1iI69.js";
|
|
76
|
-
import { _ as _52 } from "./chunks/LpRadio-
|
|
77
|
-
import { _ as _53 } from "./chunks/LpRadioGroup-
|
|
76
|
+
import { _ as _52 } from "./chunks/LpRadio-CWA5Eb3M.js";
|
|
77
|
+
import { _ as _53 } from "./chunks/LpRadioGroup-CCn-Q2_c.js";
|
|
78
78
|
import { _ as _54 } from "./chunks/LpRollingText-DB7upf-5.js";
|
|
79
79
|
import { _ as _55 } from "./chunks/LpScrollArea-Hz3-JWUG.js";
|
|
80
80
|
import { _ as _56 } from "./chunks/LpSegmented-C09EEam2.js";
|
|
@@ -83,7 +83,7 @@ import { _ as _58 } from "./chunks/LpSelect-DNIL6MB9.js";
|
|
|
83
83
|
import { _ as _59 } from "./chunks/LpServiceNode-D8uJ8sGk.js";
|
|
84
84
|
import { _ as _60 } from "./chunks/LpShift-DXNsauQZ.js";
|
|
85
85
|
import { default as default11 } from "./components/LpShortcutsDialog.vue.js";
|
|
86
|
-
import { _ as _61 } from "./chunks/LpSidebar-
|
|
86
|
+
import { _ as _61 } from "./chunks/LpSidebar-C2oolgwy.js";
|
|
87
87
|
import { _ as _62 } from "./chunks/LpSkeleton-BB6XIV-w.js";
|
|
88
88
|
import { _ as _63 } from "./chunks/LpSlider-Cuzmrd7p.js";
|
|
89
89
|
import { _ as _64 } from "./chunks/LpRangeSlider-C1yF9-nP.js";
|
|
@@ -92,7 +92,7 @@ import { formatClipTime, isNativeLoop, planLoop, seamProgress, seamReached } fro
|
|
|
92
92
|
import { _ as _66 } from "./chunks/LpSparkline-CB80N8SJ.js";
|
|
93
93
|
import { _ as _67 } from "./chunks/LpStat-B-7udBRP.js";
|
|
94
94
|
import { _ as _68 } from "./chunks/LpStepper-C7XiVKZj.js";
|
|
95
|
-
import { _ as _69 } from "./chunks/LpSwitch-
|
|
95
|
+
import { _ as _69 } from "./chunks/LpSwitch-DG2AhXIL.js";
|
|
96
96
|
import { default as default12 } from "./components/LpTable.vue.js";
|
|
97
97
|
import { compareValues } from "./components/tableSort.js";
|
|
98
98
|
import { _ as _70 } from "./chunks/LpTableOfContents-BUcAfGPQ.js";
|
|
@@ -100,7 +100,7 @@ import { _ as _71 } from "./chunks/LpTabs-UM0FQmPA.js";
|
|
|
100
100
|
import { _ as _72 } from "./chunks/LpTagsInput-D1SuqbhB.js";
|
|
101
101
|
import { addTags, splitTags } from "./components/tags.js";
|
|
102
102
|
import { _ as _73 } from "./chunks/LpTextarea-uuScWo6-.js";
|
|
103
|
-
import { _ as _74 } from "./chunks/LpThemeSwitcher-
|
|
103
|
+
import { _ as _74 } from "./chunks/LpThemeSwitcher-CPmhYOjX.js";
|
|
104
104
|
import { _ as _75 } from "./chunks/LpTilt-B7KHX1zH.js";
|
|
105
105
|
import { _ as _76 } from "./chunks/LpToaster-DTtWuKvq.js";
|
|
106
106
|
import { _ as _77 } from "./chunks/LpTooltip-CXVKcOXT.js";
|
package/package.json
CHANGED
|
@@ -53,43 +53,47 @@ const crumbs = computed(() =>
|
|
|
53
53
|
|
|
54
54
|
// The trail sets its own gap, which a dense header bar needs to reduce.
|
|
55
55
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
56
|
-
"flex items-center gap-1.5 text-sm",
|
|
56
|
+
"flex min-w-0 items-center gap-1.5 text-sm",
|
|
57
57
|
)
|
|
58
58
|
</script>
|
|
59
59
|
|
|
60
60
|
<template>
|
|
61
|
-
|
|
61
|
+
<!-- One line however long the labels: the earlier crumbs keep their size
|
|
62
|
+
and the current one gives way with an ellipsis. Wrapping, a long name
|
|
63
|
+
pushed the trail onto three lines over whatever bar held it. -->
|
|
64
|
+
<nav :aria-label="text.nav" class="min-w-0" v-bind="rest">
|
|
62
65
|
<ol :class="rootClass">
|
|
63
66
|
<li
|
|
64
67
|
v-for="({ item, last, link }, i) in crumbs"
|
|
65
68
|
:key="i"
|
|
66
|
-
class="inline-flex items-center gap-1.5"
|
|
69
|
+
class="inline-flex min-w-0 items-center gap-1.5"
|
|
70
|
+
:class="last ? 'shrink' : 'shrink-0'"
|
|
67
71
|
>
|
|
68
72
|
<LpIcon
|
|
69
73
|
v-if="i > 0"
|
|
70
74
|
name="lucide:chevron-right"
|
|
71
75
|
:size="14"
|
|
72
|
-
class="text-muted"
|
|
76
|
+
class="shrink-0 text-muted"
|
|
73
77
|
aria-hidden="true"
|
|
74
78
|
/>
|
|
75
79
|
<component
|
|
76
80
|
:is="link.is"
|
|
77
81
|
v-if="link"
|
|
78
82
|
v-bind="link.props"
|
|
79
|
-
class="inline-flex items-center gap-1.5 rounded-xs text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring"
|
|
83
|
+
class="inline-flex min-w-0 items-center gap-1.5 rounded-xs text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring"
|
|
80
84
|
@click="$emit('navigate', item, i)"
|
|
81
85
|
>
|
|
82
86
|
<LpIcon v-if="item.icon" :name="item.icon" :size="14" />
|
|
83
|
-
{{ item.label }}
|
|
87
|
+
<span class="truncate">{{ item.label }}</span>
|
|
84
88
|
</component>
|
|
85
89
|
<span
|
|
86
90
|
v-else
|
|
87
|
-
class="inline-flex items-center gap-1.5"
|
|
91
|
+
class="inline-flex min-w-0 items-center gap-1.5"
|
|
88
92
|
:class="last ? 'text-ink' : 'text-muted'"
|
|
89
93
|
:aria-current="last ? 'page' : undefined"
|
|
90
94
|
>
|
|
91
95
|
<LpIcon v-if="item.icon" :name="item.icon" :size="14" />
|
|
92
|
-
{{ item.label }}
|
|
96
|
+
<span class="truncate">{{ item.label }}</span>
|
|
93
97
|
</span>
|
|
94
98
|
</li>
|
|
95
99
|
</ol>
|
|
@@ -35,7 +35,7 @@ const field = useFieldControl(() => ({ wrapped: false, id: props.id, disabled: p
|
|
|
35
35
|
|
|
36
36
|
// The label sits a fixed distance from the box; a dense list of options needs that closer.
|
|
37
37
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
38
|
-
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
38
|
+
"group/check inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
39
39
|
)
|
|
40
40
|
</script>
|
|
41
41
|
|
|
@@ -49,7 +49,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
49
49
|
:model-value="indeterminate ? 'indeterminate' : modelValue"
|
|
50
50
|
:disabled="field.disabled"
|
|
51
51
|
:aria-describedby="field.describedBy"
|
|
52
|
-
class="flex size-[18px] items-center justify-center rounded-[5px] border border-line-strong bg-surface-soft outline-none transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:not-data-[state=indeterminate]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand data-[state=indeterminate]:border-transparent data-[state=indeterminate]:bg-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
52
|
+
class="flex size-[18px] items-center justify-center rounded-[5px] border border-line-strong bg-surface-soft outline-none transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:not-data-[state=indeterminate]:group-hover/check:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand data-[state=indeterminate]:border-transparent data-[state=indeterminate]:bg-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
53
53
|
@update:model-value="onUpdate"
|
|
54
54
|
>
|
|
55
55
|
<CheckboxIndicator
|
|
@@ -79,6 +79,18 @@ function rememberField() {
|
|
|
79
79
|
: null
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
/*
|
|
83
|
+
* A right-click the menu answers goes no further than its trigger. reka opens
|
|
84
|
+
* the menu a tick later, and only if nothing has called preventDefault by then;
|
|
85
|
+
* an app that silences the browser's own menu with a window listener (most
|
|
86
|
+
* desktop shells do) got there first, so the menu never opened while a long
|
|
87
|
+
* press, which reka times itself, still did. reka cancels the native menu on
|
|
88
|
+
* its own once it opens.
|
|
89
|
+
*/
|
|
90
|
+
function keepContextMenu(event: Event) {
|
|
91
|
+
if (enabled.value) event.stopPropagation()
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
function returnFocus(event: Event) {
|
|
83
95
|
const saved = field
|
|
84
96
|
field = null
|
|
@@ -95,7 +107,12 @@ function returnFocus(event: Event) {
|
|
|
95
107
|
late, losing its state and focus. A disabled trigger leaves the browser's
|
|
96
108
|
own menu in place. -->
|
|
97
109
|
<ContextMenuRoot>
|
|
98
|
-
<ContextMenuTrigger
|
|
110
|
+
<ContextMenuTrigger
|
|
111
|
+
as-child
|
|
112
|
+
:disabled="!enabled"
|
|
113
|
+
@contextmenu.capture="rememberField"
|
|
114
|
+
@contextmenu="keepContextMenu"
|
|
115
|
+
>
|
|
99
116
|
<slot />
|
|
100
117
|
</ContextMenuTrigger>
|
|
101
118
|
<ContextMenuPortal v-if="items.length">
|
|
@@ -18,7 +18,7 @@ const props = defineProps<{ value: string; label?: string; disabled?: boolean }>
|
|
|
18
18
|
// options needs to close up — `class="gap-1"` should win over the default.
|
|
19
19
|
const { class: rootClass, attrs: rest } = useMergedAttrs(() =>
|
|
20
20
|
[
|
|
21
|
-
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
21
|
+
"group/radio inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
|
|
22
22
|
props.disabled ? "cursor-not-allowed opacity-55" : "",
|
|
23
23
|
].join(" "),
|
|
24
24
|
)
|
|
@@ -32,7 +32,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() =>
|
|
|
32
32
|
<RadioGroupItem
|
|
33
33
|
:value="value"
|
|
34
34
|
:disabled="disabled"
|
|
35
|
-
class="flex size-[18px] shrink-0 items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
35
|
+
class="flex size-[18px] shrink-0 items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover/radio:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
36
36
|
>
|
|
37
37
|
<RadioGroupIndicator
|
|
38
38
|
class="flex data-[state=checked]:animate-[indicator-in_140ms_var(--ease-emphasized)]"
|
|
@@ -45,11 +45,11 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
45
45
|
<label
|
|
46
46
|
v-for="opt in options"
|
|
47
47
|
:key="opt.value"
|
|
48
|
-
class="group inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
48
|
+
class="group/radio inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
49
49
|
>
|
|
50
50
|
<RadioGroupItem
|
|
51
51
|
:value="opt.value"
|
|
52
|
-
class="flex size-[18px] items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
52
|
+
class="flex size-[18px] items-center justify-center rounded-full border border-line-strong bg-surface-soft outline-none transition-[color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:group-hover/radio:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
53
53
|
>
|
|
54
54
|
<RadioGroupIndicator
|
|
55
55
|
class="flex data-[state=checked]:animate-[indicator-in_140ms_var(--ease-emphasized)]"
|
|
@@ -33,9 +33,9 @@ const slots = useSlots()
|
|
|
33
33
|
const labelled = computed(() => Boolean(props.label || props.description || slots.default))
|
|
34
34
|
|
|
35
35
|
const TRACK =
|
|
36
|
-
"group inline-flex h-5 w-9 shrink-0 items-center rounded-pill border border-line bg-surface-soft px-0.5 outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
36
|
+
"group/switch inline-flex h-5 w-9 shrink-0 items-center rounded-pill border border-line bg-surface-soft px-0.5 outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-55"
|
|
37
37
|
const THUMB =
|
|
38
|
-
"h-3.5 w-3.5 rounded-full bg-ink shadow transition-[translate,width,background-color] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active:w-5 group-data-[state=checked]:translate-x-4 group-data-[state=checked]:bg-ink-inverse group-data-[state=checked]:group-active:translate-x-2.5 motion-reduce:group-active:w-3.5"
|
|
38
|
+
"h-3.5 w-3.5 rounded-full bg-ink shadow transition-[translate,width,background-color] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active/switch:w-5 group-data-[state=checked]/switch:translate-x-4 group-data-[state=checked]/switch:bg-ink-inverse group-data-[state=checked]/switch:group-active/switch:translate-x-2.5 motion-reduce:group-active/switch:w-3.5"
|
|
39
39
|
|
|
40
40
|
// Bare, the switch is the root, so a consumer asking for a bigger track must not
|
|
41
41
|
// have to depend on stylesheet order to get it. With text, the row is the root
|
|
@@ -355,6 +355,23 @@ function onRowContextMenu(row: T) {
|
|
|
355
355
|
menuRow.value = row
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
+
/*
|
|
359
|
+
* The same menu on a button of the row's own, a "more" button in an actions
|
|
360
|
+
* cell: cell slots get `openMenu` for its click. A dropdown per row stood up
|
|
361
|
+
* the full reka menu stack in every row, closed — some twenty components a
|
|
362
|
+
* row, which on a phone made a list of a few hundred rows take most of a
|
|
363
|
+
* second to appear. Here the click becomes a right-click at the button's
|
|
364
|
+
* corner, which the row remembers on its way up and the shared menu opens at.
|
|
365
|
+
*/
|
|
366
|
+
function openRowMenu(event: Event) {
|
|
367
|
+
const button = event.currentTarget
|
|
368
|
+
if (!(button instanceof HTMLElement)) return
|
|
369
|
+
const rect = button.getBoundingClientRect()
|
|
370
|
+
button.dispatchEvent(
|
|
371
|
+
new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX: rect.left, clientY: rect.bottom }),
|
|
372
|
+
)
|
|
373
|
+
}
|
|
374
|
+
|
|
358
375
|
// Row items first — they are what the pointer is actually on — then the
|
|
359
376
|
// table-wide ones under a rule, when the row has any of its own.
|
|
360
377
|
const contextMenu = computed<ContextMenuItemDef[]>(() => {
|
|
@@ -1300,7 +1317,7 @@ const barInsetTop = computed(() =>
|
|
|
1300
1317
|
class="px-4 text-ink"
|
|
1301
1318
|
:class="[alignClass(col.align), cellY, col.nowrap ? 'whitespace-nowrap' : '']"
|
|
1302
1319
|
>
|
|
1303
|
-
<slot :name="`cell-${col.key}`" :row="row" :value="row[col.key]">
|
|
1320
|
+
<slot :name="`cell-${col.key}`" :row="row" :value="row[col.key]" :open-menu="openRowMenu">
|
|
1304
1321
|
{{ row[col.key] }}
|
|
1305
1322
|
</slot>
|
|
1306
1323
|
</td>
|