@leavepulse/ui 0.81.0 → 0.83.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 (270) hide show
  1. package/dist/assets/LpVideoTrim-BcGs3Sh0.css +8 -0
  2. package/dist/assets/VideoFlash-VuPkC7QV.css +23 -0
  3. package/dist/chunks/{ContextMenuItems-DLK4q-mm.js → ContextMenuItems-h-apPY2d.js} +1 -1
  4. package/dist/chunks/{DropzoneLinkField-CcJu8De3.js → DropzoneLinkField-_Op8b_ee.js} +1 -1
  5. package/dist/chunks/{FieldLeading-CldGLINn.js → FieldLeading-mOMcwNqi.js} +1 -1
  6. package/dist/chunks/{FieldWrapper-Cj8ZgoKp.js → FieldWrapper-DtT-AIcn.js} +1 -1
  7. package/dist/chunks/{IconCloseButton-CV4iHRpy.js → IconCloseButton-YmisskyZ.js} +1 -1
  8. package/dist/chunks/{LayoutCanvas-BQbq7Ekw.js → LayoutCanvas-BrISZEBr.js} +1 -1
  9. package/dist/chunks/{LayoutNode-BMedRk3g.js → LayoutNode-CwMQ8ACa.js} +1 -1
  10. package/dist/chunks/{LpActionBar-C7g52Cyo.js → LpActionBar-CVVC6YbC.js} +1 -1
  11. package/dist/chunks/{LpAddressInput-1uakhQk5.js → LpAddressInput-tiuJ-bru.js} +7 -7
  12. package/dist/chunks/{LpAlert-DWFeR82L.js → LpAlert-8-x4H_Nk.js} +1 -1
  13. package/dist/chunks/{LpAppShell-BBINfN1v.js → LpAppShell-BW2YMq-A.js} +4 -4
  14. package/dist/chunks/{LpAutocomplete-DY3LvpB9.js → LpAutocomplete-BZODIops.js} +4 -4
  15. package/dist/chunks/{LpAvatar-CEZmMcGh.js → LpAvatar-BZq4nH53.js} +1 -1
  16. package/dist/chunks/{LpBadge-C_VqLHtg.js → LpBadge-Cz0pSSUu.js} +1 -1
  17. package/dist/chunks/{LpBottomNav-4I89sPDZ.js → LpBottomNav-DVdR5Mry.js} +1 -1
  18. package/dist/chunks/{LpBreadcrumbs-1BBzrfxG.js → LpBreadcrumbs-B2jphAel.js} +1 -1
  19. package/dist/chunks/{LpCalendar-D2dcXjUK.js → LpCalendar-C0_N5LVT.js} +1 -1
  20. package/dist/chunks/{LpCheckbox-CN-MEnbX.js → LpCheckbox-CwqLNdw4.js} +2 -2
  21. package/dist/chunks/{LpCodeBlock-Cj7zk4QE.js → LpCodeBlock-Dcss6bnl.js} +2 -2
  22. package/dist/chunks/{LpCodeDisplay-COzosm77.js → LpCodeDisplay-CLms1zDY.js} +4 -4
  23. package/dist/chunks/{LpColorPicker-BezW6DX1.js → LpColorPicker-CbIY450X.js} +3 -3
  24. package/dist/chunks/{LpConfirmDialog-D9GkDMYr.js → LpConfirmDialog-RmP4z6va.js} +2 -2
  25. package/dist/chunks/{LpConfirmHost-BH7kf0dm.js → LpConfirmHost-DheBgRMB.js} +1 -1
  26. package/dist/chunks/{LpContextMenu-bn5bc9t7.js → LpContextMenu-DIYhlap8.js} +2 -2
  27. package/dist/chunks/{LpContextSwitcher-CGr6ZAuq.js → LpContextSwitcher-fDA6ERl-.js} +2 -2
  28. package/dist/chunks/{LpCopyButton-BSr6YaFR.js → LpCopyButton-DSqKFGEb.js} +1 -1
  29. package/dist/chunks/{LpDataList-Cv7ZUlyy.js → LpDataList-f9UjSx9m.js} +2 -2
  30. package/dist/chunks/{LpDatePicker-CR7vsb5M.js → LpDatePicker-3kDQLVbg.js} +5 -5
  31. package/dist/chunks/{LpDateRangePicker-B9fRO3G6.js → LpDateRangePicker-DUPiTt0_.js} +3 -3
  32. package/dist/chunks/{LpDisclosure-CE4mneaE.js → LpDisclosure-C5WZjhbQ.js} +1 -1
  33. package/dist/chunks/{LpDrawer-DU_5MqBz.js → LpDrawer-CkYvIGIa.js} +1 -1
  34. package/dist/chunks/{LpDropdownMenu-_u6GPWhp.js → LpDropdownMenu-zSsK2Xra.js} +6 -3
  35. package/dist/chunks/{LpEditable-DYoMayjt.js → LpEditable-CP7Y_lKg.js} +2 -2
  36. package/dist/chunks/{LpEmptyState-DpdHeSfz.js → LpEmptyState-dsc5x-ya.js} +1 -1
  37. package/dist/chunks/{LpFieldNotice-DONFCWV7.js → LpFieldNotice-TOTbWvgv.js} +1 -1
  38. package/dist/chunks/{LpFileTree-f5ktGqsN.js → LpFileTree-BPjnOTln.js} +4 -4
  39. package/dist/chunks/{LpFileTreeNode-nbp-JwV9.js → LpFileTreeNode-_-MiWmie.js} +4 -4
  40. package/dist/chunks/{LpFormField-Bz50_LZW.js → LpFormField-BJwD1iEF.js} +1 -1
  41. package/dist/chunks/{LpHintLayer-B6bA5Cb_.js → LpHintLayer-CmfGnxYu.js} +1 -1
  42. package/dist/chunks/{LpHints-DyJ5hVcr.js → LpHints-C2Xvc1Fd.js} +3 -3
  43. package/dist/chunks/{LpIcon-BCQLuHSP.js → LpIcon-CoOLz1oJ.js} +1 -1
  44. package/dist/chunks/{LpInfraNode-BS1RXYAs.js → LpInfraNode-CW3qsM-U.js} +2 -2
  45. package/dist/chunks/{LpInput-BjbXdjcW.js → LpInput-BVWhkPuN.js} +3 -3
  46. package/dist/chunks/{LpInspector-BIyJyM6r.js → LpInspector-REmoX_es.js} +4 -4
  47. package/dist/chunks/{LpLightbox-CSAJuUaJ.js → LpLightbox-C3FFTYP5.js} +65 -20
  48. package/dist/chunks/{LpLogInspector-OJEz1vod.js → LpLogInspector-Cs8Z_fM0.js} +2 -2
  49. package/dist/chunks/{LpLogViewer-CRLwQpk0.js → LpLogViewer-DQRGe-ZK.js} +6 -6
  50. package/dist/chunks/{LpMapPicker-DW2EnrCJ.js → LpMapPicker-CQnQPgKm.js} +1 -1
  51. package/dist/chunks/{LpMediaGallery-BNEYctDP.js → LpMediaGallery-DkKqTy9P.js} +20 -8
  52. package/dist/chunks/{LpModal-DdTqdf4x.js → LpModal-DwejR7VP.js} +1 -1
  53. package/dist/chunks/{LpModalNav-BL7Dp0om.js → LpModalNav-D1-dSe6f.js} +3 -3
  54. package/dist/chunks/{LpNotificationBell-d0F6MWxD.js → LpNotificationBell-EKLkN0sp.js} +4 -4
  55. package/dist/chunks/{LpNotificationFeed-BIe5lapb.js → LpNotificationFeed-Dc-yQ4NH.js} +4 -4
  56. package/dist/chunks/{LpNumberField-D5Dx-hzD.js → LpNumberField-DvUjEMp-.js} +3 -3
  57. package/dist/chunks/{LpOtpInput-BVl74Lfl.js → LpOtpInput-xvDO14f4.js} +1 -1
  58. package/dist/chunks/{LpPagination-D0wb-Uru.js → LpPagination-BFZY8dFn.js} +1 -1
  59. package/dist/chunks/{LpPaletteTheme-DdilCBXA.js → LpPaletteTheme-EBJv0Bwz.js} +2 -2
  60. package/dist/chunks/{LpPasswordInput-DUtqWMkA.js → LpPasswordInput-DRJR3fF1.js} +2 -2
  61. package/dist/chunks/{LpPhoneInput-CalRjkqc.js → LpPhoneInput-BGOOtUoW.js} +3 -3
  62. package/dist/chunks/{LpPie-BVAEmVBT.js → LpPie-Deyn8h5J.js} +2 -2
  63. package/dist/chunks/{LpPipeline-Dk7_sRP1.js → LpPipeline-9ChjeNh5.js} +2 -2
  64. package/dist/chunks/{LpQuota-DKx0IZYA.js → LpQuota-CNh5eF_p.js} +1 -1
  65. package/dist/chunks/{LpRadioGroup-E3SP6j9h.js → LpRadioGroup-Br2Nl9Gr.js} +2 -2
  66. package/dist/chunks/{LpRangeCalendar-BFJFaen4.js → LpRangeCalendar-D66Y3U_w.js} +1 -1
  67. package/dist/chunks/{LpRangeSlider-b6ipywRB.js → LpRangeSlider-eX-fIlOw.js} +1 -1
  68. package/dist/chunks/{LpRepeater-BLrw62Bh.js → LpRepeater-0XvnlVd_.js} +2 -2
  69. package/dist/chunks/{LpSecretField-BV8BNjKc.js → LpSecretField-1RCooChq.js} +5 -5
  70. package/dist/chunks/{LpSection-CghNNxIv.js → LpSection-B9gbJJcP.js} +1 -1
  71. package/dist/chunks/{LpSegmented-DjvrHL_G.js → LpSegmented-hIjGzGTo.js} +2 -2
  72. package/dist/chunks/{LpSelect-DYPimzAZ.js → LpSelect-DugubwTc.js} +4 -4
  73. package/dist/chunks/{LpSidebar-D3S8rYFf.js → LpSidebar-DevSoN8W.js} +4 -4
  74. package/dist/chunks/{LpSidebarNav-Dlse8vxT.js → LpSidebarNav-DwQQ3KXe.js} +3 -3
  75. package/dist/chunks/{LpSidebarRow-Cqd_6tGG.js → LpSidebarRow-CAGgtJCS.js} +3 -3
  76. package/dist/chunks/{LpSlider-B9XIC75O.js → LpSlider-1fHpVxpB.js} +1 -1
  77. package/dist/chunks/{LpStat-kyLRmX-m.js → LpStat-Cm9-FaWQ.js} +2 -2
  78. package/dist/chunks/{LpStatus-szB2dWzM.js → LpStatus-CE8FSAT1.js} +1 -1
  79. package/dist/chunks/{LpStepMark-DP3CDSm9.js → LpStepMark-BWSlV69R.js} +1 -1
  80. package/dist/chunks/{LpStepper-BS3iaJIz.js → LpStepper-1D0ZA7Nx.js} +1 -1
  81. package/dist/chunks/{LpSwitch-DRFy8RNr.js → LpSwitch-D_kvE0oQ.js} +1 -1
  82. package/dist/chunks/{LpTabFace-C9-OperL.js → LpTabFace-CpbFKi-N.js} +2 -2
  83. package/dist/chunks/{LpTableFilter-CEIwLupk.js → LpTableFilter-BYHyCu38.js} +2 -2
  84. package/dist/chunks/{LpTagsInput-ClDeF_aU.js → LpTagsInput-Cqm38t5N.js} +5 -5
  85. package/dist/chunks/{LpTextarea-DEY6pUBy.js → LpTextarea-DaSKBkiV.js} +1 -1
  86. package/dist/chunks/{LpThemeStudio-WY72Z1Db.js → LpThemeStudio-BNdfi-Ds.js} +5 -5
  87. package/dist/chunks/{LpThemeSwitcher-9uCH9c-K.js → LpThemeSwitcher-CbC1nqBP.js} +3 -3
  88. package/dist/chunks/{LpTimeField-BmgxCzQO.js → LpTimeField-CCfPCWPT.js} +2 -2
  89. package/dist/chunks/{LpToaster-DLKO-efn.js → LpToaster-BhlI7h-h.js} +2 -2
  90. package/dist/chunks/{LpTopologyCanvas-B-PhPa7k.js → LpTopologyCanvas-DlKbu7E5.js} +4 -4
  91. package/dist/chunks/{LpTour-ODlBcat2.js → LpTour-CSLerA1B.js} +1 -1
  92. package/dist/chunks/{LpTruncate--nhT0iUo.js → LpTruncate-Ct26BSYB.js} +1 -1
  93. package/dist/chunks/{LpVideoBackdrop-Ct4St4ZL.js → LpVideoBackdrop-57i8RY8g.js} +1 -2
  94. package/dist/chunks/LpVideoPlayer-DcWd9DDW.js +813 -0
  95. package/dist/chunks/{LpWindow-DJxE8Zl-.js → LpWindow-YnF_knSj.js} +2 -2
  96. package/dist/chunks/{LpWorkspaceSwitcher-Bpf41Bw5.js → LpWorkspaceSwitcher-B-5UU6o4.js} +3 -3
  97. package/dist/chunks/{MenuTitle-CMjvLsvC.js → MenuTitle-BnZbFSwq.js} +1 -1
  98. package/dist/chunks/{OptionContent-DY8NaG8s.js → OptionContent-D5e_eklA.js} +1 -1
  99. package/dist/chunks/{PickerField-CgfkaBgg.js → PickerField-KpHiowNI.js} +1 -1
  100. package/dist/chunks/{RevealToggle-CPMXxaKv.js → RevealToggle-CE1hAIJB.js} +1 -1
  101. package/dist/chunks/SteadyText-CwH-kduj.js +25 -0
  102. package/dist/chunks/{TourCard-D4b3lMHi.js → TourCard-t2csiTDS.js} +1 -1
  103. package/dist/chunks/VideoThumb-Csf9bUz3.js +67 -0
  104. package/dist/chunks/VideoVolume-B4_DNmNi.js +68 -0
  105. package/dist/chunks/icons-CdSlCrle.js +59 -0
  106. package/dist/component-names.d.ts +1 -1
  107. package/dist/components/ContextMenuItems.vue.js +1 -1
  108. package/dist/components/DropzoneLinkField.vue.js +1 -1
  109. package/dist/components/FieldLeading.vue.js +1 -1
  110. package/dist/components/FieldWrapper.vue.js +1 -1
  111. package/dist/components/IconCloseButton.vue.js +1 -1
  112. package/dist/components/LayoutCanvas.vue.js +1 -1
  113. package/dist/components/LayoutNode.vue.js +1 -1
  114. package/dist/components/LpActionBar.vue.js +1 -1
  115. package/dist/components/LpAddressInput.vue.js +1 -1
  116. package/dist/components/LpAlert.vue.js +1 -1
  117. package/dist/components/LpAppShell.vue.js +1 -1
  118. package/dist/components/LpAutocomplete.vue.js +1 -1
  119. package/dist/components/LpAvatar.vue.js +1 -1
  120. package/dist/components/LpBadge.vue.js +1 -1
  121. package/dist/components/LpBottomNav.vue.js +1 -1
  122. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  123. package/dist/components/LpCalendar.vue.js +1 -1
  124. package/dist/components/LpChart.vue.js +2 -2
  125. package/dist/components/LpCheckbox.vue.js +1 -1
  126. package/dist/components/LpCodeBlock.vue.js +1 -1
  127. package/dist/components/LpCodeDisplay.vue.js +1 -1
  128. package/dist/components/LpColorPicker.vue.js +1 -1
  129. package/dist/components/LpCommandPalette.vue.js +2 -2
  130. package/dist/components/LpConfirmDialog.vue.js +1 -1
  131. package/dist/components/LpConfirmHost.vue.js +1 -1
  132. package/dist/components/LpContextMenu.vue.js +1 -1
  133. package/dist/components/LpContextSwitcher.vue.js +1 -1
  134. package/dist/components/LpCopyButton.vue.js +1 -1
  135. package/dist/components/LpDataList.vue.js +1 -1
  136. package/dist/components/LpDatePicker.vue.js +1 -1
  137. package/dist/components/LpDateRangePicker.vue.js +1 -1
  138. package/dist/components/LpDisclosure.vue.js +1 -1
  139. package/dist/components/LpDock.vue.js +1 -1
  140. package/dist/components/LpDrawer.vue.js +1 -1
  141. package/dist/components/LpDropdownMenu.vue.d.ts +5 -1
  142. package/dist/components/LpDropdownMenu.vue.js +1 -1
  143. package/dist/components/LpDropzone.vue.js +2 -2
  144. package/dist/components/LpEditable.vue.js +1 -1
  145. package/dist/components/LpEmptyState.vue.js +1 -1
  146. package/dist/components/LpFieldNotice.vue.js +1 -1
  147. package/dist/components/LpFileTree.vue.js +1 -1
  148. package/dist/components/LpFileTreeNode.vue.js +1 -1
  149. package/dist/components/LpFormField.vue.js +1 -1
  150. package/dist/components/LpHintLayer.vue.js +1 -1
  151. package/dist/components/LpHints.vue.js +1 -1
  152. package/dist/components/LpIcon.vue.js +1 -1
  153. package/dist/components/LpImageEditor.vue.js +1 -1
  154. package/dist/components/LpInfraNode.vue.js +1 -1
  155. package/dist/components/LpInput.vue.js +1 -1
  156. package/dist/components/LpInspector.vue.js +1 -1
  157. package/dist/components/LpLightbox.vue.js +1 -1
  158. package/dist/components/LpLogInspector.vue.js +1 -1
  159. package/dist/components/LpLogViewer.vue.js +1 -1
  160. package/dist/components/LpMapPicker.vue.js +1 -1
  161. package/dist/components/LpMediaGallery.vue.d.ts +1 -1
  162. package/dist/components/LpMediaGallery.vue.js +1 -1
  163. package/dist/components/LpModal.vue.js +1 -1
  164. package/dist/components/LpModalNav.vue.js +1 -1
  165. package/dist/components/LpNotificationBell.vue.js +1 -1
  166. package/dist/components/LpNotificationFeed.vue.js +1 -1
  167. package/dist/components/LpNumberField.vue.js +1 -1
  168. package/dist/components/LpOtpInput.vue.js +1 -1
  169. package/dist/components/LpPagination.vue.js +1 -1
  170. package/dist/components/LpPaletteFacts.vue.js +1 -1
  171. package/dist/components/LpPaletteHeader.vue.js +2 -2
  172. package/dist/components/LpPaletteTheme.vue.js +1 -1
  173. package/dist/components/LpPasswordInput.vue.js +1 -1
  174. package/dist/components/LpPhoneInput.vue.js +1 -1
  175. package/dist/components/LpPie.vue.js +1 -1
  176. package/dist/components/LpPipeline.vue.js +1 -1
  177. package/dist/components/LpQuota.vue.js +1 -1
  178. package/dist/components/LpRadioGroup.vue.js +1 -1
  179. package/dist/components/LpRangeCalendar.vue.js +1 -1
  180. package/dist/components/LpRangeSlider.vue.js +1 -1
  181. package/dist/components/LpRepeater.vue.js +1 -1
  182. package/dist/components/LpSecretField.vue.js +1 -1
  183. package/dist/components/LpSection.vue.js +1 -1
  184. package/dist/components/LpSegmented.vue.js +1 -1
  185. package/dist/components/LpSelect.vue.js +1 -1
  186. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  187. package/dist/components/LpSidebar.vue.js +1 -1
  188. package/dist/components/LpSidebarNav.vue.js +1 -1
  189. package/dist/components/LpSidebarRow.vue.js +1 -1
  190. package/dist/components/LpSlider.vue.js +1 -1
  191. package/dist/components/LpStat.vue.js +1 -1
  192. package/dist/components/LpStatus.vue.js +1 -1
  193. package/dist/components/LpStepMark.vue.js +1 -1
  194. package/dist/components/LpStepper.vue.js +1 -1
  195. package/dist/components/LpSwitch.vue.js +1 -1
  196. package/dist/components/LpTabFace.vue.js +1 -1
  197. package/dist/components/LpTable.vue.js +9 -9
  198. package/dist/components/LpTableFilter.vue.js +1 -1
  199. package/dist/components/LpTabs.vue.js +2 -2
  200. package/dist/components/LpTagsInput.vue.js +1 -1
  201. package/dist/components/LpTextarea.vue.js +1 -1
  202. package/dist/components/LpThemeStudio.vue.js +1 -1
  203. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  204. package/dist/components/LpTimeField.vue.js +1 -1
  205. package/dist/components/LpToaster.vue.js +1 -1
  206. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  207. package/dist/components/LpTour.vue.js +1 -1
  208. package/dist/components/LpTruncate.vue.js +1 -1
  209. package/dist/components/LpVideoBackdrop.vue.js +1 -1
  210. package/dist/components/LpVideoPlayer.vue.d.ts +111 -0
  211. package/dist/components/LpVideoPlayer.vue.js +4 -0
  212. package/dist/components/LpVideoTrim.vue.d.ts +82 -0
  213. package/dist/components/LpVideoTrim.vue.js +1106 -0
  214. package/dist/components/LpWindow.vue.js +1 -1
  215. package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
  216. package/dist/components/MenuTitle.vue.js +1 -1
  217. package/dist/components/OptionContent.vue.js +1 -1
  218. package/dist/components/PickerField.vue.js +1 -1
  219. package/dist/components/RevealToggle.vue.js +1 -1
  220. package/dist/components/SteadyText.vue.d.ts +7 -0
  221. package/dist/components/SteadyText.vue.js +4 -0
  222. package/dist/components/TourCard.vue.js +1 -1
  223. package/dist/components/VideoFlash.vue.d.ts +10 -0
  224. package/dist/components/VideoFlash.vue.js +33 -0
  225. package/dist/components/VideoThumb.vue.d.ts +12 -0
  226. package/dist/components/VideoThumb.vue.js +4 -0
  227. package/dist/components/VideoVolume.vue.d.ts +15 -0
  228. package/dist/components/VideoVolume.vue.js +4 -0
  229. package/dist/components/chartWindow.js +4 -8
  230. package/dist/components/lightbox.d.ts +13 -0
  231. package/dist/components/lightbox.js +11 -1
  232. package/dist/components/menuWhen.js +1 -1
  233. package/dist/components/videoBackdrop.d.ts +15 -2
  234. package/dist/components/videoBackdrop.js +8 -2
  235. package/dist/components/videoFrames.d.ts +37 -0
  236. package/dist/components/videoFrames.js +134 -0
  237. package/dist/components/videoMotion.d.ts +28 -0
  238. package/dist/components/videoMotion.js +26 -0
  239. package/dist/components/videoTrim.d.ts +68 -0
  240. package/dist/components/videoTrim.js +121 -0
  241. package/dist/composables/span.d.ts +10 -0
  242. package/dist/composables/span.js +15 -0
  243. package/dist/composables/useVideoMedia.d.ts +74 -0
  244. package/dist/composables/useVideoMedia.js +291 -0
  245. package/dist/icons-all.js +1 -1
  246. package/dist/index.d.ts +7 -1
  247. package/dist/index.js +186 -174
  248. package/package.json +1 -1
  249. package/src/component-names.ts +2 -0
  250. package/src/components/LpDropdownMenu.vue +4 -0
  251. package/src/components/LpLightbox.vue +61 -8
  252. package/src/components/LpMediaGallery.vue +19 -2
  253. package/src/components/LpVideoBackdrop.vue +1 -7
  254. package/src/components/LpVideoPlayer.vue +774 -0
  255. package/src/components/LpVideoTrim.vue +1066 -0
  256. package/src/components/SteadyText.vue +21 -0
  257. package/src/components/VideoFlash.vue +52 -0
  258. package/src/components/VideoThumb.vue +66 -0
  259. package/src/components/VideoVolume.vue +63 -0
  260. package/src/components/chartWindow.ts +4 -8
  261. package/src/components/lightbox.ts +23 -0
  262. package/src/components/videoBackdrop.ts +20 -3
  263. package/src/components/videoFrames.ts +171 -0
  264. package/src/components/videoMotion.ts +38 -0
  265. package/src/components/videoTrim.ts +186 -0
  266. package/src/composables/span.ts +21 -0
  267. package/src/composables/useVideoMedia.ts +411 -0
  268. package/src/index.ts +7 -1
  269. package/src/kit-icons.ts +1 -1
  270. package/dist/chunks/icons-C1vppR4f.js +0 -59
@@ -0,0 +1,121 @@
1
+ import { clamp } from "../composables/clamp.js";
2
+ import { shiftSpan, zoomSpan } from "../composables/span.js";
3
+ const round = (t) => Math.round(t * 1e3) / 1e3;
4
+ function parseClipTime(text) {
5
+ const value = text.trim().replace(",", ".");
6
+ if (!/^\d+(:\d{1,2}){0,2}(\.\d*)?$/.test(value)) return null;
7
+ const parts = value.split(":");
8
+ let total = 0;
9
+ for (const [i, part] of parts.entries()) {
10
+ const n = Number(part);
11
+ if (!Number.isFinite(n)) return null;
12
+ if (i > 0 && n >= 60) return null;
13
+ total = total * 60 + n;
14
+ }
15
+ return total;
16
+ }
17
+ function limitsOf(l) {
18
+ const duration = Math.max(0, l.duration);
19
+ const min = clamp(l.minClip, 0, duration);
20
+ const max = Math.max(min, l.maxClip);
21
+ return { duration, min, max };
22
+ }
23
+ function normalizeRange(range, limits) {
24
+ const { duration, min, max } = limitsOf(limits);
25
+ if (!range || !Number.isFinite(range[0]) || !Number.isFinite(range[1])) return [0, round(Math.min(duration, max))];
26
+ let [a, b] = range[0] <= range[1] ? range : [range[1], range[0]];
27
+ a = clamp(a, 0, Math.max(0, duration - min));
28
+ b = clamp(b, a + min, Math.min(duration, a + max));
29
+ return [round(a), round(b)];
30
+ }
31
+ function dragEnd(range, end, t, limits) {
32
+ const { duration, min, max } = limitsOf(limits);
33
+ const [a, b] = range;
34
+ if (end === 0) return [round(clamp(t, Math.max(0, b - max), b - min)), b];
35
+ return [a, round(clamp(t, a + min, Math.min(duration, a + max)))];
36
+ }
37
+ function setEnd(range, end, t, limits) {
38
+ const { duration, min, max } = limitsOf(limits);
39
+ const [a, b] = range;
40
+ if (end === 0) {
41
+ const start = clamp(t, 0, duration - min);
42
+ return [round(start), round(clamp(b, start + min, Math.min(duration, start + max)))];
43
+ }
44
+ const stop = clamp(t, min, duration);
45
+ return [round(clamp(a, Math.max(0, stop - max), stop - min)), round(stop)];
46
+ }
47
+ function zoomView(view, anchor, factor, duration, minSpan) {
48
+ const span = view.end - view.start;
49
+ const next = zoomSpan(view.start, view.end, anchor, Math.min(1 / factor, duration / (span || 1)), Math.min(minSpan, duration));
50
+ return shiftView(next, 0, duration);
51
+ }
52
+ function shiftView(view, delta, duration) {
53
+ const span = Math.min(view.end - view.start, duration);
54
+ return shiftSpan(view.start, view.start + span, delta, 0, duration);
55
+ }
56
+ function revealTime(view, t, duration, margin = 0.1) {
57
+ const span = view.end - view.start;
58
+ const pad = span * margin;
59
+ if (t < view.start + pad) return shiftView(view, t - pad - view.start, duration);
60
+ if (t > view.end - pad) return shiftView(view, t + pad - view.end, duration);
61
+ return view;
62
+ }
63
+ const TICK_STEPS = [0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, 3600, 7200];
64
+ function tickStep(span, width, minPx = 72) {
65
+ if (span <= 0 || width <= 0) return 1;
66
+ const perPx = span / width;
67
+ return TICK_STEPS.find((step) => step / perPx >= minPx) ?? TICK_STEPS[TICK_STEPS.length - 1];
68
+ }
69
+ function ticks(view, step) {
70
+ const out = [];
71
+ const first = Math.ceil(view.start / step - 1e-9) * step;
72
+ for (let t = first; t <= view.end + 1e-9 && out.length < 500; t += step) out.push(round(t));
73
+ return out;
74
+ }
75
+ function containRect(boxWidth, boxHeight, videoWidth, videoHeight) {
76
+ if (!videoWidth || !videoHeight || !boxWidth || !boxHeight) return { x: 0, y: 0, width: boxWidth, height: boxHeight };
77
+ const scale = Math.min(boxWidth / videoWidth, boxHeight / videoHeight);
78
+ const width = videoWidth * scale;
79
+ const height = videoHeight * scale;
80
+ return { x: (boxWidth - width) / 2, y: (boxHeight - height) / 2, width, height };
81
+ }
82
+ const fix = (n) => Math.round(n * 1e4) / 1e4;
83
+ function clampRegion(r, minSize = 0.02) {
84
+ const w = clamp(r.w, minSize, 1);
85
+ const h = clamp(r.h, minSize, 1);
86
+ return { x: fix(clamp(r.x, 0, 1 - w)), y: fix(clamp(r.y, 0, 1 - h)), w: fix(w), h: fix(h) };
87
+ }
88
+ function regionBetween(ax, ay, bx, by) {
89
+ const x0 = clamp(Math.min(ax, bx), 0, 1);
90
+ const y0 = clamp(Math.min(ay, by), 0, 1);
91
+ const x1 = clamp(Math.max(ax, bx), 0, 1);
92
+ const y1 = clamp(Math.max(ay, by), 0, 1);
93
+ return { x: fix(x0), y: fix(y0), w: fix(x1 - x0), h: fix(y1 - y0) };
94
+ }
95
+ function adjustRegion(r, handle, dx, dy, minSize = 0.02) {
96
+ if (handle === "move") return clampRegion({ ...r, x: r.x + dx, y: r.y + dy }, minSize);
97
+ let x0 = r.x;
98
+ let y0 = r.y;
99
+ let x1 = r.x + r.w;
100
+ let y1 = r.y + r.h;
101
+ if (handle === "nw" || handle === "sw") x0 = clamp(x0 + dx, 0, x1 - minSize);
102
+ else x1 = clamp(x1 + dx, x0 + minSize, 1);
103
+ if (handle === "nw" || handle === "ne") y0 = clamp(y0 + dy, 0, y1 - minSize);
104
+ else y1 = clamp(y1 + dy, y0 + minSize, 1);
105
+ return { x: fix(x0), y: fix(y0), w: fix(x1 - x0), h: fix(y1 - y0) };
106
+ }
107
+ export {
108
+ adjustRegion,
109
+ clampRegion,
110
+ containRect,
111
+ dragEnd,
112
+ normalizeRange,
113
+ parseClipTime,
114
+ regionBetween,
115
+ revealTime,
116
+ setEnd,
117
+ shiftView,
118
+ tickStep,
119
+ ticks,
120
+ zoomView
121
+ };
@@ -0,0 +1,10 @@
1
+ /** The window zoomed by `factor` (below 1 is in) around `anchor`, a position on the line; no wider than it was asked, no narrower than `minSpan`. */
2
+ export declare function zoomSpan(start: number, end: number, anchor: number, factor: number, minSpan: number): {
3
+ start: number;
4
+ end: number;
5
+ };
6
+ /** The window moved by `delta`, its width kept, stopped at `lo` and `hi`. */
7
+ export declare function shiftSpan(start: number, end: number, delta: number, lo: number, hi: number): {
8
+ start: number;
9
+ end: number;
10
+ };
@@ -0,0 +1,15 @@
1
+ function zoomSpan(start, end, anchor, factor, minSpan) {
2
+ const span = end - start;
3
+ const next = Math.max(minSpan, span * factor);
4
+ const from = anchor - (anchor - start) * (next / (span || 1));
5
+ return { start: from, end: from + next };
6
+ }
7
+ function shiftSpan(start, end, delta, lo, hi) {
8
+ const span = end - start;
9
+ const from = Math.max(lo, Math.min(hi - span, start + delta));
10
+ return { start: from, end: from + span };
11
+ }
12
+ export {
13
+ shiftSpan,
14
+ zoomSpan
15
+ };
@@ -0,0 +1,74 @@
1
+ import { type Ref } from "vue";
2
+ /**
3
+ * Why there is no video to show:
4
+ * - "load": the address did not answer (network, 404, an expired session);
5
+ * - "decode": the file arrived but is damaged;
6
+ * - "unsupported": a format or codec this browser cannot play (H.265 in
7
+ * Chromium without hardware support, ProRes anywhere).
8
+ */
9
+ export type VideoErrorCause = "load" | "decode" | "unsupported";
10
+ export declare function mediaErrorCause(error: MediaError | null): VideoErrorCause;
11
+ export interface UseVideoMediaOptions {
12
+ src: () => string;
13
+ /** Every frame while playing, after `time` is updated. */
14
+ onFrame?: () => void;
15
+ onError?: (cause: VideoErrorCause) => void;
16
+ /** Ease starts and stops (true by default); false cuts in and out at once. */
17
+ ease?: () => boolean;
18
+ /**
19
+ * Keep volume, mute and speed between videos on this device, shared by every
20
+ * player and editor of the kit: someone who turned the sound down turned it
21
+ * down, whichever component the next video is in. False forgets.
22
+ */
23
+ remember?: () => boolean;
24
+ }
25
+ export declare function useVideoMedia(el: Ref<HTMLVideoElement | null>, options: UseVideoMediaOptions): {
26
+ duration: Ref<number, number>;
27
+ time: Ref<number, number>;
28
+ playing: Ref<boolean, boolean>;
29
+ wantsPlay: Ref<boolean, boolean>;
30
+ waiting: Ref<boolean, boolean>;
31
+ ended: Ref<boolean, boolean>;
32
+ muted: Ref<boolean, boolean>;
33
+ volume: Ref<number, number>;
34
+ rate: Ref<number, number>;
35
+ buffered: Ref<[number, number][], [number, number][]>;
36
+ failure: Ref<VideoErrorCause | null, VideoErrorCause | null>;
37
+ size: Ref<{
38
+ width: number;
39
+ height: number;
40
+ }, {
41
+ width: number;
42
+ height: number;
43
+ } | {
44
+ width: number;
45
+ height: number;
46
+ }>;
47
+ listeners: {
48
+ loadedmetadata(): void;
49
+ durationchange(): void;
50
+ seeked(): void;
51
+ play(): void;
52
+ pause(): void;
53
+ ended(): void;
54
+ waiting(): void;
55
+ playing(): void;
56
+ canplay(): void;
57
+ timeupdate(): void;
58
+ progress(): void;
59
+ volumechange(): void;
60
+ ratechange(): void;
61
+ error(): Promise<void>;
62
+ };
63
+ seek: (t: number) => void;
64
+ play: () => void;
65
+ pause: (options?: {
66
+ instant?: boolean;
67
+ }) => void;
68
+ toggle: () => void;
69
+ setMuted: (value: boolean) => void;
70
+ setVolume: (value: number) => void;
71
+ setRate: (value: number) => void;
72
+ captureFrame: () => Promise<Blob | null>;
73
+ };
74
+ export type VideoMedia = ReturnType<typeof useVideoMedia>;
@@ -0,0 +1,291 @@
1
+ import { ref, watch, onBeforeUnmount } from "vue";
2
+ import { SLOWEST_RATE } from "../components/videoBackdrop.js";
3
+ import { nodeWindow } from "./realm.js";
4
+ import { usePersisted } from "./usePersisted.js";
5
+ import { usePrefersReducedMotion } from "./useReducedMotion.js";
6
+ import { useTween } from "./useTween.js";
7
+ function mediaErrorCause(error) {
8
+ if (error?.code === 3) return "decode";
9
+ if (error?.code === 4) return "unsupported";
10
+ return "load";
11
+ }
12
+ const isSound = (v) => {
13
+ if (!v || typeof v !== "object") return false;
14
+ const { volume, muted, rate } = v;
15
+ return typeof muted === "boolean" && typeof volume === "number" && volume >= 0 && volume <= 1 && typeof rate === "number" && rate >= 0.25 && rate <= 4;
16
+ };
17
+ function useVideoMedia(el, options) {
18
+ const duration = ref(0);
19
+ const time = ref(0);
20
+ const playing = ref(false);
21
+ const waiting = ref(false);
22
+ const ended = ref(false);
23
+ const muted = ref(false);
24
+ const volume = ref(1);
25
+ const rate = ref(1);
26
+ const buffered = ref([]);
27
+ const failure = ref(null);
28
+ const size = ref({ width: 0, height: 0 });
29
+ const sound = usePersisted(() => (options.remember?.() ?? true) && "lp-video:sound", { volume: 1, muted: false, rate: 1 }, { validate: isSound });
30
+ let applied = "";
31
+ let seekBusy = false;
32
+ let seekTarget = null;
33
+ let probingDuration = false;
34
+ let frame = 0;
35
+ function seek(t) {
36
+ const video = el.value;
37
+ const target = Math.min(Math.max(0, t), duration.value || t);
38
+ time.value = target;
39
+ ended.value = false;
40
+ if (!video) return;
41
+ if (seekBusy) {
42
+ seekTarget = target;
43
+ return;
44
+ }
45
+ seekBusy = true;
46
+ video.currentTime = target;
47
+ }
48
+ const AHEAD_LIMIT = 0.25;
49
+ let lastMedia = -1;
50
+ let lastAt = 0;
51
+ function smoothTime(video, now) {
52
+ const t = video.currentTime;
53
+ if (t !== lastMedia) {
54
+ lastMedia = t;
55
+ lastAt = now;
56
+ }
57
+ const estimate = Math.min(lastMedia + (now - lastAt) / 1e3 * video.playbackRate, lastMedia + AHEAD_LIMIT, duration.value || Infinity);
58
+ return Math.max(estimate, Math.min(time.value, lastMedia + AHEAD_LIMIT));
59
+ }
60
+ function tick(now) {
61
+ frame = 0;
62
+ const video = el.value;
63
+ if (!video || !playing.value) return;
64
+ if (!seekBusy) time.value = smoothTime(video, now);
65
+ options.onFrame?.();
66
+ if (playing.value) frame = nodeWindow(video).requestAnimationFrame(tick);
67
+ }
68
+ function stopTicking() {
69
+ if (frame && el.value) nodeWindow(el.value).cancelAnimationFrame(frame);
70
+ frame = 0;
71
+ }
72
+ function readBuffered(video) {
73
+ const d = duration.value;
74
+ if (!d) return;
75
+ const out = [];
76
+ for (let i = 0; i < video.buffered.length; i++) out.push([video.buffered.start(i) / d, video.buffered.end(i) / d]);
77
+ buffered.value = out;
78
+ }
79
+ async function probe(src) {
80
+ try {
81
+ const res = await fetch(src, { headers: { Range: "bytes=0-0" }, credentials: "same-origin" });
82
+ void res.body?.cancel();
83
+ const type = res.headers.get("content-type") ?? "";
84
+ return res.ok && !/^text\/|json|xml/.test(type) ? "unsupported" : "load";
85
+ } catch {
86
+ return "unsupported";
87
+ }
88
+ }
89
+ const listeners = {
90
+ loadedmetadata() {
91
+ const video = el.value;
92
+ if (!video) return;
93
+ size.value = { width: video.videoWidth, height: video.videoHeight };
94
+ if (applied !== options.src()) {
95
+ applied = options.src();
96
+ volume.value = sound.value.volume;
97
+ rate.value = sound.value.rate;
98
+ video.muted = video.muted || sound.value.muted;
99
+ muted.value = video.muted;
100
+ video.volume = volume.value;
101
+ video.playbackRate = rate.value;
102
+ }
103
+ if (Number.isFinite(video.duration)) {
104
+ duration.value = video.duration;
105
+ return;
106
+ }
107
+ probingDuration = true;
108
+ video.currentTime = 1e101;
109
+ },
110
+ durationchange() {
111
+ const video = el.value;
112
+ if (!video || !Number.isFinite(video.duration) || !video.duration) return;
113
+ duration.value = video.duration;
114
+ if (probingDuration) {
115
+ probingDuration = false;
116
+ video.currentTime = 0;
117
+ }
118
+ },
119
+ seeked() {
120
+ seekBusy = false;
121
+ lastMedia = -1;
122
+ if (seekTarget !== null) {
123
+ const next = seekTarget;
124
+ seekTarget = null;
125
+ seek(next);
126
+ } else if (el.value && !playing.value) time.value = el.value.currentTime;
127
+ },
128
+ play() {
129
+ lastMedia = -1;
130
+ wantsPlay.value = true;
131
+ playing.value = true;
132
+ ended.value = false;
133
+ if (!frame && el.value) frame = nodeWindow(el.value).requestAnimationFrame(tick);
134
+ },
135
+ pause() {
136
+ wantsPlay.value = false;
137
+ playing.value = false;
138
+ stopTicking();
139
+ if (el.value && !seekBusy) time.value = el.value.currentTime;
140
+ },
141
+ ended() {
142
+ instant = true;
143
+ wantsPlay.value = false;
144
+ ended.value = true;
145
+ },
146
+ waiting() {
147
+ waiting.value = true;
148
+ },
149
+ playing() {
150
+ waiting.value = false;
151
+ },
152
+ canplay() {
153
+ waiting.value = false;
154
+ },
155
+ timeupdate() {
156
+ if (el.value && !playing.value && !seekBusy) time.value = el.value.currentTime;
157
+ },
158
+ progress() {
159
+ if (el.value) readBuffered(el.value);
160
+ },
161
+ volumechange() {
162
+ const video = el.value;
163
+ if (!video) return;
164
+ if (!easing()) muted.value = video.muted;
165
+ if (easing() || video.volume === written.volume) return;
166
+ volume.value = video.volume;
167
+ remember();
168
+ },
169
+ ratechange() {
170
+ const video = el.value;
171
+ if (!video || easing() || video.playbackRate === written.rate) return;
172
+ rate.value = video.playbackRate;
173
+ remember();
174
+ },
175
+ async error() {
176
+ const video = el.value;
177
+ if (!video?.error) return;
178
+ const src = options.src();
179
+ let cause = mediaErrorCause(video.error);
180
+ if (cause === "unsupported") cause = await probe(src);
181
+ if (src !== options.src()) return;
182
+ failure.value = cause;
183
+ waiting.value = false;
184
+ options.onError?.(cause);
185
+ }
186
+ };
187
+ const wantsPlay = ref(false);
188
+ let instant = false;
189
+ const reducedMotion = usePrefersReducedMotion();
190
+ const throttle = useTween(
191
+ () => wantsPlay.value ? 1 : 0,
192
+ (from, to, k) => from + (to - from) * k,
193
+ { enabled: () => !instant && !reducedMotion.value && (options.ease?.() ?? true) }
194
+ );
195
+ const written = { rate: Number.NaN, volume: Number.NaN };
196
+ function applyThrottle(video, k) {
197
+ written.rate = video.playbackRate = k >= 1 ? rate.value : Math.max(SLOWEST_RATE, rate.value * k);
198
+ written.volume = video.volume = k >= 1 ? volume.value : volume.value * k;
199
+ }
200
+ watch(throttle, (k) => {
201
+ const video = el.value;
202
+ if (!video) return;
203
+ if (k === 0 && !wantsPlay.value) {
204
+ if (!video.paused) video.pause();
205
+ applyThrottle(video, 1);
206
+ instant = false;
207
+ return;
208
+ }
209
+ applyThrottle(video, k);
210
+ if (k === 1) instant = false;
211
+ });
212
+ const easing = () => wantsPlay.value ? throttle.value < 1 : throttle.value > 0;
213
+ function remember() {
214
+ if (applied) sound.value = { volume: volume.value, muted: muted.value, rate: rate.value };
215
+ }
216
+ function play() {
217
+ const video = el.value;
218
+ if (!video || failure.value) return;
219
+ if (ended.value) seek(0);
220
+ wantsPlay.value = true;
221
+ if (!instant && !reducedMotion.value && (options.ease?.() ?? true) && throttle.value === 0) applyThrottle(video, 0);
222
+ void video.play().catch(() => {
223
+ wantsPlay.value = false;
224
+ });
225
+ }
226
+ function pause(options2 = {}) {
227
+ if (options2.instant) instant = true;
228
+ wantsPlay.value = false;
229
+ }
230
+ function toggle() {
231
+ if (wantsPlay.value) pause();
232
+ else play();
233
+ }
234
+ function setMuted(value) {
235
+ if (el.value) el.value.muted = value;
236
+ muted.value = value;
237
+ remember();
238
+ }
239
+ function setVolume(value) {
240
+ const v = Math.min(1, Math.max(0, value));
241
+ volume.value = v;
242
+ if (el.value) {
243
+ el.value.volume = easing() ? v * throttle.value : v;
244
+ if (v > 0 && el.value.muted) el.value.muted = false;
245
+ }
246
+ if (v > 0) muted.value = false;
247
+ remember();
248
+ }
249
+ function setRate(value) {
250
+ rate.value = value;
251
+ if (el.value) el.value.playbackRate = easing() ? Math.max(SLOWEST_RATE, value * throttle.value) : value;
252
+ remember();
253
+ }
254
+ function captureFrame() {
255
+ const video = el.value;
256
+ if (!video?.videoWidth) return Promise.resolve(null);
257
+ const canvas = video.ownerDocument.createElement("canvas");
258
+ canvas.width = video.videoWidth;
259
+ canvas.height = video.videoHeight;
260
+ try {
261
+ canvas.getContext("2d")?.drawImage(video, 0, 0);
262
+ return new Promise((resolve) => canvas.toBlob((blob) => resolve(blob), "image/png"));
263
+ } catch {
264
+ return Promise.resolve(null);
265
+ }
266
+ }
267
+ watch(options.src, () => {
268
+ duration.value = 0;
269
+ time.value = 0;
270
+ failure.value = null;
271
+ buffered.value = [];
272
+ ended.value = false;
273
+ waiting.value = false;
274
+ seekBusy = false;
275
+ seekTarget = null;
276
+ probingDuration = false;
277
+ });
278
+ onBeforeUnmount(() => {
279
+ stopTicking();
280
+ const video = el.value;
281
+ if (!video) return;
282
+ video.pause();
283
+ video.removeAttribute("src");
284
+ video.load();
285
+ });
286
+ return { duration, time, playing, wantsPlay, waiting, ended, muted, volume, rate, buffered, failure, size, listeners, seek, play, pause, toggle, setMuted, setVolume, setRate, captureFrame };
287
+ }
288
+ export {
289
+ mediaErrorCause,
290
+ useVideoMedia
291
+ };
package/dist/icons-all.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import lucide from "@iconify-json/lucide/icons.json";
2
- import { a as registerIconCollection } from "./chunks/icons-C1vppR4f.js";
2
+ import { a as registerIconCollection } from "./chunks/icons-CdSlCrle.js";
3
3
  registerIconCollection(lucide);
package/dist/index.d.ts CHANGED
@@ -94,7 +94,7 @@ export { default as LpInput } from "./components/LpInput.vue";
94
94
  export { default as LpLightbox } from "./components/LpLightbox.vue";
95
95
  export type { LightboxLabels } from "./components/LpLightbox.vue";
96
96
  export type { LightboxItem } from "./components/lightbox";
97
- export { fileNameOf } from "./components/lightbox";
97
+ export { fileNameOf, isVideoItem } from "./components/lightbox";
98
98
  export { default as LpLink } from "./components/LpLink.vue";
99
99
  export { default as LpLogViewer } from "./components/LpLogViewer.vue";
100
100
  export { default as LpLogInspector } from "./components/LpLogInspector.vue";
@@ -157,6 +157,12 @@ export { default as LpRangeSlider } from "./components/LpRangeSlider.vue";
157
157
  export { default as LpVideoBackdrop } from "./components/LpVideoBackdrop.vue";
158
158
  export { formatClipTime, isNativeLoop, planLoop, seamProgress, seamReached } from "./components/videoBackdrop";
159
159
  export type { LoopPlan } from "./components/videoBackdrop";
160
+ export { default as LpVideoTrim } from "./components/LpVideoTrim.vue";
161
+ export { default as LpVideoPlayer } from "./components/LpVideoPlayer.vue";
162
+ export { useVideoMedia } from "./composables/useVideoMedia";
163
+ export type { VideoErrorCause, VideoMedia } from "./composables/useVideoMedia";
164
+ export { dragEnd, normalizeRange as normalizeTrimRange, parseClipTime, setEnd } from "./components/videoTrim";
165
+ export type { FrameRegion, TimeRange, VideoTrimErrorCause } from "./components/videoTrim";
160
166
  export { default as LpSparkline } from "./components/LpSparkline.vue";
161
167
  export { default as LpStat } from "./components/LpStat.vue";
162
168
  export { default as LpStepper } from "./components/LpStepper.vue";