@leavepulse/ui 0.44.0 → 0.45.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/README.md +49 -3
- package/dist/assets/{LpCommandPalette-DCP5g2ik.css → LpCommandPalette-nGNnzXqQ.css} +21 -21
- package/dist/assets/{LpRollingText-CR1mb0Vt.css → LpRollingText-BGnE6q9j.css} +3 -0
- package/dist/assets/{LpShortcutsDialog-ChUyU7oV.css → LpShortcutsDialog-CqYX3yy6.css} +28 -7
- package/dist/assets/{LpTable-DDQNdf86.css → LpTable-CPwWxTJS.css} +49 -9
- package/dist/chunks/{ContextMenuItems-CrfeNPWT.js → ContextMenuItems-BtKU7074.js} +2 -1
- package/dist/chunks/{LayoutCanvas-D-jPOAvg.js → LayoutCanvas-BkaGXTjx.js} +1 -1
- package/dist/chunks/{LayoutNode-D8Xy9N-o.js → LayoutNode-B3_9E1Xa.js} +9 -5
- package/dist/chunks/{LpActionBar-BbwCF6l5.js → LpActionBar-CnfFVIwC.js} +3 -3
- package/dist/chunks/{LpAddressInput-BrOqkZqg.js → LpAddressInput-BwX8uo4_.js} +7 -7
- package/dist/chunks/{LpAlert-DkOIjsbq.js → LpAlert-B6ilrM7T.js} +1 -1
- package/dist/chunks/{LpAppShell-BUKPcHco.js → LpAppShell-C53_RaGF.js} +4 -4
- package/dist/chunks/{LpAutocomplete-DxV3Y9h4.js → LpAutocomplete-C8IgSMsi.js} +2 -1
- package/dist/chunks/{LpAvatar-ClBbEYZN.js → LpAvatar-C1XStdOo.js} +3 -3
- package/dist/chunks/{LpBreadcrumbs-B8IJgFIc.js → LpBreadcrumbs-CQJd73Gm.js} +1 -1
- package/dist/chunks/{LpButton-kqJBHIIb.js → LpButton-CKSwC6Mu.js} +1 -1
- package/dist/chunks/{LpCalendar-B7Ko5RdR.js → LpCalendar-DrA2McTU.js} +1 -1
- package/dist/chunks/{LpCard-CpRByR0q.js → LpCard-C2IvucmX.js} +1 -1
- package/dist/chunks/{LpCheckbox-DpqchzH4.js → LpCheckbox-Bkj13CbW.js} +1 -1
- package/dist/chunks/{LpCodeBlock-DeHJPq7p.js → LpCodeBlock-ca7ANFyW.js} +1 -1
- package/dist/chunks/{LpColorPicker-Bhf1qxhB.js → LpColorPicker-zz4VGkG4.js} +46 -20
- package/dist/chunks/{LpConfirmDialog-CIUOSnWo.js → LpConfirmDialog-DCw5jR1t.js} +3 -3
- package/dist/chunks/{LpConfirmHost-CDm0Wtpv.js → LpConfirmHost-CbywMpMP.js} +1 -1
- package/dist/chunks/{LpContextMenu-DQw5dGfG.js → LpContextMenu-BqkAYa9X.js} +2 -1
- package/dist/chunks/{LpDatePicker-Drirx1AK.js → LpDatePicker-DuusgT69.js} +13 -9
- package/dist/chunks/LpDateRangePicker-DHeuznfC.js +208 -0
- package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
- package/dist/chunks/{LpDrawer-bScx-KMO.js → LpDrawer-Dt4aB4Fr.js} +2 -2
- package/dist/chunks/{LpDropdownMenu-DJpoqRCb.js → LpDropdownMenu-DdJGQzPn.js} +2 -1
- package/dist/chunks/{LpEmptyState-Dsdqz1Wj.js → LpEmptyState-BJbZXC8D.js} +1 -1
- package/dist/chunks/LpFieldNotice-wtieLUTj.js +64 -0
- package/dist/chunks/{LpFileTree-CSI_5SK2.js → LpFileTree-CNurOvkV.js} +3 -3
- package/dist/chunks/{LpFileTreeNode-B4MiSQX2.js → LpFileTreeNode-D_qRRdsH.js} +3 -3
- package/dist/chunks/{LpFormField-CIk5qosh.js → LpFormField-CtVYj6tO.js} +29 -15
- package/dist/chunks/{LpIcon-CCnX5_2j.js → LpIcon-DYtaid0K.js} +20 -6
- package/dist/chunks/{LpInput-C0e8y8_d.js → LpInput-D-YGQbEv.js} +39 -16
- package/dist/chunks/{LpLightbox-Mr0W_6HK.js → LpLightbox-DSDahF23.js} +1 -1
- package/dist/chunks/{LpLogViewer-YBOaFnc_.js → LpLogViewer-KypbgOyo.js} +252 -58
- package/dist/chunks/{LpMapPicker-NUzS9e37.js → LpMapPicker-Cc84LaM3.js} +1 -1
- package/dist/chunks/{LpMediaGallery-DfJmMW0I.js → LpMediaGallery-YKr-cQPN.js} +2 -2
- package/dist/chunks/{LpModal-DPwGKBPv.js → LpModal-DMMDQHAu.js} +3 -3
- package/dist/chunks/{LpModalNav-DPg5H9f3.js → LpModalNav-BVPDyIup.js} +4 -4
- package/dist/chunks/{LpNotificationBell-t5yn-siX.js → LpNotificationBell-CCwyJP5C.js} +26 -14
- package/dist/chunks/{LpNumberField-DWnQKktS.js → LpNumberField-B77O-z28.js} +1 -1
- package/dist/chunks/{LpPagination-DFngX7Xo.js → LpPagination-BcDlo3r_.js} +1 -1
- package/dist/chunks/{LpPasswordInput-CWVDuBJ5.js → LpPasswordInput-eKzQhbQP.js} +2 -2
- package/dist/chunks/{LpPhoneInput-CD-ZTeSd.js → LpPhoneInput-BCbrrhgE.js} +126 -23
- package/dist/chunks/{LpPie-BLco31Nx.js → LpPie-BEJ2SfI6.js} +9 -10
- package/dist/chunks/{LpPopover-p_e_shN3.js → LpPopover-DCKeqiVn.js} +1 -0
- package/dist/chunks/LpRangeCalendar-DZuaRV0W.js +331 -0
- package/dist/chunks/{LpRollingText-CM5gkSeF.js → LpRollingText-DB7upf-5.js} +1 -1
- package/dist/chunks/{LpScrollArea-D8xyKXcF.js → LpScrollArea-Bry1fdOM.js} +14 -2
- package/dist/chunks/{LpSection-aM6J_u51.js → LpSection-tKEH0jYf.js} +1 -1
- package/dist/chunks/{LpSegmented-Dejd7cIx.js → LpSegmented-C09EEam2.js} +1 -1
- package/dist/chunks/{LpSelect-DrRD9I7L.js → LpSelect-DNIL6MB9.js} +20 -23
- package/dist/chunks/{LpSidebar-BgwUNWpJ.js → LpSidebar-CQNB0-yU.js} +3 -3
- package/dist/chunks/{LpSidebarNav-Bqxz8aWT.js → LpSidebarNav-kx-LdqNU.js} +3 -3
- package/dist/chunks/{LpStat-dXtyrdX9.js → LpStat-B-7udBRP.js} +1 -1
- package/dist/chunks/{LpStepper-Bk-XaQYU.js → LpStepper-C7XiVKZj.js} +34 -19
- package/dist/chunks/{LpSwitch-B1aLKulj.js → LpSwitch-OrcOJX9m.js} +1 -1
- package/dist/chunks/LpTableFilter-BV8PpLM9.js +158 -0
- package/dist/chunks/{LpTabs-_qMVaZJ6.js → LpTabs-29iW1XOx.js} +1 -1
- package/dist/chunks/LpTagsInput-D1SuqbhB.js +300 -0
- package/dist/chunks/{LpTextarea-yP8hGedR.js → LpTextarea-uuScWo6-.js} +1 -1
- package/dist/chunks/{LpThemeProvider-Wjm7Tuit.js → LpThemeProvider-Be4r2TQX.js} +1 -1
- package/dist/chunks/{LpThemeSwitcher-CKLc10KZ.js → LpThemeSwitcher-B4aVPbNC.js} +19 -22
- package/dist/chunks/{LpTimeField-C5HRgS5H.js → LpTimeField-Cqe7fXnh.js} +1 -1
- package/dist/chunks/{LpToaster--oT6lfhL.js → LpToaster-DpJvoCOh.js} +37 -3
- package/dist/chunks/{LpTooltip-CBdzeKNf.js → LpTooltip-CXVKcOXT.js} +3 -2
- package/dist/chunks/{LpTopologyCanvas-DocsLal3.js → LpTopologyCanvas-6ozNrQKh.js} +2 -1
- package/dist/chunks/{LpUptimeBar-DLtxOMRy.js → LpUptimeBar-ugcv25xj.js} +2 -2
- package/dist/chunks/icons-CkA0njzm.js +43 -0
- package/dist/chunks/{useTheme-C8JHUlPM.js → useTheme-DJm1JSsY.js} +47 -50
- package/dist/component-names.d.ts +1 -1
- package/dist/components/ContextMenuItems.vue.js +1 -1
- package/dist/components/LayoutCanvas.vue.js +1 -1
- package/dist/components/LayoutNode.vue.js +1 -1
- package/dist/components/LpActionBar.vue.js +1 -1
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAutocomplete.vue.js +1 -1
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +2 -2
- package/dist/components/LpButton.vue.js +1 -1
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.d.ts +16 -1
- package/dist/components/LpChart.vue.js +63 -5
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.d.ts +2 -2
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.d.ts +6 -0
- package/dist/components/LpCommandPalette.vue.js +61 -10
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpConfirmHost.vue.js +1 -1
- package/dist/components/LpContextMenu.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDateRangePicker.vue.d.ts +60 -0
- package/dist/components/LpDateRangePicker.vue.js +4 -0
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.js +1 -1
- package/dist/components/LpEmptyState.vue.js +1 -1
- package/dist/components/LpFieldNotice.vue.d.ts +8 -0
- package/dist/components/LpFieldNotice.vue.js +4 -0
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.d.ts +4 -1
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpIcon.vue.d.ts +0 -1
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.js +2 -2
- package/dist/components/LpInput.vue.d.ts +19 -0
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.d.ts +52 -1
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.d.ts +13 -0
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPopover.vue.js +1 -1
- package/dist/components/LpProgress.vue.d.ts +1 -1
- package/dist/components/LpRangeCalendar.vue.d.ts +51 -0
- package/dist/components/LpRangeCalendar.vue.js +4 -0
- package/dist/components/LpRollingText.vue.d.ts +1 -1
- package/dist/components/LpRollingText.vue.js +1 -1
- package/dist/components/LpScrollArea.vue.d.ts +2 -2
- package/dist/components/LpScrollArea.vue.js +1 -1
- package/dist/components/LpSection.vue.js +1 -1
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSelect.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.d.ts +6 -0
- package/dist/components/LpShortcutsDialog.vue.js +56 -14
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpStepper.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTable.vue.d.ts +84 -2
- package/dist/components/LpTable.vue.js +481 -107
- package/dist/components/LpTableFilter.vue.d.ts +31 -0
- package/dist/components/LpTableFilter.vue.js +4 -0
- package/dist/components/LpTabs.vue.js +1 -1
- package/dist/components/LpTagsInput.vue.d.ts +77 -0
- package/dist/components/LpTagsInput.vue.js +4 -0
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.d.ts +2 -2
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTooltip.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/chart.js +3 -2
- package/dist/components/commandSearch.js +3 -0
- package/dist/components/dateRange.d.ts +43 -0
- package/dist/components/dateRange.js +76 -0
- package/dist/components/exportData.d.ts +58 -0
- package/dist/components/exportData.js +165 -0
- package/dist/components/logSearch.d.ts +18 -0
- package/dist/components/logSearch.js +36 -0
- package/dist/components/phone.d.ts +41 -0
- package/dist/components/phone.js +80 -0
- package/dist/components/tableFilter.d.ts +36 -0
- package/dist/components/tableFilter.js +84 -0
- package/dist/components/tags.d.ts +20 -0
- package/dist/components/tags.js +37 -0
- package/dist/composables/useField.d.ts +4 -0
- package/dist/composables/useFieldNotice.d.ts +17 -0
- package/dist/composables/useFieldNotice.js +28 -0
- package/dist/composables/useForm.d.ts +53 -0
- package/dist/composables/useForm.js +207 -0
- package/dist/composables/useHotkeys.d.ts +65 -5
- package/dist/composables/useHotkeys.js +170 -9
- package/dist/composables/useInputMask.d.ts +59 -0
- package/dist/composables/useInputMask.js +170 -0
- package/dist/composables/usePaintSelect.d.ts +22 -0
- package/dist/composables/usePaintSelect.js +169 -0
- package/dist/composables/useShift.js +7 -2
- package/dist/icons-all.d.ts +1 -0
- package/dist/icons-all.js +3 -0
- package/dist/icons.d.ts +14 -1
- package/dist/index.d.ts +29 -3
- package/dist/index.js +195 -138
- package/dist/kit-icons.d.ts +2 -0
- package/dist/theme/backdrop.d.ts +12 -0
- package/dist/theme/presets.d.ts +0 -2
- package/package.json +13 -4
- package/src/component-names.ts +4 -0
- package/src/components/ContextMenuItems.vue +1 -1
- package/src/components/LayoutNode.vue +11 -2
- package/src/components/LpActionBar.vue +1 -1
- package/src/components/LpAutocomplete.vue +1 -0
- package/src/components/LpAvatar.vue +2 -2
- package/src/components/LpButton.vue +1 -1
- package/src/components/LpChart.vue +80 -1
- package/src/components/LpColorPicker.vue +34 -1
- package/src/components/LpCommandPalette.vue +81 -7
- package/src/components/LpContextMenu.vue +1 -1
- package/src/components/LpDatePicker.vue +8 -3
- package/src/components/LpDateRangePicker.vue +224 -0
- package/src/components/LpDropdownMenu.vue +1 -0
- package/src/components/LpFieldNotice.vue +65 -0
- package/src/components/LpFormField.vue +33 -4
- package/src/components/LpIcon.vue +22 -4
- package/src/components/LpInput.vue +46 -6
- package/src/components/LpLogViewer.vue +225 -22
- package/src/components/LpModal.vue +1 -1
- package/src/components/LpNotificationBell.vue +15 -7
- package/src/components/LpPhoneInput.vue +179 -20
- package/src/components/LpPie.vue +8 -5
- package/src/components/LpPopover.vue +1 -0
- package/src/components/LpRangeCalendar.vue +365 -0
- package/src/components/LpRollingText.vue +3 -0
- package/src/components/LpScrollArea.vue +22 -2
- package/src/components/LpSelect.vue +0 -0
- package/src/components/LpShortcutsDialog.vue +77 -8
- package/src/components/LpStepper.vue +23 -10
- package/src/components/LpSwitch.vue +1 -1
- package/src/components/LpTable.vue +584 -65
- package/src/components/LpTableFilter.vue +175 -0
- package/src/components/LpTagsInput.vue +364 -0
- package/src/components/LpThemeSwitcher.vue +19 -23
- package/src/components/LpToaster.vue +49 -1
- package/src/components/LpTooltip.vue +9 -2
- package/src/components/LpTopologyCanvas.vue +7 -1
- package/src/components/chart.ts +5 -3
- package/src/components/commandSearch.ts +6 -0
- package/src/components/dateRange.ts +134 -0
- package/src/components/exportData.ts +228 -0
- package/src/components/logSearch.ts +46 -0
- package/src/components/phone.ts +140 -0
- package/src/components/tableFilter.ts +122 -0
- package/src/components/tags.ts +62 -0
- package/src/composables/useField.ts +4 -0
- package/src/composables/useFieldNotice.ts +59 -0
- package/src/composables/useForm.ts +314 -0
- package/src/composables/useHotkeys.ts +269 -13
- package/src/composables/useInputMask.ts +254 -0
- package/src/composables/usePaintSelect.ts +243 -0
- package/src/composables/useShift.ts +13 -2
- package/src/iconSubset.d.mts +10 -0
- package/src/iconSubset.mjs +51 -0
- package/src/icons-all.ts +10 -0
- package/src/icons.ts +59 -8
- package/src/index.ts +37 -3
- package/src/kit-icons.ts +5 -0
- package/src/nuxt.ts +30 -2
- package/src/runtime/theme.plugin.ts +2 -2
- package/src/theme/backdrop.ts +69 -0
- package/src/theme/presets.ts +6 -64
- package/src/tokens/tokens.css +46 -0
|
@@ -1,49 +1,68 @@
|
|
|
1
|
-
import { defineComponent, ref, shallowRef,
|
|
1
|
+
import { defineComponent, useModel, computed, ref, shallowRef, onMounted, onBeforeUnmount, watch, nextTick, openBlock, createElementBlock, mergeProps, unref, createVNode, Transition, withCtx, toDisplayString, createCommentVNode, createElementVNode, withDirectives, vModelText, Fragment, renderList, normalizeClass, createTextVNode, normalizeStyle, createBlock, resolveDynamicComponent, TransitionGroup, mergeModels } from "vue";
|
|
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-
|
|
6
|
-
import { _ as _sfc_main$
|
|
7
|
-
import { _ as _sfc_main$
|
|
5
|
+
import { _ as _sfc_main$3 } from "./LpContextMenu-BqkAYa9X.js";
|
|
6
|
+
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
7
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
|
|
8
8
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
9
9
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
10
|
+
import { ringWindow, matchPositions, countLevels, stepMatch } from "../components/logSearch.js";
|
|
10
11
|
const _hoisted_1 = {
|
|
11
12
|
key: 0,
|
|
12
13
|
class: "pointer-events-none absolute top-2 left-1/2 z-10 -translate-x-1/2 rounded-pill bg-brand px-2.5 py-1 text-[11px] font-medium text-ink-inverse"
|
|
13
14
|
};
|
|
14
15
|
const _hoisted_2 = {
|
|
16
|
+
key: 0,
|
|
17
|
+
class: "flex flex-wrap items-center gap-2 border-b border-line px-2 py-1.5 font-sans"
|
|
18
|
+
};
|
|
19
|
+
const _hoisted_3 = { class: "flex min-w-48 flex-1 items-center gap-1.5 rounded-control bg-surface-soft px-2 focus-within:ring-2 focus-within:ring-ring" };
|
|
20
|
+
const _hoisted_4 = ["aria-label", "placeholder"];
|
|
21
|
+
const _hoisted_5 = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "shrink-0 text-[11px] tabular-nums text-muted",
|
|
24
|
+
"aria-live": "polite"
|
|
25
|
+
};
|
|
26
|
+
const _hoisted_6 = ["aria-label"];
|
|
27
|
+
const _hoisted_7 = { class: "flex items-center" };
|
|
28
|
+
const _hoisted_8 = ["aria-label", "disabled"];
|
|
29
|
+
const _hoisted_9 = ["aria-label", "disabled"];
|
|
30
|
+
const _hoisted_10 = ["aria-label"];
|
|
31
|
+
const _hoisted_11 = ["aria-pressed", "onClick"];
|
|
32
|
+
const _hoisted_12 = { class: "font-normal tabular-nums text-muted" };
|
|
33
|
+
const _hoisted_13 = {
|
|
15
34
|
key: 0,
|
|
16
35
|
class: "flex h-full flex-col items-center justify-center gap-1 px-4 py-10 text-center"
|
|
17
36
|
};
|
|
18
|
-
const
|
|
19
|
-
const
|
|
37
|
+
const _hoisted_14 = { class: "text-muted" };
|
|
38
|
+
const _hoisted_15 = {
|
|
20
39
|
key: 0,
|
|
21
40
|
class: "text-muted/70"
|
|
22
41
|
};
|
|
23
|
-
const
|
|
42
|
+
const _hoisted_16 = {
|
|
24
43
|
key: 0,
|
|
25
44
|
class: "flex items-center justify-center gap-2 py-2 text-muted"
|
|
26
45
|
};
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
46
|
+
const _hoisted_17 = { class: "text-[11px]" };
|
|
47
|
+
const _hoisted_18 = ["data-log-row", "aria-current"];
|
|
48
|
+
const _hoisted_19 = {
|
|
30
49
|
key: 0,
|
|
31
50
|
class: "mr-3 w-10 shrink-0 select-none text-right tabular-nums text-muted/70"
|
|
32
51
|
};
|
|
33
|
-
const
|
|
52
|
+
const _hoisted_20 = {
|
|
34
53
|
key: 1,
|
|
35
54
|
class: "mr-3 shrink-0 tabular-nums text-muted"
|
|
36
55
|
};
|
|
37
|
-
const
|
|
56
|
+
const _hoisted_21 = {
|
|
38
57
|
key: 3,
|
|
39
58
|
class: "mr-2 shrink-0 text-muted-strong"
|
|
40
59
|
};
|
|
41
|
-
const
|
|
60
|
+
const _hoisted_22 = {
|
|
42
61
|
key: 0,
|
|
43
62
|
class: "rounded-xs bg-accent/30 text-ink"
|
|
44
63
|
};
|
|
45
|
-
const
|
|
46
|
-
const
|
|
64
|
+
const _hoisted_23 = ["title"];
|
|
65
|
+
const _hoisted_24 = {
|
|
47
66
|
key: 0,
|
|
48
67
|
class: "absolute inset-x-0 bottom-3 flex justify-center"
|
|
49
68
|
};
|
|
@@ -51,7 +70,7 @@ const __default__ = { inheritAttrs: false };
|
|
|
51
70
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
52
71
|
...__default__,
|
|
53
72
|
__name: "LpLogViewer",
|
|
54
|
-
props: {
|
|
73
|
+
props: /* @__PURE__ */ mergeModels({
|
|
55
74
|
lines: {},
|
|
56
75
|
showTime: { type: Boolean, default: true },
|
|
57
76
|
showLevel: { type: Boolean, default: true },
|
|
@@ -69,12 +88,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
69
88
|
rowMenu: { type: Boolean, default: true },
|
|
70
89
|
extraRowItems: {},
|
|
71
90
|
parse: { type: Boolean, default: false },
|
|
91
|
+
maxLines: {},
|
|
92
|
+
toolbar: { type: Boolean },
|
|
72
93
|
labels: {}
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
|
|
94
|
+
}, {
|
|
95
|
+
"search": { default: "" },
|
|
96
|
+
"searchModifiers": {},
|
|
97
|
+
"levels": { default: () => [] },
|
|
98
|
+
"levelsModifiers": {}
|
|
99
|
+
}),
|
|
100
|
+
emits: /* @__PURE__ */ mergeModels(["filter", "reach-top"], ["update:search", "update:levels"]),
|
|
101
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
76
102
|
const props = __props;
|
|
77
103
|
const emit = __emit;
|
|
104
|
+
const query = useModel(__props, "search");
|
|
105
|
+
const levels = useModel(__props, "levels");
|
|
106
|
+
const term = computed(() => (props.toolbar && query.value ? query.value : props.highlight ?? "").trim());
|
|
78
107
|
const text = useLabels(
|
|
79
108
|
"logViewer",
|
|
80
109
|
{
|
|
@@ -89,7 +118,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
89
118
|
filterSource: "Filter by [{source}]",
|
|
90
119
|
filterLevel: "Filter by {level}",
|
|
91
120
|
identical: "{n} identical lines",
|
|
92
|
-
jump: "Jump to latest"
|
|
121
|
+
jump: "Jump to latest",
|
|
122
|
+
search: "Search logs",
|
|
123
|
+
clearSearch: "Clear search",
|
|
124
|
+
previousMatch: "Previous match",
|
|
125
|
+
nextMatch: "Next match",
|
|
126
|
+
matchCount: "{current} / {total}",
|
|
127
|
+
noMatches: "No matches",
|
|
128
|
+
levels: "Levels"
|
|
93
129
|
},
|
|
94
130
|
() => props.labels
|
|
95
131
|
);
|
|
@@ -160,11 +196,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
160
196
|
const root = ref(null);
|
|
161
197
|
const frozen = ref(false);
|
|
162
198
|
const frozenLines = shallowRef(null);
|
|
163
|
-
const
|
|
199
|
+
const windowed = computed(() => ringWindow(frozenLines.value ?? props.lines, props.maxLines));
|
|
200
|
+
const sourceLines = computed(() => windowed.value.lines);
|
|
201
|
+
const lineOffset = computed(() => windowed.value.offset);
|
|
164
202
|
function freeze() {
|
|
165
203
|
if (!hovered.value && !focusWithin()) return false;
|
|
166
204
|
if (frozen.value) return true;
|
|
167
|
-
frozenLines.value = props.lines;
|
|
205
|
+
frozenLines.value = props.maxLines ? props.lines.slice(-props.maxLines) : props.lines;
|
|
168
206
|
frozen.value = true;
|
|
169
207
|
return true;
|
|
170
208
|
}
|
|
@@ -177,9 +215,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
177
215
|
const el = root.value;
|
|
178
216
|
return !!el && el.contains(document.activeElement);
|
|
179
217
|
}
|
|
218
|
+
const lookedAt = () => hovered.value || focusWithin();
|
|
180
219
|
useHotkeys(() => [
|
|
181
|
-
{ key: "control", allowInInput: true, handler: freeze },
|
|
182
|
-
{ key: "meta", allowInInput: true, handler: freeze }
|
|
220
|
+
{ key: "control", allowInInput: true, when: lookedAt, handler: freeze },
|
|
221
|
+
{ key: "meta", allowInInput: true, when: lookedAt, handler: freeze }
|
|
183
222
|
]);
|
|
184
223
|
function onKeyup(event) {
|
|
185
224
|
if (event.key === "Control" || event.key === "Meta") thaw();
|
|
@@ -196,8 +235,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
196
235
|
() => props.parse ? sourceLines.value.map(parseLine) : sourceLines.value
|
|
197
236
|
);
|
|
198
237
|
const visibleLines = computed(() => {
|
|
199
|
-
const
|
|
200
|
-
const
|
|
238
|
+
const needle = props.filterMatches ? term.value.toLowerCase() : "";
|
|
239
|
+
const shown = levels.value.length ? new Set(levels.value) : null;
|
|
240
|
+
const filtered = parsedLines.value.map((line, n) => ({ line, n })).filter(({ line }) => !shown || shown.has(line.level ?? "info")).filter(({ line }) => !needle || matchPositions([line], needle).length > 0);
|
|
201
241
|
if (!props.compact) return filtered.map((row) => ({ ...row, count: 1 }));
|
|
202
242
|
const folded = [];
|
|
203
243
|
for (const row of filtered) {
|
|
@@ -222,6 +262,70 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
222
262
|
}
|
|
223
263
|
return id;
|
|
224
264
|
}
|
|
265
|
+
const LEVEL_ORDER = ["trace", "debug", "info", "success", "warn", "error", "fatal"];
|
|
266
|
+
const levelCounts = computed(() => countLevels(parsedLines.value, "info"));
|
|
267
|
+
const presentLevels = computed(() => LEVEL_ORDER.filter((l) => levelCounts.value.has(l)));
|
|
268
|
+
function toggleLevel(level) {
|
|
269
|
+
levels.value = levels.value.includes(level) ? levels.value.filter((l) => l !== level) : [...levels.value, level];
|
|
270
|
+
}
|
|
271
|
+
const matches = computed(() => matchPositions(visibleLines.value.map((r) => r.line), term.value));
|
|
272
|
+
const current = ref(-1);
|
|
273
|
+
const currentRow = computed(() => {
|
|
274
|
+
const pos = matches.value[current.value];
|
|
275
|
+
return pos === void 0 ? -1 : visibleLines.value[pos]?.n ?? -1;
|
|
276
|
+
});
|
|
277
|
+
watch(term, () => {
|
|
278
|
+
current.value = -1;
|
|
279
|
+
});
|
|
280
|
+
watch(matches, (list) => {
|
|
281
|
+
if (current.value >= list.length) current.value = list.length - 1;
|
|
282
|
+
});
|
|
283
|
+
const matchLabel = computed(() => {
|
|
284
|
+
if (!term.value) return "";
|
|
285
|
+
const total = matches.value.length;
|
|
286
|
+
if (!total) return text.value.noMatches;
|
|
287
|
+
return text.value.matchCount.replace("{current}", current.value >= 0 ? String(current.value + 1) : "–").replace("{total}", String(total));
|
|
288
|
+
});
|
|
289
|
+
function step(direction) {
|
|
290
|
+
const next = stepMatch(current.value, matches.value.length, direction);
|
|
291
|
+
if (next < 0) return;
|
|
292
|
+
current.value = next;
|
|
293
|
+
pinned.value = false;
|
|
294
|
+
nextTick(() => revealMatch(matches.value[next]));
|
|
295
|
+
}
|
|
296
|
+
function revealMatch(position) {
|
|
297
|
+
const el = viewport();
|
|
298
|
+
if (!el || position === void 0) return;
|
|
299
|
+
const behavior = prefersReducedMotion() ? "auto" : "smooth";
|
|
300
|
+
if (virtualise.value) {
|
|
301
|
+
el.scrollTo({ top: Math.max(0, position * ROW_HEIGHT - el.clientHeight / 2), behavior });
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const n = visibleLines.value[position]?.n;
|
|
305
|
+
el.querySelector(`[data-log-row="${n}"]`)?.scrollIntoView({ block: "center", behavior });
|
|
306
|
+
}
|
|
307
|
+
const searchEl = ref(null);
|
|
308
|
+
function onSearchKeydown(event) {
|
|
309
|
+
if (event.isComposing) return;
|
|
310
|
+
if (event.key === "Enter") {
|
|
311
|
+
event.preventDefault();
|
|
312
|
+
step(event.shiftKey ? -1 : 1);
|
|
313
|
+
} else if (event.key === "Escape" && query.value) {
|
|
314
|
+
event.preventDefault();
|
|
315
|
+
event.stopPropagation();
|
|
316
|
+
query.value = "";
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const searching = () => !!term.value && lookedAt();
|
|
320
|
+
useHotkeys(() => [
|
|
321
|
+
{ key: "f3", allowInInput: true, when: searching, handler: () => step(1) },
|
|
322
|
+
{ key: "f3", shift: true, allowInInput: true, when: searching, handler: () => step(-1) }
|
|
323
|
+
]);
|
|
324
|
+
__expose({
|
|
325
|
+
next: () => step(1),
|
|
326
|
+
previous: () => step(-1),
|
|
327
|
+
focusSearch: () => searchEl.value?.focus()
|
|
328
|
+
});
|
|
225
329
|
const filteredEmpty = computed(
|
|
226
330
|
() => props.lines.length > 0 && visibleLines.value.length === 0
|
|
227
331
|
);
|
|
@@ -275,7 +379,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
275
379
|
label: text.value.filterLevel.replace("{level}", line.level),
|
|
276
380
|
icon: "lucide:filter",
|
|
277
381
|
separatorBefore: !line.source,
|
|
278
|
-
onSelect: () =>
|
|
382
|
+
onSelect: () => {
|
|
383
|
+
if (props.toolbar && line.level) levels.value = [line.level];
|
|
384
|
+
emit("filter", { level: line.level });
|
|
385
|
+
}
|
|
279
386
|
});
|
|
280
387
|
}
|
|
281
388
|
const extra = props.extraRowItems?.(line, index) ?? [];
|
|
@@ -283,11 +390,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
283
390
|
return [...items, ...extra];
|
|
284
391
|
}
|
|
285
392
|
function splitHighlight(message) {
|
|
286
|
-
|
|
287
|
-
if (!term) return [{ text: message, hit: false }];
|
|
393
|
+
if (!term.value) return [{ text: message, hit: false }];
|
|
288
394
|
const parts = [];
|
|
289
395
|
const lower = message.toLowerCase();
|
|
290
|
-
const needle = term.toLowerCase();
|
|
396
|
+
const needle = term.value.toLowerCase();
|
|
291
397
|
let i = 0;
|
|
292
398
|
while (i < message.length) {
|
|
293
399
|
const at = lower.indexOf(needle, i);
|
|
@@ -374,6 +480,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
374
480
|
el.scrollTo({ top: el.scrollHeight, behavior: smooth && !reduce && !far ? "smooth" : "auto" });
|
|
375
481
|
}
|
|
376
482
|
function scrollToBottom() {
|
|
483
|
+
current.value = -1;
|
|
377
484
|
rideToBottom(true, true);
|
|
378
485
|
pinned.value = true;
|
|
379
486
|
}
|
|
@@ -389,7 +496,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
389
496
|
linesSignal,
|
|
390
497
|
async () => {
|
|
391
498
|
await nextTick();
|
|
392
|
-
if (props.tail && pinned.value) {
|
|
499
|
+
if (props.tail && pinned.value && current.value < 0) {
|
|
393
500
|
requestAnimationFrame(() => rideToBottom(true));
|
|
394
501
|
} else {
|
|
395
502
|
restoreScrollAnchor();
|
|
@@ -416,12 +523,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
416
523
|
});
|
|
417
524
|
const transitionProps = {
|
|
418
525
|
tag: "ol",
|
|
419
|
-
"enter-active-class": "transition duration-
|
|
526
|
+
"enter-active-class": "transition duration-[var(--duration-medium)] ease-[var(--ease-emphasized)]",
|
|
420
527
|
"enter-from-class": "-translate-x-1 opacity-0",
|
|
421
|
-
"leave-active-class": "overflow-hidden transition-all duration-
|
|
528
|
+
"leave-active-class": "overflow-hidden transition-all duration-[var(--duration-medium)] ease-[var(--ease-emphasized)]",
|
|
422
529
|
"leave-from-class": "max-h-8 opacity-100",
|
|
423
530
|
"leave-to-class": "max-h-0 -translate-y-1 opacity-0",
|
|
424
|
-
"move-class": "transition-transform duration-
|
|
531
|
+
"move-class": "transition-transform duration-[var(--duration-medium)] ease-[var(--ease-emphasized)]"
|
|
425
532
|
};
|
|
426
533
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
427
534
|
() => [
|
|
@@ -436,8 +543,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
436
543
|
tabindex: "-1",
|
|
437
544
|
class: unref(rootClass)
|
|
438
545
|
}, unref(rest), {
|
|
439
|
-
onPointerenter: _cache[
|
|
440
|
-
onPointerleave: _cache[
|
|
546
|
+
onPointerenter: _cache[4] || (_cache[4] = ($event) => hovered.value = true),
|
|
547
|
+
onPointerleave: _cache[5] || (_cache[5] = ($event) => hovered.value = false)
|
|
441
548
|
}), [
|
|
442
549
|
createVNode(Transition, {
|
|
443
550
|
"enter-active-class": "transition duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] motion-reduce:transition-none",
|
|
@@ -450,7 +557,93 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
450
557
|
]),
|
|
451
558
|
_: 1
|
|
452
559
|
}),
|
|
453
|
-
|
|
560
|
+
__props.toolbar ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
561
|
+
createElementVNode("div", _hoisted_3, [
|
|
562
|
+
createVNode(_sfc_main$1, {
|
|
563
|
+
name: "lucide:search",
|
|
564
|
+
size: 14,
|
|
565
|
+
class: "shrink-0 text-muted"
|
|
566
|
+
}),
|
|
567
|
+
withDirectives(createElementVNode("input", {
|
|
568
|
+
ref_key: "searchEl",
|
|
569
|
+
ref: searchEl,
|
|
570
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => query.value = $event),
|
|
571
|
+
type: "search",
|
|
572
|
+
"aria-label": unref(text).search,
|
|
573
|
+
placeholder: unref(text).search,
|
|
574
|
+
class: "h-7 min-w-0 flex-1 bg-transparent text-xs text-ink outline-none placeholder:text-muted [&::-webkit-search-cancel-button]:hidden",
|
|
575
|
+
onKeydown: onSearchKeydown
|
|
576
|
+
}, null, 40, _hoisted_4), [
|
|
577
|
+
[vModelText, query.value]
|
|
578
|
+
]),
|
|
579
|
+
term.value ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(matchLabel.value), 1)) : createCommentVNode("", true),
|
|
580
|
+
query.value ? (openBlock(), createElementBlock("button", {
|
|
581
|
+
key: 1,
|
|
582
|
+
type: "button",
|
|
583
|
+
class: "rounded-xs p-0.5 text-muted outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
584
|
+
"aria-label": unref(text).clearSearch,
|
|
585
|
+
onClick: _cache[1] || (_cache[1] = ($event) => {
|
|
586
|
+
query.value = "";
|
|
587
|
+
searchEl.value?.focus();
|
|
588
|
+
})
|
|
589
|
+
}, [
|
|
590
|
+
createVNode(_sfc_main$1, {
|
|
591
|
+
name: "lucide:x",
|
|
592
|
+
size: 12
|
|
593
|
+
})
|
|
594
|
+
], 8, _hoisted_6)) : createCommentVNode("", true)
|
|
595
|
+
]),
|
|
596
|
+
createElementVNode("div", _hoisted_7, [
|
|
597
|
+
createElementVNode("button", {
|
|
598
|
+
type: "button",
|
|
599
|
+
class: "rounded-xs p-1 text-muted outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",
|
|
600
|
+
"aria-label": unref(text).previousMatch,
|
|
601
|
+
disabled: !matches.value.length,
|
|
602
|
+
onClick: _cache[2] || (_cache[2] = ($event) => step(-1))
|
|
603
|
+
}, [
|
|
604
|
+
createVNode(_sfc_main$1, {
|
|
605
|
+
name: "lucide:chevron-up",
|
|
606
|
+
size: 14
|
|
607
|
+
})
|
|
608
|
+
], 8, _hoisted_8),
|
|
609
|
+
createElementVNode("button", {
|
|
610
|
+
type: "button",
|
|
611
|
+
class: "rounded-xs p-1 text-muted outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40",
|
|
612
|
+
"aria-label": unref(text).nextMatch,
|
|
613
|
+
disabled: !matches.value.length,
|
|
614
|
+
onClick: _cache[3] || (_cache[3] = ($event) => step(1))
|
|
615
|
+
}, [
|
|
616
|
+
createVNode(_sfc_main$1, {
|
|
617
|
+
name: "lucide:chevron-down",
|
|
618
|
+
size: 14
|
|
619
|
+
})
|
|
620
|
+
], 8, _hoisted_9)
|
|
621
|
+
]),
|
|
622
|
+
presentLevels.value.length > 1 ? (openBlock(), createElementBlock("div", {
|
|
623
|
+
key: 0,
|
|
624
|
+
role: "group",
|
|
625
|
+
"aria-label": unref(text).levels,
|
|
626
|
+
class: "flex flex-wrap items-center gap-1"
|
|
627
|
+
}, [
|
|
628
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(presentLevels.value, (level) => {
|
|
629
|
+
return openBlock(), createElementBlock("button", {
|
|
630
|
+
key: level,
|
|
631
|
+
type: "button",
|
|
632
|
+
class: normalizeClass(["flex items-center gap-1 rounded-pill border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.06em] outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring", levels.value.includes(level) ? "border-line-strong bg-surface-soft text-ink" : "border-line text-muted hover:text-ink"]),
|
|
633
|
+
"aria-pressed": levels.value.includes(level),
|
|
634
|
+
onClick: ($event) => toggleLevel(level)
|
|
635
|
+
}, [
|
|
636
|
+
createElementVNode("span", {
|
|
637
|
+
class: normalizeClass(["size-1.5 rounded-full", metaFor(level).rail]),
|
|
638
|
+
"aria-hidden": "true"
|
|
639
|
+
}, null, 2),
|
|
640
|
+
createTextVNode(" " + toDisplayString(level) + " ", 1),
|
|
641
|
+
createElementVNode("span", _hoisted_12, toDisplayString(levelCounts.value.get(level)), 1)
|
|
642
|
+
], 10, _hoisted_11);
|
|
643
|
+
}), 128))
|
|
644
|
+
], 8, _hoisted_10)) : createCommentVNode("", true)
|
|
645
|
+
])) : createCommentVNode("", true),
|
|
646
|
+
createVNode(_sfc_main$2, {
|
|
454
647
|
ref_key: "scrollRef",
|
|
455
648
|
ref: scrollRef,
|
|
456
649
|
instant: "",
|
|
@@ -459,17 +652,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
459
652
|
onScroll
|
|
460
653
|
}, {
|
|
461
654
|
default: withCtx(() => [
|
|
462
|
-
__props.lines.length === 0 || filteredEmpty.value ? (openBlock(), createElementBlock("div",
|
|
463
|
-
createElementVNode("span",
|
|
464
|
-
filteredEmpty.value ? (openBlock(), createElementBlock("span",
|
|
655
|
+
__props.lines.length === 0 || filteredEmpty.value ? (openBlock(), createElementBlock("div", _hoisted_13, [
|
|
656
|
+
createElementVNode("span", _hoisted_14, toDisplayString(filteredEmpty.value ? unref(text).noMatch : __props.emptyLabel ?? unref(text).empty), 1),
|
|
657
|
+
filteredEmpty.value && term.value ? (openBlock(), createElementBlock("span", _hoisted_15, "“" + toDisplayString(term.value) + "”", 1)) : createCommentVNode("", true)
|
|
465
658
|
])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
466
|
-
__props.loadingOlder ? (openBlock(), createElementBlock("div",
|
|
467
|
-
createVNode(_sfc_main$
|
|
659
|
+
__props.loadingOlder ? (openBlock(), createElementBlock("div", _hoisted_16, [
|
|
660
|
+
createVNode(_sfc_main$1, {
|
|
468
661
|
name: "lucide:loader-circle",
|
|
469
662
|
size: 14,
|
|
470
663
|
class: "animate-spin"
|
|
471
664
|
}),
|
|
472
|
-
createElementVNode("span",
|
|
665
|
+
createElementVNode("span", _hoisted_17, toDisplayString(unref(text).loadingOlder), 1)
|
|
473
666
|
])) : createCommentVNode("", true),
|
|
474
667
|
createVNode(_sfc_main$3, {
|
|
475
668
|
items: menuItems.value,
|
|
@@ -491,48 +684,49 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
491
684
|
return openBlock(), createElementBlock("li", {
|
|
492
685
|
key: lineKey(n),
|
|
493
686
|
"data-log-row": n,
|
|
494
|
-
class: normalizeClass(["group relative flex items-start gap-0 px-0 leading-5 transition-colors hover:bg-surface-soft/60", metaFor(line.level).sel])
|
|
687
|
+
class: normalizeClass(["group relative flex items-start gap-0 px-0 leading-5 transition-colors hover:bg-surface-soft/60", [metaFor(line.level).sel, n === currentRow.value ? "bg-accent/15" : ""]]),
|
|
688
|
+
"aria-current": n === currentRow.value ? "true" : void 0
|
|
495
689
|
}, [
|
|
496
690
|
createElementVNode("span", {
|
|
497
691
|
class: normalizeClass(["absolute inset-y-0 left-0 w-0.5", metaFor(line.level).rail]),
|
|
498
692
|
"aria-hidden": "true"
|
|
499
693
|
}, null, 2),
|
|
500
|
-
_cache[
|
|
694
|
+
_cache[6] || (_cache[6] = createElementVNode("span", {
|
|
501
695
|
class: "mr-2 w-0.5 shrink-0",
|
|
502
696
|
"aria-hidden": "true"
|
|
503
697
|
}, null, -1)),
|
|
504
|
-
__props.lineNumbers ? (openBlock(), createElementBlock("span",
|
|
505
|
-
__props.showTime ? (openBlock(), createElementBlock("span",
|
|
698
|
+
__props.lineNumbers ? (openBlock(), createElementBlock("span", _hoisted_19, toDisplayString(n + lineOffset.value + 1), 1)) : createCommentVNode("", true),
|
|
699
|
+
__props.showTime ? (openBlock(), createElementBlock("span", _hoisted_20, toDisplayString(fmtTime(line.time)), 1)) : createCommentVNode("", true),
|
|
506
700
|
__props.showLevel ? (openBlock(), createElementBlock("span", {
|
|
507
701
|
key: 2,
|
|
508
702
|
class: normalizeClass(["mr-3 w-12 shrink-0 text-[10px] font-semibold uppercase tracking-[0.06em]", metaFor(line.level).chip])
|
|
509
703
|
}, toDisplayString(line.level ?? "info"), 3)) : createCommentVNode("", true),
|
|
510
|
-
line.source ? (openBlock(), createElementBlock("span",
|
|
704
|
+
line.source ? (openBlock(), createElementBlock("span", _hoisted_21, "[" + toDisplayString(line.source) + "]", 1)) : createCommentVNode("", true),
|
|
511
705
|
createElementVNode("span", {
|
|
512
706
|
class: normalizeClass(["min-w-0 pr-3", [metaFor(line.level).text, __props.wrap ? "whitespace-pre-wrap break-words" : "whitespace-pre"]])
|
|
513
707
|
}, [
|
|
514
708
|
(openBlock(true), createElementBlock(Fragment, null, renderList(splitHighlight(virtualise.value ? line.message.replace(/\r?\n/g, " ↵ ") : line.message), (part, p) => {
|
|
515
709
|
return openBlock(), createElementBlock(Fragment, { key: p }, [
|
|
516
|
-
part.hit ? (openBlock(), createElementBlock("mark",
|
|
710
|
+
part.hit ? (openBlock(), createElementBlock("mark", _hoisted_22, toDisplayString(part.text), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
517
711
|
createTextVNode(toDisplayString(part.text), 1)
|
|
518
712
|
], 64))
|
|
519
713
|
], 64);
|
|
520
714
|
}), 128)),
|
|
521
715
|
createVNode(Transition, {
|
|
522
|
-
"enter-active-class": "
|
|
716
|
+
"enter-active-class": "transition duration-[var(--duration-medium)] ease-[var(--ease-emphasized)]",
|
|
523
717
|
"enter-from-class": "scale-50 opacity-0"
|
|
524
718
|
}, {
|
|
525
719
|
default: withCtx(() => [
|
|
526
720
|
count > 1 ? (openBlock(), createElementBlock("span", {
|
|
527
721
|
key: count,
|
|
528
|
-
class: "ml-2 select-none rounded-pill bg-surface-soft px-1.5 align-[1px] text-[10px] font-semibold tabular-nums text-muted-strong",
|
|
722
|
+
class: "ml-2 inline-block select-none rounded-pill bg-surface-soft px-1.5 align-[1px] text-[10px] font-semibold tabular-nums text-muted-strong",
|
|
529
723
|
title: unref(text).identical.replace("{n}", String(count))
|
|
530
|
-
}, "×" + toDisplayString(count), 9,
|
|
724
|
+
}, "×" + toDisplayString(count), 9, _hoisted_23)) : createCommentVNode("", true)
|
|
531
725
|
]),
|
|
532
726
|
_: 2
|
|
533
727
|
}, 1024)
|
|
534
728
|
], 2)
|
|
535
|
-
], 10,
|
|
729
|
+
], 10, _hoisted_18);
|
|
536
730
|
}), 128)),
|
|
537
731
|
virtualise.value && padBottom.value > 0 ? (openBlock(), createElementBlock("li", {
|
|
538
732
|
key: "pad-bottom",
|
|
@@ -550,22 +744,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
550
744
|
_: 1
|
|
551
745
|
}, 8, ["content-class", "style"]),
|
|
552
746
|
createVNode(Transition, {
|
|
553
|
-
"enter-active-class": "transition duration-
|
|
747
|
+
"enter-active-class": "transition duration-[var(--duration-medium)] ease-[var(--ease-emphasized)]",
|
|
554
748
|
"enter-from-class": "translate-y-3 scale-90 opacity-0",
|
|
555
|
-
"leave-active-class": "transition duration-
|
|
749
|
+
"leave-active-class": "transition duration-[var(--duration-fast)] ease-in",
|
|
556
750
|
"leave-to-class": "translate-y-3 scale-90 opacity-0"
|
|
557
751
|
}, {
|
|
558
752
|
default: withCtx(() => [
|
|
559
|
-
showJump.value ? (openBlock(), createElementBlock("div",
|
|
753
|
+
showJump.value ? (openBlock(), createElementBlock("div", _hoisted_24, [
|
|
560
754
|
createElementVNode("button", {
|
|
561
755
|
type: "button",
|
|
562
756
|
class: "group flex items-center gap-1.5 rounded-pill border border-line bg-surface-overlay px-3 py-1 text-xs font-medium text-ink shadow-[var(--shadow-panel)] backdrop-blur outline-none transition-colors hover:bg-surface-soft focus-visible:ring-2 focus-visible:ring-ring",
|
|
563
757
|
onClick: scrollToBottom
|
|
564
758
|
}, [
|
|
565
|
-
createVNode(_sfc_main$
|
|
759
|
+
createVNode(_sfc_main$1, {
|
|
566
760
|
name: "lucide:arrow-down",
|
|
567
761
|
size: 14,
|
|
568
|
-
class: "transition-transform duration-
|
|
762
|
+
class: "transition-transform duration-[var(--duration-medium)] ease-[var(--ease-emphasized)] group-hover:translate-y-0.5"
|
|
569
763
|
}),
|
|
570
764
|
createTextVNode(" " + toDisplayString(unref(text).jump), 1)
|
|
571
765
|
])
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, watch, onMounted, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, normalizeStyle, createVNode, createCommentVNode, createBlock, toDisplayString } from "vue";
|
|
2
2
|
import { prefersReducedMotion } from "../composables/easing.js";
|
|
3
3
|
import { OSM_TILES, project, tileUrl, unproject } from "../components/address.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpIcon-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
5
5
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
6
6
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
7
7
|
const _hoisted_1 = ["tabindex", "aria-label"];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, ref, watch, computed, openBlock, createElementBlock, renderSlot, mergeProps, unref, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createVNode, createCommentVNode, createBlock } from "vue";
|
|
2
2
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
3
|
-
import { _ as _sfc_main$1 } from "./LpIcon-
|
|
4
|
-
import { _ as _sfc_main$2 } from "./LpLightbox-
|
|
3
|
+
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
4
|
+
import { _ as _sfc_main$2 } from "./LpLightbox-DSDahF23.js";
|
|
5
5
|
const _hoisted_1 = { key: 0 };
|
|
6
6
|
const _hoisted_2 = ["aria-label"];
|
|
7
7
|
const _hoisted_3 = ["aria-label", "onClick"];
|
|
@@ -5,8 +5,8 @@ import { useLabels } from "../composables/useLpConfig.js";
|
|
|
5
5
|
import { useShift } from "../composables/useShift.js";
|
|
6
6
|
import { useModalLayer } from "../components/modalDepth.js";
|
|
7
7
|
import { CLOSE_ICON } from "../components/dropdown.js";
|
|
8
|
-
import { _ as _sfc_main$1 } from "./LpIcon-
|
|
9
|
-
import { _ as _sfc_main$2 } from "./LpScrollArea-
|
|
8
|
+
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
9
|
+
import { _ as _sfc_main$2 } from "./LpScrollArea-Bry1fdOM.js";
|
|
10
10
|
const _hoisted_1 = {
|
|
11
11
|
key: 0,
|
|
12
12
|
"data-lp-modal-aside": "",
|
|
@@ -162,7 +162,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
162
162
|
createElementVNode("div", {
|
|
163
163
|
ref_key: "panelRef",
|
|
164
164
|
ref: panelRef,
|
|
165
|
-
class: normalizeClass(["flex max-h-[min(90vh,calc(100dvh-2rem))] min-h-0 flex-col overflow-hidden rounded-card border border-line shadow-panel", [unref(frosted) ? unref(layer).nested ? "lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised", widthClass.value, unref(tweening) ? "transition-[height] duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none" : ""]]),
|
|
165
|
+
class: normalizeClass(["relative flex max-h-[min(90vh,calc(100dvh-2rem))] min-h-0 flex-col overflow-hidden rounded-card border border-line shadow-panel", [unref(frosted) ? unref(layer).nested ? "lp-glass-overlay--nested" : "lp-glass-overlay" : "bg-surface-raised", widthClass.value, unref(tweening) ? "transition-[height] duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none" : ""]]),
|
|
166
166
|
style: normalizeStyle({ ...__props.width ? { width: __props.width } : {}, ...hasAside.value ? { alignSelf: "stretch" } : {} })
|
|
167
167
|
}, [
|
|
168
168
|
!(__props.title || _ctx.$slots.title) && __props.ariaLabel ? (openBlock(), createBlock(unref(DialogTitle), {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, openBlock, createBlock, createSlots, withCtx, renderSlot, createElementVNode, normalizeClass, createVNode, createCommentVNode, createTextVNode, toDisplayString } from "vue";
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
|
-
import { _ as _sfc_main$2 } from "./LpButton-
|
|
4
|
-
import { _ as _sfc_main$3 } from "./LpIcon-
|
|
5
|
-
import { _ as _sfc_main$1 } from "./LpModal-
|
|
6
|
-
import { _ as _sfc_main$4 } from "./LpSidebar-
|
|
3
|
+
import { _ as _sfc_main$2 } from "./LpButton-CKSwC6Mu.js";
|
|
4
|
+
import { _ as _sfc_main$3 } from "./LpIcon-DYtaid0K.js";
|
|
5
|
+
import { _ as _sfc_main$1 } from "./LpModal-DMMDQHAu.js";
|
|
6
|
+
import { _ as _sfc_main$4 } from "./LpSidebar-CQNB0-yU.js";
|
|
7
7
|
const _hoisted_1 = { class: "flex items-center gap-2" };
|
|
8
8
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
9
9
|
__name: "LpModalNav",
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { defineComponent, computed, useModel, getCurrentInstance, ref, onMounted, onBeforeUnmount, openBlock, createBlock, withCtx, createElementVNode, toDisplayString, createElementBlock, createCommentVNode, createVNode, Fragment, renderList, resolveDynamicComponent, normalizeClass,
|
|
1
|
+
import { defineComponent, computed, useModel, getCurrentInstance, ref, onMounted, onBeforeUnmount, openBlock, createBlock, withCtx, createElementVNode, toDisplayString, createElementBlock, createCommentVNode, createVNode, Fragment, renderList, resolveDynamicComponent, normalizeClass, Transition, mergeModels } from "vue";
|
|
2
2
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
3
3
|
import { _ as _sfc_main$8 } from "./LpBadge-Fe0D1bYx.js";
|
|
4
|
-
import { _ as _sfc_main$7 } from "./LpButton-
|
|
5
|
-
import { _ as _sfc_main$5 } from "./LpContextMenu-
|
|
6
|
-
import { _ as _sfc_main$3 } from "./LpEmptyState-
|
|
7
|
-
import { _ as _sfc_main$6 } from "./LpIcon-
|
|
8
|
-
import { _ as _sfc_main$1 } from "./LpPopover-
|
|
9
|
-
import { _ as _sfc_main$
|
|
4
|
+
import { _ as _sfc_main$7 } from "./LpButton-CKSwC6Mu.js";
|
|
5
|
+
import { _ as _sfc_main$5 } from "./LpContextMenu-BqkAYa9X.js";
|
|
6
|
+
import { _ as _sfc_main$3 } from "./LpEmptyState-BJbZXC8D.js";
|
|
7
|
+
import { _ as _sfc_main$6 } from "./LpIcon-DYtaid0K.js";
|
|
8
|
+
import { _ as _sfc_main$1 } from "./LpPopover-DCKeqiVn.js";
|
|
9
|
+
import { _ as _sfc_main$9 } from "./LpRollingText-DB7upf-5.js";
|
|
10
|
+
import { _ as _sfc_main$4 } from "./LpScrollArea-Bry1fdOM.js";
|
|
10
11
|
import { _ as _sfc_main$2 } from "./LpShift-DXNsauQZ.js";
|
|
11
12
|
const _hoisted_1 = { class: "flex items-center justify-between gap-2 px-3 py-2.5" };
|
|
12
13
|
const _hoisted_2 = { class: "text-sm font-semibold" };
|
|
@@ -202,17 +203,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
202
203
|
name: "lucide:bell",
|
|
203
204
|
size: 18
|
|
204
205
|
}),
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
"
|
|
208
|
-
tone: "danger",
|
|
209
|
-
class: "absolute -right-1 -top-1 min-w-4 justify-center px-1 py-0 text-[10px] leading-4"
|
|
206
|
+
createVNode(Transition, {
|
|
207
|
+
"enter-active-class": "animate-[chip-in_var(--duration-fast)_var(--ease-emphasized)] motion-reduce:animate-none",
|
|
208
|
+
"leave-active-class": "animate-[chip-out_var(--duration-fast)_ease] motion-reduce:animate-none"
|
|
210
209
|
}, {
|
|
211
210
|
default: withCtx(() => [
|
|
212
|
-
|
|
211
|
+
hasUnread.value ? (openBlock(), createBlock(_sfc_main$8, {
|
|
212
|
+
key: 0,
|
|
213
|
+
"aria-hidden": "true",
|
|
214
|
+
tone: "danger",
|
|
215
|
+
class: "absolute -right-1 -top-1 min-w-4 justify-center px-1 py-0 text-[10px] leading-4"
|
|
216
|
+
}, {
|
|
217
|
+
default: withCtx(() => [
|
|
218
|
+
createVNode(_sfc_main$9, {
|
|
219
|
+
value: badgeLabel.value,
|
|
220
|
+
duration: 220
|
|
221
|
+
}, null, 8, ["value"])
|
|
222
|
+
]),
|
|
223
|
+
_: 1
|
|
224
|
+
})) : createCommentVNode("", true)
|
|
213
225
|
]),
|
|
214
226
|
_: 1
|
|
215
|
-
})
|
|
227
|
+
})
|
|
216
228
|
]),
|
|
217
229
|
_: 1
|
|
218
230
|
}, 8, ["aria-label"])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, useId, computed, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, createElementBlock, toDisplayString, createCommentVNode } from "vue";
|
|
2
2
|
import { NumberFieldRoot, NumberFieldDecrement, NumberFieldInput, NumberFieldIncrement } from "reka-ui";
|
|
3
|
-
import { _ as _sfc_main$1 } from "./LpIcon-
|
|
3
|
+
import { _ as _sfc_main$1 } from "./LpIcon-DYtaid0K.js";
|
|
4
4
|
import { useFieldControl } from "../composables/useField.js";
|
|
5
5
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
6
6
|
const _hoisted_1 = ["id"];
|