@leavepulse/ui 0.43.4 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/README.md +121 -7
  2. package/dist/assets/{LpCommandPalette-B-0Est4Z.css → LpCommandPalette-nGNnzXqQ.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/{LpRollingText-CR1mb0Vt.css → LpRollingText-BGnE6q9j.css} +3 -0
  6. package/dist/assets/{LpShortcutsDialog-C6YoQ8_M.css → LpShortcutsDialog-CqYX3yy6.css} +28 -7
  7. package/dist/assets/{LpSkeleton-D7xU8IPV.css → LpSkeleton-H3Z5dEIk.css} +4 -1
  8. package/dist/assets/{LpTable-BgPLJOXa.css → LpTable-CPwWxTJS.css} +49 -9
  9. package/dist/chunks/ContextMenuItems-BtKU7074.js +124 -0
  10. package/dist/chunks/{LayoutCanvas-Dd20boUG.js → LayoutCanvas-BkaGXTjx.js} +26 -9
  11. package/dist/chunks/{LayoutNode-DGpZA9LX.js → LayoutNode-B3_9E1Xa.js} +28 -12
  12. package/dist/chunks/{LpActionBar-BlvtGB2P.js → LpActionBar-CnfFVIwC.js} +26 -12
  13. package/dist/chunks/{LpAddressInput-B-Zvxsn7.js → LpAddressInput-BwX8uo4_.js} +54 -49
  14. package/dist/chunks/{LpAlert-BAYHDSS1.js → LpAlert-B6ilrM7T.js} +16 -9
  15. package/dist/chunks/{LpAppShell-BGQVIY-3.js → LpAppShell-C53_RaGF.js} +53 -26
  16. package/dist/chunks/{LpAutocomplete-DExlIZe_.js → LpAutocomplete-C8IgSMsi.js} +52 -24
  17. package/dist/chunks/{LpAvatar-B3-xAOH3.js → LpAvatar-C1XStdOo.js} +19 -10
  18. package/dist/chunks/LpBreadcrumbs-CQJd73Gm.js +95 -0
  19. package/dist/chunks/{LpButton-5VXXCjwF.js → LpButton-CKSwC6Mu.js} +45 -15
  20. package/dist/chunks/{LpCalendar-B7Ko5RdR.js → LpCalendar-DrA2McTU.js} +1 -1
  21. package/dist/chunks/{LpCard-BhI1N_vL.js → LpCard-C2IvucmX.js} +1 -1
  22. package/dist/chunks/{LpCheckbox-CVccKYaH.js → LpCheckbox-Bkj13CbW.js} +8 -4
  23. package/dist/chunks/{LpCodeBlock-Bo0B4TFR.js → LpCodeBlock-ca7ANFyW.js} +49 -17
  24. package/dist/chunks/{LpColorPicker-BlXea7LM.js → LpColorPicker-zz4VGkG4.js} +75 -26
  25. package/dist/chunks/{LpConfirmDialog-Q-bxff8z.js → LpConfirmDialog-DCw5jR1t.js} +59 -17
  26. package/dist/chunks/LpConfirmHost-CbywMpMP.js +49 -0
  27. package/dist/chunks/LpContextMenu-BqkAYa9X.js +69 -0
  28. package/dist/chunks/LpDatePicker-DuusgT69.js +195 -0
  29. package/dist/chunks/LpDateRangePicker-DHeuznfC.js +208 -0
  30. package/dist/chunks/{LpDisclosure-ChQYmjlR.js → LpDisclosure-Cc23-JOT.js} +1 -1
  31. package/dist/chunks/{LpDrawer-BZ6k3hvo.js → LpDrawer-Dt4aB4Fr.js} +65 -28
  32. package/dist/chunks/{LpDropdownMenu-DJpoqRCb.js → LpDropdownMenu-DdJGQzPn.js} +2 -1
  33. package/dist/chunks/{LpEmptyState-Dsdqz1Wj.js → LpEmptyState-BJbZXC8D.js} +1 -1
  34. package/dist/chunks/LpFieldNotice-wtieLUTj.js +64 -0
  35. package/dist/chunks/{LpFileTree-_5vFBgaK.js → LpFileTree-CNurOvkV.js} +25 -10
  36. package/dist/chunks/{LpFileTreeNode-BdcIYKIE.js → LpFileTreeNode-D_qRRdsH.js} +3 -3
  37. package/dist/chunks/LpFormField-CtVYj6tO.js +101 -0
  38. package/dist/chunks/{LpIcon-CCnX5_2j.js → LpIcon-DYtaid0K.js} +20 -6
  39. package/dist/chunks/{LpInput-9EXWUM9B.js → LpInput-D-YGQbEv.js} +58 -20
  40. package/dist/chunks/{LpLightbox-2sYVMY-S.js → LpLightbox-DSDahF23.js} +148 -61
  41. package/dist/chunks/{LpLink-DCND-zyu.js → LpLink-Krkjhe_y.js} +15 -6
  42. package/dist/chunks/{LpLogViewer-CaRy5MeS.js → LpLogViewer-KypbgOyo.js} +300 -72
  43. package/dist/chunks/{LpMapPicker-ul4oYno6.js → LpMapPicker-Cc84LaM3.js} +39 -14
  44. package/dist/chunks/{LpMediaGallery-FF-NquIo.js → LpMediaGallery-YKr-cQPN.js} +7 -4
  45. package/dist/chunks/{LpModal-Bt0pQCI_.js → LpModal-DMMDQHAu.js} +52 -29
  46. package/dist/chunks/{LpModalNav-YaifHrXC.js → LpModalNav-BVPDyIup.js} +10 -7
  47. package/dist/chunks/{LpNotificationBell-DyGGsMAM.js → LpNotificationBell-CCwyJP5C.js} +79 -33
  48. package/dist/chunks/{LpNumberField-CWuX08iX.js → LpNumberField-B77O-z28.js} +21 -8
  49. package/dist/chunks/{LpNumberFlow-amWYaeuA.js → LpNumberFlow-z4WPZcZu.js} +22 -12
  50. package/dist/chunks/{LpOtpInput-y2v-pmiN.js → LpOtpInput-CziPF3Oq.js} +37 -8
  51. package/dist/chunks/{LpPagination-5FxjmmB5.js → LpPagination-BcDlo3r_.js} +31 -20
  52. package/dist/chunks/{LpPasswordInput--sjYCkLS.js → LpPasswordInput-eKzQhbQP.js} +11 -8
  53. package/dist/chunks/LpPhoneInput-BCbrrhgE.js +336 -0
  54. package/dist/chunks/{LpPie-D6OnzwlJ.js → LpPie-BEJ2SfI6.js} +84 -28
  55. package/dist/chunks/{LpPopover-8268UmlC.js → LpPopover-DCKeqiVn.js} +5 -2
  56. package/dist/chunks/{LpProgress-Btq5W4Ut.js → LpProgress-CBU1iI69.js} +5 -4
  57. package/dist/chunks/{LpRadioGroup-xPIuVDO_.js → LpRadioGroup-DmEW0l78.js} +9 -2
  58. package/dist/chunks/LpRangeCalendar-DZuaRV0W.js +331 -0
  59. package/dist/chunks/{LpRollingText-CM5gkSeF.js → LpRollingText-DB7upf-5.js} +1 -1
  60. package/dist/chunks/{LpScrollArea-D8xyKXcF.js → LpScrollArea-Bry1fdOM.js} +14 -2
  61. package/dist/chunks/{LpSection-aM6J_u51.js → LpSection-tKEH0jYf.js} +1 -1
  62. package/dist/chunks/{LpSegmented-fV0Sk92p.js → LpSegmented-C09EEam2.js} +8 -4
  63. package/dist/chunks/{LpSelect-ANIVtrpM.js → LpSelect-DNIL6MB9.js} +50 -31
  64. package/dist/chunks/{LpSidebar-ClBUwoEz.js → LpSidebar-CQNB0-yU.js} +30 -22
  65. package/dist/chunks/{LpSidebarNav-llOcs_Fn.js → LpSidebarNav-kx-LdqNU.js} +16 -11
  66. package/dist/chunks/{LpSkeleton-CTI-vBgW.js → LpSkeleton-BB6XIV-w.js} +1 -1
  67. package/dist/chunks/{LpSlider-BwNIBkAK.js → LpSlider-Cuzmrd7p.js} +7 -2
  68. package/dist/chunks/{LpSparkline-C6xQ2dwv.js → LpSparkline-CB80N8SJ.js} +11 -4
  69. package/dist/chunks/{LpStat-CQaW8R--.js → LpStat-B-7udBRP.js} +2 -2
  70. package/dist/chunks/{LpStepper-Bk-XaQYU.js → LpStepper-C7XiVKZj.js} +34 -19
  71. package/dist/chunks/{LpSwitch-Blizvqyt.js → LpSwitch-OrcOJX9m.js} +41 -27
  72. package/dist/chunks/LpTableFilter-BV8PpLM9.js +158 -0
  73. package/dist/chunks/{LpTableOfContents-CjvxPMpU.js → LpTableOfContents-BUcAfGPQ.js} +36 -41
  74. package/dist/chunks/{LpTabs-Cefe_lys.js → LpTabs-29iW1XOx.js} +20 -6
  75. package/dist/chunks/LpTagsInput-D1SuqbhB.js +300 -0
  76. package/dist/chunks/LpTextarea-uuScWo6-.js +77 -0
  77. package/dist/chunks/LpThemeProvider-Be4r2TQX.js +35 -0
  78. package/dist/chunks/LpThemeSwitcher-B4aVPbNC.js +166 -0
  79. package/dist/chunks/{LpTilt-DuyKbpkA.js → LpTilt-B7KHX1zH.js} +2 -2
  80. package/dist/chunks/{LpTimeField-K6nAGboX.js → LpTimeField-Cqe7fXnh.js} +14 -8
  81. package/dist/chunks/{LpToaster-gDB1EaU3.js → LpToaster-DpJvoCOh.js} +94 -31
  82. package/dist/chunks/{LpTooltip-hCLPAqMG.js → LpTooltip-CXVKcOXT.js} +14 -6
  83. package/dist/chunks/LpTooltipProvider-CftjV7Xc.js +25 -0
  84. package/dist/chunks/{LpTopologyCanvas-Cm1L39uL.js → LpTopologyCanvas-6ozNrQKh.js} +8 -2
  85. package/dist/chunks/{LpUptimeBar-DvAMno0S.js → LpUptimeBar-ugcv25xj.js} +44 -15
  86. package/dist/chunks/icons-CkA0njzm.js +43 -0
  87. package/dist/chunks/{LpThemeSwitcher-Cue-myST.js → useTheme-DJm1JSsY.js} +215 -260
  88. package/dist/component-names.d.ts +1 -1
  89. package/dist/components/ContextMenuItems.vue.d.ts +8 -0
  90. package/dist/components/ContextMenuItems.vue.js +4 -0
  91. package/dist/components/LayoutCanvas.vue.js +1 -1
  92. package/dist/components/LayoutNode.vue.d.ts +4 -0
  93. package/dist/components/LayoutNode.vue.js +1 -1
  94. package/dist/components/LpActionBar.vue.d.ts +3 -0
  95. package/dist/components/LpActionBar.vue.js +1 -1
  96. package/dist/components/LpAddressInput.vue.d.ts +1 -1
  97. package/dist/components/LpAddressInput.vue.js +1 -1
  98. package/dist/components/LpAlert.vue.d.ts +9 -0
  99. package/dist/components/LpAlert.vue.js +1 -1
  100. package/dist/components/LpAppShell.vue.d.ts +10 -0
  101. package/dist/components/LpAppShell.vue.js +1 -1
  102. package/dist/components/LpAutocomplete.vue.d.ts +31 -6
  103. package/dist/components/LpAutocomplete.vue.js +1 -1
  104. package/dist/components/LpAvatar.vue.d.ts +3 -3
  105. package/dist/components/LpAvatar.vue.js +1 -1
  106. package/dist/components/LpBadge.vue.d.ts +2 -2
  107. package/dist/components/LpBreadcrumbs.vue.d.ts +13 -9
  108. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  109. package/dist/components/LpButton.vue.d.ts +35 -98
  110. package/dist/components/LpButton.vue.js +1 -1
  111. package/dist/components/LpCalendar.vue.js +1 -1
  112. package/dist/components/LpCard.vue.js +1 -1
  113. package/dist/components/LpChart.vue.d.ts +47 -3
  114. package/dist/components/LpChart.vue.js +377 -97
  115. package/dist/components/LpCheckbox.vue.js +1 -1
  116. package/dist/components/LpCodeBlock.vue.d.ts +2 -0
  117. package/dist/components/LpCodeBlock.vue.js +1 -1
  118. package/dist/components/LpColorPicker.vue.d.ts +2 -2
  119. package/dist/components/LpColorPicker.vue.js +1 -1
  120. package/dist/components/LpCommandPalette.vue.d.ts +14 -3
  121. package/dist/components/LpCommandPalette.vue.js +142 -77
  122. package/dist/components/LpConfirmDialog.vue.d.ts +15 -3
  123. package/dist/components/LpConfirmDialog.vue.js +1 -1
  124. package/dist/components/LpConfirmHost.vue.d.ts +9 -0
  125. package/dist/components/LpConfirmHost.vue.js +4 -0
  126. package/dist/components/LpContextMenu.vue.d.ts +3 -5
  127. package/dist/components/LpContextMenu.vue.js +1 -1
  128. package/dist/components/LpDatePicker.vue.d.ts +24 -6
  129. package/dist/components/LpDatePicker.vue.js +1 -1
  130. package/dist/components/LpDateRangePicker.vue.d.ts +60 -0
  131. package/dist/components/LpDateRangePicker.vue.js +4 -0
  132. package/dist/components/LpDisclosure.vue.js +1 -1
  133. package/dist/components/LpDrawer.vue.d.ts +10 -0
  134. package/dist/components/LpDrawer.vue.js +1 -1
  135. package/dist/components/LpDropdownMenu.vue.js +1 -1
  136. package/dist/components/LpDropzone.vue.js +23 -7
  137. package/dist/components/LpEmptyState.vue.js +1 -1
  138. package/dist/components/LpFieldNotice.vue.d.ts +8 -0
  139. package/dist/components/LpFieldNotice.vue.js +4 -0
  140. package/dist/components/LpFileTree.vue.d.ts +11 -2
  141. package/dist/components/LpFileTree.vue.js +1 -1
  142. package/dist/components/LpFileTreeNode.vue.js +1 -1
  143. package/dist/components/LpFormField.vue.d.ts +13 -1
  144. package/dist/components/LpFormField.vue.js +1 -1
  145. package/dist/components/LpIcon.vue.d.ts +0 -1
  146. package/dist/components/LpIcon.vue.js +1 -1
  147. package/dist/components/LpImageEditor.vue.js +93 -58
  148. package/dist/components/LpInput.vue.d.ts +22 -3
  149. package/dist/components/LpInput.vue.js +1 -1
  150. package/dist/components/LpLightbox.vue.d.ts +17 -0
  151. package/dist/components/LpLightbox.vue.js +1 -1
  152. package/dist/components/LpLink.vue.d.ts +11 -11
  153. package/dist/components/LpLink.vue.js +1 -1
  154. package/dist/components/LpLogViewer.vue.d.ts +72 -3
  155. package/dist/components/LpLogViewer.vue.js +1 -1
  156. package/dist/components/LpMapPicker.vue.d.ts +4 -4
  157. package/dist/components/LpMapPicker.vue.js +1 -1
  158. package/dist/components/LpMediaGallery.vue.js +1 -1
  159. package/dist/components/LpModal.vue.d.ts +16 -6
  160. package/dist/components/LpModal.vue.js +1 -1
  161. package/dist/components/LpModalNav.vue.d.ts +0 -1
  162. package/dist/components/LpModalNav.vue.js +1 -1
  163. package/dist/components/LpNotificationBell.vue.d.ts +11 -2
  164. package/dist/components/LpNotificationBell.vue.js +1 -1
  165. package/dist/components/LpNumberField.vue.d.ts +2 -0
  166. package/dist/components/LpNumberField.vue.js +1 -1
  167. package/dist/components/LpNumberFlow.vue.js +1 -1
  168. package/dist/components/LpOtpInput.vue.js +1 -1
  169. package/dist/components/LpPagination.vue.d.ts +2 -0
  170. package/dist/components/LpPagination.vue.js +1 -1
  171. package/dist/components/LpPasswordInput.vue.js +1 -1
  172. package/dist/components/LpPhoneInput.vue.d.ts +13 -0
  173. package/dist/components/LpPhoneInput.vue.js +1 -1
  174. package/dist/components/LpPie.vue.d.ts +21 -2
  175. package/dist/components/LpPie.vue.js +1 -1
  176. package/dist/components/LpPopover.vue.d.ts +2 -0
  177. package/dist/components/LpPopover.vue.js +1 -1
  178. package/dist/components/LpProgress.vue.d.ts +1 -1
  179. package/dist/components/LpProgress.vue.js +1 -1
  180. package/dist/components/LpRadioGroup.vue.js +1 -1
  181. package/dist/components/LpRangeCalendar.vue.d.ts +51 -0
  182. package/dist/components/LpRangeCalendar.vue.js +4 -0
  183. package/dist/components/LpRollingText.vue.d.ts +1 -1
  184. package/dist/components/LpRollingText.vue.js +1 -1
  185. package/dist/components/LpScrollArea.vue.d.ts +2 -2
  186. package/dist/components/LpScrollArea.vue.js +1 -1
  187. package/dist/components/LpSection.vue.d.ts +1 -1
  188. package/dist/components/LpSection.vue.js +1 -1
  189. package/dist/components/LpSegmented.vue.d.ts +5 -0
  190. package/dist/components/LpSegmented.vue.js +1 -1
  191. package/dist/components/LpSelect.vue.d.ts +1 -0
  192. package/dist/components/LpSelect.vue.js +1 -1
  193. package/dist/components/LpShortcutsDialog.vue.d.ts +7 -1
  194. package/dist/components/LpShortcutsDialog.vue.js +60 -15
  195. package/dist/components/LpSidebar.vue.d.ts +6 -2
  196. package/dist/components/LpSidebar.vue.js +1 -1
  197. package/dist/components/LpSidebarNav.vue.js +1 -1
  198. package/dist/components/LpSkeleton.vue.js +1 -1
  199. package/dist/components/LpSlider.vue.js +1 -1
  200. package/dist/components/LpSparkline.vue.d.ts +1 -0
  201. package/dist/components/LpSparkline.vue.js +1 -1
  202. package/dist/components/LpStat.vue.js +1 -1
  203. package/dist/components/LpStepper.vue.js +1 -1
  204. package/dist/components/LpSwitch.vue.js +1 -1
  205. package/dist/components/LpTable.vue.d.ts +107 -3
  206. package/dist/components/LpTable.vue.js +540 -128
  207. package/dist/components/LpTableFilter.vue.d.ts +31 -0
  208. package/dist/components/LpTableFilter.vue.js +4 -0
  209. package/dist/components/LpTableOfContents.vue.d.ts +4 -2
  210. package/dist/components/LpTableOfContents.vue.js +1 -1
  211. package/dist/components/LpTabs.vue.d.ts +2 -0
  212. package/dist/components/LpTabs.vue.js +1 -1
  213. package/dist/components/LpTagsInput.vue.d.ts +77 -0
  214. package/dist/components/LpTagsInput.vue.js +4 -0
  215. package/dist/components/LpTextarea.vue.d.ts +19 -6
  216. package/dist/components/LpTextarea.vue.js +1 -1
  217. package/dist/components/LpThemeProvider.vue.d.ts +22 -0
  218. package/dist/components/LpThemeProvider.vue.js +4 -0
  219. package/dist/components/LpThemeSwitcher.vue.d.ts +15 -2
  220. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  221. package/dist/components/LpTilt.vue.js +1 -1
  222. package/dist/components/LpTimeField.vue.js +1 -1
  223. package/dist/components/LpToaster.vue.d.ts +6 -1
  224. package/dist/components/LpToaster.vue.js +1 -1
  225. package/dist/components/LpTooltip.vue.d.ts +1 -2
  226. package/dist/components/LpTooltip.vue.js +1 -1
  227. package/dist/components/LpTooltipProvider.vue.d.ts +22 -0
  228. package/dist/components/LpTooltipProvider.vue.js +4 -0
  229. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  230. package/dist/components/LpUptimeBar.vue.d.ts +4 -0
  231. package/dist/components/LpUptimeBar.vue.js +1 -1
  232. package/dist/components/chart.d.ts +32 -1
  233. package/dist/components/chart.js +42 -6
  234. package/dist/components/codeHighlight.d.ts +6 -0
  235. package/dist/components/codeHighlight.js +92 -20
  236. package/dist/components/color.d.ts +1 -1
  237. package/dist/components/color.js +20 -9
  238. package/dist/components/commandSearch.js +3 -0
  239. package/dist/components/confirm.d.ts +25 -0
  240. package/dist/components/confirm.js +26 -0
  241. package/dist/components/countries.d.ts +6 -0
  242. package/dist/components/countries.js +7 -0
  243. package/dist/components/dateRange.d.ts +43 -0
  244. package/dist/components/dateRange.js +76 -0
  245. package/dist/components/exportData.d.ts +58 -0
  246. package/dist/components/exportData.js +165 -0
  247. package/dist/components/fileTree.js +16 -7
  248. package/dist/components/imageCrop.d.ts +42 -0
  249. package/dist/components/imageCrop.js +47 -0
  250. package/dist/components/link.d.ts +12 -0
  251. package/dist/components/link.js +19 -0
  252. package/dist/components/logSearch.d.ts +18 -0
  253. package/dist/components/logSearch.js +36 -0
  254. package/dist/components/modalDepth.d.ts +18 -2
  255. package/dist/components/modalDepth.js +17 -5
  256. package/dist/components/otp.d.ts +5 -0
  257. package/dist/components/otp.js +10 -0
  258. package/dist/components/phone.d.ts +41 -0
  259. package/dist/components/phone.js +80 -0
  260. package/dist/components/sidebar.d.ts +7 -1
  261. package/dist/components/tableFilter.d.ts +36 -0
  262. package/dist/components/tableFilter.js +84 -0
  263. package/dist/components/tableSort.d.ts +8 -0
  264. package/dist/components/tableSort.js +31 -0
  265. package/dist/components/tags.d.ts +20 -0
  266. package/dist/components/tags.js +37 -0
  267. package/dist/composables/useField.d.ts +38 -0
  268. package/dist/composables/useField.js +45 -0
  269. package/dist/composables/useFieldNotice.d.ts +17 -0
  270. package/dist/composables/useFieldNotice.js +28 -0
  271. package/dist/composables/useForm.d.ts +53 -0
  272. package/dist/composables/useForm.js +207 -0
  273. package/dist/composables/useFormDraft.d.ts +10 -3
  274. package/dist/composables/useFormDraft.js +9 -14
  275. package/dist/composables/useHotkeys.d.ts +81 -5
  276. package/dist/composables/useHotkeys.js +223 -25
  277. package/dist/composables/useInputFilter.d.ts +17 -0
  278. package/dist/composables/useInputFilter.js +47 -10
  279. package/dist/composables/useInputMask.d.ts +59 -0
  280. package/dist/composables/useInputMask.js +170 -0
  281. package/dist/composables/useLpConfig.d.ts +24 -0
  282. package/dist/composables/useLpConfig.js +44 -0
  283. package/dist/composables/usePaintSelect.d.ts +22 -0
  284. package/dist/composables/usePaintSelect.js +169 -0
  285. package/dist/composables/useRovingFocus.js +7 -0
  286. package/dist/composables/useShift.js +7 -2
  287. package/dist/composables/useTilt.d.ts +2 -2
  288. package/dist/composables/useTilt.js +5 -6
  289. package/dist/composables/useToast.d.ts +20 -0
  290. package/dist/composables/useToast.js +28 -4
  291. package/dist/composables/useZoomPan.d.ts +3 -3
  292. package/dist/composables/useZoomPan.js +4 -4
  293. package/dist/icons-all.d.ts +1 -0
  294. package/dist/icons-all.js +3 -0
  295. package/dist/icons.d.ts +14 -1
  296. package/dist/index.d.ts +60 -4
  297. package/dist/index.js +245 -141
  298. package/dist/kit-icons.d.ts +2 -0
  299. package/dist/layout/tree.d.ts +2 -0
  300. package/dist/layout/tree.js +16 -1
  301. package/dist/layout/useLayout.d.ts +15 -0
  302. package/dist/layout/useLayout.js +41 -14
  303. package/dist/theme/backdrop.d.ts +12 -0
  304. package/dist/theme/presets.d.ts +0 -2
  305. package/dist/theme/useTheme.d.ts +32 -9
  306. package/package.json +18 -8
  307. package/src/component-names.ts +9 -7
  308. package/src/components/ContextMenuItems.vue +88 -0
  309. package/src/components/LayoutCanvas.vue +26 -6
  310. package/src/components/LayoutNode.vue +30 -4
  311. package/src/components/LpActionBar.vue +31 -8
  312. package/src/components/LpAddressInput.vue +57 -41
  313. package/src/components/LpAlert.vue +16 -3
  314. package/src/components/LpAppShell.vue +45 -12
  315. package/src/components/LpAutocomplete.vue +47 -10
  316. package/src/components/LpAvatar.vue +20 -6
  317. package/src/components/LpBreadcrumbs.vue +65 -41
  318. package/src/components/LpButton.vue +60 -14
  319. package/src/components/LpChart.vue +351 -28
  320. package/src/components/LpCheckbox.vue +7 -3
  321. package/src/components/LpCodeBlock.vue +50 -14
  322. package/src/components/LpColorPicker.vue +73 -10
  323. package/src/components/LpCommandPalette.vue +115 -20
  324. package/src/components/LpConfirmDialog.vue +68 -17
  325. package/src/components/LpConfirmHost.vue +59 -0
  326. package/src/components/LpContextMenu.vue +15 -116
  327. package/src/components/LpDatePicker.vue +104 -68
  328. package/src/components/LpDateRangePicker.vue +224 -0
  329. package/src/components/LpDrawer.vue +56 -19
  330. package/src/components/LpDropdownMenu.vue +1 -0
  331. package/src/components/LpDropzone.vue +21 -4
  332. package/src/components/LpFieldNotice.vue +65 -0
  333. package/src/components/LpFileTree.vue +33 -7
  334. package/src/components/LpFormField.vue +59 -7
  335. package/src/components/LpIcon.vue +22 -4
  336. package/src/components/LpImageEditor.vue +96 -57
  337. package/src/components/LpInput.vue +62 -11
  338. package/src/components/LpLightbox.vue +140 -29
  339. package/src/components/LpLink.vue +24 -13
  340. package/src/components/LpLogViewer.vue +311 -39
  341. package/src/components/LpMapPicker.vue +36 -13
  342. package/src/components/LpMediaGallery.vue +8 -2
  343. package/src/components/LpModal.vue +54 -28
  344. package/src/components/LpModalNav.vue +5 -2
  345. package/src/components/LpNotificationBell.vue +77 -23
  346. package/src/components/LpNumberField.vue +21 -6
  347. package/src/components/LpNumberFlow.vue +26 -10
  348. package/src/components/LpOtpInput.vue +43 -8
  349. package/src/components/LpPagination.vue +23 -7
  350. package/src/components/LpPasswordInput.vue +4 -1
  351. package/src/components/LpPhoneInput.vue +224 -39
  352. package/src/components/LpPie.vue +102 -20
  353. package/src/components/LpPopover.vue +4 -0
  354. package/src/components/LpProgress.vue +5 -3
  355. package/src/components/LpRadioGroup.vue +9 -2
  356. package/src/components/LpRangeCalendar.vue +365 -0
  357. package/src/components/LpRollingText.vue +3 -0
  358. package/src/components/LpScrollArea.vue +22 -2
  359. package/src/components/LpSegmented.vue +12 -2
  360. package/src/components/LpSelect.vue +0 -0
  361. package/src/components/LpShortcutsDialog.vue +83 -9
  362. package/src/components/LpSidebar.vue +14 -9
  363. package/src/components/LpSidebarNav.vue +17 -5
  364. package/src/components/LpSkeleton.vue +4 -1
  365. package/src/components/LpSlider.vue +7 -1
  366. package/src/components/LpSparkline.vue +11 -3
  367. package/src/components/LpStepper.vue +23 -10
  368. package/src/components/LpSwitch.vue +31 -8
  369. package/src/components/LpTable.vue +668 -90
  370. package/src/components/LpTableFilter.vue +175 -0
  371. package/src/components/LpTableOfContents.vue +50 -32
  372. package/src/components/LpTabs.vue +23 -6
  373. package/src/components/LpTagsInput.vue +364 -0
  374. package/src/components/LpTextarea.vue +44 -6
  375. package/src/components/LpThemeProvider.vue +41 -0
  376. package/src/components/LpThemeSwitcher.vue +76 -33
  377. package/src/components/LpTilt.vue +2 -2
  378. package/src/components/LpTimeField.vue +14 -3
  379. package/src/components/LpToaster.vue +115 -27
  380. package/src/components/LpTooltip.vue +29 -5
  381. package/src/components/LpTooltipProvider.vue +24 -0
  382. package/src/components/LpTopologyCanvas.vue +19 -2
  383. package/src/components/LpUptimeBar.vue +46 -8
  384. package/src/components/chart.ts +82 -8
  385. package/src/components/codeHighlight.ts +111 -15
  386. package/src/components/color.ts +30 -9
  387. package/src/components/commandSearch.ts +6 -0
  388. package/src/components/confirm.ts +58 -0
  389. package/src/components/countries.ts +12 -0
  390. package/src/components/dateRange.ts +134 -0
  391. package/src/components/exportData.ts +228 -0
  392. package/src/components/fileTree.ts +19 -7
  393. package/src/components/imageCrop.ts +107 -0
  394. package/src/components/link.ts +34 -0
  395. package/src/components/logSearch.ts +46 -0
  396. package/src/components/modalDepth.ts +48 -6
  397. package/src/components/otp.ts +16 -0
  398. package/src/components/phone.ts +140 -0
  399. package/src/components/sidebar.ts +7 -1
  400. package/src/components/tableFilter.ts +122 -0
  401. package/src/components/tableSort.ts +37 -0
  402. package/src/components/tags.ts +62 -0
  403. package/src/composables/useField.ts +83 -0
  404. package/src/composables/useFieldNotice.ts +59 -0
  405. package/src/composables/useForm.ts +314 -0
  406. package/src/composables/useFormDraft.ts +25 -20
  407. package/src/composables/useHotkeys.ts +355 -28
  408. package/src/composables/useInputFilter.ts +77 -14
  409. package/src/composables/useInputMask.ts +254 -0
  410. package/src/composables/useLpConfig.ts +87 -0
  411. package/src/composables/usePaintSelect.ts +243 -0
  412. package/src/composables/useRovingFocus.ts +11 -0
  413. package/src/composables/useShift.ts +13 -2
  414. package/src/composables/useTilt.ts +5 -6
  415. package/src/composables/useToast.ts +56 -4
  416. package/src/composables/useZoomPan.ts +6 -6
  417. package/src/iconSubset.d.mts +10 -0
  418. package/src/iconSubset.mjs +51 -0
  419. package/src/icons-all.ts +10 -0
  420. package/src/icons.ts +59 -8
  421. package/src/index.ts +73 -4
  422. package/src/kit-icons.ts +5 -0
  423. package/src/layout/tree.ts +30 -0
  424. package/src/layout/useLayout.ts +68 -18
  425. package/src/nuxt.ts +87 -17
  426. package/src/runtime/config.plugin.ts +14 -0
  427. package/src/runtime/theme.plugin.ts +43 -23
  428. package/src/theme/backdrop.ts +69 -0
  429. package/src/theme/presets.ts +6 -64
  430. package/src/theme/useTheme.ts +206 -100
  431. package/src/tokens/tokens.css +46 -0
  432. package/dist/chunks/LpBreadcrumbs-p4jHe_V-.js +0 -62
  433. package/dist/chunks/LpContextMenu-CwW1QXe_.js +0 -217
  434. package/dist/chunks/LpDatePicker-CwOToxGq.js +0 -164
  435. package/dist/chunks/LpFormField-CazBc2-a.js +0 -62
  436. package/dist/chunks/LpPhoneInput-BDSKVl_z.js +0 -209
  437. package/dist/chunks/LpTextarea-t7F6gv8E.js +0 -47
@@ -31,6 +31,16 @@ import LpRollingText from "./LpRollingText.vue"
31
31
  import LpShift from "./LpShift.vue"
32
32
  import LpTooltip from "./LpTooltip.vue"
33
33
  import { useMergedAttrs } from "../composables/useMergedClass"
34
+ import { useLabels } from "../composables/useLpConfig"
35
+
36
+ export interface PieText {
37
+ [key: string]: string
38
+ empty: string
39
+ other: string
40
+ total: string
41
+ /** "{n} selected"; `{n}` is replaced by the count. */
42
+ selected: string
43
+ }
34
44
 
35
45
  /** A slice, as reported by every interaction event. */
36
46
  export interface SliceEvent {
@@ -107,21 +117,26 @@ const props = withDefaults(
107
117
  */
108
118
  menuItems?: (slice: SliceEvent, selection: SliceEvent[]) => ContextMenuItemDef[]
109
119
  emptyLabel?: string
120
+ /** Accessible name for the chart. Defaults to a generated summary. */
121
+ ariaLabel?: string
122
+ /** Render the slices as a visually hidden table for screen readers. */
123
+ dataTable?: boolean
124
+ /** Text overrides (`labels` is taken by the callout switch). */
125
+ text?: Partial<PieText>
110
126
  }>(),
111
127
  {
112
128
  type: "donut",
113
129
  size: 180,
114
130
  innerRatio: 0.62,
115
131
  maxSlices: 6,
116
- otherLabel: "Other",
117
132
  showPercent: true,
118
133
  showTotal: true,
119
134
  labelWidth: 140,
120
135
  padAngle: 1.5,
121
136
  cornerRadius: 4,
122
137
  hoverOffset: 8,
123
- emptyLabel: "No data",
124
138
  animate: true,
139
+ dataTable: false,
125
140
  duration: 900,
126
141
  },
127
142
  )
@@ -134,11 +149,17 @@ const emit = defineEmits<{
134
149
  (e: "sliceContextMenu", payload: SliceEvent): void
135
150
  }>()
136
151
 
152
+ const strings = useLabels<PieText>(
153
+ "pie",
154
+ { empty: "No data", other: "Other", total: "total", selected: "{n} selected" },
155
+ () => props.text,
156
+ )
157
+
137
158
  const resolved = computed(() =>
138
159
  resolveSlices(
139
160
  props.slices,
140
161
  props.maxSlices || undefined,
141
- props.otherLabel,
162
+ props.otherLabel ?? strings.value.other,
142
163
  !props.sortBySize,
143
164
  ),
144
165
  )
@@ -336,6 +357,23 @@ const dragging = ref(false)
336
357
 
337
358
  const isSelected = (i: number) => selected.value.has(i)
338
359
 
360
+ /*
361
+ * Indices only mean something against the slices they were taken from. When
362
+ * the data changes shape, a selection or hover pointing past the end would read
363
+ * a slice that no longer exists, so anything out of range is dropped.
364
+ */
365
+ watch(
366
+ () => arcs.value.length,
367
+ (n) => {
368
+ if (active.value >= n) active.value = -1
369
+ if (anchor.value >= n) anchor.value = -1
370
+ if ([...selected.value].some((i) => i >= n)) {
371
+ selected.value = new Set([...selected.value].filter((i) => i < n))
372
+ emitSelection()
373
+ }
374
+ },
375
+ )
376
+
339
377
  const payloadFor = (i: number) => {
340
378
  const a = arcs.value[i]
341
379
  return { index: i, label: a.label, value: a.value, isOther: a.isOther }
@@ -354,7 +392,9 @@ const rangeTo = (i: number) => {
354
392
  return next
355
393
  }
356
394
 
357
- const onSlicePointerDown = (i: number, e: PointerEvent) => {
395
+ type Modifiers = Pick<MouseEvent, "button" | "shiftKey" | "ctrlKey" | "metaKey">
396
+
397
+ const onSlicePointerDown = (i: number, e: Modifiers, drag = true) => {
358
398
  // Right-click opens a menu; it must not disturb a selection the menu acts on.
359
399
  if (e.button === 2) return
360
400
 
@@ -372,12 +412,18 @@ const onSlicePointerDown = (i: number, e: PointerEvent) => {
372
412
  const only = selected.value.size === 1 && selected.value.has(i)
373
413
  selected.value = only ? new Set() : new Set([i])
374
414
  anchor.value = only ? -1 : i
375
- if (!only) beginDrag()
415
+ if (!only && drag) beginDrag()
376
416
  }
377
417
  emitSelection()
378
418
  emit("sliceClick", payloadFor(i))
379
419
  }
380
420
 
421
+ /* Enter and Space on a legend entry arrive as a click with no pointer behind
422
+ it (detail 0); pointer clicks were already handled on pointerdown. */
423
+ const onLegendClick = (i: number, e: MouseEvent) => {
424
+ if (e.detail === 0) onSlicePointerDown(i, e, false)
425
+ }
426
+
381
427
  /** Drag across slices to gather them — same gesture as a rubber-band in a list. */
382
428
  const onSlicePointerEnter = (i: number) => {
383
429
  clearTimeout(leaveTimer)
@@ -516,8 +562,10 @@ const onSliceContextMenu = (i: number) => {
516
562
 
517
563
  /** The slice the centre reads out: the hovered one, else a lone selection. */
518
564
  const focused = computed(() => {
519
- if (active.value >= 0) return active.value
520
- return selected.value.size === 1 ? [...selected.value][0] : -1
565
+ const n = arcs.value.length
566
+ if (active.value >= 0 && active.value < n) return active.value
567
+ const only = selected.value.size === 1 ? [...selected.value][0] : -1
568
+ return only < n ? only : -1
521
569
  })
522
570
 
523
571
  /** Unselected slices only recede once something is actually selected. */
@@ -526,11 +574,14 @@ const dimmed = (i: number) => selected.value.size > 0 && !selected.value.has(i)
526
574
  const total = computed(() => resolved.value.total)
527
575
 
528
576
  const selectedArcs = computed(() =>
529
- [...selected.value].sort((x, y) => x - y).map((i) => arcs.value[i]),
577
+ [...selected.value]
578
+ .sort((x, y) => x - y)
579
+ .filter((i) => i < arcs.value.length)
580
+ .map((i) => arcs.value[i]),
530
581
  )
531
582
 
532
583
  /** The slice under the pointer; null over the gaps, which disables the tip. */
533
- const hovered = computed(() => (active.value >= 0 ? arcs.value[active.value] : null))
584
+ const hovered = computed(() => arcs.value[active.value] ?? null)
534
585
 
535
586
  /* Sticky copy for the tooltip's own contents: `hovered` drops to null the
536
587
  instant the pointer leaves a slice, and reading it directly would blank the
@@ -550,10 +601,22 @@ const centreValue = computed(() => {
550
601
 
551
602
  const centreLabel = computed(() => {
552
603
  if (focused.value >= 0) return arcs.value[focused.value].label
553
- if (selected.value.size > 1) return `${selected.value.size} selected`
554
- return "total"
604
+ if (selected.value.size > 1)
605
+ return strings.value.selected.replace("{n}", String(selected.value.size))
606
+ return strings.value.total
555
607
  })
556
608
 
609
+ const summary = computed(
610
+ () =>
611
+ props.ariaLabel ??
612
+ [
613
+ props.title,
614
+ ...arcs.value.map((a) => `${a.label}: ${fmt(a.value)} (${pct(a.fraction)})`),
615
+ ]
616
+ .filter(Boolean)
617
+ .join(", "),
618
+ )
619
+
557
620
  // The pie sets its own gap between chart and legend, which a narrow card has to close up.
558
621
  const { class: rootClass, attrs: rest } = useMergedAttrs(
559
622
  "flex flex-col gap-3",
@@ -575,7 +638,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
575
638
  :style="{ width: `${size}px`, height: `${size}px` }"
576
639
  >
577
640
  <LpIcon name="lucide:chart-pie" :size="18" />
578
- <span class="text-xs">{{ emptyLabel }}</span>
641
+ <span class="text-xs">{{ emptyLabel ?? strings.empty }}</span>
579
642
  </div>
580
643
 
581
644
  <!-- items-start, not items-center: an unfolded legend can be taller than
@@ -634,16 +697,21 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
634
697
  </span>
635
698
  </LpShift>
636
699
  </template>
700
+ <!-- The canvas keeps its natural size where there is room and scales
701
+ down as a whole where there is not (a phone, a narrow column):
702
+ the callout labels widen the box well past the circle, and at a
703
+ fixed width they ran off the screen. -->
637
704
  <div
638
- class="relative shrink-0"
639
- :style="{ width: `${canvasWidth}px`, height: `${canvasHeight}px` }"
705
+ class="relative max-w-full shrink-0 max-sm:mx-auto"
706
+ :style="{ width: `${canvasWidth}px`, aspectRatio: `${canvasWidth} / ${canvasHeight}` }"
640
707
  >
641
708
  <!-- Clicking the empty middle (or the gaps) clears, so a selection can
642
709
  be dropped without hunting for somewhere outside the chart. -->
643
710
  <svg
644
- :width="canvasWidth"
645
- :height="canvasHeight"
646
- class="touch-none select-none"
711
+ :viewBox="`0 0 ${canvasWidth} ${canvasHeight}`"
712
+ class="block size-full touch-none select-none"
713
+ role="img"
714
+ :aria-label="summary"
647
715
  @pointerleave="leaveChart"
648
716
  @pointerup="endDrag"
649
717
  @click.self="clearSelection"
@@ -672,7 +740,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
672
740
  <g :clip-path="animate ? `url(#${sweepId}-sweep)` : undefined">
673
741
  <path
674
742
  v-for="(a, i) in arcs"
675
- :key="a.label"
743
+ :key="`${i}-${a.label}`"
676
744
  :d="a.d"
677
745
  :fill="a.color"
678
746
  class="pointer-events-none transition-[transform,opacity] duration-medium ease-[var(--ease-emphasized)] motion-reduce:transition-none"
@@ -684,7 +752,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
684
752
  <!-- Invisible, unmoving, and on top: the actual hit area. -->
685
753
  <path
686
754
  v-for="(a, i) in arcs"
687
- :key="`hit-${a.label}`"
755
+ :key="`hit-${i}-${a.label}`"
688
756
  :d="a.d"
689
757
  fill="transparent"
690
758
  class="cursor-pointer"
@@ -765,7 +833,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
765
833
  <div v-if="legendShown" class="flex min-w-0 flex-col gap-1.5" @pointerup="endDrag">
766
834
  <button
767
835
  v-for="(a, i) in arcs"
768
- :key="a.label"
836
+ :key="`${i}-${a.label}`"
769
837
  type="button"
770
838
  class="group flex cursor-pointer items-center gap-2 rounded-md px-1 py-0.5 text-xs outline-none transition-[opacity,background-color] duration-fast focus-visible:ring-2 focus-visible:ring-ring"
771
839
  :class="[dimmed(i) ? 'opacity-45' : '', isSelected(i) ? 'bg-surface-soft' : '']"
@@ -773,6 +841,9 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
773
841
  @pointerenter="onSlicePointerEnter(i)"
774
842
  @pointerleave="onSlicePointerLeave(i)"
775
843
  @pointerdown="onSlicePointerDown(i, $event)"
844
+ @click="onLegendClick(i, $event)"
845
+ @focus="active = i"
846
+ @blur="active === i && (active = -1)"
776
847
  @contextmenu="onSliceContextMenu(i)"
777
848
  >
778
849
  <span
@@ -789,5 +860,16 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
789
860
  </div>
790
861
  </div>
791
862
  </LpContextMenu>
863
+
864
+ <table v-if="dataTable && hasData" class="sr-only">
865
+ <caption v-if="title">{{ title }}</caption>
866
+ <tbody>
867
+ <tr v-for="(a, i) in arcs" :key="`${i}-${a.label}`">
868
+ <th scope="row">{{ a.label }}</th>
869
+ <td>{{ fmt(a.value) }}</td>
870
+ <td>{{ pct(a.fraction) }}</td>
871
+ </tr>
872
+ </tbody>
873
+ </table>
792
874
  </div>
793
875
  </template>
@@ -14,6 +14,8 @@ withDefaults(
14
14
  sideOffset?: number
15
15
  /** Extra classes for the floating panel (width, padding, overflow). */
16
16
  panelClass?: string
17
+ /** Accessible name of the panel, which reka exposes as a dialog. */
18
+ ariaLabel?: string
17
19
  }>(),
18
20
  { side: "bottom", align: "center", sideOffset: 6 },
19
21
  )
@@ -30,9 +32,11 @@ const open = defineModel<boolean>("open")
30
32
  </PopoverTrigger>
31
33
  <PopoverPortal>
32
34
  <PopoverContent
35
+ :collision-padding="8"
33
36
  :side="side"
34
37
  :align="align"
35
38
  :side-offset="sideOffset"
39
+ :aria-label="ariaLabel"
36
40
  :class="[POPOVER_PANEL, 'z-(--z-popover) w-64 rounded-card p-3 text-sm text-ink outline-none', panelClass]"
37
41
  >
38
42
  <slot />
@@ -166,9 +166,11 @@ watch(
166
166
  () => runSweep(props.value, props.duration),
167
167
  )
168
168
 
169
- const pct = computed(() =>
170
- Math.max(0, Math.min(100, (shown.value / props.max) * 100)),
171
- )
169
+ // A zero or missing max (no quota known yet) reads as empty, not as NaN%.
170
+ const pct = computed(() => {
171
+ const ratio = props.max > 0 ? (shown.value / props.max) * 100 : 0
172
+ return Number.isFinite(ratio) ? Math.max(0, Math.min(100, ratio)) : 0
173
+ })
172
174
 
173
175
  /*
174
176
  * The tone actually painted. `auto` reads the fill and crosses two thresholds;
@@ -7,6 +7,7 @@ export default { inheritAttrs: false }
7
7
 
8
8
  <script setup lang="ts">
9
9
  import { RadioGroupIndicator, RadioGroupItem, RadioGroupRoot } from "reka-ui"
10
+ import { useFieldControl } from "../composables/useField"
10
11
  import { useMergedAttrs } from "../composables/useMergedClass"
11
12
 
12
13
  export interface RadioOption {
@@ -17,9 +18,11 @@ export interface RadioOption {
17
18
  // `options` renders simple {value,label} rows. For rich items (icons, badges,
18
19
  // multi-line) pass <LpRadio> children in the default slot instead — they share
19
20
  // the same RadioGroupRoot, so selection still flows through v-model.
20
- defineProps<{ modelValue?: string; options?: RadioOption[]; disabled?: boolean }>()
21
+ const props = defineProps<{ modelValue?: string; options?: RadioOption[]; disabled?: boolean }>()
21
22
  defineEmits<{ (e: "update:modelValue", value: string): void }>()
22
23
 
24
+ const field = useFieldControl(() => ({ wrapped: false, disabled: props.disabled }))
25
+
23
26
  // A radio group stacks with a fixed gap; a dense settings list needs it smaller, and a horizontal layout needs it gone.
24
27
  const { class: rootClass, attrs: rest } = useMergedAttrs(
25
28
  "flex flex-col gap-2",
@@ -29,7 +32,11 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
29
32
  <template>
30
33
  <RadioGroupRoot
31
34
  :model-value="modelValue"
32
- :disabled="disabled"
35
+ :disabled="field.disabled"
36
+ :required="field.required"
37
+ :aria-labelledby="field.labelId"
38
+ :aria-describedby="field.describedBy"
39
+ :aria-invalid="field.invalid || undefined"
33
40
  :class="rootClass"
34
41
  v-bind="rest"
35
42
  @update:model-value="(v) => $emit('update:modelValue', v as string)"