@leavepulse/ui 0.85.1 → 0.86.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-CCk0ZHo7.css → LpTable-ChCcmmtT.css} +19 -19
- package/dist/chunks/{LpCodeBlock-Dx0J9xlm.js → LpCodeBlock-kGT15Zou.js} +1 -1
- package/dist/chunks/{LpCodeDisplay-BlN7U8Z-.js → LpCodeDisplay-DlwzZo9o.js} +1 -1
- package/dist/chunks/{LpCopyButton-BrbvIVMG.js → LpCopyButton-TGoE43mE.js} +2 -2
- package/dist/chunks/{LpDataList-DhETPjzv.js → LpDataList-Due909Cy.js} +1 -1
- package/dist/chunks/{LpInspector-CqPgVXrm.js → LpInspector-BNxjuWMP.js} +1 -1
- package/dist/chunks/{LpLightbox-D7iJqdmH.js → LpLightbox-DVyiB4dw.js} +2 -2
- package/dist/chunks/{LpMediaGallery-D6DyJDvL.js → LpMediaGallery-OJemmbV7.js} +1 -1
- package/dist/chunks/{LpPaletteTheme-Bi6pD1GL.js → LpPaletteTheme-CWFz4H2D.js} +1 -1
- package/dist/chunks/{LpSecretField-_B2qPfk8.js → LpSecretField-Dp-c7wWc.js} +1 -1
- package/dist/chunks/{LpThemeStudio-C1xKiv8C.js → LpThemeStudio-RyI-SWiw.js} +1 -1
- package/dist/chunks/{LpThemeSwitcher-Dk4Bk6u1.js → LpThemeSwitcher-BZYJ0AXy.js} +1 -1
- package/dist/chunks/{LpToaster-C_CFWSys.js → LpToaster-YcLJFSsH.js} +1 -1
- package/dist/chunks/{LpTruncate-CBUKnr36.js → LpTruncate-DCZjfcE-.js} +1 -1
- package/dist/chunks/{LpVideoPlayer-koYKHKkC.js → LpVideoPlayer--87I5Kqu.js} +1 -1
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpCodeDisplay.vue.js +1 -1
- package/dist/components/LpCopyButton.vue.js +1 -1
- package/dist/components/LpDataList.vue.js +1 -1
- package/dist/components/LpInspector.vue.js +1 -1
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpPaletteTheme.vue.js +1 -1
- package/dist/components/LpSecretField.vue.js +1 -1
- package/dist/components/LpTable.vue.d.ts +2 -0
- package/dist/components/LpTable.vue.js +45 -42
- package/dist/components/LpThemeStudio.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTruncate.vue.js +1 -1
- package/dist/components/LpVideoPlayer.vue.js +1 -1
- package/dist/composables/useClipboard.d.ts +17 -3
- package/dist/composables/useClipboard.js +6 -2
- package/dist/index.js +14 -14
- package/package.json +1 -1
- package/src/components/LpCopyButton.vue +2 -2
- package/src/components/LpTable.vue +20 -9
- package/src/components/LpVideoPlayer.vue +1 -1
- package/src/composables/useClipboard.ts +18 -5
|
@@ -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-f6e4fb45],
|
|
15
|
+
.lp-row-leave-active[data-v-f6e4fb45] {
|
|
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-f6e4fb45] {
|
|
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-f6e4fb45],
|
|
24
|
+
.lp-row-leave-to[data-v-f6e4fb45] {
|
|
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-f6e4fb45] {
|
|
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-f6e4fb45] {
|
|
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-f6e4fb45] {
|
|
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-f6e4fb45],
|
|
75
|
+
.lp-tick-cue[data-v-f6e4fb45] {
|
|
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-f6e4fb45],
|
|
79
|
+
.lp-tick-cue[data-v-f6e4fb45]:focus-within {
|
|
80
80
|
opacity: 1;
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -84,24 +84,24 @@ tr:hover .lp-tick-cue[data-v-48ad51fc],
|
|
|
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-f6e4fb45] {
|
|
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-f6e4fb45],
|
|
95
|
+
.lp-tick-cue[data-v-f6e4fb45] {
|
|
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-f6e4fb45],
|
|
102
|
+
.lp-row-leave-active[data-v-f6e4fb45],
|
|
103
|
+
.lp-row-move[data-v-f6e4fb45],
|
|
104
|
+
.lp-tick[data-v-f6e4fb45] {
|
|
105
105
|
transition: none;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, reactive, watch, ref, openBlock, createElementBlock, mergeProps, unref, toDisplayString, createCommentVNode, createElementVNode, createVNode, createBlock, normalizeStyle, normalizeClass, Fragment, renderList, h } from "vue";
|
|
2
2
|
import { tokenizeLines } from "../components/codeHighlight.js";
|
|
3
3
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
4
|
-
import { _ as _sfc_main$2 } from "./LpCopyButton-
|
|
4
|
+
import { _ as _sfc_main$2 } from "./LpCopyButton-TGoE43mE.js";
|
|
5
5
|
import { _ as _sfc_main$1 } from "./LpIcon-DCGhNsCU.js";
|
|
6
6
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
7
7
|
const _hoisted_1 = {
|
|
@@ -3,7 +3,7 @@ import { useLabels } from "../composables/useLpConfig.js";
|
|
|
3
3
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
4
4
|
import { useNow } from "../composables/useNow.js";
|
|
5
5
|
import { _ as _sfc_main$6 } from "./LpCheckbox-DcXC2qd5.js";
|
|
6
|
-
import { _ as _sfc_main$3 } from "./LpCopyButton-
|
|
6
|
+
import { _ as _sfc_main$3 } from "./LpCopyButton-TGoE43mE.js";
|
|
7
7
|
import { _ as _sfc_main$5 } from "./LpCountdown-DVl7vXI1.js";
|
|
8
8
|
import { _ as _sfc_main$4 } from "./LpIcon-DCGhNsCU.js";
|
|
9
9
|
import { _ as _sfc_main$1 } from "./LpRollingText-B54Pje7P.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, useAttrs, openBlock, createElementBlock, Fragment, createVNode, withCtx, mergeProps, unref, createElementVNode, normalizeStyle, toDisplayString, createCommentVNode } from "vue";
|
|
2
|
-
import { useClipboard } from "../composables/useClipboard.js";
|
|
2
|
+
import { COPY_LABELS, useClipboard } from "../composables/useClipboard.js";
|
|
3
3
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
4
4
|
import { _ as _sfc_main$2 } from "./LpButton-DSHioIfD.js";
|
|
5
5
|
import { _ as _sfc_main$3 } from "./LpIcon-DCGhNsCU.js";
|
|
@@ -32,7 +32,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
32
32
|
const emit = __emit;
|
|
33
33
|
const text = useLabels(
|
|
34
34
|
"copyButton",
|
|
35
|
-
|
|
35
|
+
COPY_LABELS,
|
|
36
36
|
() => props.labels
|
|
37
37
|
);
|
|
38
38
|
const { copy, copied: justCopied } = useClipboard();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, useSlots, computed, openBlock, createElementBlock, mergeProps, unref, createVNode, TransitionGroup, normalizeClass, withCtx, Fragment, renderList, createElementVNode, renderSlot, createTextVNode, toDisplayString, createBlock, createCommentVNode } from "vue";
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
4
|
-
import { _ as _sfc_main$4 } from "./LpCopyButton-
|
|
4
|
+
import { _ as _sfc_main$4 } from "./LpCopyButton-TGoE43mE.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpIcon-DCGhNsCU.js";
|
|
6
6
|
import { _ as _sfc_main$3 } from "./LpRollingText-B54Pje7P.js";
|
|
7
7
|
import { _ as _sfc_main$1 } from "./LpTooltip-Bz_rrq5S.js";
|
|
@@ -5,7 +5,7 @@ import { useLabels } from "../composables/useLpConfig.js";
|
|
|
5
5
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
6
6
|
import { usePersisted } from "../composables/usePersisted.js";
|
|
7
7
|
import { clamp } from "../composables/clamp.js";
|
|
8
|
-
import { _ as _sfc_main$4 } from "./LpDataList-
|
|
8
|
+
import { _ as _sfc_main$4 } from "./LpDataList-Due909Cy.js";
|
|
9
9
|
import { _ as _sfc_main$3 } from "./LpDisclosure-CsJ7nnFz.js";
|
|
10
10
|
import "@iconify/vue";
|
|
11
11
|
import "./icons-V0k93Puc.js";
|
|
@@ -6,10 +6,10 @@ import { useLabels } from "../composables/useLpConfig.js";
|
|
|
6
6
|
import { useZoomPan } from "../composables/useZoomPan.js";
|
|
7
7
|
import { clickLink } from "../components/exportData.js";
|
|
8
8
|
import { isVideoItem, fileNameOf } from "../components/lightbox.js";
|
|
9
|
-
import { _ as _sfc_main$2 } from "./LpCopyButton-
|
|
9
|
+
import { _ as _sfc_main$2 } from "./LpCopyButton-TGoE43mE.js";
|
|
10
10
|
import { _ as _sfc_main$1 } from "./LpIcon-DCGhNsCU.js";
|
|
11
11
|
import { _ as _sfc_main$4 } from "./LpLoader-Bf1yZwaU.js";
|
|
12
|
-
import { _ as _sfc_main$3 } from "./LpVideoPlayer
|
|
12
|
+
import { _ as _sfc_main$3 } from "./LpVideoPlayer--87I5Kqu.js";
|
|
13
13
|
import { _ as _sfc_main$5 } from "./VideoThumb-DL_QkAJY.js";
|
|
14
14
|
import { useModalLayer } from "../components/modalDepth.js";
|
|
15
15
|
import { inTextField } from "../composables/textEntry.js";
|
|
@@ -4,7 +4,7 @@ import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
|
4
4
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
5
5
|
import { _ as _sfc_main$1 } from "./LpContextMenu-CUFZIQX2.js";
|
|
6
6
|
import { _ as _sfc_main$3 } from "./LpIcon-DCGhNsCU.js";
|
|
7
|
-
import { _ as _sfc_main$4 } from "./LpLightbox-
|
|
7
|
+
import { _ as _sfc_main$4 } from "./LpLightbox-DVyiB4dw.js";
|
|
8
8
|
import { _ as _sfc_main$2 } from "./VideoThumb-DL_QkAJY.js";
|
|
9
9
|
const _hoisted_1 = { key: 0 };
|
|
10
10
|
const _hoisted_2 = ["aria-label"];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, openBlock, createElementBlock, createElementVNode, createVNode, withCtx, createTextVNode, toDisplayString, unref } from "vue";
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { suppressPaletteDiscovery } from "../composables/usePaletteCommands.js";
|
|
4
|
-
import { _ as _sfc_main$4 } from "./LpThemeStudio-
|
|
4
|
+
import { _ as _sfc_main$4 } from "./LpThemeStudio-RyI-SWiw.js";
|
|
5
5
|
import { _ as _sfc_main$2 } from "./LpThemeProvider-XK6ZeWAE.js";
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpButton-DSHioIfD.js";
|
|
7
7
|
import { _ as _sfc_main$3 } from "./LpInput-CKMblRtp.js";
|
|
@@ -8,7 +8,7 @@ import { useFieldControl } from "../composables/useField.js";
|
|
|
8
8
|
import { mergeClass } from "../composables/useMergedClass.js";
|
|
9
9
|
import { _ as _sfc_main$5 } from "./FieldWrapper-BDDw1F9H.js";
|
|
10
10
|
import { _ as _sfc_main$3 } from "./LpButton-DSHioIfD.js";
|
|
11
|
-
import { _ as _sfc_main$2 } from "./LpCopyButton-
|
|
11
|
+
import { _ as _sfc_main$2 } from "./LpCopyButton-TGoE43mE.js";
|
|
12
12
|
import { _ as _sfc_main$4 } from "./LpIcon-DCGhNsCU.js";
|
|
13
13
|
import { _ as _sfc_main$1 } from "./LpPasswordInput-LaOXNYuV.js";
|
|
14
14
|
import { _ as _sfc_main$6 } from "./LpShift-DAgS_d2x.js";
|
|
@@ -3,7 +3,7 @@ import { usePaletteTheme } from "../theme/palette.js";
|
|
|
3
3
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
4
4
|
import { useThemeStudio, STUDIO_BRANDS, STUDIO_SYSTEM } from "../theme/studio.js";
|
|
5
5
|
import { _ as _sfc_main$1 } from "./LpButton-DSHioIfD.js";
|
|
6
|
-
import { _ as _sfc_main$7 } from "./LpCodeBlock-
|
|
6
|
+
import { _ as _sfc_main$7 } from "./LpCodeBlock-kGT15Zou.js";
|
|
7
7
|
import { _ as _sfc_main$4 } from "./LpColorPicker-Cjna_Bio.js";
|
|
8
8
|
import { _ as _sfc_main$2 } from "./LpIcon-DCGhNsCU.js";
|
|
9
9
|
import { _ as _sfc_main$5 } from "./LpSegmented-CiaF9DUK.js";
|
|
@@ -11,7 +11,7 @@ import { _ as _sfc_main$1 } from "./LpContextMenu-CUFZIQX2.js";
|
|
|
11
11
|
import { _ as _sfc_main$2 } from "./LpIcon-DCGhNsCU.js";
|
|
12
12
|
import { _ as _sfc_main$4 } from "./LpRollingText-B54Pje7P.js";
|
|
13
13
|
import { _ as _sfc_main$3 } from "./LpShift-DAgS_d2x.js";
|
|
14
|
-
import { _ as _sfc_main$5 } from "./LpThemeStudio-
|
|
14
|
+
import { _ as _sfc_main$5 } from "./LpThemeStudio-RyI-SWiw.js";
|
|
15
15
|
const _hoisted_1 = ["aria-label", "title"];
|
|
16
16
|
const _hoisted_2 = {
|
|
17
17
|
key: 1,
|
|
@@ -4,7 +4,7 @@ import { prefersReducedMotion } from "../composables/easing.js";
|
|
|
4
4
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
5
5
|
import { useToast } from "../composables/useToast.js";
|
|
6
6
|
import { CLOSE_ICON } from "../components/dropdown.js";
|
|
7
|
-
import { _ as _sfc_main$2 } from "./LpCopyButton-
|
|
7
|
+
import { _ as _sfc_main$2 } from "./LpCopyButton-TGoE43mE.js";
|
|
8
8
|
import { _ as _sfc_main$1 } from "./LpIcon-DCGhNsCU.js";
|
|
9
9
|
import { toneLook } from "../components/tone.js";
|
|
10
10
|
import { useView, viewDocument, usePortalTarget, viewWindow } from "../composables/useView.js";
|
|
@@ -2,7 +2,7 @@ import { defineComponent, ref, onMounted, watch, nextTick, computed, openBlock,
|
|
|
2
2
|
import { nodeWindow } from "../composables/realm.js";
|
|
3
3
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
4
4
|
import { useResizeObserver } from "../composables/useResizeObserver.js";
|
|
5
|
-
import { _ as _sfc_main$2 } from "./LpCopyButton-
|
|
5
|
+
import { _ as _sfc_main$2 } from "./LpCopyButton-TGoE43mE.js";
|
|
6
6
|
import { _ as _sfc_main$1 } from "./LpTooltip-Bz_rrq5S.js";
|
|
7
7
|
import { middleTruncate } from "../components/fieldText.js";
|
|
8
8
|
const _hoisted_1 = ["tabindex"];
|
|
@@ -460,7 +460,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
460
460
|
}, {
|
|
461
461
|
default: withCtx(() => [
|
|
462
462
|
createElementVNode("div", {
|
|
463
|
-
class: normalizeClass(["@container",
|
|
463
|
+
class: normalizeClass(["@container", fullscreen.value ? "w-full" : __props.fit ? FRAME : ""]),
|
|
464
464
|
style: normalizeStyle(frameStyle.value),
|
|
465
465
|
"data-lp-video-frame": ""
|
|
466
466
|
}, [
|
|
@@ -377,6 +377,8 @@ declare const __VLS_export: <T extends Record<string, unknown>>(__VLS_props: Non
|
|
|
377
377
|
value: unknown;
|
|
378
378
|
openMenu: (event: Event) => void;
|
|
379
379
|
}) => any) | undefined;
|
|
380
|
+
} & {
|
|
381
|
+
toolbar?: (props: {}) => any;
|
|
380
382
|
} & {
|
|
381
383
|
bulk?: (props: {
|
|
382
384
|
selected: (string | number)[];
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx,
|
|
1
|
+
import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, useSlots, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, renderSlot, createCommentVNode, Fragment, renderList, createBlock, createElementVNode, toDisplayString, createTextVNode, Transition, mergeProps, normalizeStyle, withModifiers, TransitionGroup, unref, nextTick } from "vue";
|
|
2
2
|
import { usePaletteScope, suppressPaletteDiscovery, usePaletteCommands } from "../composables/usePaletteCommands.js";
|
|
3
3
|
import { menuPaletteCommands } from "./commandPalette.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "../chunks/LpDataList-
|
|
4
|
+
import { _ as _sfc_main$1 } from "../chunks/LpDataList-Due909Cy.js";
|
|
5
5
|
import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-DcXC2qd5.js";
|
|
6
6
|
import { _ as _sfc_main$8 } from "../chunks/LpContextMenu-CUFZIQX2.js";
|
|
7
7
|
import { _ as _sfc_main$e } from "../chunks/LpEditable-DCPdDDBb.js";
|
|
8
8
|
import { _ as _sfc_main$d } from "../chunks/LpEmptyState-DT8U4R8L.js";
|
|
9
|
-
import { _ as _sfc_main$
|
|
10
|
-
import { _ as _sfc_main$
|
|
9
|
+
import { _ as _sfc_main$3 } from "../chunks/LpBadge-RFp8uHFt.js";
|
|
10
|
+
import { _ as _sfc_main$6 } from "../chunks/LpIcon-DCGhNsCU.js";
|
|
11
11
|
import { _ as _sfc_main$c } from "../chunks/LpSkeleton-BB6XIV-w.js";
|
|
12
12
|
import { _ as _sfc_main$f } from "../chunks/LpPagination-V1wEhu1K.js";
|
|
13
13
|
import { _ as _sfc_main$a } from "../chunks/LpPopover-BQSuxtai.js";
|
|
14
14
|
import { _ as _sfc_main$7 } from "../chunks/LpScrollArea-CqvwfZs2.js";
|
|
15
|
-
import { _ as _sfc_main$
|
|
16
|
-
import { _ as _sfc_main$
|
|
15
|
+
import { _ as _sfc_main$4 } from "../chunks/LpRollingText-B54Pje7P.js";
|
|
16
|
+
import { _ as _sfc_main$2 } from "../chunks/LpShift-DAgS_d2x.js";
|
|
17
17
|
import { _ as _sfc_main$b } from "../chunks/LpTableFilter-B_BFoBqS.js";
|
|
18
18
|
import { useKitStorage } from "../composables/usePersisted.js";
|
|
19
19
|
import { useAsyncTask } from "../composables/useAsyncTask.js";
|
|
@@ -27,21 +27,21 @@ import { orderPinned, pinOffsets, groupRows, rowWindow, presetHidden, sortByKeys
|
|
|
27
27
|
import { devWarn } from "../composables/devWarn.js";
|
|
28
28
|
import { startPointerDrag } from "../composables/pointerDrag.js";
|
|
29
29
|
import { isHTMLElement, nodeWindow } from "../composables/realm.js";
|
|
30
|
-
import { _ as _sfc_main$
|
|
30
|
+
import { _ as _sfc_main$5 } from "../chunks/LpButton-DSHioIfD.js";
|
|
31
31
|
import { toCsv, downloadFile, fileStem } from "./exportData.js";
|
|
32
32
|
import { toHiddenSets, sameHidden, summarizeShown, parseTableState, mergeRestored, serializeTableState, fromHiddenSets } from "./tableFilter.js";
|
|
33
33
|
import { resolveRowMenu } from "./tableRowMenu.js";
|
|
34
34
|
import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
|
|
35
|
-
import '../assets/LpTable-
|
|
35
|
+
import '../assets/LpTable-ChCcmmtT.css';const _hoisted_1 = {
|
|
36
36
|
key: 0,
|
|
37
|
-
class: "flex
|
|
37
|
+
class: "flex min-h-8 flex-wrap items-center gap-x-3 gap-y-2 pb-3 text-xs"
|
|
38
38
|
};
|
|
39
39
|
const _hoisted_2 = {
|
|
40
40
|
key: 0,
|
|
41
|
-
class: "flex min-
|
|
41
|
+
class: "flex min-w-0 flex-wrap items-center gap-2 text-sm"
|
|
42
42
|
};
|
|
43
43
|
const _hoisted_3 = {
|
|
44
|
-
key:
|
|
44
|
+
key: 1,
|
|
45
45
|
class: "flex min-w-0 flex-1 flex-wrap items-center gap-1.5"
|
|
46
46
|
};
|
|
47
47
|
const _hoisted_4 = { class: "truncate" };
|
|
@@ -799,8 +799,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
799
799
|
}
|
|
800
800
|
return t.rowsTotal.replace("{total}", String(props.rows.length));
|
|
801
801
|
});
|
|
802
|
+
const slots = useSlots();
|
|
802
803
|
const showBar = computed(
|
|
803
|
-
() => props.summary || !!props.selectable && props.selected.length > 0 || activeFilters.value.length > 0
|
|
804
|
+
() => props.summary || props.exportable || !!slots.toolbar || !!props.selectable && props.selected.length > 0 || activeFilters.value.length > 0
|
|
804
805
|
);
|
|
805
806
|
const filteredOut = computed(() => {
|
|
806
807
|
if (busy.value || failed.value || displayRows.value.length) return false;
|
|
@@ -980,28 +981,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
980
981
|
ref: frameEl,
|
|
981
982
|
class: normalizeClass(["flex flex-col gap-3", rootClass.value])
|
|
982
983
|
}, [
|
|
983
|
-
|
|
984
|
-
createVNode(_sfc_main$2, {
|
|
985
|
-
variant: "ghost",
|
|
986
|
-
size: "sm",
|
|
987
|
-
onClick: _cache[0] || (_cache[0] = ($event) => exportCsv())
|
|
988
|
-
}, {
|
|
989
|
-
default: withCtx(() => [
|
|
990
|
-
createVNode(_sfc_main$3, {
|
|
991
|
-
name: "lucide:download",
|
|
992
|
-
size: 14
|
|
993
|
-
}),
|
|
994
|
-
createTextVNode(" " + toDisplayString(text.value.exportCsv), 1)
|
|
995
|
-
]),
|
|
996
|
-
_: 1
|
|
997
|
-
})
|
|
998
|
-
])) : createCommentVNode("", true),
|
|
999
|
-
createVNode(_sfc_main$4, { class: "-mb-3" }, {
|
|
984
|
+
createVNode(_sfc_main$2, { class: "-mb-3" }, {
|
|
1000
985
|
default: withCtx(() => [
|
|
1001
|
-
showBar.value ? (openBlock(), createElementBlock("div",
|
|
986
|
+
showBar.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
987
|
+
_ctx.$slots.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
988
|
+
renderSlot(_ctx.$slots, "toolbar", {}, void 0, true)
|
|
989
|
+
])) : createCommentVNode("", true),
|
|
1002
990
|
activeFilters.value.length ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
1003
991
|
(openBlock(true), createElementBlock(Fragment, null, renderList(activeFilters.value, (f) => {
|
|
1004
|
-
return openBlock(), createBlock(_sfc_main$
|
|
992
|
+
return openBlock(), createBlock(_sfc_main$3, {
|
|
1005
993
|
key: f.col.key,
|
|
1006
994
|
tone: "brand",
|
|
1007
995
|
removable: "",
|
|
@@ -1025,13 +1013,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1025
1013
|
onClick: clearAllFilters
|
|
1026
1014
|
}, toDisplayString(text.value.clearFilters), 1)) : createCommentVNode("", true)
|
|
1027
1015
|
])) : createCommentVNode("", true),
|
|
1028
|
-
createVNode(_sfc_main$
|
|
1016
|
+
createVNode(_sfc_main$2, {
|
|
1029
1017
|
axis: "width",
|
|
1030
1018
|
class: "ml-auto shrink-0"
|
|
1031
1019
|
}, {
|
|
1032
1020
|
default: withCtx(() => [
|
|
1033
1021
|
createElementVNode("div", _hoisted_6, [
|
|
1034
|
-
createVNode(_sfc_main$
|
|
1022
|
+
createVNode(_sfc_main$4, {
|
|
1035
1023
|
value: statusText.value,
|
|
1036
1024
|
align: "end",
|
|
1037
1025
|
class: normalizeClass(["tabular-nums", __props.selectable && __props.selected.length ? "font-medium text-ink" : ""]),
|
|
@@ -1057,7 +1045,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1057
1045
|
createElementVNode("button", {
|
|
1058
1046
|
type: "button",
|
|
1059
1047
|
class: "rounded-control px-1.5 py-0.5 font-medium text-brand outline-none transition-colors duration-fast hover:bg-brand-soft focus-visible:ring-2 focus-visible:ring-ring",
|
|
1060
|
-
onClick: _cache[
|
|
1048
|
+
onClick: _cache[0] || (_cache[0] = ($event) => emit("update:allMatching", true))
|
|
1061
1049
|
}, toDisplayString(text.value.selectAllMatching.replace("{total}", String(total.value))), 1)
|
|
1062
1050
|
])) : createCommentVNode("", true)
|
|
1063
1051
|
]),
|
|
@@ -1076,7 +1064,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1076
1064
|
])) : createCommentVNode("", true)
|
|
1077
1065
|
]),
|
|
1078
1066
|
_: 3
|
|
1079
|
-
})
|
|
1067
|
+
}),
|
|
1068
|
+
__props.exportable ? (openBlock(), createBlock(_sfc_main$5, {
|
|
1069
|
+
key: 0,
|
|
1070
|
+
variant: "ghost",
|
|
1071
|
+
size: "sm",
|
|
1072
|
+
onClick: _cache[1] || (_cache[1] = ($event) => exportCsv())
|
|
1073
|
+
}, {
|
|
1074
|
+
default: withCtx(() => [
|
|
1075
|
+
createVNode(_sfc_main$6, {
|
|
1076
|
+
name: "lucide:download",
|
|
1077
|
+
size: 14
|
|
1078
|
+
}),
|
|
1079
|
+
createTextVNode(" " + toDisplayString(text.value.exportCsv), 1)
|
|
1080
|
+
]),
|
|
1081
|
+
_: 1
|
|
1082
|
+
})) : createCommentVNode("", true)
|
|
1080
1083
|
])
|
|
1081
1084
|
]),
|
|
1082
1085
|
_: 3
|
|
@@ -1158,7 +1161,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1158
1161
|
onClick: ($event) => toggleSort(col, $event)
|
|
1159
1162
|
}, [
|
|
1160
1163
|
createTextVNode(toDisplayString(col.label) + " ", 1),
|
|
1161
|
-
col.sortable ? (openBlock(), createBlock(_sfc_main$
|
|
1164
|
+
col.sortable ? (openBlock(), createBlock(_sfc_main$6, {
|
|
1162
1165
|
key: 0,
|
|
1163
1166
|
name: sortIcon(col),
|
|
1164
1167
|
size: 13,
|
|
@@ -1187,7 +1190,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1187
1190
|
"aria-label": text.value.filterColumn.replace("{column}", col.label),
|
|
1188
1191
|
"data-lp-filter": col.key
|
|
1189
1192
|
}, [
|
|
1190
|
-
createVNode(_sfc_main$
|
|
1193
|
+
createVNode(_sfc_main$6, {
|
|
1191
1194
|
name: hiddenValues.value[col.key]?.size ? "lucide:filter-x" : "lucide:filter",
|
|
1192
1195
|
size: 12
|
|
1193
1196
|
}, null, 8, ["name"])
|
|
@@ -1268,7 +1271,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1268
1271
|
title: failed.value ? text.value.error : filteredOut.value ? text.value.noMatches : text.value.empty
|
|
1269
1272
|
}, {
|
|
1270
1273
|
default: withCtx(() => [
|
|
1271
|
-
filteredOut.value ? (openBlock(), createBlock(_sfc_main$
|
|
1274
|
+
filteredOut.value ? (openBlock(), createBlock(_sfc_main$5, {
|
|
1272
1275
|
key: 0,
|
|
1273
1276
|
variant: "outline",
|
|
1274
1277
|
size: "sm",
|
|
@@ -1318,7 +1321,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1318
1321
|
"aria-label": (entry.collapsed ? text.value.expandGroup : text.value.collapseGroup).replace("{label}", entry.label),
|
|
1319
1322
|
onClick: ($event) => toggleGroup(entry.group)
|
|
1320
1323
|
}, [
|
|
1321
|
-
createVNode(_sfc_main$
|
|
1324
|
+
createVNode(_sfc_main$6, {
|
|
1322
1325
|
name: "lucide:chevron-right",
|
|
1323
1326
|
size: 14,
|
|
1324
1327
|
class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", entry.collapsed ? "" : "rotate-90"])
|
|
@@ -1366,7 +1369,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1366
1369
|
"aria-label": expandedKeys.value.has(keyFor(entry.row, entry.index)) ? text.value.collapseRow : text.value.expandRow,
|
|
1367
1370
|
onClick: ($event) => toggleExpanded(keyFor(entry.row, entry.index))
|
|
1368
1371
|
}, [
|
|
1369
|
-
createVNode(_sfc_main$
|
|
1372
|
+
createVNode(_sfc_main$6, {
|
|
1370
1373
|
name: "lucide:chevron-right",
|
|
1371
1374
|
size: 14,
|
|
1372
1375
|
class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", expandedKeys.value.has(keyFor(entry.row, entry.index)) ? "rotate-90" : ""])
|
|
@@ -1444,7 +1447,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1444
1447
|
_: 3
|
|
1445
1448
|
}, 16, ["style", "bar-inset-top"]),
|
|
1446
1449
|
__props.load && total.value > __props.pageSize ? (openBlock(), createBlock(_sfc_main$f, {
|
|
1447
|
-
key:
|
|
1450
|
+
key: 0,
|
|
1448
1451
|
page: page.value,
|
|
1449
1452
|
"onUpdate:page": _cache[9] || (_cache[9] = ($event) => page.value = $event),
|
|
1450
1453
|
total: total.value,
|
|
@@ -1455,7 +1458,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1455
1458
|
};
|
|
1456
1459
|
}
|
|
1457
1460
|
});
|
|
1458
|
-
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
1461
|
+
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f6e4fb45"]]);
|
|
1459
1462
|
export {
|
|
1460
1463
|
LpTable as default
|
|
1461
1464
|
};
|
|
@@ -1,16 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kit's words for copying, scope "copyButton": LpCopyButton's own text and
|
|
3
|
+
* what `toast: true` says. One set, so an app that translates the scope once
|
|
4
|
+
* has every copy in it speak the same language.
|
|
5
|
+
*/
|
|
6
|
+
export declare const COPY_LABELS: {
|
|
7
|
+
copy: string;
|
|
8
|
+
copied: string;
|
|
9
|
+
failed: string;
|
|
10
|
+
};
|
|
1
11
|
export interface CopyOptions {
|
|
2
12
|
/**
|
|
3
13
|
* Toast to raise on success. `false` (the default) stays silent, for callers
|
|
4
14
|
* whose button already shows the tick and would otherwise say it twice.
|
|
15
|
+
* `true` says the kit's "Copied", in the app's language when its config
|
|
16
|
+
* translates the "copyButton" scope, so a menu item that copies does not
|
|
17
|
+
* have to bring its own word for it.
|
|
5
18
|
*/
|
|
6
|
-
toast?: string |
|
|
19
|
+
toast?: string | boolean;
|
|
7
20
|
/**
|
|
8
21
|
* Toast to raise when the copy fails. Defaults to silence for the same
|
|
9
22
|
* reason the kit's other best-effort paths are silent: a copy that didn't
|
|
10
23
|
* happen is usually obvious, and a scary red box over a blocked clipboard
|
|
11
|
-
* helps nobody. Pass a string where losing the copy actually costs something
|
|
24
|
+
* helps nobody. Pass a string where losing the copy actually costs something,
|
|
25
|
+
* or `true` for the kit's own "Couldn't copy".
|
|
12
26
|
*/
|
|
13
|
-
errorToast?: string |
|
|
27
|
+
errorToast?: string | boolean;
|
|
14
28
|
}
|
|
15
29
|
export interface UseClipboard {
|
|
16
30
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ref, onScopeDispose } from "vue";
|
|
2
|
+
import { useLabels } from "./useLpConfig.js";
|
|
2
3
|
import { useToast } from "./useToast.js";
|
|
3
4
|
async function writeAsync(text) {
|
|
4
5
|
if (typeof navigator === "undefined" || !navigator.clipboard) return false;
|
|
@@ -44,9 +45,11 @@ async function writeBlob(blob) {
|
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
const COPIED_MS = 1400;
|
|
48
|
+
const COPY_LABELS = { copy: "Copy", copied: "Copied", failed: "Couldn't copy" };
|
|
47
49
|
function useClipboard() {
|
|
48
50
|
const copied = ref(false);
|
|
49
51
|
const { success, error } = useToast();
|
|
52
|
+
const labels = useLabels("copyButton", COPY_LABELS);
|
|
50
53
|
let timer;
|
|
51
54
|
async function copy(data, options = {}) {
|
|
52
55
|
const { toast = false, errorToast = false } = options;
|
|
@@ -56,10 +59,10 @@ function useClipboard() {
|
|
|
56
59
|
copied.value = true;
|
|
57
60
|
clearTimeout(timer);
|
|
58
61
|
timer = setTimeout(() => copied.value = false, COPIED_MS);
|
|
59
|
-
if (toast) success(toast);
|
|
62
|
+
if (toast) success(toast === true ? labels.value.copied : toast);
|
|
60
63
|
return true;
|
|
61
64
|
} catch {
|
|
62
|
-
if (errorToast) error(errorToast);
|
|
65
|
+
if (errorToast) error(errorToast === true ? labels.value.failed : errorToast);
|
|
63
66
|
return false;
|
|
64
67
|
}
|
|
65
68
|
}
|
|
@@ -67,5 +70,6 @@ function useClipboard() {
|
|
|
67
70
|
return { copied, copy };
|
|
68
71
|
}
|
|
69
72
|
export {
|
|
73
|
+
COPY_LABELS,
|
|
70
74
|
useClipboard
|
|
71
75
|
};
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ import { chartView, lttbIndices, minMaxBuckets, panRange, slotOf, sourceOf, zoom
|
|
|
19
19
|
import { useChartSync } from "./composables/useChartSync.js";
|
|
20
20
|
import { createLinkedView, linkChart, linkLog, linkPipeline, linkTable, linkTopology, provideLinkedView, useLinkedView } from "./composables/useLinkedView.js";
|
|
21
21
|
import { _ as _14 } from "./chunks/LpCheckbox-DcXC2qd5.js";
|
|
22
|
-
import { _ as _15 } from "./chunks/LpCodeBlock-
|
|
22
|
+
import { _ as _15 } from "./chunks/LpCodeBlock-kGT15Zou.js";
|
|
23
23
|
import { tokenizeLines } from "./components/codeHighlight.js";
|
|
24
24
|
import { _ as _16 } from "./chunks/LpColorPicker-Cjna_Bio.js";
|
|
25
25
|
import { DEFAULT_SWATCHES, clampHsv, formatColor, hsvToHsl, hsvToRgb, isLight, normalizeHue, opaqueCss, parseColor, parseHex, rgbToHex, rgbToHsv } from "./components/color.js";
|
|
@@ -56,14 +56,14 @@ import { i, b, a, c } from "./chunks/icons-V0k93Puc.js";
|
|
|
56
56
|
import { default as default10 } from "./components/LpImageEditor.vue.js";
|
|
57
57
|
import { _ as _33 } from "./chunks/LpInfraNode-BsExhdPE.js";
|
|
58
58
|
import { _ as _34 } from "./chunks/LpInput-CKMblRtp.js";
|
|
59
|
-
import { _ as _35 } from "./chunks/LpLightbox-
|
|
59
|
+
import { _ as _35 } from "./chunks/LpLightbox-DVyiB4dw.js";
|
|
60
60
|
import { fileNameOf, isVideoItem } from "./components/lightbox.js";
|
|
61
61
|
import { _ as _36 } from "./chunks/LpLink-Krkjhe_y.js";
|
|
62
62
|
import { _ as _37 } from "./chunks/LpLogViewer-Bki-IdNC.js";
|
|
63
63
|
import { _ as _38 } from "./chunks/LpLogInspector-Yj310k4n.js";
|
|
64
64
|
import { compilePattern, findIds, messageShape, structuredPayload, timeMs } from "./components/logTools.js";
|
|
65
65
|
import { countLevels, matchPositions, matchesTerm, ringWindow, stepMatch } from "./components/logSearch.js";
|
|
66
|
-
import { _ as _39 } from "./chunks/LpMediaGallery-
|
|
66
|
+
import { _ as _39 } from "./chunks/LpMediaGallery-OJemmbV7.js";
|
|
67
67
|
import { _ as _40 } from "./chunks/LpModal-B5y9_LgA.js";
|
|
68
68
|
import { _ as _41 } from "./chunks/LpModalNav-BLvDVl2-.js";
|
|
69
69
|
import { _ as _42 } from "./chunks/LpNotificationBell-Bf0u3t5q.js";
|
|
@@ -103,7 +103,7 @@ import { formatClipTime, isNativeLoop, planLoop, seamProgress, seamReached } fro
|
|
|
103
103
|
import { default as default12 } from "./components/LpVideoTrim.vue.js";
|
|
104
104
|
import { _ as _72 } from "./chunks/LpVideoCompress-BfulQ8Rs.js";
|
|
105
105
|
import { bitrateForHeight, canTranscodeVideo, estimateTranscodedBytes, probeVideo, transcodeVideo, transcodedName } from "./composables/videoTranscode.js";
|
|
106
|
-
import { _ as _73 } from "./chunks/LpVideoPlayer
|
|
106
|
+
import { _ as _73 } from "./chunks/LpVideoPlayer--87I5Kqu.js";
|
|
107
107
|
import { useVideoMedia } from "./composables/useVideoMedia.js";
|
|
108
108
|
import { dragEnd, normalizeRange as normalizeRange2, parseClipTime, setEnd } from "./components/videoTrim.js";
|
|
109
109
|
import { _ as _74 } from "./chunks/LpSparkline-CExIRDb3.js";
|
|
@@ -121,9 +121,9 @@ import { _ as _79 } from "./chunks/LpBottomNav-BcJVkAhh.js";
|
|
|
121
121
|
import { _ as _80 } from "./chunks/LpTagsInput-By7LMb47.js";
|
|
122
122
|
import { addTags, splitTags } from "./components/tags.js";
|
|
123
123
|
import { _ as _81 } from "./chunks/LpTextarea-Ck6RAfzu.js";
|
|
124
|
-
import { _ as _82 } from "./chunks/LpThemeSwitcher-
|
|
124
|
+
import { _ as _82 } from "./chunks/LpThemeSwitcher-BZYJ0AXy.js";
|
|
125
125
|
import { _ as _83 } from "./chunks/LpTilt-B7KHX1zH.js";
|
|
126
|
-
import { _ as _84 } from "./chunks/LpToaster-
|
|
126
|
+
import { _ as _84 } from "./chunks/LpToaster-YcLJFSsH.js";
|
|
127
127
|
import { _ as _85 } from "./chunks/LpTooltip-Bz_rrq5S.js";
|
|
128
128
|
import { _ as _86 } from "./chunks/LpTour-D_AN_SsZ.js";
|
|
129
129
|
import { holeOf, openContextMenu, panelsAround } from "./components/tour.js";
|
|
@@ -139,7 +139,7 @@ import { blockTitle, defineBlocks } from "./layout/registry.js";
|
|
|
139
139
|
import { layoutController, useLayout } from "./layout/useLayout.js";
|
|
140
140
|
import { useWorkspaces } from "./layout/useWorkspaces.js";
|
|
141
141
|
import { _ as _92 } from "./chunks/LpWorkspaceSwitcher-D50sHs9N.js";
|
|
142
|
-
import { _ as _93 } from "./chunks/LpInspector-
|
|
142
|
+
import { _ as _93 } from "./chunks/LpInspector-BNxjuWMP.js";
|
|
143
143
|
import { _ as _94 } from "./chunks/LpWindow-Bo5qQgVY.js";
|
|
144
144
|
import { WINDOW_DOCKS, clampRect, dockAt, dockedRect, isWindowRect, resizeRect, snapRect, useWindowLayer } from "./composables/windowing.js";
|
|
145
145
|
import { THEME_COOKIE, applyTheme, applyThemeWithTransition, bootstrapTheme, cacheSystemThemes, normalizeTheme, parseTheme, prefersDarkScheme, revealTransition, serializeTheme, themeEntries, themeFromCookie, themeToCssRule, themeToCssVars, useTheme } from "./theme/useTheme.js";
|
|
@@ -188,7 +188,7 @@ import { useZoomPan } from "./composables/useZoomPan.js";
|
|
|
188
188
|
import { useToast } from "./composables/useToast.js";
|
|
189
189
|
import { _ as _95 } from "./chunks/LpThemeProvider-XK6ZeWAE.js";
|
|
190
190
|
import { _ as _96 } from "./chunks/LpFrame-Bv5Fphte.js";
|
|
191
|
-
import { _ as _97 } from "./chunks/LpThemeStudio-
|
|
191
|
+
import { _ as _97 } from "./chunks/LpThemeStudio-RyI-SWiw.js";
|
|
192
192
|
import { _ as _98 } from "./chunks/LpThemeStudioSection-B7bt8Iyg.js";
|
|
193
193
|
import { isInternalHref, resolveLink } from "./components/link.js";
|
|
194
194
|
import { _ as _99 } from "./chunks/LpRepeater-BKq5XPh4.js";
|
|
@@ -211,12 +211,12 @@ import { useLoadingGate } from "./composables/useLoadingGate.js";
|
|
|
211
211
|
import { useNow } from "./composables/useNow.js";
|
|
212
212
|
import { _ as _108 } from "./chunks/LpCountdown-DVl7vXI1.js";
|
|
213
213
|
import { DEFAULT_MILESTONES, DEFAULT_UNIT_LABELS, ceilToSecond, crossedMilestone, formatElapsed, formatTime, msToNextSecond, splitTime, timeParts } from "./components/timeSpan.js";
|
|
214
|
-
import { _ as _109 } from "./chunks/LpCopyButton-
|
|
215
|
-
import { _ as _110 } from "./chunks/LpSecretField-
|
|
216
|
-
import { _ as _111 } from "./chunks/LpDataList-
|
|
214
|
+
import { _ as _109 } from "./chunks/LpCopyButton-TGoE43mE.js";
|
|
215
|
+
import { _ as _110 } from "./chunks/LpSecretField-Dp-c7wWc.js";
|
|
216
|
+
import { _ as _111 } from "./chunks/LpDataList-Due909Cy.js";
|
|
217
217
|
import { _ as _112 } from "./chunks/LpEditable-DCPdDDBb.js";
|
|
218
|
-
import { _ as _113 } from "./chunks/LpTruncate-
|
|
219
|
-
import { _ as _114 } from "./chunks/LpCodeDisplay-
|
|
218
|
+
import { _ as _113 } from "./chunks/LpTruncate-DCZjfcE-.js";
|
|
219
|
+
import { _ as _114 } from "./chunks/LpCodeDisplay-DlwzZo9o.js";
|
|
220
220
|
import { formatRemaining, groupCode, middleTruncate, normalizeCode } from "./components/fieldText.js";
|
|
221
221
|
import { _ as _115 } from "./chunks/LpHoverCard-CHE9jAJG.js";
|
|
222
222
|
import { _ as _116 } from "./chunks/LpIdenticon-Dbbr4fvt.js";
|
|
@@ -246,7 +246,7 @@ import { _ as _128 } from "./chunks/LpCommandScope-DRUvHiX7.js";
|
|
|
246
246
|
import { createPaletteRegistry, mergePaletteCommands, usePaletteCommands, vPalette } from "./composables/usePaletteCommands.js";
|
|
247
247
|
import { commandShortcuts, commandToHotkey, commandToMenuItem, commandToPalette, useCommands } from "./composables/useCommands.js";
|
|
248
248
|
import { usePaletteTheme } from "./theme/palette.js";
|
|
249
|
-
import { _ as _129 } from "./chunks/LpPaletteTheme-
|
|
249
|
+
import { _ as _129 } from "./chunks/LpPaletteTheme-CWFz4H2D.js";
|
|
250
250
|
const uk = {
|
|
251
251
|
actionBar: { dismiss: "Закрити" },
|
|
252
252
|
activityLine: { busy: "Завантаження" },
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@ export type CopyValue =
|
|
|
39
39
|
* `failed` state and the `error` event rather than as an exception.
|
|
40
40
|
*/
|
|
41
41
|
import { computed, ref, useAttrs } from "vue"
|
|
42
|
-
import { useClipboard } from "../composables/useClipboard"
|
|
42
|
+
import { COPY_LABELS, useClipboard } from "../composables/useClipboard"
|
|
43
43
|
import { useLabels } from "../composables/useLpConfig"
|
|
44
44
|
import LpButton from "./LpButton.vue"
|
|
45
45
|
import LpIcon from "./LpIcon.vue"
|
|
@@ -92,7 +92,7 @@ const emit = defineEmits<{
|
|
|
92
92
|
|
|
93
93
|
const text = useLabels<CopyButtonLabels>(
|
|
94
94
|
"copyButton",
|
|
95
|
-
|
|
95
|
+
COPY_LABELS,
|
|
96
96
|
() => props.labels,
|
|
97
97
|
)
|
|
98
98
|
|
|
@@ -5,7 +5,7 @@ export default { inheritAttrs: false }
|
|
|
5
5
|
</script>
|
|
6
6
|
|
|
7
7
|
<script setup lang="ts" generic="T extends Record<string, unknown>">
|
|
8
|
-
import { computed, h, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, useAttrs, useId, watch } from "vue"
|
|
8
|
+
import { computed, h, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, useAttrs, useId, useSlots, watch } from "vue"
|
|
9
9
|
import { suppressPaletteDiscovery, usePaletteCommands, usePaletteScope } from "../composables/usePaletteCommands"
|
|
10
10
|
import { menuPaletteCommands } from "./commandPalette"
|
|
11
11
|
import LpDataList from "./LpDataList.vue"
|
|
@@ -1383,8 +1383,14 @@ const countText = computed(() => {
|
|
|
1383
1383
|
// As documented on `summary`: the bar shows on its own while filters are
|
|
1384
1384
|
// active or rows are selected, not merely because rows can be selected, which
|
|
1385
1385
|
// left a lone "75 rows" over every selectable table.
|
|
1386
|
+
const slots = useSlots()
|
|
1386
1387
|
const showBar = computed(
|
|
1387
|
-
() =>
|
|
1388
|
+
() =>
|
|
1389
|
+
props.summary ||
|
|
1390
|
+
props.exportable ||
|
|
1391
|
+
!!slots.toolbar ||
|
|
1392
|
+
(!!props.selectable && props.selected.length > 0) ||
|
|
1393
|
+
activeFilters.value.length > 0,
|
|
1388
1394
|
)
|
|
1389
1395
|
const filteredOut = computed(() => {
|
|
1390
1396
|
if (busy.value || failed.value || displayRows.value.length) return false
|
|
@@ -1606,12 +1612,6 @@ usePaletteCommands(() => {
|
|
|
1606
1612
|
<!-- No top fade: a sticky header sits in the masked band and would be dimmed
|
|
1607
1613
|
by it. The bottom edge is left crisp with it for symmetry. -->
|
|
1608
1614
|
<div ref="frameEl" class="flex flex-col gap-3" :class="rootClass">
|
|
1609
|
-
<div v-if="exportable" class="flex justify-end">
|
|
1610
|
-
<LpButton variant="ghost" size="sm" @click="exportCsv()">
|
|
1611
|
-
<LpIcon name="lucide:download" :size="14" />
|
|
1612
|
-
{{ text.exportCsv }}
|
|
1613
|
-
</LpButton>
|
|
1614
|
-
</div>
|
|
1615
1615
|
<!-- What the table is showing right now: the filters in force, each one
|
|
1616
1616
|
a chip that clears it, the row count, and what is selected with room
|
|
1617
1617
|
for the consumer's bulk actions. Eased in and out (LpShift), so the
|
|
@@ -1619,7 +1619,14 @@ usePaletteCommands(() => {
|
|
|
1619
1619
|
<!-- The gap below the bar lives inside the eased box (pb-3), cancelled
|
|
1620
1620
|
outside it (-mb-3): an empty box must not leave the root's gap behind. -->
|
|
1621
1621
|
<LpShift class="-mb-3">
|
|
1622
|
-
|
|
1622
|
+
<!-- One line above the table: the page's own controls (#toolbar), the
|
|
1623
|
+
filters in force, then the status and Export at the end. Export used
|
|
1624
|
+
to sit on a line of its own and the page's search and filters on a
|
|
1625
|
+
third, so every table opened with two bands of mostly empty space. -->
|
|
1626
|
+
<div v-if="showBar" class="flex min-h-8 flex-wrap items-center gap-x-3 gap-y-2 pb-3 text-xs">
|
|
1627
|
+
<div v-if="$slots.toolbar" class="flex min-w-0 flex-wrap items-center gap-2 text-sm">
|
|
1628
|
+
<slot name="toolbar" />
|
|
1629
|
+
</div>
|
|
1623
1630
|
<div v-if="activeFilters.length" class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5">
|
|
1624
1631
|
<LpBadge
|
|
1625
1632
|
v-for="f in activeFilters"
|
|
@@ -1689,6 +1696,10 @@ usePaletteCommands(() => {
|
|
|
1689
1696
|
<slot name="bulk" :selected="selected" :all-matching="allMatching" :clear="clearSelection" />
|
|
1690
1697
|
</span>
|
|
1691
1698
|
</Transition>
|
|
1699
|
+
<LpButton v-if="exportable" variant="ghost" size="sm" @click="exportCsv()">
|
|
1700
|
+
<LpIcon name="lucide:download" :size="14" />
|
|
1701
|
+
{{ text.exportCsv }}
|
|
1702
|
+
</LpButton>
|
|
1692
1703
|
</div>
|
|
1693
1704
|
</LpShift>
|
|
1694
1705
|
</div>
|
|
@@ -610,7 +610,7 @@ const frameStyle = computed(() => {
|
|
|
610
610
|
<!-- The menu's trigger is a wrapper of its own: reka's as-child puts its ref on the element it wraps. -->
|
|
611
611
|
<LpContextMenu :items="menu" :title="menuTitle" always>
|
|
612
612
|
<!-- A size container, so the bar gives up what does not fit a narrow player (see the controls below). -->
|
|
613
|
-
<div class="@container" :class="
|
|
613
|
+
<div class="@container" :class="fullscreen ? 'w-full' : fit ? FRAME : ''" :style="frameStyle" data-lp-video-frame>
|
|
614
614
|
<div class="relative w-full" :class="fullscreen ? 'h-dvh' : ''" :style="fullscreen ? undefined : { aspectRatio: aspect }">
|
|
615
615
|
<video
|
|
616
616
|
ref="videoEl"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { onScopeDispose, ref } from "vue"
|
|
2
|
+
import { useLabels } from "./useLpConfig"
|
|
2
3
|
import { useToast } from "./useToast"
|
|
3
4
|
|
|
4
5
|
/*
|
|
@@ -90,19 +91,30 @@ async function writeBlob(blob: Blob): Promise<boolean> {
|
|
|
90
91
|
/** How long `copied` stays true — long enough to read, short enough to not linger. */
|
|
91
92
|
const COPIED_MS = 1400
|
|
92
93
|
|
|
94
|
+
/**
|
|
95
|
+
* The kit's words for copying, scope "copyButton": LpCopyButton's own text and
|
|
96
|
+
* what `toast: true` says. One set, so an app that translates the scope once
|
|
97
|
+
* has every copy in it speak the same language.
|
|
98
|
+
*/
|
|
99
|
+
export const COPY_LABELS = { copy: "Copy", copied: "Copied", failed: "Couldn't copy" }
|
|
100
|
+
|
|
93
101
|
export interface CopyOptions {
|
|
94
102
|
/**
|
|
95
103
|
* Toast to raise on success. `false` (the default) stays silent, for callers
|
|
96
104
|
* whose button already shows the tick and would otherwise say it twice.
|
|
105
|
+
* `true` says the kit's "Copied", in the app's language when its config
|
|
106
|
+
* translates the "copyButton" scope, so a menu item that copies does not
|
|
107
|
+
* have to bring its own word for it.
|
|
97
108
|
*/
|
|
98
|
-
toast?: string |
|
|
109
|
+
toast?: string | boolean
|
|
99
110
|
/**
|
|
100
111
|
* Toast to raise when the copy fails. Defaults to silence for the same
|
|
101
112
|
* reason the kit's other best-effort paths are silent: a copy that didn't
|
|
102
113
|
* happen is usually obvious, and a scary red box over a blocked clipboard
|
|
103
|
-
* helps nobody. Pass a string where losing the copy actually costs something
|
|
114
|
+
* helps nobody. Pass a string where losing the copy actually costs something,
|
|
115
|
+
* or `true` for the kit's own "Couldn't copy".
|
|
104
116
|
*/
|
|
105
|
-
errorToast?: string |
|
|
117
|
+
errorToast?: string | boolean
|
|
106
118
|
}
|
|
107
119
|
|
|
108
120
|
export interface UseClipboard {
|
|
@@ -143,6 +155,7 @@ export interface UseClipboard {
|
|
|
143
155
|
export function useClipboard(): UseClipboard {
|
|
144
156
|
const copied = ref(false)
|
|
145
157
|
const { success, error } = useToast()
|
|
158
|
+
const labels = useLabels("copyButton", COPY_LABELS)
|
|
146
159
|
let timer: ReturnType<typeof setTimeout> | undefined
|
|
147
160
|
|
|
148
161
|
async function copy(data: string | Blob, options: CopyOptions = {}): Promise<boolean> {
|
|
@@ -155,10 +168,10 @@ export function useClipboard(): UseClipboard {
|
|
|
155
168
|
copied.value = true
|
|
156
169
|
clearTimeout(timer)
|
|
157
170
|
timer = setTimeout(() => (copied.value = false), COPIED_MS)
|
|
158
|
-
if (toast) success(toast)
|
|
171
|
+
if (toast) success(toast === true ? labels.value.copied : toast)
|
|
159
172
|
return true
|
|
160
173
|
} catch {
|
|
161
|
-
if (errorToast) error(errorToast)
|
|
174
|
+
if (errorToast) error(errorToast === true ? labels.value.failed : errorToast)
|
|
162
175
|
return false
|
|
163
176
|
}
|
|
164
177
|
}
|