@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
@@ -70,6 +70,11 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
70
70
  * `provideGlass`, and without one it is off.
71
71
  */
72
72
  glass?: boolean;
73
+ /** Accessible name for a drawer without a visible `title`. */
74
+ ariaLabel?: string;
75
+ labels?: Partial<{
76
+ close: string;
77
+ }>;
73
78
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
74
79
  "update:open": (value: boolean) => any;
75
80
  }, string, import("vue").PublicProps, Readonly<{
@@ -142,6 +147,11 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
142
147
  * `provideGlass`, and without one it is off.
143
148
  */
144
149
  glass?: boolean;
150
+ /** Accessible name for a drawer without a visible `title`. */
151
+ ariaLabel?: string;
152
+ labels?: Partial<{
153
+ close: string;
154
+ }>;
145
155
  }> & Readonly<{
146
156
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
147
157
  }>, {
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpDrawer-BZ6k3hvo.js";
1
+ import { _ as _sfc_main } from "../chunks/LpDrawer-bScx-KMO.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,9 +1,9 @@
1
- import { defineComponent, ref, onMounted, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, withModifiers, createElementVNode, renderSlot, createVNode, normalizeClass, toDisplayString, createCommentVNode } from "vue";
1
+ import { defineComponent, ref, onMounted, watch, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, withModifiers, createElementVNode, renderSlot, createVNode, normalizeClass, toDisplayString, createCommentVNode } from "vue";
2
2
  import { useMergedAttrs } from "../composables/useMergedClass.js";
3
3
  import { useReveal } from "../composables/useReveal.js";
4
4
  import { _ as _sfc_main$1 } from "../chunks/LpIcon-CCnX5_2j.js";
5
5
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
6
- import '../assets/LpDropzone-BBoWvi-J.css';const _hoisted_1 = ["disabled"];
6
+ import '../assets/LpDropzone-i4BdMi1H.css';const _hoisted_1 = ["disabled"];
7
7
  const _hoisted_2 = {
8
8
  key: 0,
9
9
  class: "text-sm font-medium text-ink"
@@ -92,15 +92,31 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
92
92
  el.value = "";
93
93
  }
94
94
  function windowPaste(event) {
95
- if (props.disabled) return;
95
+ if (props.disabled || event.defaultPrevented) return;
96
96
  const target = event.target;
97
97
  if (target?.closest("input, textarea, [contenteditable]")) return;
98
98
  onPaste(event);
99
99
  }
100
+ let listening = false;
101
+ function listen(on) {
102
+ if (on === listening || typeof window === "undefined") return;
103
+ listening = on;
104
+ if (on) window.addEventListener("paste", windowPaste);
105
+ else window.removeEventListener("paste", windowPaste);
106
+ }
107
+ let mounted = false;
100
108
  onMounted(() => {
101
- if (props.pasteTarget) window.addEventListener("paste", windowPaste);
109
+ mounted = true;
110
+ listen(props.pasteTarget);
111
+ });
112
+ watch(
113
+ () => props.pasteTarget,
114
+ (on) => mounted && listen(on)
115
+ );
116
+ onBeforeUnmount(() => {
117
+ mounted = false;
118
+ listen(false);
102
119
  });
103
- onBeforeUnmount(() => window.removeEventListener("paste", windowPaste));
104
120
  __expose({ browse: () => input.value?.click() });
105
121
  const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
106
122
  "lp-dropzone relative flex w-full flex-col items-center gap-2 rounded-card px-6 py-8 text-center transition-colors duration-[var(--duration-fast)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-55",
@@ -163,7 +179,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
163
179
  };
164
180
  }
165
181
  });
166
- const LpDropzone = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5e560a6d"]]);
182
+ const LpDropzone = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6f6d375e"]]);
167
183
  export {
168
184
  LpDropzone as default
169
185
  };
@@ -1,6 +1,15 @@
1
1
  import { type FileNode } from "./fileTree";
2
2
  export type { FileNode } from "./fileTree";
3
3
  /** Rolled-up stats for the ticked entries — what a backup picker summarises. */
4
+ export interface FileTreeLabels {
5
+ [key: string]: string;
6
+ empty: string;
7
+ emptyDescription: string;
8
+ file: string;
9
+ files: string;
10
+ folder: string;
11
+ folders: string;
12
+ }
4
13
  export interface FileTreeSummary {
5
14
  /** Ticked files (directories excluded — they're containers, not payload). */
6
15
  files: number;
@@ -43,6 +52,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
43
52
  /** Empty-state copy when `nodes` is empty. */
44
53
  emptyLabel?: string;
45
54
  emptyDescription?: string;
55
+ labels?: Partial<FileTreeLabels>;
46
56
  }, {
47
57
  reveal: (id: string) => void;
48
58
  expandAll: () => void;
@@ -89,6 +99,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
89
99
  /** Empty-state copy when `nodes` is empty. */
90
100
  emptyLabel?: string;
91
101
  emptyDescription?: string;
102
+ labels?: Partial<FileTreeLabels>;
92
103
  }> & Readonly<{
93
104
  onExpand?: ((node: FileNode) => any) | undefined;
94
105
  onSelect?: ((node: FileNode) => any) | undefined;
@@ -102,12 +113,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
102
113
  sort: boolean;
103
114
  loading: boolean;
104
115
  skeletonRows: number;
105
- emptyLabel: string;
106
116
  iconSize: number;
107
117
  checkable: boolean;
108
118
  showSize: boolean;
109
119
  showModified: boolean;
110
- emptyDescription: string;
111
120
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
112
121
  /** Replace the row's label (icons, chevron and indent stay). */
113
122
  row(props: {
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTree-_5vFBgaK.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTree-CSI_5SK2.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTreeNode-BdcIYKIE.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTreeNode-B4MiSQX2.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -5,14 +5,23 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
5
5
  hint?: string;
6
6
  error?: string;
7
7
  required?: boolean;
8
+ /** Id of the control; generated when unset. The label points at it. */
9
+ id?: string;
10
+ invalid?: boolean;
11
+ disabled?: boolean;
8
12
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
9
13
  label?: string;
10
14
  hint?: string;
11
15
  error?: string;
12
16
  required?: boolean;
17
+ /** Id of the control; generated when unset. The label points at it. */
18
+ id?: string;
19
+ invalid?: boolean;
20
+ disabled?: boolean;
13
21
  }> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
14
22
  default?: (props: {
15
23
  id: string;
24
+ describedBy: string | undefined;
16
25
  }) => any;
17
26
  } & {
18
27
  hint?: (props: {}) => any;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFormField-CazBc2-a.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFormField-CIk5qosh.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,13 +1,15 @@
1
- import { defineComponent, computed, shallowRef, ref, watch, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, createElementVNode, withModifiers, normalizeStyle, normalizeClass, createCommentVNode, createVNode, Transition, withCtx, Fragment, renderList, toDisplayString, createBlock, createTextVNode } from "vue";
1
+ import { defineComponent, shallowRef, ref, watch, computed, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, createElementVNode, withModifiers, normalizeStyle, normalizeClass, createCommentVNode, createVNode, Transition, withCtx, Fragment, renderList, toDisplayString, createBlock, createTextVNode } from "vue";
2
+ import { useLabels } from "../composables/useLpConfig.js";
3
+ import { isSideways, coverScale, cropGeometry } from "./imageCrop.js";
2
4
  import { useHotkeys } from "../composables/useHotkeys.js";
3
5
  import { useReveal } from "../composables/useReveal.js";
4
6
  import { useZoomPan } from "../composables/useZoomPan.js";
5
- import { _ as _sfc_main$1 } from "../chunks/LpButton-5VXXCjwF.js";
7
+ import { _ as _sfc_main$1 } from "../chunks/LpButton-kqJBHIIb.js";
6
8
  import "reka-ui";
7
9
  import { _ as _sfc_main$2 } from "../chunks/LpIcon-CCnX5_2j.js";
8
10
  import { useMergedAttrs } from "../composables/useMergedClass.js";
9
11
  import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
10
- import '../assets/LpImageEditor-Ct7Y3aNu.css';const _hoisted_1 = ["aria-label"];
12
+ import '../assets/LpImageEditor-CbMA82g8.css';const _hoisted_1 = ["aria-label"];
11
13
  const _hoisted_2 = ["src"];
12
14
  const _hoisted_3 = {
13
15
  key: 0,
@@ -33,15 +35,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
33
35
  setup(__props, { expose: __expose }) {
34
36
  const props = __props;
35
37
  const { el: revealAnchor, revealed } = useReveal({ immediate: () => !props.animate });
36
- const text = computed(() => ({
37
- rotateLeft: "Rotate left",
38
- rotateRight: "Rotate right",
39
- zoomIn: "Zoom in",
40
- zoomOut: "Zoom out",
41
- reset: "Reset",
42
- canvas: "Crop area — arrows pan, +/− zoom, R rotates, Alt+wheel turns freely",
43
- ...props.labels
44
- }));
38
+ const text = useLabels(
39
+ "imageEditor",
40
+ {
41
+ rotateLeft: "Rotate left",
42
+ rotateRight: "Rotate right",
43
+ zoomIn: "Zoom in",
44
+ zoomOut: "Zoom out",
45
+ reset: "Reset",
46
+ canvas: "Crop area — arrows pan, +/− zoom, R rotates, Alt+wheel turns freely"
47
+ },
48
+ () => props.labels
49
+ );
45
50
  const ASPECTS = {
46
51
  free: null,
47
52
  square: 1,
@@ -54,17 +59,38 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
54
59
  const rotation = ref(0);
55
60
  const viewport = ref(null);
56
61
  const zoom = useZoomPan({ min: 1, max: 6 });
57
- watch(viewport, (el) => zoom.setViewport(el));
62
+ const frameSize = ref(null);
63
+ let frameObserver = null;
64
+ watch(viewport, (el) => {
65
+ zoom.setViewport(el);
66
+ frameObserver?.disconnect();
67
+ frameObserver = null;
68
+ if (!el) return;
69
+ frameSize.value = { width: el.clientWidth, height: el.clientHeight };
70
+ if (typeof ResizeObserver !== "undefined") {
71
+ frameObserver = new ResizeObserver(([entry]) => {
72
+ frameSize.value = { width: entry.contentRect.width, height: entry.contentRect.height };
73
+ });
74
+ frameObserver.observe(el);
75
+ }
76
+ });
58
77
  const upright = computed(() => (rotation.value % 360 + 360) % 360);
59
78
  const edited = computed(() => upright.value !== 0 || zoom.scale.value !== 1);
79
+ let generation = 0;
60
80
  watch(
61
81
  () => props.file,
62
82
  async (file) => {
63
83
  revoke();
64
84
  rotation.value = 0;
65
85
  zoom.reset();
86
+ const mine = ++generation;
66
87
  objectUrl.value = URL.createObjectURL(file);
67
- source.value = await decode(file, objectUrl.value);
88
+ const decoded = await decode(file, objectUrl.value);
89
+ if (mine !== generation) {
90
+ if (decoded instanceof ImageBitmap) decoded.close();
91
+ return;
92
+ }
93
+ source.value = decoded;
68
94
  },
69
95
  { immediate: true }
70
96
  );
@@ -91,7 +117,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
91
117
  if (source.value instanceof ImageBitmap) source.value.close();
92
118
  source.value = null;
93
119
  }
94
- onBeforeUnmount(revoke);
120
+ onBeforeUnmount(() => {
121
+ generation++;
122
+ revoke();
123
+ frameObserver?.disconnect();
124
+ });
95
125
  function rotate(by) {
96
126
  rotation.value += by;
97
127
  const { x, y } = zoom.offset.value;
@@ -110,13 +140,31 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
110
140
  if (ratio) return ratio;
111
141
  const size = sourceSize.value;
112
142
  if (!size) return 1;
113
- const turned = upright.value % 180 !== 0;
143
+ const turned = isSideways(rotation.value);
114
144
  const w = turned ? size.height : size.width;
115
145
  const h = turned ? size.width : size.height;
116
146
  return w / h;
117
147
  });
118
148
  const frameStyle = computed(() => ({ aspectRatio: String(boxRatio.value) }));
149
+ const sized = computed(() => {
150
+ const size = sourceSize.value;
151
+ const frame = frameSize.value;
152
+ if (!size || !frame || !frame.width || !frame.height) return null;
153
+ const cover = coverScale(size.width, size.height, frame.width, frame.height, rotation.value);
154
+ const width = size.width * cover;
155
+ const height = size.height * cover;
156
+ return {
157
+ width: `${width}px`,
158
+ height: `${height}px`,
159
+ left: "50%",
160
+ top: "50%",
161
+ marginLeft: `${-width / 2}px`,
162
+ marginTop: `${-height / 2}px`,
163
+ maxWidth: "none"
164
+ };
165
+ });
119
166
  const imageStyle = computed(() => ({
167
+ ...sized.value,
120
168
  ...zoom.style.value,
121
169
  // Rotation sits innermost, after the composable's scale and translate, so a
122
170
  // drag still moves the picture the way the pointer went once it is turned.
@@ -133,37 +181,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
133
181
  const frame = viewport.value;
134
182
  if (!picture || !size || !frame) return null;
135
183
  if (!edited.value && props.aspect === "free") return null;
136
- const turned = upright.value % 180 !== 0;
137
- const uprightW = turned ? size.height : size.width;
138
- const uprightH = turned ? size.width : size.height;
139
- const cover = Math.max(frame.clientWidth / uprightW, frame.clientHeight / uprightH);
140
- const shown = cover * zoom.scale.value;
141
- const cropW = Math.min(uprightW, frame.clientWidth / shown);
142
- const cropH = Math.min(uprightH, frame.clientHeight / shown);
143
- const centreX = clamp(
144
- uprightW / 2 - zoom.offset.value.x / cover,
145
- cropW / 2,
146
- uprightW - cropW / 2
147
- );
148
- const centreY = clamp(
149
- uprightH / 2 - zoom.offset.value.y / cover,
150
- cropH / 2,
151
- uprightH - cropH / 2
152
- );
153
- const scale = Math.min(1, props.maxEdge / Math.max(cropW, cropH));
184
+ const crop = cropGeometry({
185
+ sourceWidth: size.width,
186
+ sourceHeight: size.height,
187
+ frameWidth: frameSize.value?.width ?? frame.clientWidth,
188
+ frameHeight: frameSize.value?.height ?? frame.clientHeight,
189
+ rotation: rotation.value,
190
+ scale: zoom.scale.value,
191
+ offset: zoom.offset.value
192
+ });
193
+ const scale = Math.min(1, props.maxEdge / Math.max(crop.width, crop.height));
154
194
  const canvas = document.createElement("canvas");
155
- canvas.width = Math.max(1, Math.round(cropW * scale));
156
- canvas.height = Math.max(1, Math.round(cropH * scale));
195
+ canvas.width = Math.max(1, Math.round(crop.width * scale));
196
+ canvas.height = Math.max(1, Math.round(crop.height * scale));
157
197
  const ctx = canvas.getContext("2d");
158
198
  if (!ctx) return null;
159
199
  ctx.translate(canvas.width / 2, canvas.height / 2);
160
- ctx.rotate(upright.value * Math.PI / 180);
161
200
  ctx.scale(scale, scale);
162
- const readW = turned ? cropH : cropW;
163
- const readH = turned ? cropW : cropH;
164
- const readX = (turned ? centreY : centreX) - readW / 2;
165
- const readY = (turned ? centreX : centreY) - readH / 2;
166
- ctx.drawImage(picture, readX, readY, readW, readH, -readW / 2, -readH / 2, readW, readH);
201
+ ctx.translate(-crop.centre.x, -crop.centre.y);
202
+ ctx.rotate(rotation.value * Math.PI / 180);
203
+ ctx.drawImage(picture, -size.width / 2, -size.height / 2);
167
204
  return await new Promise(
168
205
  (resolve) => canvas.toBlob(resolve, outputType.value, props.quality)
169
206
  );
@@ -173,9 +210,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
173
210
  if (props.type !== "source") return props.type;
174
211
  return ENCODABLE.has(props.file.type) ? props.file.type : "image/png";
175
212
  });
176
- function clamp(value, low, high) {
177
- return Math.min(Math.max(value, low), Math.max(low, high));
178
- }
179
213
  function onWheel(event) {
180
214
  if (event.altKey) {
181
215
  event.preventDefault();
@@ -232,7 +266,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
232
266
  ref: viewport,
233
267
  tabindex: "0",
234
268
  role: "application",
235
- "aria-label": text.value.canvas,
269
+ "aria-label": unref(text).canvas,
236
270
  class: "relative w-full overflow-hidden rounded-card border border-line bg-surface-soft focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
237
271
  style: normalizeStyle(frameStyle.value),
238
272
  onWheel: withModifiers(onWheel, ["prevent"]),
@@ -250,7 +284,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
250
284
  src: objectUrl.value,
251
285
  alt: "",
252
286
  draggable: "false",
253
- class: normalizeClass(["lp-editor__image absolute inset-0 size-full select-none object-cover motion-reduce:transition-none", [
287
+ class: normalizeClass(["lp-editor__image absolute select-none motion-reduce:transition-none", [
288
+ sized.value ? "" : "inset-0 size-full object-cover",
254
289
  unref(zoom).panning.value ? "cursor-grabbing" : "cursor-grab",
255
290
  __props.animate && !unref(revealed) ? "lp-editor__image--waiting" : ""
256
291
  ]]),
@@ -280,8 +315,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
280
315
  createVNode(_sfc_main$1, {
281
316
  size: "sm",
282
317
  variant: "ghost",
283
- title: text.value.rotateLeft,
284
- "aria-label": text.value.rotateLeft,
318
+ title: unref(text).rotateLeft,
319
+ "aria-label": unref(text).rotateLeft,
285
320
  onClick: _cache[4] || (_cache[4] = ($event) => rotate(-90))
286
321
  }, {
287
322
  default: withCtx(() => [
@@ -295,8 +330,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
295
330
  createVNode(_sfc_main$1, {
296
331
  size: "sm",
297
332
  variant: "ghost",
298
- title: text.value.rotateRight,
299
- "aria-label": text.value.rotateRight,
333
+ title: unref(text).rotateRight,
334
+ "aria-label": unref(text).rotateRight,
300
335
  onClick: _cache[5] || (_cache[5] = ($event) => rotate(90))
301
336
  }, {
302
337
  default: withCtx(() => [
@@ -313,8 +348,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
313
348
  size: "sm",
314
349
  variant: "ghost",
315
350
  disabled: unref(zoom).scale.value <= 1,
316
- title: text.value.zoomOut,
317
- "aria-label": text.value.zoomOut,
351
+ title: unref(text).zoomOut,
352
+ "aria-label": unref(text).zoomOut,
318
353
  onClick: _cache[6] || (_cache[6] = ($event) => unref(zoom).zoomBy(1 / 1.2))
319
354
  }, {
320
355
  default: withCtx(() => [
@@ -329,8 +364,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
329
364
  createVNode(_sfc_main$1, {
330
365
  size: "sm",
331
366
  variant: "ghost",
332
- title: text.value.zoomIn,
333
- "aria-label": text.value.zoomIn,
367
+ title: unref(text).zoomIn,
368
+ "aria-label": unref(text).zoomIn,
334
369
  onClick: _cache[7] || (_cache[7] = ($event) => unref(zoom).zoomBy(1.2))
335
370
  }, {
336
371
  default: withCtx(() => [
@@ -354,7 +389,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
354
389
  name: "lucide:undo-2",
355
390
  size: 15
356
391
  }),
357
- createTextVNode(" " + toDisplayString(text.value.reset), 1)
392
+ createTextVNode(" " + toDisplayString(unref(text).reset), 1)
358
393
  ]),
359
394
  _: 1
360
395
  })) : createCommentVNode("", true)
@@ -363,7 +398,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
363
398
  };
364
399
  }
365
400
  });
366
- const LpImageEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a19a8cf6"]]);
401
+ const LpImageEditor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b510205a"]]);
367
402
  export {
368
403
  LpImageEditor as default
369
404
  };
@@ -2,7 +2,7 @@ declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
3
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
4
4
  modelValue?: string;
5
- size?: "sm" | "md" | "lg" | undefined;
5
+ size?: "md" | "sm" | "lg" | undefined;
6
6
  invalid?: boolean;
7
7
  placeholder?: string;
8
8
  type?: string;
@@ -37,7 +37,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
37
37
  "update:modelValue": (value: string) => any;
38
38
  }, string, import("vue").PublicProps, Readonly<{
39
39
  modelValue?: string;
40
- size?: "sm" | "md" | "lg" | undefined;
40
+ size?: "md" | "sm" | "lg" | undefined;
41
41
  invalid?: boolean;
42
42
  placeholder?: string;
43
43
  type?: string;
@@ -67,7 +67,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
67
67
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
68
68
  }>, {
69
69
  type: string;
70
- size: "sm" | "md" | "lg";
70
+ size: "md" | "sm" | "lg";
71
71
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
72
72
  leading?: (props: {}) => any;
73
73
  } & {
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpInput-9EXWUM9B.js";
1
+ import { _ as _sfc_main } from "../chunks/LpInput-C0e8y8_d.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,20 @@
1
1
  import { type LightboxItem } from "./lightbox";
2
+ export type LightboxLabels = {
3
+ viewer: string;
4
+ /** `{index}` and `{total}` are filled in. */
5
+ position: string;
6
+ previous: string;
7
+ next: string;
8
+ zoomIn: string;
9
+ zoomOut: string;
10
+ rotate: string;
11
+ copy: string;
12
+ download: string;
13
+ close: string;
14
+ failed: string;
15
+ spoiler: string;
16
+ reveal: string;
17
+ };
2
18
  type __VLS_Props = {
3
19
  open?: boolean;
4
20
  /** Images to page through. */
@@ -17,6 +33,7 @@ type __VLS_Props = {
17
33
  loop?: boolean;
18
34
  /** Largest zoom level. */
19
35
  maxZoom?: number;
36
+ labels?: Partial<LightboxLabels>;
20
37
  };
21
38
  type __VLS_Slots = {
22
39
  /** Replace the caption block under the image. */
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLightbox-2sYVMY-S.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLightbox-Mr0W_6HK.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,8 +1,11 @@
1
1
  import { type Component } from "vue";
2
+ import { type LinkTarget } from "./link";
2
3
  declare const _default: typeof __VLS_export;
3
4
  export default _default;
4
5
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
5
6
  href?: string;
7
+ /** Router destination; rendered through the configured link component. */
8
+ to?: LinkTarget;
6
9
  external?: boolean;
7
10
  /** Shorthand for `tone="muted"`. */
8
11
  muted?: boolean;
@@ -14,11 +17,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
14
17
  */
15
18
  tone?: "brand" | "ink" | "muted" | "soft";
16
19
  /**
17
- * Root element/component. Defaults to a native <a>. Pass a router link
18
- * component (e.g. NuxtLink or RouterLink) to keep client-side navigation;
19
- * the kit stays DOM-agnostic, the consumer supplies the link component.
20
- * Router links take their destination through their own prop (`to`), which
21
- * falls through as a plain attribute.
20
+ * Root element/component. By default an internal `to`/`href` renders the
21
+ * link component set with provideLpConfig (NuxtLink under the Nuxt module),
22
+ * anything else a native <a>. Pass a component here to override per link.
22
23
  */
23
24
  as?: string | Component;
24
25
  /**
@@ -42,6 +43,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
42
43
  revealOn?: "self" | "group";
43
44
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
44
45
  href?: string;
46
+ /** Router destination; rendered through the configured link component. */
47
+ to?: LinkTarget;
45
48
  external?: boolean;
46
49
  /** Shorthand for `tone="muted"`. */
47
50
  muted?: boolean;
@@ -53,11 +56,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
53
56
  */
54
57
  tone?: "brand" | "ink" | "muted" | "soft";
55
58
  /**
56
- * Root element/component. Defaults to a native <a>. Pass a router link
57
- * component (e.g. NuxtLink or RouterLink) to keep client-side navigation;
58
- * the kit stays DOM-agnostic, the consumer supplies the link component.
59
- * Router links take their destination through their own prop (`to`), which
60
- * falls through as a plain attribute.
59
+ * Root element/component. By default an internal `to`/`href` renders the
60
+ * link component set with provideLpConfig (NuxtLink under the Nuxt module),
61
+ * anything else a native <a>. Pass a component here to override per link.
61
62
  */
62
63
  as?: string | Component;
63
64
  /**
@@ -80,7 +81,6 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
80
81
  */
81
82
  revealOn?: "self" | "group";
82
83
  }> & Readonly<{}>, {
83
- as: string | Component;
84
84
  variant: "default" | "underline" | "reveal";
85
85
  revealOn: "self" | "group";
86
86
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLink-DCND-zyu.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLink-Krkjhe_y.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,22 @@
1
1
  import { type ContextMenuItemDef } from "./LpContextMenu.vue";
2
+ export interface LogViewerLabels {
3
+ [key: string]: string;
4
+ empty: string;
5
+ frozen: string;
6
+ noMatch: string;
7
+ loadingOlder: string;
8
+ copyMessage: string;
9
+ copyLine: string;
10
+ copyTimestamp: string;
11
+ copied: string;
12
+ /** `{source}` is replaced by the line's source. */
13
+ filterSource: string;
14
+ /** `{level}` is replaced by the line's level. */
15
+ filterLevel: string;
16
+ /** `{n}` is replaced by the count. */
17
+ identical: string;
18
+ jump: string;
19
+ }
2
20
  export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "success";
3
21
  export interface LogLine {
4
22
  /** Body of the line. */
@@ -69,6 +87,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
69
87
  * so a duplicate level word / timestamp doesn't repeat in the message body.
70
88
  */
71
89
  parse?: boolean;
90
+ labels?: Partial<LogViewerLabels>;
72
91
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
73
92
  filter: (by: {
74
93
  source?: string;
@@ -133,6 +152,7 @@ declare const __VLS_export: import("vue").DefineComponent<{
133
152
  * so a duplicate level word / timestamp doesn't repeat in the message body.
134
153
  */
135
154
  parse?: boolean;
155
+ labels?: Partial<LogViewerLabels>;
136
156
  }> & Readonly<{
137
157
  onFilter?: ((by: {
138
158
  source?: string;
@@ -142,12 +162,10 @@ declare const __VLS_export: import("vue").DefineComponent<{
142
162
  }>, {
143
163
  height: string;
144
164
  wrap: boolean;
145
- emptyLabel: string;
146
165
  lineNumbers: boolean;
147
166
  showTime: boolean;
148
167
  showLevel: boolean;
149
168
  tail: boolean;
150
- frozenLabel: string;
151
169
  rowMenu: boolean;
152
170
  parse: boolean;
153
171
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLogViewer-CaRy5MeS.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLogViewer-YBOaFnc_.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };