@leavepulse/ui 0.83.1 → 0.85.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 (323) hide show
  1. package/README.md +22 -0
  2. package/dist/assets/{LpDropzone-DNbh_NFJ.css → LpDropzone-CfL3Vrx4.css} +10 -10
  3. package/dist/assets/{LpImageEditor-Bgu20XLs.css → LpImageEditor-y3B-aW3H.css} +6 -6
  4. package/dist/assets/{LpKeys-C5VMcBOW.css → LpKeys-5ijsXX-M.css} +6 -6
  5. package/dist/assets/{LpShortcutsDialog-C6uzPeMf.css → LpShortcutsDialog-BBdVWxZq.css} +7 -7
  6. package/dist/assets/LpVideoTrim-CMoUw3dJ.css +8 -0
  7. package/dist/chunks/{ContextMenuItems-h-apPY2d.js → ContextMenuItems-D15cGEw9.js} +1 -1
  8. package/dist/chunks/{DropzoneLinkField-_Op8b_ee.js → DropzoneLinkField-Dz7fIaLh.js} +1 -1
  9. package/dist/chunks/{FieldLeading-mOMcwNqi.js → FieldLeading-DZZLK02U.js} +1 -1
  10. package/dist/chunks/{FieldWrapper-DtT-AIcn.js → FieldWrapper-BDDw1F9H.js} +1 -1
  11. package/dist/chunks/{IconCloseButton-YmisskyZ.js → IconCloseButton-Cn_w4aN3.js} +1 -1
  12. package/dist/chunks/{LayoutCanvas-BrISZEBr.js → LayoutCanvas-Dr5eSfAu.js} +1 -1
  13. package/dist/chunks/{LayoutNode-CwMQ8ACa.js → LayoutNode-CViJnx6q.js} +1 -1
  14. package/dist/chunks/{LpActionBar-CVVC6YbC.js → LpActionBar-C0LK-Aqs.js} +1 -1
  15. package/dist/chunks/{LpAddressInput-tiuJ-bru.js → LpAddressInput-B9sSvodU.js} +7 -7
  16. package/dist/chunks/{LpAlert-8-x4H_Nk.js → LpAlert-Bpd7122M.js} +1 -1
  17. package/dist/chunks/{LpAppShell-BW2YMq-A.js → LpAppShell-DW8JmY1o.js} +4 -4
  18. package/dist/chunks/{LpAutocomplete-BZODIops.js → LpAutocomplete-CQID7Zc-.js} +4 -4
  19. package/dist/chunks/{LpAvatar-BZq4nH53.js → LpAvatar-DLkiMGKx.js} +1 -1
  20. package/dist/chunks/{LpBadge-Cz0pSSUu.js → LpBadge-RFp8uHFt.js} +1 -1
  21. package/dist/chunks/{LpBottomNav-DVdR5Mry.js → LpBottomNav-BcJVkAhh.js} +1 -1
  22. package/dist/chunks/{LpBreadcrumbs-B2jphAel.js → LpBreadcrumbs-DJ_DB45r.js} +1 -1
  23. package/dist/chunks/{LpCalendar-C0_N5LVT.js → LpCalendar-D6tfCr2G.js} +1 -1
  24. package/dist/chunks/{LpCheckbox-CwqLNdw4.js → LpCheckbox-DcXC2qd5.js} +2 -2
  25. package/dist/chunks/{LpCodeBlock-Dcss6bnl.js → LpCodeBlock-Dx0J9xlm.js} +2 -2
  26. package/dist/chunks/{LpCodeDisplay-CLms1zDY.js → LpCodeDisplay-BlN7U8Z-.js} +4 -4
  27. package/dist/chunks/{LpColorPicker-CbIY450X.js → LpColorPicker-Cjna_Bio.js} +3 -3
  28. package/dist/chunks/{LpConfirmDialog-RmP4z6va.js → LpConfirmDialog-bfcX5F9d.js} +2 -2
  29. package/dist/chunks/{LpConfirmHost-DheBgRMB.js → LpConfirmHost-DIgloymi.js} +1 -1
  30. package/dist/chunks/{LpContextMenu-DIYhlap8.js → LpContextMenu-CUFZIQX2.js} +2 -2
  31. package/dist/chunks/{LpContextSwitcher-fDA6ERl-.js → LpContextSwitcher-CMweLbv2.js} +2 -2
  32. package/dist/chunks/{LpCopyButton-DSqKFGEb.js → LpCopyButton-BrbvIVMG.js} +1 -1
  33. package/dist/chunks/{LpDataList-f9UjSx9m.js → LpDataList-DhETPjzv.js} +2 -2
  34. package/dist/chunks/{LpDatePicker-3kDQLVbg.js → LpDatePicker-B5gzwI3T.js} +5 -5
  35. package/dist/chunks/{LpDateRangePicker-DUPiTt0_.js → LpDateRangePicker-CwNnpyoL.js} +3 -3
  36. package/dist/chunks/{LpDisclosure-C5WZjhbQ.js → LpDisclosure-CsJ7nnFz.js} +1 -1
  37. package/dist/chunks/{LpDrawer-CkYvIGIa.js → LpDrawer-C1q2bl1r.js} +1 -1
  38. package/dist/chunks/{LpDropdownMenu-zSsK2Xra.js → LpDropdownMenu-DRABI-Bl.js} +2 -2
  39. package/dist/chunks/{LpEditable-CP7Y_lKg.js → LpEditable-DCPdDDBb.js} +2 -2
  40. package/dist/chunks/{LpEmptyState-dsc5x-ya.js → LpEmptyState-DT8U4R8L.js} +1 -1
  41. package/dist/chunks/{LpFieldNotice-TOTbWvgv.js → LpFieldNotice-mcmO-O-J.js} +1 -1
  42. package/dist/chunks/{LpFileTree-BPjnOTln.js → LpFileTree-wiXExcZI.js} +4 -4
  43. package/dist/chunks/{LpFileTreeNode-_-MiWmie.js → LpFileTreeNode-DfvIGmSz.js} +4 -4
  44. package/dist/chunks/{LpFormField-BJwD1iEF.js → LpFormField-C5GOuOY-.js} +1 -1
  45. package/dist/chunks/{LpHintLayer-CmfGnxYu.js → LpHintLayer-B0choo1r.js} +1 -1
  46. package/dist/chunks/{LpHints-C2Xvc1Fd.js → LpHints-BEetUVTl.js} +3 -3
  47. package/dist/chunks/{LpIcon-CoOLz1oJ.js → LpIcon-DCGhNsCU.js} +1 -1
  48. package/dist/chunks/{LpInfraNode-CW3qsM-U.js → LpInfraNode-BsExhdPE.js} +2 -2
  49. package/dist/chunks/{LpInput-BVWhkPuN.js → LpInput-CKMblRtp.js} +3 -3
  50. package/dist/chunks/{LpInspector-REmoX_es.js → LpInspector-CqPgVXrm.js} +4 -4
  51. package/dist/chunks/{LpLightbox-C3FFTYP5.js → LpLightbox-D7iJqdmH.js} +4 -4
  52. package/dist/chunks/{LpLogInspector-Cs8Z_fM0.js → LpLogInspector-Yj310k4n.js} +2 -2
  53. package/dist/chunks/{LpLogViewer-DQRGe-ZK.js → LpLogViewer-Bki-IdNC.js} +6 -6
  54. package/dist/chunks/{LpMapPicker-CQnQPgKm.js → LpMapPicker-CnpJhiY0.js} +1 -1
  55. package/dist/chunks/{LpMediaGallery-DkKqTy9P.js → LpMediaGallery-D6DyJDvL.js} +4 -4
  56. package/dist/chunks/{LpModal-DwejR7VP.js → LpModal-B5y9_LgA.js} +1 -1
  57. package/dist/chunks/{LpModalNav-D1-dSe6f.js → LpModalNav-BLvDVl2-.js} +3 -3
  58. package/dist/chunks/{LpNotificationBell-EKLkN0sp.js → LpNotificationBell-Bf0u3t5q.js} +4 -4
  59. package/dist/chunks/{LpNotificationFeed-Dc-yQ4NH.js → LpNotificationFeed-BPZM3zkS.js} +4 -4
  60. package/dist/chunks/{LpNumberField-DvUjEMp-.js → LpNumberField-BeYT7zzt.js} +3 -3
  61. package/dist/chunks/{LpOtpInput-xvDO14f4.js → LpOtpInput-DqwY-U5R.js} +1 -1
  62. package/dist/chunks/{LpPagination-BFZY8dFn.js → LpPagination-V1wEhu1K.js} +1 -1
  63. package/dist/chunks/{LpPaletteTheme-EBJv0Bwz.js → LpPaletteTheme-Bi6pD1GL.js} +2 -2
  64. package/dist/chunks/{LpPasswordInput-DRJR3fF1.js → LpPasswordInput-LaOXNYuV.js} +2 -2
  65. package/dist/chunks/{LpPhoneInput-BGOOtUoW.js → LpPhoneInput-D7Tq2iaz.js} +3 -3
  66. package/dist/chunks/{LpPie-Deyn8h5J.js → LpPie-Bzv8mnVR.js} +2 -2
  67. package/dist/chunks/{LpPipeline-9ChjeNh5.js → LpPipeline-D-uPcbMN.js} +2 -2
  68. package/dist/chunks/{LpQuota-CNh5eF_p.js → LpQuota-BR8ck2a9.js} +1 -1
  69. package/dist/chunks/{LpRadioGroup-Br2Nl9Gr.js → LpRadioGroup-DSOCL9MD.js} +2 -2
  70. package/dist/chunks/{LpRangeCalendar-D66Y3U_w.js → LpRangeCalendar-QepHrmba.js} +1 -1
  71. package/dist/chunks/{LpRangeSlider-eX-fIlOw.js → LpRangeSlider-BaAM7XIs.js} +1 -1
  72. package/dist/chunks/{LpRepeater-0XvnlVd_.js → LpRepeater-BKq5XPh4.js} +3 -3
  73. package/dist/chunks/{LpSecretField-1RCooChq.js → LpSecretField-_B2qPfk8.js} +5 -5
  74. package/dist/chunks/{LpSection-B9gbJJcP.js → LpSection-BGzlKIWO.js} +1 -1
  75. package/dist/chunks/{LpSegmented-hIjGzGTo.js → LpSegmented-CiaF9DUK.js} +2 -2
  76. package/dist/chunks/{LpSelect-DugubwTc.js → LpSelect-CB6Xbnfk.js} +4 -4
  77. package/dist/chunks/{LpSidebar-DevSoN8W.js → LpSidebar-DnqbKULj.js} +4 -4
  78. package/dist/chunks/{LpSidebarNav-DwQQ3KXe.js → LpSidebarNav-B3Eo_VIS.js} +4 -4
  79. package/dist/chunks/{LpSidebarRow-CAGgtJCS.js → LpSidebarRow-CDBnvvd8.js} +3 -3
  80. package/dist/chunks/{LpSlider-1fHpVxpB.js → LpSlider-DTb_Ivkm.js} +1 -1
  81. package/dist/chunks/{LpStat-Cm9-FaWQ.js → LpStat-BtxSto7K.js} +2 -2
  82. package/dist/chunks/{LpStatus-CE8FSAT1.js → LpStatus-_fIwWXQV.js} +1 -1
  83. package/dist/chunks/{LpStepMark-BWSlV69R.js → LpStepMark-iDZw1DYf.js} +1 -1
  84. package/dist/chunks/{LpStepper-1D0ZA7Nx.js → LpStepper-CjC3cp1F.js} +1 -1
  85. package/dist/chunks/{LpSwitch-D_kvE0oQ.js → LpSwitch-BNHyYDhX.js} +1 -1
  86. package/dist/chunks/{LpTabFace-CpbFKi-N.js → LpTabFace-gATEe9pQ.js} +2 -2
  87. package/dist/chunks/{LpTableFilter-BYHyCu38.js → LpTableFilter-B_BFoBqS.js} +2 -2
  88. package/dist/chunks/{LpTagsInput-Cqm38t5N.js → LpTagsInput-By7LMb47.js} +5 -5
  89. package/dist/chunks/{LpTextarea-DaSKBkiV.js → LpTextarea-Ck6RAfzu.js} +1 -1
  90. package/dist/chunks/{LpThemeStudio-BNdfi-Ds.js → LpThemeStudio-C1xKiv8C.js} +5 -5
  91. package/dist/chunks/{LpThemeSwitcher-CbC1nqBP.js → LpThemeSwitcher-Dk4Bk6u1.js} +3 -3
  92. package/dist/chunks/{LpTimeField-CCfPCWPT.js → LpTimeField-BTKJVeNt.js} +2 -2
  93. package/dist/chunks/{LpToaster-BhlI7h-h.js → LpToaster-C_CFWSys.js} +2 -2
  94. package/dist/chunks/{LpTopologyCanvas-DlKbu7E5.js → LpTopologyCanvas-paC1Dup-.js} +4 -4
  95. package/dist/chunks/{LpTour-CSLerA1B.js → LpTour-D_AN_SsZ.js} +1 -1
  96. package/dist/chunks/{LpTruncate-Ct26BSYB.js → LpTruncate-CBUKnr36.js} +1 -1
  97. package/dist/chunks/LpVideoCompress-DD2nShyT.js +242 -0
  98. package/dist/chunks/{LpVideoPlayer-DcWd9DDW.js → LpVideoPlayer-koYKHKkC.js} +4 -4
  99. package/dist/chunks/{LpWindow-YnF_knSj.js → LpWindow-Bo5qQgVY.js} +2 -2
  100. package/dist/chunks/{LpWorkspaceSwitcher-B-5UU6o4.js → LpWorkspaceSwitcher-D50sHs9N.js} +3 -3
  101. package/dist/chunks/{MenuTitle-BnZbFSwq.js → MenuTitle-DCHcfyPH.js} +1 -1
  102. package/dist/chunks/{OptionContent-D5e_eklA.js → OptionContent-o58kS7Zh.js} +1 -1
  103. package/dist/chunks/{PickerField-KpHiowNI.js → PickerField-DNo1k89A.js} +1 -1
  104. package/dist/chunks/{RevealToggle-CE1hAIJB.js → RevealToggle-w7-BMcgC.js} +1 -1
  105. package/dist/chunks/{TourCard-t2csiTDS.js → TourCard-0yYxSdd4.js} +1 -1
  106. package/dist/chunks/{VideoThumb-Csf9bUz3.js → VideoThumb-DL_QkAJY.js} +1 -1
  107. package/dist/chunks/{VideoVolume-B4_DNmNi.js → VideoVolume-D-2TmsVj.js} +2 -2
  108. package/dist/chunks/{icons-CdSlCrle.js → icons-V0k93Puc.js} +3 -3
  109. package/dist/component-names.d.ts +1 -1
  110. package/dist/components/ContextMenuItems.vue.js +1 -1
  111. package/dist/components/DropzoneLinkField.vue.js +1 -1
  112. package/dist/components/FieldLeading.vue.js +1 -1
  113. package/dist/components/FieldWrapper.vue.js +1 -1
  114. package/dist/components/HintSampleTag.vue.d.ts +5 -3
  115. package/dist/components/IconCloseButton.vue.js +1 -1
  116. package/dist/components/LayoutCanvas.vue.js +1 -1
  117. package/dist/components/LayoutNode.vue.js +1 -1
  118. package/dist/components/LpActionBar.vue.d.ts +5 -3
  119. package/dist/components/LpActionBar.vue.js +1 -1
  120. package/dist/components/LpActivityLine.vue.d.ts +6 -6
  121. package/dist/components/LpAddressInput.vue.js +1 -1
  122. package/dist/components/LpAlert.vue.d.ts +1 -1
  123. package/dist/components/LpAlert.vue.js +1 -1
  124. package/dist/components/LpAppShell.vue.d.ts +10 -14
  125. package/dist/components/LpAppShell.vue.js +1 -1
  126. package/dist/components/LpAutocomplete.vue.js +1 -1
  127. package/dist/components/LpAvatar.vue.js +1 -1
  128. package/dist/components/LpBadge.vue.d.ts +4 -0
  129. package/dist/components/LpBadge.vue.js +1 -1
  130. package/dist/components/LpBottomNav.vue.d.ts +6 -4
  131. package/dist/components/LpBottomNav.vue.js +1 -1
  132. package/dist/components/LpBreadcrumbs.vue.d.ts +6 -6
  133. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  134. package/dist/components/LpButton.vue.d.ts +6 -6
  135. package/dist/components/LpCalendar.vue.js +1 -1
  136. package/dist/components/LpChart.vue.js +2 -2
  137. package/dist/components/LpCheckbox.vue.js +1 -1
  138. package/dist/components/LpCodeBlock.vue.d.ts +12 -2
  139. package/dist/components/LpCodeBlock.vue.js +1 -1
  140. package/dist/components/LpCodeDisplay.vue.d.ts +1 -1
  141. package/dist/components/LpCodeDisplay.vue.js +1 -1
  142. package/dist/components/LpColorPicker.vue.js +1 -1
  143. package/dist/components/LpCommandPalette.vue.d.ts +1 -1
  144. package/dist/components/LpCommandPalette.vue.js +2 -2
  145. package/dist/components/LpConfirmDialog.vue.js +1 -1
  146. package/dist/components/LpConfirmHost.vue.js +1 -1
  147. package/dist/components/LpContextMenu.vue.js +1 -1
  148. package/dist/components/LpContextSwitcher.vue.d.ts +6 -4
  149. package/dist/components/LpContextSwitcher.vue.js +1 -1
  150. package/dist/components/LpCopyButton.vue.js +1 -1
  151. package/dist/components/LpDataList.vue.js +1 -1
  152. package/dist/components/LpDatePicker.vue.js +1 -1
  153. package/dist/components/LpDateRangePicker.vue.js +1 -1
  154. package/dist/components/LpDisclosure.vue.js +1 -1
  155. package/dist/components/LpDock.vue.js +1 -1
  156. package/dist/components/LpDrawer.vue.d.ts +6 -6
  157. package/dist/components/LpDrawer.vue.js +1 -1
  158. package/dist/components/LpDropdownMenu.vue.js +1 -1
  159. package/dist/components/LpDropzone.vue.d.ts +10 -14
  160. package/dist/components/LpDropzone.vue.js +4 -4
  161. package/dist/components/LpEditable.vue.js +1 -1
  162. package/dist/components/LpEmptyState.vue.js +1 -1
  163. package/dist/components/LpFieldNotice.vue.js +1 -1
  164. package/dist/components/LpFileTree.vue.js +1 -1
  165. package/dist/components/LpFileTreeNode.vue.js +1 -1
  166. package/dist/components/LpFormField.vue.js +1 -1
  167. package/dist/components/LpHintExample.vue.d.ts +2 -3
  168. package/dist/components/LpHintLayer.vue.d.ts +7 -8
  169. package/dist/components/LpHintLayer.vue.js +1 -1
  170. package/dist/components/LpHints.vue.d.ts +6 -5
  171. package/dist/components/LpHints.vue.js +1 -1
  172. package/dist/components/LpIcon.vue.js +1 -1
  173. package/dist/components/LpImageEditor.vue.d.ts +14 -3
  174. package/dist/components/LpImageEditor.vue.js +3 -3
  175. package/dist/components/LpInfraNode.vue.js +1 -1
  176. package/dist/components/LpInput.vue.d.ts +6 -6
  177. package/dist/components/LpInput.vue.js +1 -1
  178. package/dist/components/LpInspector.vue.d.ts +8 -6
  179. package/dist/components/LpInspector.vue.js +1 -1
  180. package/dist/components/LpKeys.vue.js +2 -2
  181. package/dist/components/LpLightbox.vue.js +1 -1
  182. package/dist/components/LpLogInspector.vue.js +1 -1
  183. package/dist/components/LpLogViewer.vue.js +1 -1
  184. package/dist/components/LpMapPicker.vue.d.ts +8 -0
  185. package/dist/components/LpMapPicker.vue.js +1 -1
  186. package/dist/components/LpMediaGallery.vue.d.ts +3 -7
  187. package/dist/components/LpMediaGallery.vue.js +1 -1
  188. package/dist/components/LpModal.vue.d.ts +5 -3
  189. package/dist/components/LpModal.vue.js +1 -1
  190. package/dist/components/LpModalNav.vue.d.ts +4 -0
  191. package/dist/components/LpModalNav.vue.js +1 -1
  192. package/dist/components/LpNotificationBell.vue.js +1 -1
  193. package/dist/components/LpNotificationFeed.vue.js +1 -1
  194. package/dist/components/LpNumberField.vue.js +1 -1
  195. package/dist/components/LpOtpInput.vue.js +1 -1
  196. package/dist/components/LpPagination.vue.d.ts +8 -2
  197. package/dist/components/LpPagination.vue.js +1 -1
  198. package/dist/components/LpPaletteFacts.vue.js +1 -1
  199. package/dist/components/LpPaletteHeader.vue.js +2 -2
  200. package/dist/components/LpPaletteTheme.vue.d.ts +12 -0
  201. package/dist/components/LpPaletteTheme.vue.js +1 -1
  202. package/dist/components/LpPasswordInput.vue.js +1 -1
  203. package/dist/components/LpPhoneInput.vue.js +1 -1
  204. package/dist/components/LpPie.vue.js +1 -1
  205. package/dist/components/LpPipeline.vue.js +1 -1
  206. package/dist/components/LpQuota.vue.js +1 -1
  207. package/dist/components/LpRadioGroup.vue.js +1 -1
  208. package/dist/components/LpRangeCalendar.vue.js +1 -1
  209. package/dist/components/LpRangeSlider.vue.js +1 -1
  210. package/dist/components/LpRepeater.vue.d.ts +9 -7
  211. package/dist/components/LpRepeater.vue.js +1 -1
  212. package/dist/components/LpSecretField.vue.js +1 -1
  213. package/dist/components/LpSection.vue.js +1 -1
  214. package/dist/components/LpSegmented.vue.js +1 -1
  215. package/dist/components/LpSelect.vue.js +1 -1
  216. package/dist/components/LpShortcutsDialog.vue.d.ts +11 -1
  217. package/dist/components/LpShortcutsDialog.vue.js +3 -3
  218. package/dist/components/LpSidebar.vue.d.ts +13 -11
  219. package/dist/components/LpSidebar.vue.js +1 -1
  220. package/dist/components/LpSidebarNav.vue.js +1 -1
  221. package/dist/components/LpSidebarRow.vue.js +1 -1
  222. package/dist/components/LpSlider.vue.js +1 -1
  223. package/dist/components/LpSparkline.vue.d.ts +10 -1
  224. package/dist/components/LpStat.vue.js +1 -1
  225. package/dist/components/LpStatus.vue.js +1 -1
  226. package/dist/components/LpStepMark.vue.js +1 -1
  227. package/dist/components/LpStepper.vue.js +1 -1
  228. package/dist/components/LpSwitch.vue.js +1 -1
  229. package/dist/components/LpTabFace.vue.js +1 -1
  230. package/dist/components/LpTable.vue.js +9 -9
  231. package/dist/components/LpTableFilter.vue.js +1 -1
  232. package/dist/components/LpTableOfContents.vue.d.ts +5 -3
  233. package/dist/components/LpTabs.vue.js +2 -2
  234. package/dist/components/LpTagsInput.vue.js +1 -1
  235. package/dist/components/LpTextarea.vue.js +1 -1
  236. package/dist/components/LpThemeStudio.vue.js +1 -1
  237. package/dist/components/LpThemeSwitcher.vue.d.ts +8 -6
  238. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  239. package/dist/components/LpTimeField.vue.js +1 -1
  240. package/dist/components/LpToaster.vue.d.ts +7 -5
  241. package/dist/components/LpToaster.vue.js +1 -1
  242. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  243. package/dist/components/LpTour.vue.d.ts +13 -20
  244. package/dist/components/LpTour.vue.js +1 -1
  245. package/dist/components/LpTruncate.vue.js +1 -1
  246. package/dist/components/LpTypewriter.vue.d.ts +1 -1
  247. package/dist/components/LpUptimeBar.vue.d.ts +4 -2
  248. package/dist/components/LpVideoCompress.vue.d.ts +63 -0
  249. package/dist/components/LpVideoCompress.vue.js +4 -0
  250. package/dist/components/LpVideoPlayer.vue.d.ts +33 -3
  251. package/dist/components/LpVideoPlayer.vue.js +1 -1
  252. package/dist/components/LpVideoTrim.vue.d.ts +40 -3
  253. package/dist/components/LpVideoTrim.vue.js +6 -6
  254. package/dist/components/LpWindow.vue.d.ts +7 -8
  255. package/dist/components/LpWindow.vue.js +1 -1
  256. package/dist/components/LpWorkspaceSwitcher.vue.d.ts +13 -11
  257. package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
  258. package/dist/components/MenuTitle.vue.js +1 -1
  259. package/dist/components/OptionContent.vue.js +1 -1
  260. package/dist/components/PickerField.vue.js +1 -1
  261. package/dist/components/RevealToggle.vue.js +1 -1
  262. package/dist/components/TourCard.vue.js +1 -1
  263. package/dist/components/VideoFlash.vue.js +1 -1
  264. package/dist/components/VideoThumb.vue.js +1 -1
  265. package/dist/components/VideoVolume.vue.js +1 -1
  266. package/dist/components/menuWhen.js +1 -1
  267. package/dist/components/status.d.ts +3 -1
  268. package/dist/composables/usePaletteCommands.d.ts +4 -0
  269. package/dist/composables/videoTranscode.d.ts +55 -0
  270. package/dist/composables/videoTranscode.js +134 -0
  271. package/dist/icons-all.js +1 -1
  272. package/dist/index.d.ts +44 -10
  273. package/dist/index.js +748 -170
  274. package/dist/locales/uk.d.ts +165 -0
  275. package/package.json +2 -1
  276. package/src/component-names.ts +1 -0
  277. package/src/components/HintSampleTag.vue +7 -2
  278. package/src/components/LpActionBar.vue +7 -2
  279. package/src/components/LpActivityLine.vue +7 -2
  280. package/src/components/LpAppShell.vue +11 -2
  281. package/src/components/LpBadge.vue +6 -1
  282. package/src/components/LpBottomNav.vue +8 -2
  283. package/src/components/LpBreadcrumbs.vue +7 -2
  284. package/src/components/LpButton.vue +7 -2
  285. package/src/components/LpCodeBlock.vue +13 -2
  286. package/src/components/LpContextSwitcher.vue +8 -2
  287. package/src/components/LpDrawer.vue +7 -2
  288. package/src/components/LpDropzone.vue +11 -2
  289. package/src/components/LpHintExample.vue +2 -2
  290. package/src/components/LpHintLayer.vue +9 -3
  291. package/src/components/LpHints.vue +17 -3
  292. package/src/components/LpImageEditor.vue +14 -7
  293. package/src/components/LpInput.vue +7 -2
  294. package/src/components/LpInspector.vue +10 -2
  295. package/src/components/LpKeys.vue +2 -1
  296. package/src/components/LpMapPicker.vue +10 -1
  297. package/src/components/LpMediaGallery.vue +12 -3
  298. package/src/components/LpModal.vue +7 -2
  299. package/src/components/LpModalNav.vue +6 -1
  300. package/src/components/LpPagination.vue +9 -2
  301. package/src/components/LpPaletteTheme.vue +14 -1
  302. package/src/components/LpRepeater.vue +11 -2
  303. package/src/components/LpShortcutsDialog.vue +12 -1
  304. package/src/components/LpSidebar.vue +15 -12
  305. package/src/components/LpSparkline.vue +12 -2
  306. package/src/components/LpTableOfContents.vue +7 -2
  307. package/src/components/LpThemeSwitcher.vue +10 -2
  308. package/src/components/LpToaster.vue +9 -2
  309. package/src/components/LpTour.vue +15 -3
  310. package/src/components/LpUptimeBar.vue +5 -2
  311. package/src/components/LpVideoCompress.vue +237 -0
  312. package/src/components/LpVideoPlayer.vue +33 -7
  313. package/src/components/LpVideoTrim.vue +40 -9
  314. package/src/components/LpWindow.vue +8 -2
  315. package/src/components/LpWorkspaceSwitcher.vue +15 -12
  316. package/src/components/status.ts +4 -1
  317. package/src/composables/usePaletteCommands.ts +6 -1
  318. package/src/composables/videoTranscode.ts +192 -0
  319. package/src/index.ts +51 -10
  320. package/src/locales/uk.ts +746 -0
  321. package/src/nuxt.ts +5 -1
  322. package/src/theme/palette.ts +2 -1
  323. package/dist/assets/LpVideoTrim-BcGs3Sh0.css +0 -8
@@ -0,0 +1,165 @@
1
+ import type { AddressLabels } from "../components/address";
2
+ import type { CalendarLabels } from "../components/calendar";
3
+ import type { PaletteLabels } from "../components/LpCommandPalette.vue";
4
+ import type { NOTIFICATION_LABELS } from "../components/notifications";
5
+ import type { StatusLabels } from "../components/status";
6
+ import type { TimeUnitLabels } from "../components/timeSpan";
7
+ import type { CloseGuardLabels } from "../composables/useCloseGuard";
8
+ import type { PaletteControlLabels } from "../composables/usePaletteCommands";
9
+ import type { HintExampleLabels } from "../components/HintSampleTag.vue";
10
+ import type { ActionBarLabels } from "../components/LpActionBar.vue";
11
+ import type { ActivityLineLabels } from "../components/LpActivityLine.vue";
12
+ import type { AppShellLabels } from "../components/LpAppShell.vue";
13
+ import type { AutocompleteLabels } from "../components/LpAutocomplete.vue";
14
+ import type { BadgeLabels } from "../components/LpBadge.vue";
15
+ import type { BottomNavLabels } from "../components/LpBottomNav.vue";
16
+ import type { BreadcrumbsLabels } from "../components/LpBreadcrumbs.vue";
17
+ import type { ButtonLabels } from "../components/LpButton.vue";
18
+ import type { ChartText } from "../components/LpChart.vue";
19
+ import type { CodeBlockLabels } from "../components/LpCodeBlock.vue";
20
+ import type { CodeDisplayLabels } from "../components/LpCodeDisplay.vue";
21
+ import type { ColorPickerLabels } from "../components/LpColorPicker.vue";
22
+ import type { ConfirmLabels } from "../components/LpConfirmDialog.vue";
23
+ import type { ContextSwitcherLabels } from "../components/LpContextSwitcher.vue";
24
+ import type { CopyButtonLabels } from "../components/LpCopyButton.vue";
25
+ import type { CountdownLabels } from "../components/LpCountdown.vue";
26
+ import type { DataListLabels } from "../components/LpDataList.vue";
27
+ import type { DatePickerLabels } from "../components/LpDatePicker.vue";
28
+ import type { DateRangePickerLabels } from "../components/LpDateRangePicker.vue";
29
+ import type { DrawerLabels } from "../components/LpDrawer.vue";
30
+ import type { DropzoneLabels } from "../components/LpDropzone.vue";
31
+ import type { EditableLabels } from "../components/LpEditable.vue";
32
+ import type { FileTreeLabels } from "../components/LpFileTree.vue";
33
+ import type { GaugeLabels } from "../components/LpGauge.vue";
34
+ import type { HintLayerLabels } from "../components/LpHintLayer.vue";
35
+ import type { HintsLabels } from "../components/LpHints.vue";
36
+ import type { ImageEditorLabels } from "../components/LpImageEditor.vue";
37
+ import type { InputLabels } from "../components/LpInput.vue";
38
+ import type { InspectorLabels } from "../components/LpInspector.vue";
39
+ import type { LightboxLabels } from "../components/LpLightbox.vue";
40
+ import type { LoaderLabels } from "../components/LpLoader.vue";
41
+ import type { LogInspectorLabels } from "../components/LpLogInspector.vue";
42
+ import type { LogViewerLabels } from "../components/LpLogViewer.vue";
43
+ import type { MapPickerLabels } from "../components/LpMapPicker.vue";
44
+ import type { MediaGalleryLabels } from "../components/LpMediaGallery.vue";
45
+ import type { ModalLabels } from "../components/LpModal.vue";
46
+ import type { ModalNavLabels } from "../components/LpModalNav.vue";
47
+ import type { NumberFieldLabels } from "../components/LpNumberField.vue";
48
+ import type { PaginationLabels } from "../components/LpPagination.vue";
49
+ import type { PaletteThemeLabels } from "../components/LpPaletteTheme.vue";
50
+ import type { PasswordInputLabels } from "../components/LpPasswordInput.vue";
51
+ import type { PhoneInputLabels } from "../components/LpPhoneInput.vue";
52
+ import type { PieText } from "../components/LpPie.vue";
53
+ import type { PipelineLabels } from "../components/LpPipeline.vue";
54
+ import type { QuotaLabels } from "../components/LpQuota.vue";
55
+ import type { RangeCalendarLabels } from "../components/LpRangeCalendar.vue";
56
+ import type { RepeaterLabels } from "../components/LpRepeater.vue";
57
+ import type { SecretFieldLabels } from "../components/LpSecretField.vue";
58
+ import type { SelectLabels } from "../components/LpSelect.vue";
59
+ import type { ShortcutsLabels } from "../components/LpShortcutsDialog.vue";
60
+ import type { SidebarLabels } from "../components/LpSidebar.vue";
61
+ import type { SparklineLabels } from "../components/LpSparkline.vue";
62
+ import type { TableLabels } from "../components/LpTable.vue";
63
+ import type { TableOfContentsLabels } from "../components/LpTableOfContents.vue";
64
+ import type { TagsInputLabels } from "../components/LpTagsInput.vue";
65
+ import type { ThemeStudioLabels } from "../components/LpThemeStudio.vue";
66
+ import type { ThemeSwitcherLabels } from "../components/LpThemeSwitcher.vue";
67
+ import type { ToasterLabels } from "../components/LpToaster.vue";
68
+ import type { TopologyLabels } from "../components/LpTopologyCanvas.vue";
69
+ import type { TourLabels } from "../components/LpTour.vue";
70
+ import type { UptimeBarLabels } from "../components/LpUptimeBar.vue";
71
+ import type { VideoCompressLabels } from "../components/LpVideoCompress.vue";
72
+ import type { VideoPlayerLabels } from "../components/LpVideoPlayer.vue";
73
+ import type { VideoTrimLabels } from "../components/LpVideoTrim.vue";
74
+ import type { WindowLabels } from "../components/LpWindow.vue";
75
+ import type { WorkspaceSwitcherLabels } from "../components/LpWorkspaceSwitcher.vue";
76
+ /**
77
+ * Every declared key of a labels type, required, and nothing else: an index
78
+ * signature (`[key: string]: string`) is dropped so a misspelt key is an
79
+ * excess-property error instead of being silently accepted.
80
+ */
81
+ export type FullLabels<T> = {
82
+ [K in keyof T as string extends K ? never : K]-?: string;
83
+ };
84
+ /** One full label set per scope: the shape of a complete language pack. */
85
+ export interface KitLabels {
86
+ actionBar: FullLabels<ActionBarLabels>;
87
+ activityLine: FullLabels<ActivityLineLabels>;
88
+ addressInput: FullLabels<AddressLabels>;
89
+ appShell: FullLabels<AppShellLabels>;
90
+ autocomplete: FullLabels<AutocompleteLabels>;
91
+ badge: FullLabels<BadgeLabels>;
92
+ bottomNav: FullLabels<BottomNavLabels>;
93
+ breadcrumbs: FullLabels<BreadcrumbsLabels>;
94
+ button: FullLabels<ButtonLabels>;
95
+ calendar: FullLabels<CalendarLabels>;
96
+ chart: FullLabels<ChartText>;
97
+ closeGuard: FullLabels<CloseGuardLabels>;
98
+ codeBlock: FullLabels<CodeBlockLabels>;
99
+ codeDisplay: FullLabels<CodeDisplayLabels>;
100
+ colorPicker: FullLabels<ColorPickerLabels>;
101
+ confirm: FullLabels<ConfirmLabels>;
102
+ contextSwitcher: FullLabels<ContextSwitcherLabels>;
103
+ copyButton: FullLabels<CopyButtonLabels>;
104
+ countdown: FullLabels<CountdownLabels>;
105
+ dataList: FullLabels<DataListLabels>;
106
+ datePicker: FullLabels<DatePickerLabels>;
107
+ dateRangePicker: FullLabels<DateRangePickerLabels>;
108
+ drawer: FullLabels<DrawerLabels>;
109
+ dropzone: FullLabels<DropzoneLabels>;
110
+ editable: FullLabels<EditableLabels & {
111
+ required: string;
112
+ }>;
113
+ fileTree: FullLabels<FileTreeLabels>;
114
+ gauge: FullLabels<GaugeLabels>;
115
+ hintExample: FullLabels<HintExampleLabels>;
116
+ hintLayer: FullLabels<HintLayerLabels>;
117
+ hints: FullLabels<HintsLabels>;
118
+ imageEditor: FullLabels<ImageEditorLabels>;
119
+ input: FullLabels<InputLabels>;
120
+ inspector: FullLabels<InspectorLabels>;
121
+ lightbox: FullLabels<LightboxLabels>;
122
+ loader: FullLabels<LoaderLabels>;
123
+ logInspector: FullLabels<LogInspectorLabels>;
124
+ logViewer: FullLabels<LogViewerLabels>;
125
+ mapPicker: FullLabels<MapPickerLabels>;
126
+ mediaGallery: FullLabels<MediaGalleryLabels>;
127
+ modal: FullLabels<ModalLabels>;
128
+ modalNav: FullLabels<ModalNavLabels>;
129
+ /** The deprecated keys of `NotificationLabels` are no longer read, so not required. */
130
+ notifications: FullLabels<typeof NOTIFICATION_LABELS>;
131
+ numberField: FullLabels<NumberFieldLabels>;
132
+ pagination: FullLabels<PaginationLabels>;
133
+ palette: FullLabels<PaletteLabels>;
134
+ paletteControl: FullLabels<PaletteControlLabels>;
135
+ paletteTheme: FullLabels<PaletteThemeLabels>;
136
+ passwordInput: FullLabels<PasswordInputLabels>;
137
+ phoneInput: FullLabels<PhoneInputLabels>;
138
+ pie: FullLabels<PieText>;
139
+ pipeline: FullLabels<PipelineLabels>;
140
+ quota: FullLabels<QuotaLabels>;
141
+ rangeCalendar: FullLabels<RangeCalendarLabels>;
142
+ repeater: FullLabels<RepeaterLabels>;
143
+ secretField: FullLabels<SecretFieldLabels>;
144
+ select: FullLabels<SelectLabels>;
145
+ shortcuts: FullLabels<ShortcutsLabels>;
146
+ sidebar: FullLabels<SidebarLabels>;
147
+ sparkline: FullLabels<SparklineLabels>;
148
+ status: FullLabels<StatusLabels>;
149
+ table: FullLabels<TableLabels>;
150
+ tagsInput: FullLabels<TagsInputLabels>;
151
+ themeStudio: FullLabels<ThemeStudioLabels>;
152
+ themeSwitcher: FullLabels<ThemeSwitcherLabels>;
153
+ time: FullLabels<TimeUnitLabels>;
154
+ toast: FullLabels<ToasterLabels>;
155
+ toc: FullLabels<TableOfContentsLabels>;
156
+ topology: FullLabels<TopologyLabels>;
157
+ tour: FullLabels<TourLabels>;
158
+ uptimeBar: FullLabels<UptimeBarLabels>;
159
+ videoCompress: FullLabels<VideoCompressLabels>;
160
+ videoPlayer: FullLabels<VideoPlayerLabels>;
161
+ videoTrim: FullLabels<VideoTrimLabels>;
162
+ window: FullLabels<WindowLabels>;
163
+ workspaces: FullLabels<WorkspaceSwitcherLabels>;
164
+ }
165
+ export declare const uk: KitLabels;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leavepulse/ui",
3
- "version": "0.83.1",
3
+ "version": "0.85.0",
4
4
  "type": "module",
5
5
  "description": "LeavePulse token-driven Vue component kit.",
6
6
  "repository": {
@@ -120,6 +120,7 @@
120
120
  "@vue-flow/core": "^1.48.2",
121
121
  "@vue-flow/minimap": "^1.5.4",
122
122
  "libphonenumber-js": "^1.12.0",
123
+ "mediabunny": "^1.65.2",
123
124
  "tailwind-merge": "^3.6.0",
124
125
  "vaul-vue": "^0.4.1"
125
126
  }
@@ -140,6 +140,7 @@ export const COMPONENT_NAMES = [
140
140
  "LpTypewriter",
141
141
  "LpUptimeBar",
142
142
  "LpVideoBackdrop",
143
+ "LpVideoCompress",
143
144
  "LpVideoPlayer",
144
145
  "LpVideoTrim",
145
146
  "LpWindow",
@@ -6,9 +6,14 @@
6
6
  */
7
7
  import { useLabels } from "../composables/useLpConfig"
8
8
 
9
- const props = defineProps<{ labels?: Partial<{ badge: string }> }>()
9
+ /** Wording of the example tag. */
10
+ export type HintExampleLabels = {
11
+ badge: string
12
+ }
10
13
 
11
- const labels = useLabels("hintExample", { badge: "Example" }, () => props.labels)
14
+ const props = defineProps<{ labels?: Partial<HintExampleLabels> }>()
15
+
16
+ const labels = useLabels<HintExampleLabels>("hintExample", { badge: "Example" }, () => props.labels)
12
17
  </script>
13
18
 
14
19
  <template>
@@ -50,6 +50,11 @@ export interface ActionBarAction {
50
50
  hotkey?: string
51
51
  }
52
52
 
53
+ /** Wording of the action bar's own controls. */
54
+ export type ActionBarLabels = {
55
+ dismiss: string
56
+ }
57
+
53
58
  const props = withDefaults(
54
59
  defineProps<{
55
60
  /** Shown or not (v-model:open, or a plain :open). */
@@ -97,7 +102,7 @@ const props = withDefaults(
97
102
  maxWidth?: string
98
103
  /** Accessible name for the landmark. Falls back to `title`. */
99
104
  ariaLabel?: string
100
- labels?: Partial<{ dismiss: string }>
105
+ labels?: Partial<ActionBarLabels>
101
106
  }>(),
102
107
  {
103
108
  open: true,
@@ -113,7 +118,7 @@ const emit = defineEmits<{
113
118
  }>()
114
119
 
115
120
  const slots = useSlots()
116
- const text = useLabels("actionBar", { dismiss: "Dismiss" }, () => props.labels)
121
+ const text = useLabels<ActionBarLabels>("actionBar", { dismiss: "Dismiss" }, () => props.labels)
117
122
 
118
123
  // The last action is the primary one unless the caller has said otherwise; the
119
124
  // rest default to `ghost` so a bar with three buttons still has one obvious
@@ -25,6 +25,11 @@ import { useLabels } from "../composables/useLpConfig"
25
25
  import { useMergedAttrs } from "../composables/useMergedClass"
26
26
  import { meterFraction, TONE_COLOR, type MeterTone } from "./meter"
27
27
 
28
+ /** Wording of the activity line. */
29
+ export type ActivityLineLabels = {
30
+ busy: string
31
+ }
32
+
28
33
  const props = withDefaults(
29
34
  defineProps<{
30
35
  /** Work is in flight. Going false finishes the line and fades it out. */
@@ -46,12 +51,12 @@ const props = withDefaults(
46
51
  * line at all: a flash of activity for a 90 ms request is noise.
47
52
  */
48
53
  delay?: number
49
- labels?: Partial<{ busy: string }>
54
+ labels?: Partial<ActivityLineLabels>
50
55
  }>(),
51
56
  { active: true, value: null, max: 100, tone: "brand", placement: "top", height: 2, delay: 150 },
52
57
  )
53
58
 
54
- const text = useLabels("activityLine", { busy: "Loading" }, () => props.labels)
59
+ const text = useLabels<ActivityLineLabels>("activityLine", { busy: "Loading" }, () => props.labels)
55
60
 
56
61
  /*
57
62
  * Whether it is up at all is the same question LpLoader answers, so it is
@@ -3,6 +3,15 @@
3
3
  // appended to it, so opt out of the automatic pass-through that would add it
4
4
  // a second time, unmerged.
5
5
  export default { inheritAttrs: false }
6
+
7
+ /** Wording of the shell's own controls and landmarks. */
8
+ export type AppShellLabels = {
9
+ openMenu: string
10
+ skipToContent: string
11
+ backToTop: string
12
+ aside: string
13
+ contextNav: string
14
+ }
6
15
  </script>
7
16
 
8
17
  <script setup lang="ts">
@@ -151,7 +160,7 @@ const props = withDefaults(
151
160
  /** Loading skeleton for the nav. */
152
161
  loading?: boolean
153
162
  /** Text overrides: the burger's name and the skip link. */
154
- labels?: Partial<{ openMenu: string; skipToContent: string; backToTop: string; aside: string; contextNav: string }>
163
+ labels?: Partial<AppShellLabels>
155
164
  /** Icon-only rail (v-model:compact). Forwarded to LpSidebar. */
156
165
  compact?: boolean
157
166
  /** The person sizes the rail and folds it to icons. Forwarded to LpSidebar. */
@@ -292,7 +301,7 @@ const pageTitle = computed(() => {
292
301
  // Its own state when the app does not bind it: the shell's burger must open
293
302
  // the drawer either way. v-model:open still controls it from outside.
294
303
  const drawerOpen = defineModel<boolean>("open", { default: false })
295
- const text = useLabels(
304
+ const text = useLabels<AppShellLabels>(
296
305
  "appShell",
297
306
  { openMenu: "Open menu", skipToContent: "Skip to content", backToTop: "Back to top", aside: "Details", contextNav: "In this section" },
298
307
  () => props.labels,
@@ -2,6 +2,11 @@
2
2
  // The root class is merged with the consumer's (useMergedClass), so the raw
3
3
  // `class` must not also land on the span unmerged.
4
4
  export default { inheritAttrs: false }
5
+
6
+ /** Wording of the badge's remove button. */
7
+ export type BadgeLabels = {
8
+ remove: string
9
+ }
5
10
  </script>
6
11
 
7
12
  <script setup lang="ts">
@@ -94,7 +99,7 @@ defineSlots<{
94
99
  remove?: () => unknown
95
100
  }>()
96
101
 
97
- const text = useLabels("badge", { remove: "Remove" })
102
+ const text = useLabels<BadgeLabels>("badge", { remove: "Remove" })
98
103
 
99
104
  const classes = useMergedClass(() => badge({ tone: props.tone, size: props.size, removable: props.removable }))
100
105
 
@@ -19,6 +19,12 @@ import LpTabFace from "./LpTabFace.vue"
19
19
  import type { SidebarItem } from "./sidebar"
20
20
  import { BOTTOM_BAR, BOTTOM_ITEM, BOTTOM_MARKER } from "./tabs"
21
21
 
22
+ /** Wording of the bottom navigation. */
23
+ export type BottomNavLabels = {
24
+ nav: string
25
+ more: string
26
+ }
27
+
22
28
  const props = withDefaults(
23
29
  defineProps<{
24
30
  items: SidebarItem[]
@@ -34,7 +40,7 @@ const props = withDefaults(
34
40
  /** The id of what "More" opens, while it is in the page. */
35
41
  moreControls?: string
36
42
  label?: string
37
- labels?: Partial<{ nav: string; more: string }>
43
+ labels?: Partial<BottomNavLabels>
38
44
  }>(),
39
45
  { more: false, moreActive: false, moreExpanded: false },
40
46
  )
@@ -44,7 +50,7 @@ const emit = defineEmits<{
44
50
  (e: "more"): void
45
51
  }>()
46
52
 
47
- const text = useLabels("bottomNav", { nav: "Main", more: "More" }, () => props.labels)
53
+ const text = useLabels<BottomNavLabels>("bottomNav", { nav: "Main", more: "More" }, () => props.labels)
48
54
  const linkComponent = useLinkComponent()
49
55
  const pillTransition = usePillTransition()
50
56
  const markerId = `lp-bottom-nav-${useId()}`
@@ -24,6 +24,11 @@ export interface Crumb {
24
24
  icon?: string
25
25
  }
26
26
 
27
+ /** Wording of the breadcrumb landmark. */
28
+ export type BreadcrumbsLabels = {
29
+ nav: string
30
+ }
31
+
27
32
  const props = defineProps<{
28
33
  items: Crumb[]
29
34
  /**
@@ -31,11 +36,11 @@ const props = defineProps<{
31
36
  * link component from provideLpConfig and other hrefs a plain <a>.
32
37
  */
33
38
  as?: string | Component
34
- labels?: Partial<{ nav: string }>
39
+ labels?: Partial<BreadcrumbsLabels>
35
40
  }>()
36
41
  defineEmits<{ (e: "navigate", item: Crumb, index: number): void }>()
37
42
 
38
- const text = useLabels("breadcrumbs", { nav: "Breadcrumb" }, () => props.labels)
43
+ const text = useLabels<BreadcrumbsLabels>("breadcrumbs", { nav: "Breadcrumb" }, () => props.labels)
39
44
  const linkComponent = useLinkComponent()
40
45
 
41
46
  function linkOf(item: Crumb) {
@@ -2,6 +2,11 @@
2
2
  // The consumer's `class` is merged into the root's own rather than appended,
3
3
  // so `class="h-12"` or `class="px-6"` beats the size's defaults.
4
4
  export default { inheritAttrs: false }
5
+
6
+ /** Wording of the button's menu group. */
7
+ export type ButtonLabels = {
8
+ group: string
9
+ }
5
10
  </script>
6
11
 
7
12
  <script setup lang="ts">
@@ -133,7 +138,7 @@ const props = withDefaults(
133
138
  hotkey?: string
134
139
  /** The key reference's section for `hotkey`. */
135
140
  hotkeyGroup?: string
136
- labels?: Partial<{ group: string }>
141
+ labels?: Partial<ButtonLabels>
137
142
  }>(),
138
143
  { palette: undefined, type: "button" },
139
144
  )
@@ -145,7 +150,7 @@ const emit = defineEmits<{
145
150
  (e: "error", error: unknown): void
146
151
  }>()
147
152
 
148
- const labels = useLabels("button", { group: "Actions" }, () => props.labels)
153
+ const labels = useLabels<ButtonLabels>("button", { group: "Actions" }, () => props.labels)
149
154
  const toast = useToast()
150
155
  const attrs = useAttrs()
151
156
  const instance = getCurrentInstance()
@@ -29,6 +29,17 @@ import LpCopyButton from "./LpCopyButton.vue"
29
29
  import LpIcon from "./LpIcon.vue"
30
30
  import { useMergedAttrs } from "../composables/useMergedClass"
31
31
 
32
+ /** Wording of the code block. `{n}` in `lines` is the line count. */
33
+ export type CodeBlockLabels = {
34
+ unlock: string
35
+ lock: string
36
+ copy: string
37
+ copied: string
38
+ imports: string
39
+ details: string
40
+ lines: string
41
+ }
42
+
32
43
  const props = withDefaults(
33
44
  defineProps<{
34
45
  /** The code (v-model when editable). */
@@ -50,7 +61,7 @@ const props = withDefaults(
50
61
  height?: string
51
62
  /** Auto-collapse a leading import/package block (no markers needed). */
52
63
  foldImports?: boolean
53
- labels?: Partial<Record<"unlock" | "lock" | "copy" | "copied" | "imports" | "details" | "lines", string>>
64
+ labels?: Partial<CodeBlockLabels>
54
65
  }>(),
55
66
  {
56
67
  lang: "plain",
@@ -68,7 +79,7 @@ const emit = defineEmits<{
68
79
  (e: "update:locked", value: boolean): void
69
80
  }>()
70
81
 
71
- const text = useLabels(
82
+ const text = useLabels<CodeBlockLabels>(
72
83
  "codeBlock",
73
84
  {
74
85
  unlock: "Unlock to edit",
@@ -17,6 +17,12 @@ import LpIcon from "./LpIcon.vue"
17
17
  import type { ContextMenuItemDef } from "./LpContextMenu.vue"
18
18
  import type { AppContext } from "./sidebar"
19
19
 
20
+ /** Wording of the context switcher. `{label}` is the current context. */
21
+ export type ContextSwitcherLabels = {
22
+ switch: string
23
+ title: string
24
+ }
25
+
20
26
  const props = withDefaults(
21
27
  defineProps<{
22
28
  contexts: AppContext[]
@@ -24,14 +30,14 @@ const props = withDefaults(
24
30
  modelValue?: string
25
31
  /** The icon rail: the trigger is a square with the icon or an initial. */
26
32
  compact?: boolean
27
- labels?: Partial<{ switch: string; title: string }>
33
+ labels?: Partial<ContextSwitcherLabels>
28
34
  }>(),
29
35
  { compact: false },
30
36
  )
31
37
 
32
38
  const emit = defineEmits<{ (e: "update:modelValue", id: string): void }>()
33
39
 
34
- const text = useLabels("contextSwitcher", { switch: "{label}, switch", title: "Switch to" }, () => props.labels)
40
+ const text = useLabels<ContextSwitcherLabels>("contextSwitcher", { switch: "{label}, switch", title: "Switch to" }, () => props.labels)
35
41
 
36
42
  const current = computed(() => props.contexts.find((c) => c.id === props.modelValue) ?? props.contexts[0])
37
43
  const initial = computed(() => [...(current.value?.label ?? "")][0] ?? "")
@@ -7,6 +7,11 @@ import { ref as sharedRef, type Ref } from "vue"
7
7
  const EDGE_KEY = Symbol.for("@leavepulse/ui:drawer-edge-owner")
8
8
  type GlobalWithEdge = typeof globalThis & { [EDGE_KEY]?: Ref<symbol | null> }
9
9
  const edgeOwner = ((globalThis as GlobalWithEdge)[EDGE_KEY] ??= sharedRef<symbol | null>(null))
10
+
11
+ /** Wording of the drawer's close button. */
12
+ export type DrawerLabels = {
13
+ close: string
14
+ }
10
15
  </script>
11
16
 
12
17
  <script setup lang="ts">
@@ -142,7 +147,7 @@ const props = withDefaults(
142
147
  * overlay the app already drives from its route.
143
148
  */
144
149
  history?: OverlayHistoryMode
145
- labels?: Partial<{ close: string }>
150
+ labels?: Partial<DrawerLabels>
146
151
  }>(),
147
152
  {
148
153
  history: undefined,
@@ -159,7 +164,7 @@ const props = withDefaults(
159
164
  )
160
165
 
161
166
  const frosted = useGlass(() => props.glass)
162
- const text = useLabels("drawer", { close: "Close" }, () => props.labels)
167
+ const text = useLabels<DrawerLabels>("drawer", { close: "Close" }, () => props.labels)
163
168
 
164
169
  const emit = defineEmits<{
165
170
  (e: "update:open", value: boolean): void
@@ -48,6 +48,15 @@ import { inTextField } from "../composables/textEntry"
48
48
  import { useOutsideGuard, usePortalTarget, useView, viewWindow } from "../composables/useView"
49
49
 
50
50
 
51
+ /** Wording of the dropzone's link entry. */
52
+ export type DropzoneLabels = {
53
+ orLink: string
54
+ placeholder: string
55
+ done: string
56
+ keys: string
57
+ invalid: string
58
+ }
59
+
51
60
  const props = withDefaults(
52
61
  defineProps<{
53
62
  /** Same syntax as the input's: "image/*", ".yaml,.yml". */
@@ -89,7 +98,7 @@ const props = withDefaults(
89
98
  * "or a link". Arrives as the `link` event.
90
99
  */
91
100
  links?: boolean
92
- labels?: Partial<{ orLink: string; placeholder: string; done: string; keys: string; invalid: string }>
101
+ labels?: Partial<DropzoneLabels>
93
102
  }>(),
94
103
  {
95
104
  accept: "",
@@ -120,7 +129,7 @@ const emit = defineEmits<{
120
129
  (e: "link", url: string): void
121
130
  }>()
122
131
 
123
- const labels = useLabels(
132
+ const labels = useLabels<DropzoneLabels>(
124
133
  "dropzone",
125
134
  {
126
135
  orLink: "or a link",
@@ -32,14 +32,14 @@
32
32
  */
33
33
  import { computed, watch } from "vue"
34
34
  import { hints } from "../composables/useHints"
35
- import HintSampleTag from "./HintSampleTag.vue"
35
+ import HintSampleTag, { type HintExampleLabels } from "./HintSampleTag.vue"
36
36
  import LpCollapse from "./LpCollapse.vue"
37
37
 
38
38
  const props = defineProps<{
39
39
  /** The hint id this stands in for, as in `v-hint`, or several for a sample with parts. */
40
40
  hint: string | string[]
41
41
  inline?: boolean
42
- labels?: Partial<{ badge: string }>
42
+ labels?: Partial<HintExampleLabels>
43
43
  }>()
44
44
 
45
45
  const ids = computed(() => (Array.isArray(props.hint) ? props.hint : [props.hint]))
@@ -24,6 +24,12 @@ import LpBadge from "./LpBadge.vue"
24
24
  import LpButton from "./LpButton.vue"
25
25
  import { useOutsideGuard, usePortalTarget } from "../composables/useView"
26
26
 
27
+ /** Wording of a hint note. */
28
+ export type HintLayerLabels = {
29
+ gotIt: string
30
+ badge: string
31
+ }
32
+
27
33
  const props = withDefaults(
28
34
  defineProps<{
29
35
  /** Ids to mark, most important first. */
@@ -31,15 +37,15 @@ const props = withDefaults(
31
37
  notes: Record<string, HintNote>
32
38
  /** At most this many dots at once, so a page full of news stays calm. */
33
39
  limit?: number
34
- labels?: Partial<typeof DEFAULT_LABELS>
40
+ labels?: Partial<HintLayerLabels>
35
41
  }>(),
36
42
  { limit: 3 },
37
43
  )
38
44
 
39
45
  const emit = defineEmits<{ (e: "read", id: string): void }>()
40
46
 
41
- const DEFAULT_LABELS = { gotIt: "Got it", badge: "New" }
42
- const labels = useLabels("hintLayer", DEFAULT_LABELS, () => props.labels)
47
+ const DEFAULT_LABELS: HintLayerLabels = { gotIt: "Got it", badge: "New" }
48
+ const labels = useLabels<HintLayerLabels>("hintLayer", DEFAULT_LABELS, () => props.labels)
43
49
 
44
50
  const OPEN_DELAY_MS = 350
45
51
 
@@ -16,12 +16,26 @@ import LpActionBar, { type ActionBarAction } from "./LpActionBar.vue"
16
16
  import LpHintLayer from "./LpHintLayer.vue"
17
17
  import LpTour from "./LpTour.vue"
18
18
 
19
+ /** Wording of the hint offers. `{page}` is the page's name. */
20
+ export type HintsLabels = {
21
+ tourTitle: string
22
+ tourText: string
23
+ assignedTitle: string
24
+ assignedText: string
25
+ newsTitle: string
26
+ show: string
27
+ notNow: string
28
+ never: string
29
+ gotIt: string
30
+ noThanks: string
31
+ }
32
+
19
33
  const props = defineProps<{
20
34
  system: HintSystem
21
- labels?: Partial<typeof DEFAULT_LABELS>
35
+ labels?: Partial<HintsLabels>
22
36
  }>()
23
37
 
24
- const DEFAULT_LABELS = {
38
+ const DEFAULT_LABELS: HintsLabels = {
25
39
  tourTitle: "New to {page}?",
26
40
  tourText: "A one-minute look at what you can do here.",
27
41
  assignedTitle: "You were asked to look at {page}",
@@ -33,7 +47,7 @@ const DEFAULT_LABELS = {
33
47
  gotIt: "Got it",
34
48
  noThanks: "No thanks",
35
49
  }
36
- const labels = useLabels("hints", DEFAULT_LABELS, () => props.labels)
50
+ const labels = useLabels<HintsLabels>("hints", DEFAULT_LABELS, () => props.labels)
37
51
 
38
52
  provideHintSystem(props.system)
39
53