@leavepulse/ui 0.43.4 → 0.44.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.
Files changed (337) hide show
  1. package/README.md +75 -7
  2. package/dist/assets/{LpCommandPalette-B-0Est4Z.css → LpCommandPalette-DCP5g2ik.css} +21 -21
  3. package/dist/assets/{LpDropzone-BBoWvi-J.css → LpDropzone-i4BdMi1H.css} +12 -12
  4. package/dist/assets/{LpImageEditor-Ct7Y3aNu.css → LpImageEditor-CbMA82g8.css} +6 -6
  5. package/dist/assets/{LpShortcutsDialog-C6YoQ8_M.css → LpShortcutsDialog-ChUyU7oV.css} +7 -7
  6. package/dist/assets/{LpSkeleton-D7xU8IPV.css → LpSkeleton-H3Z5dEIk.css} +4 -1
  7. package/dist/assets/{LpTable-BgPLJOXa.css → LpTable-DDQNdf86.css} +9 -9
  8. package/dist/chunks/ContextMenuItems-CrfeNPWT.js +123 -0
  9. package/dist/chunks/{LayoutCanvas-Dd20boUG.js → LayoutCanvas-D-jPOAvg.js} +26 -9
  10. package/dist/chunks/{LayoutNode-DGpZA9LX.js → LayoutNode-D8Xy9N-o.js} +20 -8
  11. package/dist/chunks/{LpActionBar-BlvtGB2P.js → LpActionBar-BbwCF6l5.js} +24 -10
  12. package/dist/chunks/{LpAddressInput-B-Zvxsn7.js → LpAddressInput-BrOqkZqg.js} +53 -48
  13. package/dist/chunks/{LpAlert-BAYHDSS1.js → LpAlert-DkOIjsbq.js} +15 -8
  14. package/dist/chunks/{LpAppShell-BGQVIY-3.js → LpAppShell-BUKPcHco.js} +51 -24
  15. package/dist/chunks/{LpAutocomplete-DExlIZe_.js → LpAutocomplete-DxV3Y9h4.js} +50 -23
  16. package/dist/chunks/{LpAvatar-B3-xAOH3.js → LpAvatar-ClBbEYZN.js} +17 -8
  17. package/dist/chunks/LpBreadcrumbs-B8IJgFIc.js +95 -0
  18. package/dist/chunks/{LpButton-5VXXCjwF.js → LpButton-kqJBHIIb.js} +44 -14
  19. package/dist/chunks/{LpCard-BhI1N_vL.js → LpCard-CpRByR0q.js} +1 -1
  20. package/dist/chunks/{LpCheckbox-CVccKYaH.js → LpCheckbox-DpqchzH4.js} +7 -3
  21. package/dist/chunks/{LpCodeBlock-Bo0B4TFR.js → LpCodeBlock-DeHJPq7p.js} +48 -16
  22. package/dist/chunks/{LpColorPicker-BlXea7LM.js → LpColorPicker-Bhf1qxhB.js} +32 -9
  23. package/dist/chunks/{LpConfirmDialog-Q-bxff8z.js → LpConfirmDialog-CIUOSnWo.js} +58 -16
  24. package/dist/chunks/LpConfirmHost-CDm0Wtpv.js +49 -0
  25. package/dist/chunks/LpContextMenu-DQw5dGfG.js +68 -0
  26. package/dist/chunks/LpDatePicker-Drirx1AK.js +191 -0
  27. package/dist/chunks/{LpDrawer-BZ6k3hvo.js → LpDrawer-bScx-KMO.js} +63 -26
  28. package/dist/chunks/{LpFileTree-_5vFBgaK.js → LpFileTree-CSI_5SK2.js} +23 -8
  29. package/dist/chunks/{LpFileTreeNode-BdcIYKIE.js → LpFileTreeNode-B4MiSQX2.js} +2 -2
  30. package/dist/chunks/LpFormField-CIk5qosh.js +87 -0
  31. package/dist/chunks/{LpInput-9EXWUM9B.js → LpInput-C0e8y8_d.js} +26 -11
  32. package/dist/chunks/{LpLightbox-2sYVMY-S.js → LpLightbox-Mr0W_6HK.js} +147 -60
  33. package/dist/chunks/{LpLink-DCND-zyu.js → LpLink-Krkjhe_y.js} +15 -6
  34. package/dist/chunks/{LpLogViewer-CaRy5MeS.js → LpLogViewer-YBOaFnc_.js} +68 -34
  35. package/dist/chunks/{LpMapPicker-ul4oYno6.js → LpMapPicker-NUzS9e37.js} +38 -13
  36. package/dist/chunks/{LpMediaGallery-FF-NquIo.js → LpMediaGallery-DfJmMW0I.js} +6 -3
  37. package/dist/chunks/{LpModal-Bt0pQCI_.js → LpModal-DPwGKBPv.js} +49 -26
  38. package/dist/chunks/{LpModalNav-YaifHrXC.js → LpModalNav-DPg5H9f3.js} +9 -6
  39. package/dist/chunks/{LpNotificationBell-DyGGsMAM.js → LpNotificationBell-t5yn-siX.js} +58 -24
  40. package/dist/chunks/{LpNumberField-CWuX08iX.js → LpNumberField-DWnQKktS.js} +20 -7
  41. package/dist/chunks/{LpNumberFlow-amWYaeuA.js → LpNumberFlow-z4WPZcZu.js} +22 -12
  42. package/dist/chunks/{LpOtpInput-y2v-pmiN.js → LpOtpInput-CziPF3Oq.js} +37 -8
  43. package/dist/chunks/{LpPagination-5FxjmmB5.js → LpPagination-DFngX7Xo.js} +30 -19
  44. package/dist/chunks/{LpPasswordInput--sjYCkLS.js → LpPasswordInput-CWVDuBJ5.js} +10 -7
  45. package/dist/chunks/{LpPhoneInput-BDSKVl_z.js → LpPhoneInput-CD-ZTeSd.js} +57 -33
  46. package/dist/chunks/{LpPie-D6OnzwlJ.js → LpPie-BLco31Nx.js} +78 -21
  47. package/dist/chunks/{LpPopover-8268UmlC.js → LpPopover-p_e_shN3.js} +4 -2
  48. package/dist/chunks/{LpProgress-Btq5W4Ut.js → LpProgress-CBU1iI69.js} +5 -4
  49. package/dist/chunks/{LpRadioGroup-xPIuVDO_.js → LpRadioGroup-DmEW0l78.js} +9 -2
  50. package/dist/chunks/{LpSegmented-fV0Sk92p.js → LpSegmented-Dejd7cIx.js} +7 -3
  51. package/dist/chunks/{LpSelect-ANIVtrpM.js → LpSelect-DrRD9I7L.js} +40 -18
  52. package/dist/chunks/{LpSidebar-ClBUwoEz.js → LpSidebar-BgwUNWpJ.js} +30 -22
  53. package/dist/chunks/{LpSidebarNav-llOcs_Fn.js → LpSidebarNav-Bqxz8aWT.js} +14 -9
  54. package/dist/chunks/{LpSkeleton-CTI-vBgW.js → LpSkeleton-BB6XIV-w.js} +1 -1
  55. package/dist/chunks/{LpSlider-BwNIBkAK.js → LpSlider-Cuzmrd7p.js} +7 -2
  56. package/dist/chunks/{LpSparkline-C6xQ2dwv.js → LpSparkline-CB80N8SJ.js} +11 -4
  57. package/dist/chunks/{LpStat-CQaW8R--.js → LpStat-dXtyrdX9.js} +1 -1
  58. package/dist/chunks/{LpSwitch-Blizvqyt.js → LpSwitch-B1aLKulj.js} +40 -26
  59. package/dist/chunks/{LpTableOfContents-CjvxPMpU.js → LpTableOfContents-BUcAfGPQ.js} +36 -41
  60. package/dist/chunks/{LpTabs-Cefe_lys.js → LpTabs-_qMVaZJ6.js} +19 -5
  61. package/dist/chunks/LpTextarea-yP8hGedR.js +77 -0
  62. package/dist/chunks/LpThemeProvider-Wjm7Tuit.js +35 -0
  63. package/dist/chunks/LpThemeSwitcher-CKLc10KZ.js +169 -0
  64. package/dist/chunks/{LpTilt-DuyKbpkA.js → LpTilt-B7KHX1zH.js} +2 -2
  65. package/dist/chunks/{LpTimeField-K6nAGboX.js → LpTimeField-C5HRgS5H.js} +13 -7
  66. package/dist/chunks/{LpToaster-gDB1EaU3.js → LpToaster--oT6lfhL.js} +57 -28
  67. package/dist/chunks/{LpTooltip-hCLPAqMG.js → LpTooltip-CBdzeKNf.js} +13 -6
  68. package/dist/chunks/LpTooltipProvider-CftjV7Xc.js +25 -0
  69. package/dist/chunks/{LpTopologyCanvas-Cm1L39uL.js → LpTopologyCanvas-DocsLal3.js} +6 -1
  70. package/dist/chunks/{LpUptimeBar-DvAMno0S.js → LpUptimeBar-DLtxOMRy.js} +43 -14
  71. package/dist/chunks/{LpThemeSwitcher-Cue-myST.js → useTheme-C8JHUlPM.js} +173 -215
  72. package/dist/component-names.d.ts +1 -1
  73. package/dist/components/ContextMenuItems.vue.d.ts +8 -0
  74. package/dist/components/ContextMenuItems.vue.js +4 -0
  75. package/dist/components/LayoutCanvas.vue.js +1 -1
  76. package/dist/components/LayoutNode.vue.d.ts +4 -0
  77. package/dist/components/LayoutNode.vue.js +1 -1
  78. package/dist/components/LpActionBar.vue.d.ts +3 -0
  79. package/dist/components/LpActionBar.vue.js +1 -1
  80. package/dist/components/LpAddressInput.vue.d.ts +1 -1
  81. package/dist/components/LpAddressInput.vue.js +1 -1
  82. package/dist/components/LpAlert.vue.d.ts +9 -0
  83. package/dist/components/LpAlert.vue.js +1 -1
  84. package/dist/components/LpAppShell.vue.d.ts +10 -0
  85. package/dist/components/LpAppShell.vue.js +1 -1
  86. package/dist/components/LpAutocomplete.vue.d.ts +31 -6
  87. package/dist/components/LpAutocomplete.vue.js +1 -1
  88. package/dist/components/LpAvatar.vue.d.ts +3 -3
  89. package/dist/components/LpAvatar.vue.js +1 -1
  90. package/dist/components/LpBadge.vue.d.ts +2 -2
  91. package/dist/components/LpBreadcrumbs.vue.d.ts +13 -9
  92. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  93. package/dist/components/LpButton.vue.d.ts +35 -98
  94. package/dist/components/LpButton.vue.js +1 -1
  95. package/dist/components/LpCard.vue.js +1 -1
  96. package/dist/components/LpChart.vue.d.ts +31 -2
  97. package/dist/components/LpChart.vue.js +317 -95
  98. package/dist/components/LpCheckbox.vue.js +1 -1
  99. package/dist/components/LpCodeBlock.vue.d.ts +2 -0
  100. package/dist/components/LpCodeBlock.vue.js +1 -1
  101. package/dist/components/LpColorPicker.vue.js +1 -1
  102. package/dist/components/LpCommandPalette.vue.d.ts +8 -3
  103. package/dist/components/LpCommandPalette.vue.js +86 -72
  104. package/dist/components/LpConfirmDialog.vue.d.ts +15 -3
  105. package/dist/components/LpConfirmDialog.vue.js +1 -1
  106. package/dist/components/LpConfirmHost.vue.d.ts +9 -0
  107. package/dist/components/LpConfirmHost.vue.js +4 -0
  108. package/dist/components/LpContextMenu.vue.d.ts +3 -5
  109. package/dist/components/LpContextMenu.vue.js +1 -1
  110. package/dist/components/LpDatePicker.vue.d.ts +24 -6
  111. package/dist/components/LpDatePicker.vue.js +1 -1
  112. package/dist/components/LpDrawer.vue.d.ts +10 -0
  113. package/dist/components/LpDrawer.vue.js +1 -1
  114. package/dist/components/LpDropzone.vue.js +22 -6
  115. package/dist/components/LpFileTree.vue.d.ts +11 -2
  116. package/dist/components/LpFileTree.vue.js +1 -1
  117. package/dist/components/LpFileTreeNode.vue.js +1 -1
  118. package/dist/components/LpFormField.vue.d.ts +9 -0
  119. package/dist/components/LpFormField.vue.js +1 -1
  120. package/dist/components/LpImageEditor.vue.js +92 -57
  121. package/dist/components/LpInput.vue.d.ts +3 -3
  122. package/dist/components/LpInput.vue.js +1 -1
  123. package/dist/components/LpLightbox.vue.d.ts +17 -0
  124. package/dist/components/LpLightbox.vue.js +1 -1
  125. package/dist/components/LpLink.vue.d.ts +11 -11
  126. package/dist/components/LpLink.vue.js +1 -1
  127. package/dist/components/LpLogViewer.vue.d.ts +20 -2
  128. package/dist/components/LpLogViewer.vue.js +1 -1
  129. package/dist/components/LpMapPicker.vue.d.ts +4 -4
  130. package/dist/components/LpMapPicker.vue.js +1 -1
  131. package/dist/components/LpMediaGallery.vue.js +1 -1
  132. package/dist/components/LpModal.vue.d.ts +16 -6
  133. package/dist/components/LpModal.vue.js +1 -1
  134. package/dist/components/LpModalNav.vue.d.ts +0 -1
  135. package/dist/components/LpModalNav.vue.js +1 -1
  136. package/dist/components/LpNotificationBell.vue.d.ts +11 -2
  137. package/dist/components/LpNotificationBell.vue.js +1 -1
  138. package/dist/components/LpNumberField.vue.d.ts +2 -0
  139. package/dist/components/LpNumberField.vue.js +1 -1
  140. package/dist/components/LpNumberFlow.vue.js +1 -1
  141. package/dist/components/LpOtpInput.vue.js +1 -1
  142. package/dist/components/LpPagination.vue.d.ts +2 -0
  143. package/dist/components/LpPagination.vue.js +1 -1
  144. package/dist/components/LpPasswordInput.vue.js +1 -1
  145. package/dist/components/LpPhoneInput.vue.js +1 -1
  146. package/dist/components/LpPie.vue.d.ts +21 -2
  147. package/dist/components/LpPie.vue.js +1 -1
  148. package/dist/components/LpPopover.vue.d.ts +2 -0
  149. package/dist/components/LpPopover.vue.js +1 -1
  150. package/dist/components/LpProgress.vue.js +1 -1
  151. package/dist/components/LpRadioGroup.vue.js +1 -1
  152. package/dist/components/LpSection.vue.d.ts +1 -1
  153. package/dist/components/LpSegmented.vue.d.ts +5 -0
  154. package/dist/components/LpSegmented.vue.js +1 -1
  155. package/dist/components/LpSelect.vue.d.ts +1 -0
  156. package/dist/components/LpSelect.vue.js +1 -1
  157. package/dist/components/LpShortcutsDialog.vue.d.ts +1 -1
  158. package/dist/components/LpShortcutsDialog.vue.js +11 -8
  159. package/dist/components/LpSidebar.vue.d.ts +6 -2
  160. package/dist/components/LpSidebar.vue.js +1 -1
  161. package/dist/components/LpSidebarNav.vue.js +1 -1
  162. package/dist/components/LpSkeleton.vue.js +1 -1
  163. package/dist/components/LpSlider.vue.js +1 -1
  164. package/dist/components/LpSparkline.vue.d.ts +1 -0
  165. package/dist/components/LpSparkline.vue.js +1 -1
  166. package/dist/components/LpStat.vue.js +1 -1
  167. package/dist/components/LpSwitch.vue.js +1 -1
  168. package/dist/components/LpTable.vue.d.ts +23 -1
  169. package/dist/components/LpTable.vue.js +74 -36
  170. package/dist/components/LpTableOfContents.vue.d.ts +4 -2
  171. package/dist/components/LpTableOfContents.vue.js +1 -1
  172. package/dist/components/LpTabs.vue.d.ts +2 -0
  173. package/dist/components/LpTabs.vue.js +1 -1
  174. package/dist/components/LpTextarea.vue.d.ts +19 -6
  175. package/dist/components/LpTextarea.vue.js +1 -1
  176. package/dist/components/LpThemeProvider.vue.d.ts +22 -0
  177. package/dist/components/LpThemeProvider.vue.js +4 -0
  178. package/dist/components/LpThemeSwitcher.vue.d.ts +13 -0
  179. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  180. package/dist/components/LpTilt.vue.js +1 -1
  181. package/dist/components/LpTimeField.vue.js +1 -1
  182. package/dist/components/LpToaster.vue.d.ts +6 -1
  183. package/dist/components/LpToaster.vue.js +1 -1
  184. package/dist/components/LpTooltip.vue.d.ts +1 -2
  185. package/dist/components/LpTooltip.vue.js +1 -1
  186. package/dist/components/LpTooltipProvider.vue.d.ts +22 -0
  187. package/dist/components/LpTooltipProvider.vue.js +4 -0
  188. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  189. package/dist/components/LpUptimeBar.vue.d.ts +4 -0
  190. package/dist/components/LpUptimeBar.vue.js +1 -1
  191. package/dist/components/chart.d.ts +32 -1
  192. package/dist/components/chart.js +39 -4
  193. package/dist/components/codeHighlight.d.ts +6 -0
  194. package/dist/components/codeHighlight.js +92 -20
  195. package/dist/components/color.d.ts +1 -1
  196. package/dist/components/color.js +20 -9
  197. package/dist/components/confirm.d.ts +25 -0
  198. package/dist/components/confirm.js +26 -0
  199. package/dist/components/countries.d.ts +6 -0
  200. package/dist/components/countries.js +7 -0
  201. package/dist/components/fileTree.js +16 -7
  202. package/dist/components/imageCrop.d.ts +42 -0
  203. package/dist/components/imageCrop.js +47 -0
  204. package/dist/components/link.d.ts +12 -0
  205. package/dist/components/link.js +19 -0
  206. package/dist/components/modalDepth.d.ts +18 -2
  207. package/dist/components/modalDepth.js +17 -5
  208. package/dist/components/otp.d.ts +5 -0
  209. package/dist/components/otp.js +10 -0
  210. package/dist/components/sidebar.d.ts +7 -1
  211. package/dist/components/tableSort.d.ts +8 -0
  212. package/dist/components/tableSort.js +31 -0
  213. package/dist/composables/useField.d.ts +34 -0
  214. package/dist/composables/useField.js +45 -0
  215. package/dist/composables/useFormDraft.d.ts +10 -3
  216. package/dist/composables/useFormDraft.js +9 -14
  217. package/dist/composables/useHotkeys.d.ts +17 -1
  218. package/dist/composables/useHotkeys.js +55 -18
  219. package/dist/composables/useInputFilter.d.ts +17 -0
  220. package/dist/composables/useInputFilter.js +47 -10
  221. package/dist/composables/useLpConfig.d.ts +24 -0
  222. package/dist/composables/useLpConfig.js +44 -0
  223. package/dist/composables/useRovingFocus.js +7 -0
  224. package/dist/composables/useTilt.d.ts +2 -2
  225. package/dist/composables/useTilt.js +5 -6
  226. package/dist/composables/useToast.d.ts +20 -0
  227. package/dist/composables/useToast.js +28 -4
  228. package/dist/composables/useZoomPan.d.ts +3 -3
  229. package/dist/composables/useZoomPan.js +4 -4
  230. package/dist/index.d.ts +32 -2
  231. package/dist/index.js +184 -137
  232. package/dist/layout/tree.d.ts +2 -0
  233. package/dist/layout/tree.js +16 -1
  234. package/dist/layout/useLayout.d.ts +15 -0
  235. package/dist/layout/useLayout.js +41 -14
  236. package/dist/theme/useTheme.d.ts +32 -9
  237. package/package.json +8 -7
  238. package/src/component-names.ts +5 -7
  239. package/src/components/ContextMenuItems.vue +88 -0
  240. package/src/components/LayoutCanvas.vue +26 -6
  241. package/src/components/LayoutNode.vue +19 -2
  242. package/src/components/LpActionBar.vue +30 -7
  243. package/src/components/LpAddressInput.vue +57 -41
  244. package/src/components/LpAlert.vue +16 -3
  245. package/src/components/LpAppShell.vue +45 -12
  246. package/src/components/LpAutocomplete.vue +46 -10
  247. package/src/components/LpAvatar.vue +19 -5
  248. package/src/components/LpBreadcrumbs.vue +65 -41
  249. package/src/components/LpButton.vue +59 -13
  250. package/src/components/LpChart.vue +272 -28
  251. package/src/components/LpCheckbox.vue +7 -3
  252. package/src/components/LpCodeBlock.vue +50 -14
  253. package/src/components/LpColorPicker.vue +39 -9
  254. package/src/components/LpCommandPalette.vue +34 -13
  255. package/src/components/LpConfirmDialog.vue +68 -17
  256. package/src/components/LpConfirmHost.vue +59 -0
  257. package/src/components/LpContextMenu.vue +14 -115
  258. package/src/components/LpDatePicker.vue +99 -68
  259. package/src/components/LpDrawer.vue +56 -19
  260. package/src/components/LpDropzone.vue +21 -4
  261. package/src/components/LpFileTree.vue +33 -7
  262. package/src/components/LpFormField.vue +30 -7
  263. package/src/components/LpImageEditor.vue +96 -57
  264. package/src/components/LpInput.vue +18 -7
  265. package/src/components/LpLightbox.vue +140 -29
  266. package/src/components/LpLink.vue +24 -13
  267. package/src/components/LpLogViewer.vue +86 -17
  268. package/src/components/LpMapPicker.vue +36 -13
  269. package/src/components/LpMediaGallery.vue +8 -2
  270. package/src/components/LpModal.vue +53 -27
  271. package/src/components/LpModalNav.vue +5 -2
  272. package/src/components/LpNotificationBell.vue +63 -17
  273. package/src/components/LpNumberField.vue +21 -6
  274. package/src/components/LpNumberFlow.vue +26 -10
  275. package/src/components/LpOtpInput.vue +43 -8
  276. package/src/components/LpPagination.vue +23 -7
  277. package/src/components/LpPasswordInput.vue +4 -1
  278. package/src/components/LpPhoneInput.vue +53 -27
  279. package/src/components/LpPie.vue +94 -15
  280. package/src/components/LpPopover.vue +3 -0
  281. package/src/components/LpProgress.vue +5 -3
  282. package/src/components/LpRadioGroup.vue +9 -2
  283. package/src/components/LpSegmented.vue +12 -2
  284. package/src/components/LpSelect.vue +0 -0
  285. package/src/components/LpShortcutsDialog.vue +8 -3
  286. package/src/components/LpSidebar.vue +14 -9
  287. package/src/components/LpSidebarNav.vue +17 -5
  288. package/src/components/LpSkeleton.vue +4 -1
  289. package/src/components/LpSlider.vue +7 -1
  290. package/src/components/LpSparkline.vue +11 -3
  291. package/src/components/LpSwitch.vue +30 -7
  292. package/src/components/LpTable.vue +91 -32
  293. package/src/components/LpTableOfContents.vue +50 -32
  294. package/src/components/LpTabs.vue +23 -6
  295. package/src/components/LpTextarea.vue +44 -6
  296. package/src/components/LpThemeProvider.vue +41 -0
  297. package/src/components/LpThemeSwitcher.vue +64 -17
  298. package/src/components/LpTilt.vue +2 -2
  299. package/src/components/LpTimeField.vue +14 -3
  300. package/src/components/LpToaster.vue +66 -26
  301. package/src/components/LpTooltip.vue +22 -5
  302. package/src/components/LpTooltipProvider.vue +24 -0
  303. package/src/components/LpTopologyCanvas.vue +12 -1
  304. package/src/components/LpUptimeBar.vue +46 -8
  305. package/src/components/chart.ts +77 -5
  306. package/src/components/codeHighlight.ts +111 -15
  307. package/src/components/color.ts +30 -9
  308. package/src/components/confirm.ts +58 -0
  309. package/src/components/countries.ts +12 -0
  310. package/src/components/fileTree.ts +19 -7
  311. package/src/components/imageCrop.ts +107 -0
  312. package/src/components/link.ts +34 -0
  313. package/src/components/modalDepth.ts +48 -6
  314. package/src/components/otp.ts +16 -0
  315. package/src/components/sidebar.ts +7 -1
  316. package/src/components/tableSort.ts +37 -0
  317. package/src/composables/useField.ts +79 -0
  318. package/src/composables/useFormDraft.ts +25 -20
  319. package/src/composables/useHotkeys.ts +89 -18
  320. package/src/composables/useInputFilter.ts +77 -14
  321. package/src/composables/useLpConfig.ts +87 -0
  322. package/src/composables/useRovingFocus.ts +11 -0
  323. package/src/composables/useTilt.ts +5 -6
  324. package/src/composables/useToast.ts +56 -4
  325. package/src/composables/useZoomPan.ts +6 -6
  326. package/src/index.ts +37 -2
  327. package/src/layout/tree.ts +30 -0
  328. package/src/layout/useLayout.ts +68 -18
  329. package/src/nuxt.ts +59 -17
  330. package/src/runtime/config.plugin.ts +14 -0
  331. package/src/runtime/theme.plugin.ts +42 -22
  332. package/src/theme/useTheme.ts +206 -100
  333. package/dist/chunks/LpBreadcrumbs-p4jHe_V-.js +0 -62
  334. package/dist/chunks/LpContextMenu-CwW1QXe_.js +0 -217
  335. package/dist/chunks/LpDatePicker-CwOToxGq.js +0 -164
  336. package/dist/chunks/LpFormField-CazBc2-a.js +0 -62
  337. package/dist/chunks/LpTextarea-t7F6gv8E.js +0 -47
@@ -1,31 +1,39 @@
1
1
  import { defineComponent, ref, watch, onBeforeUnmount, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, createVNode, createTextVNode, toDisplayString, createCommentVNode, withModifiers, normalizeStyle, Teleport } from "vue";
2
2
  import { ToastProvider, ToastRoot, ToastTitle, ToastDescription, ToastViewport } from "reka-ui";
3
+ import { useLabels } from "../composables/useLpConfig.js";
3
4
  import { useToast } from "../composables/useToast.js";
4
5
  import { CLOSE_ICON } from "../components/dropdown.js";
5
6
  import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
6
7
  const _hoisted_1 = { class: "flex items-start gap-3 p-3.5" };
7
8
  const _hoisted_2 = { class: "flex min-w-0 flex-1 flex-col gap-0.5" };
8
- const _hoisted_3 = ["onClick"];
9
- const _hoisted_4 = ["onClick"];
9
+ const _hoisted_3 = ["disabled", "aria-busy", "onClick"];
10
+ const _hoisted_4 = ["aria-label", "onClick"];
10
11
  const _sfc_main = /* @__PURE__ */ defineComponent({
11
12
  __name: "LpToaster",
13
+ props: {
14
+ labels: {}
15
+ },
12
16
  setup(__props) {
17
+ const props = __props;
18
+ const text = useLabels("toast", { dismiss: "Dismiss" }, () => props.labels);
13
19
  const { queue, dismiss } = useToast();
20
+ const tag = (t) => `${t.id}:${t.rev}`;
14
21
  const closing = ref(/* @__PURE__ */ new Set());
15
- function beginClose(id) {
16
- if (closing.value.has(id)) return;
17
- closing.value = new Set(closing.value).add(id);
18
- window.setTimeout(() => finishClose(id), 220);
22
+ function beginClose(t) {
23
+ const at = tag(t);
24
+ if (closing.value.has(at)) return;
25
+ closing.value = new Set(closing.value).add(at);
26
+ window.setTimeout(() => finishClose(t.id, at), 220);
19
27
  }
20
- function finishClose(id) {
21
- if (!closing.value.has(id)) return;
28
+ function finishClose(id, at) {
29
+ if (!closing.value.has(at)) return;
22
30
  const next = new Set(closing.value);
23
- next.delete(id);
31
+ next.delete(at);
24
32
  closing.value = next;
25
- dismiss(id);
33
+ if (queue.some((t) => tag(t) === at)) dismiss(id);
26
34
  }
27
- function onAnimEnd(e, id) {
28
- if (e.animationName === "toast-out") finishClose(id);
35
+ function onAnimEnd(e, t) {
36
+ if (e.animationName === "toast-out") finishClose(t.id, tag(t));
29
37
  }
30
38
  const variantIcon = {
31
39
  info: "lucide:info",
@@ -64,7 +72,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
64
72
  if (!queue.some((t) => t.id === id)) pausedAt.delete(id);
65
73
  }
66
74
  if (closing.value.size) {
67
- const live = new Set([...closing.value].filter((id) => queue.some((t) => t.id === id)));
75
+ const live = new Set([...closing.value].filter((at) => queue.some((t) => tag(t) === at)));
68
76
  if (live.size !== closing.value.size) closing.value = live;
69
77
  }
70
78
  if (queue.some((t) => t.dismissAt !== null)) startTimer();
@@ -89,27 +97,46 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
89
97
  const remaining = t.dismissAt - at;
90
98
  return Math.max(0, Math.min(100, remaining / t.duration * 100));
91
99
  }
92
- async function runClick(t) {
93
- if (t.onClick) {
94
- await t.onClick();
95
- beginClose(t.id);
100
+ let swiped = null;
101
+ function onSwipeDone(t) {
102
+ swiped = tag(t);
103
+ window.setTimeout(() => swiped = null, 0);
104
+ }
105
+ const busy = ref(/* @__PURE__ */ new Set());
106
+ async function settle(t, run) {
107
+ const at = tag(t);
108
+ if (busy.value.has(at)) return;
109
+ busy.value = new Set(busy.value).add(at);
110
+ try {
111
+ await run();
112
+ beginClose(t);
113
+ } finally {
114
+ const next = new Set(busy.value);
115
+ next.delete(at);
116
+ busy.value = next;
96
117
  }
97
118
  }
98
- async function runAction(t, action) {
99
- await action.onClick();
100
- beginClose(t.id);
119
+ function runClick(t) {
120
+ if (swiped === tag(t)) return;
121
+ if (t.onClick) return settle(t, t.onClick);
122
+ }
123
+ function runAction(t, action) {
124
+ return settle(t, action.onClick);
101
125
  }
102
126
  return (_ctx, _cache) => {
103
127
  return openBlock(), createBlock(unref(ToastProvider), null, {
104
128
  default: withCtx(() => [
105
129
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(queue), (t) => {
106
130
  return openBlock(), createBlock(unref(ToastRoot), {
107
- key: t.id,
108
- open: !closing.value.has(t.id),
131
+ key: tag(t),
132
+ open: !closing.value.has(tag(t)),
109
133
  duration: t.duration,
134
+ type: t.variant === "error" || t.variant === "warning" ? "foreground" : "background",
110
135
  class: normalizeClass(["pointer-events-auto relative overflow-hidden rounded-card border border-line bg-surface-raised shadow-panel data-[state=open]:animate-[toast-in_200ms_var(--ease-emphasized)] data-[state=closed]:animate-[toast-out_140ms_ease]", { "cursor-pointer": t.onClick }]),
111
- "onUpdate:open": (open) => !open && beginClose(t.id),
112
- onAnimationend: (e) => onAnimEnd(e, t.id),
136
+ "onUpdate:open": (open) => !open && beginClose(t),
137
+ onAnimationend: (e) => onAnimEnd(e, t),
138
+ onSwipeEnd: ($event) => onSwipeDone(t),
139
+ onSwipeCancel: ($event) => onSwipeDone(t),
113
140
  onPause: ($event) => onPause(t),
114
141
  onResume: ($event) => onResume(t),
115
142
  onClick: ($event) => runClick(t)
@@ -147,7 +174,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
147
174
  return openBlock(), createElementBlock("button", {
148
175
  key: i,
149
176
  type: "button",
150
- class: "inline-flex items-center gap-1.5 rounded-control border border-line bg-surface-soft px-2.5 py-1 text-xs font-medium text-ink outline-none transition-[border-color,background-color,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] hover:border-line-strong hover:bg-surface-soft/70 active:scale-95 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring",
177
+ disabled: busy.value.has(tag(t)),
178
+ "aria-busy": busy.value.has(tag(t)) || void 0,
179
+ class: "inline-flex items-center gap-1.5 rounded-control disabled:opacity-60 border border-line bg-surface-soft px-2.5 py-1 text-xs font-medium text-ink outline-none transition-[border-color,background-color,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] hover:border-line-strong hover:bg-surface-soft/70 active:scale-95 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring",
151
180
  onClick: ($event) => runAction(t, action)
152
181
  }, [
153
182
  action.icon ? (openBlock(), createBlock(_sfc_main$1, {
@@ -163,8 +192,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
163
192
  createElementVNode("button", {
164
193
  type: "button",
165
194
  class: "group -mr-1 -mt-1 rounded-md p-1 text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink",
166
- "aria-label": "Dismiss",
167
- onClick: withModifiers(($event) => beginClose(t.id), ["stop"])
195
+ "aria-label": unref(text).dismiss,
196
+ onClick: withModifiers(($event) => beginClose(t), ["stop"])
168
197
  }, [
169
198
  createVNode(_sfc_main$1, {
170
199
  name: "lucide:x",
@@ -180,7 +209,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
180
209
  }, null, 6)) : createCommentVNode("", true)
181
210
  ]),
182
211
  _: 2
183
- }, 1032, ["open", "duration", "class", "onUpdate:open", "onAnimationend", "onPause", "onResume", "onClick"]);
212
+ }, 1032, ["open", "duration", "type", "class", "onUpdate:open", "onAnimationend", "onSwipeEnd", "onSwipeCancel", "onPause", "onResume", "onClick"]);
184
213
  }), 128)),
185
214
  (openBlock(), createBlock(Teleport, { to: "body" }, [
186
215
  createVNode(unref(ToastViewport), { class: "fixed bottom-0 right-0 z-(--z-toast) flex w-[min(92vw,22rem)] flex-col gap-2 p-4 outline-none" })
@@ -1,5 +1,5 @@
1
- import { defineComponent, ref, watch, onBeforeUnmount, openBlock, createBlock, unref, withCtx, createVNode, renderSlot, normalizeStyle, normalizeClass, createTextVNode, toDisplayString } from "vue";
2
- import { TooltipProvider, TooltipRoot, TooltipTrigger, TooltipPortal, TooltipContent } from "reka-ui";
1
+ import { defineComponent, ref, watch, onBeforeUnmount, openBlock, createBlock, resolveDynamicComponent, Fragment, unref, normalizeProps, guardReactiveProps, withCtx, createVNode, renderSlot, normalizeStyle, normalizeClass, createTextVNode, toDisplayString } from "vue";
2
+ import { injectTooltipProviderContext, TooltipProvider, TooltipRoot, TooltipTrigger, TooltipPortal, TooltipContent } from "reka-ui";
3
3
  import { springStep, springSettled } from "../composables/usePillTransition.js";
4
4
  import { PANEL_SURFACE, TOOLTIP_ANIM } from "../components/dropdown.js";
5
5
  import '../assets/LpTooltip-B61SYd4K.css';const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -9,13 +9,15 @@ import '../assets/LpTooltip-B61SYd4K.css';const _sfc_main = /* @__PURE__ */ defi
9
9
  sideOffset: {},
10
10
  side: { default: "top" },
11
11
  label: { type: Boolean },
12
- delay: { default: 200 },
12
+ delay: {},
13
13
  showOnPointerFocus: { type: Boolean },
14
14
  followCursor: { type: Boolean },
15
15
  disabled: { type: Boolean }
16
16
  },
17
17
  setup(__props) {
18
18
  const props = __props;
19
+ const shared = injectTooltipProviderContext(null);
20
+ const reducedMotion = () => typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
19
21
  const target = { x: 0, y: 0 };
20
22
  const offset = ref({ x: 0, y: 0 });
21
23
  let sx = { value: 0, velocity: 0 };
@@ -49,6 +51,10 @@ import '../assets/LpTooltip-B61SYd4K.css';const _sfc_main = /* @__PURE__ */ defi
49
51
  const half = props.side === "top" || props.side === "bottom" ? rect.height / 2 : 0;
50
52
  const dir = props.side === "bottom" ? -1 : 1;
51
53
  target.y = e.clientY - (rect.top + rect.height / 2) + half * dir;
54
+ if (reducedMotion()) {
55
+ offset.value = { x: target.x, y: target.y };
56
+ return;
57
+ }
52
58
  if (!frame) frame = requestAnimationFrame(settle);
53
59
  };
54
60
  const open = ref(false);
@@ -73,10 +79,11 @@ import '../assets/LpTooltip-B61SYd4K.css';const _sfc_main = /* @__PURE__ */ defi
73
79
  if (frame) cancelAnimationFrame(frame);
74
80
  });
75
81
  return (_ctx, _cache) => {
76
- return openBlock(), createBlock(unref(TooltipProvider), { "delay-duration": __props.delay }, {
82
+ return openBlock(), createBlock(resolveDynamicComponent(unref(shared) ? Fragment : unref(TooltipProvider)), normalizeProps(guardReactiveProps(unref(shared) ? {} : { delayDuration: __props.delay ?? 200 })), {
77
83
  default: withCtx(() => [
78
84
  createVNode(unref(TooltipRoot), {
79
85
  open: open.value,
86
+ "delay-duration": __props.delay,
80
87
  "ignore-non-keyboard-focus": !__props.showOnPointerFocus,
81
88
  "disable-hoverable-content": __props.followCursor,
82
89
  "disable-closing-trigger": __props.followCursor,
@@ -119,10 +126,10 @@ import '../assets/LpTooltip-B61SYd4K.css';const _sfc_main = /* @__PURE__ */ defi
119
126
  })
120
127
  ]),
121
128
  _: 3
122
- }, 8, ["open", "ignore-non-keyboard-focus", "disable-hoverable-content", "disable-closing-trigger"])
129
+ }, 8, ["open", "delay-duration", "ignore-non-keyboard-focus", "disable-hoverable-content", "disable-closing-trigger"])
123
130
  ]),
124
131
  _: 3
125
- }, 8, ["delay-duration"]);
132
+ }, 16);
126
133
  };
127
134
  }
128
135
  });
@@ -0,0 +1,25 @@
1
+ import { defineComponent, openBlock, createBlock, unref, withCtx, renderSlot } from "vue";
2
+ import { TooltipProvider } from "reka-ui";
3
+ const _sfc_main = /* @__PURE__ */ defineComponent({
4
+ __name: "LpTooltipProvider",
5
+ props: {
6
+ delay: { default: 200 },
7
+ skipDelay: { default: 300 }
8
+ },
9
+ setup(__props) {
10
+ return (_ctx, _cache) => {
11
+ return openBlock(), createBlock(unref(TooltipProvider), {
12
+ "delay-duration": __props.delay,
13
+ "skip-delay-duration": __props.skipDelay
14
+ }, {
15
+ default: withCtx(() => [
16
+ renderSlot(_ctx.$slots, "default")
17
+ ]),
18
+ _: 3
19
+ }, 8, ["delay-duration", "skip-delay-duration"]);
20
+ };
21
+ }
22
+ });
23
+ export {
24
+ _sfc_main as _
25
+ };
@@ -1,4 +1,4 @@
1
- import { defineComponent, markRaw, computed, watch, openBlock, createBlock, unref, withCtx, createVNode, createCommentVNode, normalizeClass, createElementVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, renderSlot } from "vue";
1
+ import { defineComponent, h, markRaw, computed, watch, openBlock, createBlock, unref, withCtx, createVNode, createCommentVNode, normalizeClass, createElementVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString, renderSlot } from "vue";
2
2
  import { Background } from "@vue-flow/background";
3
3
  import { Controls } from "@vue-flow/controls";
4
4
  import { MarkerType, useVueFlow, VueFlow, SelectionMode, Panel } from "@vue-flow/core";
@@ -34,7 +34,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
34
34
  setup(__props, { expose: __expose, emit: __emit }) {
35
35
  const props = __props;
36
36
  const emit = __emit;
37
+ const GroupNode = defineComponent({
38
+ props: { label: { type: [String, Object], default: void 0 } },
39
+ setup: (props2) => () => typeof props2.label === "string" ? h("div", { class: "px-3 pt-2 text-xs font-medium text-muted" }, props2.label) : null
40
+ });
37
41
  const nodeTypes = {
42
+ group: markRaw(GroupNode),
38
43
  infra: markRaw(_sfc_main$3),
39
44
  service: markRaw(_sfc_main$2),
40
45
  lane: markRaw(_sfc_main$1)
@@ -1,8 +1,9 @@
1
1
  import { defineComponent, computed, ref, openBlock, createElementBlock, mergeProps, unref, createElementVNode, toDisplayString, createCommentVNode, createVNode, withCtx, Fragment, renderList, normalizeStyle, createBlock, createTextVNode } from "vue";
2
- import { _ as _sfc_main$3 } from "./LpNumberFlow-amWYaeuA.js";
2
+ import { _ as _sfc_main$3 } from "./LpNumberFlow-z4WPZcZu.js";
3
3
  import { _ as _sfc_main$2 } from "./LpRollingText-CM5gkSeF.js";
4
- import { _ as _sfc_main$1 } from "./LpTooltip-hCLPAqMG.js";
4
+ import { _ as _sfc_main$1 } from "./LpTooltip-CBdzeKNf.js";
5
5
  import { useMergedAttrs } from "../composables/useMergedClass.js";
6
+ import { useLabels } from "../composables/useLpConfig.js";
6
7
  import '../assets/LpUptimeBar-B98o9krI.css';const _hoisted_1 = {
7
8
  key: 0,
8
9
  class: "text-xs"
@@ -12,7 +13,7 @@ const _hoisted_3 = {
12
13
  key: 0,
13
14
  class: "flex items-center gap-1.5"
14
15
  };
15
- const _hoisted_4 = ["aria-label", "onPointerenter"];
16
+ const _hoisted_4 = ["tabindex", "aria-label", "onPointerenter", "onFocus", "onBlur", "onKeydown"];
16
17
  const _hoisted_5 = {
17
18
  key: 1,
18
19
  class: "flex items-center gap-2 text-xs text-muted"
@@ -33,7 +34,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
33
34
  endLabel: {},
34
35
  showUptime: { type: Boolean, default: true },
35
36
  title: {},
36
- colors: {}
37
+ colors: {},
38
+ labels: {}
37
39
  },
38
40
  setup(__props) {
39
41
  const props = __props;
@@ -46,13 +48,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
46
48
  };
47
49
  const opacityFor = (status) => status === "empty" ? 0.4 : 1;
48
50
  const colorFor = (status) => props.colors?.[status] ?? defaultColor[status];
49
- const statusLabel = {
50
- operational: "Operational",
51
- degraded: "Degraded",
52
- down: "Down",
53
- maintenance: "Maintenance",
54
- empty: "No data"
55
- };
51
+ const statusLabel = useLabels(
52
+ "uptimeBar",
53
+ {
54
+ operational: "Operational",
55
+ degraded: "Degraded",
56
+ down: "Down",
57
+ maintenance: "Maintenance",
58
+ empty: "No data"
59
+ },
60
+ () => props.labels
61
+ );
56
62
  const uptimePct = computed(() => {
57
63
  const tracked = props.segments.filter((s) => s.status !== "empty");
58
64
  if (!tracked.length) return null;
@@ -66,8 +72,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
66
72
  if (i == null) return null;
67
73
  const seg = props.segments[i];
68
74
  if (!seg) return null;
69
- return { status: seg.status, text: seg.label ?? statusLabel[seg.status] };
75
+ return { status: seg.status, text: seg.label ?? statusLabel.value[seg.status] };
70
76
  });
77
+ const focusIndex = ref(-1);
78
+ const slots = ref([]);
79
+ const tabStop = computed(
80
+ () => focusIndex.value >= 0 && focusIndex.value < props.segments.length ? focusIndex.value : props.segments.length - 1
81
+ );
82
+ function onSlotKeydown(e, i) {
83
+ const last = props.segments.length - 1;
84
+ const next = e.key === "ArrowRight" ? Math.min(last, i + 1) : e.key === "ArrowLeft" ? Math.max(0, i - 1) : e.key === "Home" ? 0 : e.key === "End" ? last : -1;
85
+ if (next < 0) return;
86
+ e.preventDefault();
87
+ focusIndex.value = next;
88
+ slots.value[next]?.focus();
89
+ }
71
90
  const uptimeDecimals = computed(() => {
72
91
  const v = uptimePct.value;
73
92
  if (v == null) return 0;
@@ -109,10 +128,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
109
128
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.segments, (seg, i) => {
110
129
  return openBlock(), createElementBlock("button", {
111
130
  key: i,
131
+ ref_for: true,
132
+ ref_key: "slots",
133
+ ref: slots,
112
134
  type: "button",
113
135
  class: "lp-uptime__slot min-w-0 flex-1 outline-none focus-visible:ring-2 focus-visible:ring-ring",
114
- "aria-label": seg.label ?? statusLabel[seg.status],
115
- onPointerenter: ($event) => hovered.value = i
136
+ tabindex: i === tabStop.value ? 0 : -1,
137
+ "aria-label": seg.label ?? unref(statusLabel)[seg.status],
138
+ onPointerenter: ($event) => hovered.value = i,
139
+ onFocus: ($event) => {
140
+ focusIndex.value = i;
141
+ hovered.value = i;
142
+ },
143
+ onBlur: ($event) => hovered.value === i && (hovered.value = null),
144
+ onKeydown: ($event) => onSlotKeydown($event, i)
116
145
  }, [
117
146
  createElementVNode("span", {
118
147
  class: "lp-uptime__mark block h-full rounded-[1px] transition-[opacity,scale] duration-[var(--duration-fast)] motion-reduce:transition-none",