@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.
Files changed (271) hide show
  1. package/README.md +49 -3
  2. package/dist/assets/{LpCommandPalette-DCP5g2ik.css → LpCommandPalette-HzAA4gri.css} +21 -21
  3. package/dist/assets/{LpRollingText-CR1mb0Vt.css → LpRollingText-BGnE6q9j.css} +3 -0
  4. package/dist/assets/{LpShortcutsDialog-ChUyU7oV.css → LpShortcutsDialog-CqYX3yy6.css} +28 -7
  5. package/dist/assets/{LpTable-DDQNdf86.css → LpTable-CPwWxTJS.css} +49 -9
  6. package/dist/chunks/{ContextMenuItems-CrfeNPWT.js → ContextMenuItems-BtKU7074.js} +2 -1
  7. package/dist/chunks/{LayoutCanvas-D-jPOAvg.js → LayoutCanvas-BkaGXTjx.js} +1 -1
  8. package/dist/chunks/{LayoutNode-D8Xy9N-o.js → LayoutNode-B3_9E1Xa.js} +9 -5
  9. package/dist/chunks/{LpActionBar-BbwCF6l5.js → LpActionBar-CnfFVIwC.js} +3 -3
  10. package/dist/chunks/{LpAddressInput-BrOqkZqg.js → LpAddressInput-CJOYGZlI.js} +7 -7
  11. package/dist/chunks/{LpAlert-DkOIjsbq.js → LpAlert-B6ilrM7T.js} +1 -1
  12. package/dist/chunks/{LpAppShell-BUKPcHco.js → LpAppShell-B07Lf48e.js} +4 -4
  13. package/dist/chunks/{LpAutocomplete-DxV3Y9h4.js → LpAutocomplete-C8IgSMsi.js} +2 -1
  14. package/dist/chunks/{LpAvatar-ClBbEYZN.js → LpAvatar-C1XStdOo.js} +3 -3
  15. package/dist/chunks/{LpBreadcrumbs-B8IJgFIc.js → LpBreadcrumbs-CQJd73Gm.js} +1 -1
  16. package/dist/chunks/{LpButton-kqJBHIIb.js → LpButton-CKSwC6Mu.js} +1 -1
  17. package/dist/chunks/{LpCalendar-B7Ko5RdR.js → LpCalendar-DrA2McTU.js} +1 -1
  18. package/dist/chunks/{LpCard-CpRByR0q.js → LpCard-C2IvucmX.js} +1 -1
  19. package/dist/chunks/{LpCheckbox-DpqchzH4.js → LpCheckbox-Bkj13CbW.js} +1 -1
  20. package/dist/chunks/{LpCodeBlock-DeHJPq7p.js → LpCodeBlock-ca7ANFyW.js} +1 -1
  21. package/dist/chunks/{LpColorPicker-Bhf1qxhB.js → LpColorPicker-zz4VGkG4.js} +46 -20
  22. package/dist/chunks/{LpConfirmDialog-CIUOSnWo.js → LpConfirmDialog-BTVAR4tF.js} +3 -3
  23. package/dist/chunks/{LpConfirmHost-CDm0Wtpv.js → LpConfirmHost-Ci_uCHgQ.js} +1 -1
  24. package/dist/chunks/{LpContextMenu-DQw5dGfG.js → LpContextMenu-BqkAYa9X.js} +2 -1
  25. package/dist/chunks/{LpDatePicker-Drirx1AK.js → LpDatePicker-BrdFtSTy.js} +16 -10
  26. package/dist/chunks/LpDateRangePicker-Drd7EbIz.js +210 -0
  27. package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
  28. package/dist/chunks/{LpDrawer-bScx-KMO.js → LpDrawer-CfRhHwmE.js} +3 -3
  29. package/dist/chunks/{LpDropdownMenu-DJpoqRCb.js → LpDropdownMenu-DdJGQzPn.js} +2 -1
  30. package/dist/chunks/{LpEmptyState-Dsdqz1Wj.js → LpEmptyState-BJbZXC8D.js} +1 -1
  31. package/dist/chunks/LpFieldNotice-wtieLUTj.js +64 -0
  32. package/dist/chunks/{LpFileTree-CSI_5SK2.js → LpFileTree-CNurOvkV.js} +3 -3
  33. package/dist/chunks/{LpFileTreeNode-B4MiSQX2.js → LpFileTreeNode-D_qRRdsH.js} +3 -3
  34. package/dist/chunks/{LpFormField-CIk5qosh.js → LpFormField-CtVYj6tO.js} +29 -15
  35. package/dist/chunks/{LpIcon-CCnX5_2j.js → LpIcon-DYtaid0K.js} +20 -6
  36. package/dist/chunks/{LpInput-C0e8y8_d.js → LpInput-D-YGQbEv.js} +39 -16
  37. package/dist/chunks/{LpLightbox-Mr0W_6HK.js → LpLightbox-DSDahF23.js} +1 -1
  38. package/dist/chunks/{LpLogViewer-YBOaFnc_.js → LpLogViewer-KypbgOyo.js} +252 -58
  39. package/dist/chunks/{LpMapPicker-NUzS9e37.js → LpMapPicker-Cc84LaM3.js} +1 -1
  40. package/dist/chunks/{LpMediaGallery-DfJmMW0I.js → LpMediaGallery-YKr-cQPN.js} +2 -2
  41. package/dist/chunks/{LpModal-DPwGKBPv.js → LpModal-BzTVeNqe.js} +3 -3
  42. package/dist/chunks/{LpModalNav-DPg5H9f3.js → LpModalNav-CjABSGCu.js} +14 -8
  43. package/dist/chunks/{LpNotificationBell-t5yn-siX.js → LpNotificationBell-CCwyJP5C.js} +26 -14
  44. package/dist/chunks/{LpNumberField-DWnQKktS.js → LpNumberField-B77O-z28.js} +1 -1
  45. package/dist/chunks/{LpPagination-DFngX7Xo.js → LpPagination-BcDlo3r_.js} +1 -1
  46. package/dist/chunks/{LpPasswordInput-CWVDuBJ5.js → LpPasswordInput-eKzQhbQP.js} +2 -2
  47. package/dist/chunks/{LpPhoneInput-CD-ZTeSd.js → LpPhoneInput-BCbrrhgE.js} +126 -23
  48. package/dist/chunks/{LpPie-BLco31Nx.js → LpPie-BEJ2SfI6.js} +9 -10
  49. package/dist/chunks/{LpPopover-p_e_shN3.js → LpPopover-DCKeqiVn.js} +1 -0
  50. package/dist/chunks/LpRangeCalendar-DZuaRV0W.js +331 -0
  51. package/dist/chunks/{LpRollingText-CM5gkSeF.js → LpRollingText-DB7upf-5.js} +1 -1
  52. package/dist/chunks/{LpScrollArea-D8xyKXcF.js → LpScrollArea-Bry1fdOM.js} +14 -2
  53. package/dist/chunks/{LpSection-aM6J_u51.js → LpSection-tKEH0jYf.js} +1 -1
  54. package/dist/chunks/{LpSegmented-Dejd7cIx.js → LpSegmented-C09EEam2.js} +1 -1
  55. package/dist/chunks/{LpSelect-DrRD9I7L.js → LpSelect-DNIL6MB9.js} +20 -23
  56. package/dist/chunks/{LpSidebar-BgwUNWpJ.js → LpSidebar-Bwws_X29.js} +3 -3
  57. package/dist/chunks/{LpSidebarNav-Bqxz8aWT.js → LpSidebarNav-kx-LdqNU.js} +3 -3
  58. package/dist/chunks/{LpStat-dXtyrdX9.js → LpStat-B-7udBRP.js} +1 -1
  59. package/dist/chunks/{LpStepper-Bk-XaQYU.js → LpStepper-C7XiVKZj.js} +34 -19
  60. package/dist/chunks/{LpSwitch-B1aLKulj.js → LpSwitch-OrcOJX9m.js} +1 -1
  61. package/dist/chunks/LpTableFilter-BV8PpLM9.js +158 -0
  62. package/dist/chunks/{LpTabs-_qMVaZJ6.js → LpTabs-29iW1XOx.js} +1 -1
  63. package/dist/chunks/LpTagsInput-D1SuqbhB.js +300 -0
  64. package/dist/chunks/{LpTextarea-yP8hGedR.js → LpTextarea-uuScWo6-.js} +1 -1
  65. package/dist/chunks/{LpThemeProvider-Wjm7Tuit.js → LpThemeProvider-Be4r2TQX.js} +1 -1
  66. package/dist/chunks/{LpThemeSwitcher-CKLc10KZ.js → LpThemeSwitcher-B4aVPbNC.js} +19 -22
  67. package/dist/chunks/{LpTimeField-C5HRgS5H.js → LpTimeField-Cqe7fXnh.js} +1 -1
  68. package/dist/chunks/{LpToaster--oT6lfhL.js → LpToaster-DTtWuKvq.js} +76 -9
  69. package/dist/chunks/{LpTooltip-CBdzeKNf.js → LpTooltip-CXVKcOXT.js} +3 -2
  70. package/dist/chunks/{LpTopologyCanvas-DocsLal3.js → LpTopologyCanvas-6ozNrQKh.js} +2 -1
  71. package/dist/chunks/{LpUptimeBar-DLtxOMRy.js → LpUptimeBar-ugcv25xj.js} +2 -2
  72. package/dist/chunks/icons-CkA0njzm.js +43 -0
  73. package/dist/chunks/{useTheme-C8JHUlPM.js → useTheme-DJm1JSsY.js} +47 -50
  74. package/dist/component-names.d.ts +1 -1
  75. package/dist/components/ContextMenuItems.vue.js +1 -1
  76. package/dist/components/LayoutCanvas.vue.js +1 -1
  77. package/dist/components/LayoutNode.vue.js +1 -1
  78. package/dist/components/LpActionBar.vue.js +1 -1
  79. package/dist/components/LpAddressInput.vue.js +1 -1
  80. package/dist/components/LpAlert.vue.js +1 -1
  81. package/dist/components/LpAppShell.vue.js +1 -1
  82. package/dist/components/LpAutocomplete.vue.js +1 -1
  83. package/dist/components/LpAvatar.vue.js +1 -1
  84. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  85. package/dist/components/LpButton.vue.d.ts +2 -2
  86. package/dist/components/LpButton.vue.js +1 -1
  87. package/dist/components/LpCalendar.vue.js +1 -1
  88. package/dist/components/LpCard.vue.js +1 -1
  89. package/dist/components/LpChart.vue.d.ts +16 -1
  90. package/dist/components/LpChart.vue.js +63 -5
  91. package/dist/components/LpCheckbox.vue.js +1 -1
  92. package/dist/components/LpCodeBlock.vue.js +1 -1
  93. package/dist/components/LpColorPicker.vue.d.ts +2 -2
  94. package/dist/components/LpColorPicker.vue.js +1 -1
  95. package/dist/components/LpCommandPalette.vue.d.ts +6 -0
  96. package/dist/components/LpCommandPalette.vue.js +62 -11
  97. package/dist/components/LpConfirmDialog.vue.js +1 -1
  98. package/dist/components/LpConfirmHost.vue.js +1 -1
  99. package/dist/components/LpContextMenu.vue.js +1 -1
  100. package/dist/components/LpDatePicker.vue.js +1 -1
  101. package/dist/components/LpDateRangePicker.vue.d.ts +60 -0
  102. package/dist/components/LpDateRangePicker.vue.js +4 -0
  103. package/dist/components/LpDisclosure.vue.js +1 -1
  104. package/dist/components/LpDrawer.vue.js +1 -1
  105. package/dist/components/LpDropdownMenu.vue.js +1 -1
  106. package/dist/components/LpDropzone.vue.js +1 -1
  107. package/dist/components/LpEmptyState.vue.js +1 -1
  108. package/dist/components/LpFieldNotice.vue.d.ts +8 -0
  109. package/dist/components/LpFieldNotice.vue.js +4 -0
  110. package/dist/components/LpFileTree.vue.js +1 -1
  111. package/dist/components/LpFileTreeNode.vue.js +1 -1
  112. package/dist/components/LpFormField.vue.d.ts +4 -1
  113. package/dist/components/LpFormField.vue.js +1 -1
  114. package/dist/components/LpIcon.vue.d.ts +0 -1
  115. package/dist/components/LpIcon.vue.js +1 -1
  116. package/dist/components/LpImageEditor.vue.js +2 -2
  117. package/dist/components/LpInput.vue.d.ts +19 -0
  118. package/dist/components/LpInput.vue.js +1 -1
  119. package/dist/components/LpLightbox.vue.js +1 -1
  120. package/dist/components/LpLogViewer.vue.d.ts +52 -1
  121. package/dist/components/LpLogViewer.vue.js +1 -1
  122. package/dist/components/LpMapPicker.vue.js +1 -1
  123. package/dist/components/LpMediaGallery.vue.js +1 -1
  124. package/dist/components/LpModal.vue.js +1 -1
  125. package/dist/components/LpModalNav.vue.js +1 -1
  126. package/dist/components/LpNotificationBell.vue.js +1 -1
  127. package/dist/components/LpNumberField.vue.js +1 -1
  128. package/dist/components/LpPagination.vue.js +1 -1
  129. package/dist/components/LpPasswordInput.vue.js +1 -1
  130. package/dist/components/LpPhoneInput.vue.d.ts +13 -0
  131. package/dist/components/LpPhoneInput.vue.js +1 -1
  132. package/dist/components/LpPie.vue.js +1 -1
  133. package/dist/components/LpPopover.vue.js +1 -1
  134. package/dist/components/LpProgress.vue.d.ts +1 -1
  135. package/dist/components/LpRangeCalendar.vue.d.ts +51 -0
  136. package/dist/components/LpRangeCalendar.vue.js +4 -0
  137. package/dist/components/LpRollingText.vue.d.ts +1 -1
  138. package/dist/components/LpRollingText.vue.js +1 -1
  139. package/dist/components/LpScrollArea.vue.d.ts +2 -2
  140. package/dist/components/LpScrollArea.vue.js +1 -1
  141. package/dist/components/LpSection.vue.js +1 -1
  142. package/dist/components/LpSegmented.vue.js +1 -1
  143. package/dist/components/LpSelect.vue.js +1 -1
  144. package/dist/components/LpShortcutsDialog.vue.d.ts +6 -0
  145. package/dist/components/LpShortcutsDialog.vue.js +56 -14
  146. package/dist/components/LpSidebar.vue.js +1 -1
  147. package/dist/components/LpSidebarNav.vue.js +1 -1
  148. package/dist/components/LpStat.vue.js +1 -1
  149. package/dist/components/LpStepper.vue.js +1 -1
  150. package/dist/components/LpSwitch.vue.js +1 -1
  151. package/dist/components/LpTable.vue.d.ts +84 -2
  152. package/dist/components/LpTable.vue.js +481 -107
  153. package/dist/components/LpTableFilter.vue.d.ts +31 -0
  154. package/dist/components/LpTableFilter.vue.js +4 -0
  155. package/dist/components/LpTabs.vue.js +1 -1
  156. package/dist/components/LpTagsInput.vue.d.ts +77 -0
  157. package/dist/components/LpTagsInput.vue.js +4 -0
  158. package/dist/components/LpTextarea.vue.js +1 -1
  159. package/dist/components/LpThemeProvider.vue.js +1 -1
  160. package/dist/components/LpThemeSwitcher.vue.d.ts +2 -2
  161. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  162. package/dist/components/LpTimeField.vue.js +1 -1
  163. package/dist/components/LpToaster.vue.d.ts +2 -0
  164. package/dist/components/LpToaster.vue.js +1 -1
  165. package/dist/components/LpTooltip.vue.js +1 -1
  166. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  167. package/dist/components/LpUptimeBar.vue.js +1 -1
  168. package/dist/components/chart.js +3 -2
  169. package/dist/components/commandSearch.js +3 -0
  170. package/dist/components/dateRange.d.ts +43 -0
  171. package/dist/components/dateRange.js +76 -0
  172. package/dist/components/exportData.d.ts +58 -0
  173. package/dist/components/exportData.js +165 -0
  174. package/dist/components/logSearch.d.ts +18 -0
  175. package/dist/components/logSearch.js +36 -0
  176. package/dist/components/phone.d.ts +41 -0
  177. package/dist/components/phone.js +80 -0
  178. package/dist/components/tableFilter.d.ts +36 -0
  179. package/dist/components/tableFilter.js +84 -0
  180. package/dist/components/tags.d.ts +20 -0
  181. package/dist/components/tags.js +37 -0
  182. package/dist/composables/useField.d.ts +4 -0
  183. package/dist/composables/useFieldNotice.d.ts +17 -0
  184. package/dist/composables/useFieldNotice.js +28 -0
  185. package/dist/composables/useForm.d.ts +53 -0
  186. package/dist/composables/useForm.js +207 -0
  187. package/dist/composables/useHotkeys.d.ts +65 -5
  188. package/dist/composables/useHotkeys.js +170 -9
  189. package/dist/composables/useInputMask.d.ts +59 -0
  190. package/dist/composables/useInputMask.js +170 -0
  191. package/dist/composables/useLocale.d.ts +2 -0
  192. package/dist/composables/useLocale.js +9 -0
  193. package/dist/composables/usePaintSelect.d.ts +22 -0
  194. package/dist/composables/usePaintSelect.js +169 -0
  195. package/dist/composables/useShift.js +7 -2
  196. package/dist/icons-all.d.ts +1 -0
  197. package/dist/icons-all.js +3 -0
  198. package/dist/icons.d.ts +14 -1
  199. package/dist/index.d.ts +29 -3
  200. package/dist/index.js +195 -138
  201. package/dist/kit-icons.d.ts +2 -0
  202. package/dist/theme/backdrop.d.ts +12 -0
  203. package/dist/theme/presets.d.ts +0 -2
  204. package/package.json +13 -4
  205. package/src/component-names.ts +4 -0
  206. package/src/components/ContextMenuItems.vue +1 -1
  207. package/src/components/LayoutNode.vue +11 -2
  208. package/src/components/LpActionBar.vue +1 -1
  209. package/src/components/LpAutocomplete.vue +1 -0
  210. package/src/components/LpAvatar.vue +2 -2
  211. package/src/components/LpButton.vue +1 -1
  212. package/src/components/LpChart.vue +80 -1
  213. package/src/components/LpColorPicker.vue +34 -1
  214. package/src/components/LpCommandPalette.vue +82 -8
  215. package/src/components/LpContextMenu.vue +1 -1
  216. package/src/components/LpDatePicker.vue +11 -4
  217. package/src/components/LpDateRangePicker.vue +226 -0
  218. package/src/components/LpDrawer.vue +1 -1
  219. package/src/components/LpDropdownMenu.vue +1 -0
  220. package/src/components/LpFieldNotice.vue +65 -0
  221. package/src/components/LpFormField.vue +33 -4
  222. package/src/components/LpIcon.vue +22 -4
  223. package/src/components/LpInput.vue +46 -6
  224. package/src/components/LpLogViewer.vue +225 -22
  225. package/src/components/LpModal.vue +2 -2
  226. package/src/components/LpModalNav.vue +13 -2
  227. package/src/components/LpNotificationBell.vue +15 -7
  228. package/src/components/LpPhoneInput.vue +179 -20
  229. package/src/components/LpPie.vue +8 -5
  230. package/src/components/LpPopover.vue +1 -0
  231. package/src/components/LpRangeCalendar.vue +365 -0
  232. package/src/components/LpRollingText.vue +3 -0
  233. package/src/components/LpScrollArea.vue +22 -2
  234. package/src/components/LpSelect.vue +0 -0
  235. package/src/components/LpShortcutsDialog.vue +77 -8
  236. package/src/components/LpStepper.vue +23 -10
  237. package/src/components/LpSwitch.vue +1 -1
  238. package/src/components/LpTable.vue +584 -65
  239. package/src/components/LpTableFilter.vue +175 -0
  240. package/src/components/LpTagsInput.vue +364 -0
  241. package/src/components/LpThemeSwitcher.vue +19 -23
  242. package/src/components/LpToaster.vue +91 -5
  243. package/src/components/LpTooltip.vue +9 -2
  244. package/src/components/LpTopologyCanvas.vue +7 -1
  245. package/src/components/chart.ts +5 -3
  246. package/src/components/commandSearch.ts +6 -0
  247. package/src/components/dateRange.ts +134 -0
  248. package/src/components/exportData.ts +228 -0
  249. package/src/components/logSearch.ts +46 -0
  250. package/src/components/phone.ts +140 -0
  251. package/src/components/tableFilter.ts +122 -0
  252. package/src/components/tags.ts +62 -0
  253. package/src/composables/useField.ts +4 -0
  254. package/src/composables/useFieldNotice.ts +59 -0
  255. package/src/composables/useForm.ts +314 -0
  256. package/src/composables/useHotkeys.ts +269 -13
  257. package/src/composables/useInputMask.ts +254 -0
  258. package/src/composables/useLocale.ts +14 -0
  259. package/src/composables/usePaintSelect.ts +243 -0
  260. package/src/composables/useShift.ts +13 -2
  261. package/src/iconSubset.d.mts +10 -0
  262. package/src/iconSubset.mjs +51 -0
  263. package/src/icons-all.ts +10 -0
  264. package/src/icons.ts +59 -8
  265. package/src/index.ts +37 -3
  266. package/src/kit-icons.ts +5 -0
  267. package/src/nuxt.ts +30 -2
  268. package/src/runtime/theme.plugin.ts +2 -2
  269. package/src/theme/backdrop.ts +69 -0
  270. package/src/theme/presets.ts +6 -64
  271. 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 movesHeight = wantsHeight() && fromHeight !== 0 && toHeight !== fromHeight;
68
- const movesWidth = wantsWidth() && fromWidth !== 0 && toWidth !== fromWidth;
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 {};
@@ -0,0 +1,3 @@
1
+ import lucide from "@iconify-json/lucide/icons.json";
2
+ import { a as registerIconCollection } from "./chunks/icons-CkA0njzm.js";
3
+ registerIconCollection(lucide);
package/dist/icons.d.ts CHANGED
@@ -1 +1,14 @@
1
- export {};
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, leavepulse, light, lime, nord, presets, rose, violet } from "./theme/presets";
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";