@leavepulse/ui 0.44.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -3
- package/dist/assets/{LpCommandPalette-DCP5g2ik.css → LpCommandPalette-HzAA4gri.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-CJOYGZlI.js} +7 -7
- package/dist/chunks/{LpAlert-DkOIjsbq.js → LpAlert-B6ilrM7T.js} +1 -1
- package/dist/chunks/{LpAppShell-BUKPcHco.js → LpAppShell-B07Lf48e.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-BTVAR4tF.js} +3 -3
- package/dist/chunks/{LpConfirmHost-CDm0Wtpv.js → LpConfirmHost-Ci_uCHgQ.js} +1 -1
- package/dist/chunks/{LpContextMenu-DQw5dGfG.js → LpContextMenu-BqkAYa9X.js} +2 -1
- package/dist/chunks/{LpDatePicker-Drirx1AK.js → LpDatePicker-BrdFtSTy.js} +16 -10
- package/dist/chunks/LpDateRangePicker-Drd7EbIz.js +210 -0
- package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
- package/dist/chunks/{LpDrawer-bScx-KMO.js → LpDrawer-CfRhHwmE.js} +3 -3
- 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-BzTVeNqe.js} +3 -3
- package/dist/chunks/{LpModalNav-DPg5H9f3.js → LpModalNav-CjABSGCu.js} +14 -8
- 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-Bwws_X29.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-DTtWuKvq.js} +76 -9
- 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 +62 -11
- 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.d.ts +2 -0
- 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/useLocale.d.ts +2 -0
- package/dist/composables/useLocale.js +9 -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 +82 -8
- package/src/components/LpContextMenu.vue +1 -1
- package/src/components/LpDatePicker.vue +11 -4
- package/src/components/LpDateRangePicker.vue +226 -0
- package/src/components/LpDrawer.vue +1 -1
- 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 +2 -2
- package/src/components/LpModalNav.vue +13 -2
- 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 +91 -5
- 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/useLocale.ts +14 -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 +53 -4
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ref, toValue, onMounted, onBeforeUnmount, readonly } from "vue";
|
|
2
|
+
import { useHotkeys } from "./useHotkeys.js";
|
|
3
|
+
const HOLD_MS = 320;
|
|
4
|
+
const SLOP_PX = 8;
|
|
5
|
+
const EDGE_PX = 40;
|
|
6
|
+
const SCROLL_STEP = 14;
|
|
7
|
+
function scrollParent(el) {
|
|
8
|
+
for (let node = el?.parentElement; node; node = node.parentElement) {
|
|
9
|
+
const { overflowY } = getComputedStyle(node);
|
|
10
|
+
if ((overflowY === "auto" || overflowY === "scroll") && node.scrollHeight > node.clientHeight) return node;
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
function usePaintSelect(options) {
|
|
15
|
+
const resolve = options.resolve ?? ((raw) => raw);
|
|
16
|
+
let stroke = null;
|
|
17
|
+
let pending = null;
|
|
18
|
+
let swallowClick = false;
|
|
19
|
+
let frame = 0;
|
|
20
|
+
const painting = ref(false);
|
|
21
|
+
const enabled = () => toValue(options.enabled) ?? true;
|
|
22
|
+
function keysInView() {
|
|
23
|
+
const items = options.root.value?.querySelectorAll("[data-paint-key]") ?? [];
|
|
24
|
+
const out = [];
|
|
25
|
+
for (const item of items) {
|
|
26
|
+
if (item.offsetParent === null) continue;
|
|
27
|
+
const key = resolve(item.dataset.paintKey ?? "");
|
|
28
|
+
if (key !== void 0) out.push(key);
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
function keyAt(x, y) {
|
|
33
|
+
const item = document.elementFromPoint(x, y)?.closest("[data-paint-key]");
|
|
34
|
+
if (!item || !options.root.value?.contains(item)) return void 0;
|
|
35
|
+
return resolve(item.dataset.paintKey ?? "");
|
|
36
|
+
}
|
|
37
|
+
function extend() {
|
|
38
|
+
if (!stroke) return;
|
|
39
|
+
const key = keyAt(stroke.x, stroke.y);
|
|
40
|
+
const at = key === void 0 ? -1 : stroke.keys.indexOf(key);
|
|
41
|
+
if (at < 0) return;
|
|
42
|
+
const [lo, hi] = at < stroke.anchor ? [at, stroke.anchor] : [stroke.anchor, at];
|
|
43
|
+
const next = new Set(stroke.before);
|
|
44
|
+
for (let i = lo; i <= hi; i++) {
|
|
45
|
+
const k = stroke.keys[i];
|
|
46
|
+
if (stroke.paint) next.add(k);
|
|
47
|
+
else next.delete(k);
|
|
48
|
+
}
|
|
49
|
+
options.set([...next]);
|
|
50
|
+
}
|
|
51
|
+
function tick() {
|
|
52
|
+
frame = 0;
|
|
53
|
+
if (!stroke) return;
|
|
54
|
+
const box = stroke.scroller?.getBoundingClientRect() ?? { top: 0, bottom: window.innerHeight };
|
|
55
|
+
const delta = stroke.y > box.bottom - EDGE_PX ? SCROLL_STEP : stroke.y < box.top + EDGE_PX ? -SCROLL_STEP : 0;
|
|
56
|
+
if (delta) {
|
|
57
|
+
if (stroke.scroller) stroke.scroller.scrollTop += delta;
|
|
58
|
+
else window.scrollBy(0, delta);
|
|
59
|
+
extend();
|
|
60
|
+
}
|
|
61
|
+
frame = requestAnimationFrame(tick);
|
|
62
|
+
}
|
|
63
|
+
function begin(key, x, y) {
|
|
64
|
+
const keys = keysInView();
|
|
65
|
+
const anchor = keys.indexOf(key);
|
|
66
|
+
if (anchor < 0) return;
|
|
67
|
+
const before = new Set(options.selection());
|
|
68
|
+
stroke = { keys, anchor, paint: !before.has(key), before, x, y, scroller: scrollParent(options.root.value) };
|
|
69
|
+
painting.value = true;
|
|
70
|
+
window.getSelection()?.removeAllRanges();
|
|
71
|
+
if (options.root.value) options.root.value.style.userSelect = "none";
|
|
72
|
+
extend();
|
|
73
|
+
if (!frame) frame = requestAnimationFrame(tick);
|
|
74
|
+
}
|
|
75
|
+
function cancelPending() {
|
|
76
|
+
if (pending) clearTimeout(pending.timer);
|
|
77
|
+
pending = null;
|
|
78
|
+
}
|
|
79
|
+
function onPointerDown(event, key, behaviour = {}) {
|
|
80
|
+
if (!enabled() || event.button !== 0) return;
|
|
81
|
+
cancelPending();
|
|
82
|
+
if (behaviour.hold === void 0 && event.pointerType !== "touch") {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
begin(key, event.clientX, event.clientY);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const { pointerId, clientX: x, clientY: y } = event;
|
|
88
|
+
pending = {
|
|
89
|
+
key,
|
|
90
|
+
pointerId,
|
|
91
|
+
x,
|
|
92
|
+
y,
|
|
93
|
+
timer: setTimeout(() => {
|
|
94
|
+
pending = null;
|
|
95
|
+
begin(key, x, y);
|
|
96
|
+
navigator.vibrate?.(8);
|
|
97
|
+
}, behaviour.hold ?? HOLD_MS)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function onMove(event) {
|
|
101
|
+
if (pending && event.pointerId === pending.pointerId) {
|
|
102
|
+
if (Math.hypot(event.clientX - pending.x, event.clientY - pending.y) > SLOP_PX) cancelPending();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (!stroke) return;
|
|
106
|
+
stroke.x = event.clientX;
|
|
107
|
+
stroke.y = event.clientY;
|
|
108
|
+
extend();
|
|
109
|
+
}
|
|
110
|
+
function onUp() {
|
|
111
|
+
cancelPending();
|
|
112
|
+
if (!stroke) return;
|
|
113
|
+
stroke = null;
|
|
114
|
+
painting.value = false;
|
|
115
|
+
if (options.root.value) options.root.value.style.userSelect = "";
|
|
116
|
+
if (frame) cancelAnimationFrame(frame);
|
|
117
|
+
frame = 0;
|
|
118
|
+
swallowClick = true;
|
|
119
|
+
setTimeout(() => swallowClick = false, 0);
|
|
120
|
+
}
|
|
121
|
+
function onClickCapture(event) {
|
|
122
|
+
if (!swallowClick) return;
|
|
123
|
+
swallowClick = false;
|
|
124
|
+
event.stopPropagation();
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
}
|
|
127
|
+
function onContextMenu(event) {
|
|
128
|
+
if (!stroke && !swallowClick) return;
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
event.stopPropagation();
|
|
131
|
+
}
|
|
132
|
+
function onTouchMove(event) {
|
|
133
|
+
if (stroke) event.preventDefault();
|
|
134
|
+
}
|
|
135
|
+
useHotkeys(
|
|
136
|
+
() => options.selectAll && enabled() ? [
|
|
137
|
+
{
|
|
138
|
+
key: "a",
|
|
139
|
+
code: "KeyA",
|
|
140
|
+
ctrl: true,
|
|
141
|
+
help: toValue(options.help),
|
|
142
|
+
handler: () => options.set(options.selectAll())
|
|
143
|
+
}
|
|
144
|
+
] : [],
|
|
145
|
+
{ scope: options.root }
|
|
146
|
+
);
|
|
147
|
+
onMounted(() => {
|
|
148
|
+
window.addEventListener("pointermove", onMove);
|
|
149
|
+
window.addEventListener("pointerup", onUp);
|
|
150
|
+
window.addEventListener("pointercancel", onUp);
|
|
151
|
+
window.addEventListener("click", onClickCapture, true);
|
|
152
|
+
window.addEventListener("contextmenu", onContextMenu, true);
|
|
153
|
+
options.root.value?.addEventListener("touchmove", onTouchMove, { passive: false });
|
|
154
|
+
});
|
|
155
|
+
onBeforeUnmount(() => {
|
|
156
|
+
onUp();
|
|
157
|
+
swallowClick = false;
|
|
158
|
+
window.removeEventListener("pointermove", onMove);
|
|
159
|
+
window.removeEventListener("pointerup", onUp);
|
|
160
|
+
window.removeEventListener("pointercancel", onUp);
|
|
161
|
+
window.removeEventListener("click", onClickCapture, true);
|
|
162
|
+
window.removeEventListener("contextmenu", onContextMenu, true);
|
|
163
|
+
options.root.value?.removeEventListener("touchmove", onTouchMove);
|
|
164
|
+
});
|
|
165
|
+
return { onPointerDown, painting: readonly(painting) };
|
|
166
|
+
}
|
|
167
|
+
export {
|
|
168
|
+
usePaintSelect
|
|
169
|
+
};
|
|
@@ -12,6 +12,7 @@ function useShift(options = {}) {
|
|
|
12
12
|
let settleTimer;
|
|
13
13
|
let lastHeight = 0;
|
|
14
14
|
let lastWidth = 0;
|
|
15
|
+
let laidOut = false;
|
|
15
16
|
let inFlight = false;
|
|
16
17
|
let tweenStart = 0;
|
|
17
18
|
const scrolled = /* @__PURE__ */ new Set();
|
|
@@ -64,8 +65,10 @@ function useShift(options = {}) {
|
|
|
64
65
|
restoreScroll(tops);
|
|
65
66
|
lastHeight = toHeight;
|
|
66
67
|
lastWidth = toWidth;
|
|
67
|
-
const
|
|
68
|
-
|
|
68
|
+
const wasLaidOut = laidOut;
|
|
69
|
+
laidOut = node.getClientRects().length > 0;
|
|
70
|
+
const movesHeight = wantsHeight() && (fromHeight !== 0 || wasLaidOut) && toHeight !== fromHeight;
|
|
71
|
+
const movesWidth = wantsWidth() && (fromWidth !== 0 || wasLaidOut) && toWidth !== fromWidth;
|
|
69
72
|
if (!movesHeight && !movesWidth) return;
|
|
70
73
|
if (movesHeight) node.style.height = `${fromHeight}px`;
|
|
71
74
|
if (movesWidth) node.style.width = `${fromWidth}px`;
|
|
@@ -102,6 +105,7 @@ function useShift(options = {}) {
|
|
|
102
105
|
resizing.value = false;
|
|
103
106
|
lastHeight = 0;
|
|
104
107
|
lastWidth = 0;
|
|
108
|
+
laidOut = false;
|
|
105
109
|
inFlight = false;
|
|
106
110
|
}
|
|
107
111
|
watch(
|
|
@@ -111,6 +115,7 @@ function useShift(options = {}) {
|
|
|
111
115
|
if (!enabled || !node) return;
|
|
112
116
|
lastHeight = node.offsetHeight;
|
|
113
117
|
lastWidth = node.offsetWidth;
|
|
118
|
+
laidOut = node.getClientRects().length > 0;
|
|
114
119
|
scrollHost = node;
|
|
115
120
|
node.addEventListener("scroll", rememberScroll, { capture: true, passive: true });
|
|
116
121
|
if (wantsHeight()) node.style.height = `${lastHeight}px`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/icons.d.ts
CHANGED
|
@@ -1 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import { type IconifyJSON } from "@iconify/vue";
|
|
2
|
+
/** Bumped whenever icons are registered, so rendered icons re-resolve. */
|
|
3
|
+
export declare const iconsVersion: import("vue").Ref<number, number>;
|
|
4
|
+
/** Register a whole iconify collection (any prefix) for offline use. */
|
|
5
|
+
export declare function registerIconCollection(collection: IconifyJSON): void;
|
|
6
|
+
/**
|
|
7
|
+
* Register lucide icons by name ("check" or "lucide:check") from the bundled
|
|
8
|
+
* collection. Resolves once they render offline.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerIcons(names: readonly string[]): Promise<void>;
|
|
11
|
+
/** Register the full lucide collection. */
|
|
12
|
+
export declare function registerAllIcons(): Promise<void>;
|
|
13
|
+
/** A lucide name that isn't registered yet: load it from the bundled set. */
|
|
14
|
+
export declare function requestIcon(name: string): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export { default as LpCard } from "./components/LpCard.vue";
|
|
|
19
19
|
export { default as LpChart } from "./components/LpChart.vue";
|
|
20
20
|
export type { ChartPointEvent } from "./components/LpChart.vue";
|
|
21
21
|
export type { ChartText } from "./components/LpChart.vue";
|
|
22
|
+
export type { ChartExportOptions } from "./components/LpChart.vue";
|
|
23
|
+
export { backgroundOf, csvField, downloadFile, fileStem, inlineSvg, resolveCssColor, svgToPng, toCsv } from "./components/exportData";
|
|
24
|
+
export type { CsvColumn, CsvOptions, RasterOptions } from "./components/exportData";
|
|
22
25
|
export { CHART_PALETTE, axisTicks, formatTick, niceScale, } from "./components/chart";
|
|
23
26
|
export type { ChartAxis, ChartPoint, ChartSeries } from "./components/chart";
|
|
24
27
|
export { chartSummary, markerIndex } from "./components/chart";
|
|
@@ -43,6 +46,12 @@ export type { ConfirmOptions } from "./components/confirm";
|
|
|
43
46
|
export { default as LpContextMenu } from "./components/LpContextMenu.vue";
|
|
44
47
|
export type { ContextMenuItemDef } from "./components/LpContextMenu.vue";
|
|
45
48
|
export { default as LpDatePicker } from "./components/LpDatePicker.vue";
|
|
49
|
+
export { default as LpDateRangePicker } from "./components/LpDateRangePicker.vue";
|
|
50
|
+
export type { DateRangePickerLabels } from "./components/LpDateRangePicker.vue";
|
|
51
|
+
export { default as LpRangeCalendar } from "./components/LpRangeCalendar.vue";
|
|
52
|
+
export type { RangeCalendarLabels } from "./components/LpRangeCalendar.vue";
|
|
53
|
+
export { clampRange, defaultRangePresets, formatRange, normalizeRange, sameRange } from "./components/dateRange";
|
|
54
|
+
export type { DateRange, DateRangePreset, DateRangePresetLabels } from "./components/dateRange";
|
|
46
55
|
export { default as LpDisclosure } from "./components/LpDisclosure.vue";
|
|
47
56
|
export { default as LpDivider } from "./components/LpDivider.vue";
|
|
48
57
|
export { default as LpDrawer } from "./components/LpDrawer.vue";
|
|
@@ -55,8 +64,10 @@ export type { FileTreeSummary } from "./components/LpFileTree.vue";
|
|
|
55
64
|
export type { FileTreeLabels } from "./components/LpFileTree.vue";
|
|
56
65
|
export type { CheckState, FileNode, NodeStats } from "./components/fileTree";
|
|
57
66
|
export { ancestorIds, checkedCount, checkStateOf, computeStats, fileIcon, formatModified, formatSize, sortNodes, subtreeIds, subtreeSize, } from "./components/fileTree";
|
|
67
|
+
export { default as LpFieldNotice } from "./components/LpFieldNotice.vue";
|
|
58
68
|
export { default as LpFormField } from "./components/LpFormField.vue";
|
|
59
69
|
export { default as LpIcon } from "./components/LpIcon.vue";
|
|
70
|
+
export { iconsVersion, registerAllIcons, registerIconCollection, registerIcons } from "./icons";
|
|
60
71
|
export { default as LpImageEditor } from "./components/LpImageEditor.vue";
|
|
61
72
|
export { default as LpInfraNode } from "./components/LpInfraNode.vue";
|
|
62
73
|
export type { InfraNodeData } from "./components/LpInfraNode.vue";
|
|
@@ -69,6 +80,7 @@ export { default as LpLink } from "./components/LpLink.vue";
|
|
|
69
80
|
export { default as LpLogViewer } from "./components/LpLogViewer.vue";
|
|
70
81
|
export type { LogLevel, LogLine } from "./components/LpLogViewer.vue";
|
|
71
82
|
export type { LogViewerLabels } from "./components/LpLogViewer.vue";
|
|
83
|
+
export { countLevels, matchPositions, matchesTerm, ringWindow, stepMatch } from "./components/logSearch";
|
|
72
84
|
export { default as LpMediaGallery } from "./components/LpMediaGallery.vue";
|
|
73
85
|
export { default as LpModal } from "./components/LpModal.vue";
|
|
74
86
|
export { default as LpModalNav } from "./components/LpModalNav.vue";
|
|
@@ -117,11 +129,16 @@ export { default as LpSwitch } from "./components/LpSwitch.vue";
|
|
|
117
129
|
export { default as LpTable } from "./components/LpTable.vue";
|
|
118
130
|
export type { SortState, TableColumn, TablePage, TableQuery } from "./components/LpTable.vue";
|
|
119
131
|
export type { TableLabels } from "./components/LpTable.vue";
|
|
132
|
+
export type { TableExportOptions } from "./components/LpTable.vue";
|
|
120
133
|
export { compareValues } from "./components/tableSort";
|
|
121
134
|
export { default as LpTableOfContents } from "./components/LpTableOfContents.vue";
|
|
122
135
|
export type { TocLink } from "./components/LpTableOfContents.vue";
|
|
123
136
|
export { default as LpTabs } from "./components/LpTabs.vue";
|
|
124
137
|
export type { TabItem } from "./components/LpTabs.vue";
|
|
138
|
+
export { default as LpTagsInput } from "./components/LpTagsInput.vue";
|
|
139
|
+
export type { TagsInputLabels } from "./components/LpTagsInput.vue";
|
|
140
|
+
export { addTags, splitTags } from "./components/tags";
|
|
141
|
+
export type { AddTagsOptions, TagDuplicates, TagRejection, TagValidator } from "./components/tags";
|
|
125
142
|
export { default as LpTextarea } from "./components/LpTextarea.vue";
|
|
126
143
|
export { default as LpThemeSwitcher } from "./components/LpThemeSwitcher.vue";
|
|
127
144
|
export { default as LpTilt } from "./components/LpTilt.vue";
|
|
@@ -140,12 +157,12 @@ export { useLayout } from "./layout/useLayout";
|
|
|
140
157
|
export type { UseLayout, UseLayoutOptions } from "./layout/useLayout";
|
|
141
158
|
export { applyTheme, applyThemeWithTransition, bootstrapTheme, parseTheme, serializeTheme, THEME_COOKIE, themeFromCookie, themeToCssRule, themeToCssVars, useTheme, } from "./theme/useTheme";
|
|
142
159
|
export type { RevealOrigin } from "./theme/useTheme";
|
|
143
|
-
export { detectBackdropFilter, isBrokenBackdropEngine, NO_BACKDROP_ATTR } from "./theme/backdrop";
|
|
160
|
+
export { detectBackdropFilter, GLASS_BACKDROP_ATTR, isBrokenBackdropEngine, NO_BACKDROP_ATTR, setGlassBackdrop } from "./theme/backdrop";
|
|
144
161
|
export { DEFAULT_SURFACE } from "./theme/tokens";
|
|
145
162
|
export { defineTheme } from "./theme/define";
|
|
146
163
|
export type { ThemeOverrides } from "./theme/define";
|
|
147
164
|
export type { ColorTokens, DensityTokens, FontTokens, ShapeTokens, SurfaceTokens, TokenSet, } from "./theme/tokens";
|
|
148
|
-
export { amber, dark,
|
|
165
|
+
export { amber, dark, light, lime, nord, presets, rose, violet } from "./theme/presets";
|
|
149
166
|
export type { PresetName } from "./theme/presets";
|
|
150
167
|
export { parseConfig, serializeConfig, UI_CONFIG_VERSION } from "./theme/config";
|
|
151
168
|
export type { UiConfig } from "./theme/config";
|
|
@@ -153,7 +170,8 @@ export { useClipboard } from "./composables/useClipboard";
|
|
|
153
170
|
export type { CopyOptions, UseClipboard } from "./composables/useClipboard";
|
|
154
171
|
export { useHotkeys, isAppleKeyboard, appleModifierLabel, activeShortcuts, mergeShortcutGroups, } from "./composables/useHotkeys";
|
|
155
172
|
export type { HotkeyBinding, HotkeyHelp, ShortcutEntry, ShortcutGroup } from "./composables/useHotkeys";
|
|
156
|
-
export { matchesHotkey, useAppleKeyboard } from "./composables/useHotkeys";
|
|
173
|
+
export { findHotkeyConflicts, hotkeyConflicts, hotkeySteps, matchesHotkey, pendingHotkey, sequenceProgress, useAppleKeyboard, } from "./composables/useHotkeys";
|
|
174
|
+
export type { HotkeyConflict, HotkeyStep } from "./composables/useHotkeys";
|
|
157
175
|
export { anyModalOpen, topModalElement, useModalLayer } from "./components/modalDepth";
|
|
158
176
|
export type { ModalLayer, ModalLayerOptions } from "./components/modalDepth";
|
|
159
177
|
export { provideGlass, useGlass } from "./composables/useGlass";
|
|
@@ -161,7 +179,11 @@ export { LP_CONFIG, lpConfig, mergeConfig, provideLpConfig, useLabels, useLinkCo
|
|
|
161
179
|
export type { LabelScope, LpConfig } from "./composables/useLpConfig";
|
|
162
180
|
export { useMergedClass, useMergedAttrs, mergeClass } from "./composables/useMergedClass";
|
|
163
181
|
export { anchorPattern, stripDisallowed, useInputFilter } from "./composables/useInputFilter";
|
|
182
|
+
export { usePaintSelect } from "./composables/usePaintSelect";
|
|
183
|
+
export type { UsePaintSelectOptions } from "./composables/usePaintSelect";
|
|
164
184
|
export { LP_FIELD, fieldMessageId, provideField, useField, useFieldControl } from "./composables/useField";
|
|
185
|
+
export { FIELD_NOTICE_MS, useFieldNotice } from "./composables/useFieldNotice";
|
|
186
|
+
export type { FieldNotice, FieldNoticeOptions, FieldNoticeTone } from "./composables/useFieldNotice";
|
|
165
187
|
export type { FieldContext, FieldControlState } from "./composables/useField";
|
|
166
188
|
export type { UseInputFilterOptions } from "./composables/useInputFilter";
|
|
167
189
|
export { easeOut, easeTravel, easingToken, prefersReducedMotion } from "./composables/easing";
|
|
@@ -172,6 +194,10 @@ export { useRovingFocus } from "./composables/useRovingFocus";
|
|
|
172
194
|
export type { RovingItem, UseRovingFocusOptions } from "./composables/useRovingFocus";
|
|
173
195
|
export { useFormDraft } from "./composables/useFormDraft";
|
|
174
196
|
export type { UseFormDraft, UseFormDraftOptions } from "./composables/useFormDraft";
|
|
197
|
+
export { DEFAULT_MASK_TOKENS, applyMask, maskDelete, parseMask, useInputMask } from "./composables/useInputMask";
|
|
198
|
+
export type { MaskOptions, MaskResult, MaskSpec, MaskToken, MaskTokens, UseInputMaskOptions } from "./composables/useInputMask";
|
|
199
|
+
export { deepEqual, useForm } from "./composables/useForm";
|
|
200
|
+
export type { FieldBinding, FieldRule, FormErrorMessage, FormErrors, FormRules, UseForm, UseFormOptions } from "./composables/useForm";
|
|
175
201
|
export { useSettled } from "./composables/useSettled";
|
|
176
202
|
export type { UseSettledOptions } from "./composables/useSettled";
|
|
177
203
|
export { useShift } from "./composables/useShift";
|