@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
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpWindow-DJxE8Zl-.js";
1
+ import { _ as _sfc_main } from "../chunks/LpWindow-YnF_knSj.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpWorkspaceSwitcher-Bpf41Bw5.js";
1
+ import { _ as _sfc_main } from "../chunks/LpWorkspaceSwitcher-B-5UU6o4.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/MenuTitle-CMjvLsvC.js";
1
+ import { _ as _sfc_main } from "../chunks/MenuTitle-BnZbFSwq.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/OptionContent-DY8NaG8s.js";
1
+ import { _ as _sfc_main } from "../chunks/OptionContent-D5e_eklA.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/PickerField-CgfkaBgg.js";
1
+ import { _ as _sfc_main } from "../chunks/PickerField-KpHiowNI.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/RevealToggle-CPMXxaKv.js";
1
+ import { _ as _sfc_main } from "../chunks/RevealToggle-CE1hAIJB.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -0,0 +1,7 @@
1
+ type __VLS_Props = {
2
+ text: string;
3
+ widest: string;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { _ as _sfc_main } from "../chunks/SteadyText-CwH-kduj.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/TourCard-D4b3lMHi.js";
1
+ import { _ as _sfc_main } from "../chunks/TourCard-t2csiTDS.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -0,0 +1,10 @@
1
+ type __VLS_Props = {
2
+ /** What happened, and a count that changes on every press so the same icon twice still plays twice. */
3
+ flash: {
4
+ icon: string;
5
+ n: number;
6
+ } | null;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,33 @@
1
+ import { defineComponent, openBlock, createElementBlock, createVNode, normalizeClass, createCommentVNode } from "vue";
2
+ import { _ as _sfc_main$1 } from "../chunks/LpIcon-CoOLz1oJ.js";
3
+ import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
4
+ import '../assets/VideoFlash-VuPkC7QV.css';const _hoisted_1 = {
5
+ class: "pointer-events-none absolute inset-0 flex items-center justify-center motion-reduce:hidden",
6
+ "aria-hidden": "true"
7
+ };
8
+ const _sfc_main = /* @__PURE__ */ defineComponent({
9
+ __name: "VideoFlash",
10
+ props: {
11
+ flash: {}
12
+ },
13
+ setup(__props) {
14
+ return (_ctx, _cache) => {
15
+ return openBlock(), createElementBlock("div", _hoisted_1, [
16
+ __props.flash ? (openBlock(), createElementBlock("span", {
17
+ key: __props.flash.n,
18
+ class: "lp-video-flash flex size-16 items-center justify-center rounded-full bg-black/50 text-white opacity-0"
19
+ }, [
20
+ createVNode(_sfc_main$1, {
21
+ name: __props.flash.icon,
22
+ size: 28,
23
+ class: normalizeClass(__props.flash.icon === "lucide:play" ? "translate-x-0.5" : "")
24
+ }, null, 8, ["name", "class"])
25
+ ])) : createCommentVNode("", true)
26
+ ]);
27
+ };
28
+ }
29
+ });
30
+ const VideoFlash = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5cab097a"]]);
31
+ export {
32
+ VideoFlash as default
33
+ };
@@ -0,0 +1,12 @@
1
+ import type { LightboxItem } from "./lightbox";
2
+ type __VLS_Props = {
3
+ item: LightboxItem;
4
+ /** Classes for the picture itself (the gallery's blur and dimming ride on it). */
5
+ mediaClass?: string | (string | false | undefined)[];
6
+ /** A small thumbnail: the badge shrinks and the length is left out. */
7
+ compact?: boolean;
8
+ alt?: string;
9
+ };
10
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { _ as _sfc_main } from "../chunks/VideoThumb-Csf9bUz3.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -0,0 +1,15 @@
1
+ import type { VideoMedia } from "../composables/useVideoMedia";
2
+ type __VLS_Props = {
3
+ media: VideoMedia;
4
+ labels: {
5
+ mute: string;
6
+ unmute: string;
7
+ volume: string;
8
+ };
9
+ disabled?: boolean;
10
+ /** Over the picture (white on the video) rather than on the page. */
11
+ overlay?: boolean;
12
+ };
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { _ as _sfc_main } from "../chunks/VideoVolume-B4_DNmNi.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -1,4 +1,5 @@
1
1
  import { clamp } from "../composables/clamp.js";
2
+ import { shiftSpan, zoomSpan } from "../composables/span.js";
2
3
  const MIN_RANGE_POINTS = 2;
3
4
  const SLOTS_PER_BUCKET = 2;
4
5
  const LTTB_MIN_TARGET = 3;
@@ -16,16 +17,11 @@ function clampRange(range, count) {
16
17
  }
17
18
  function zoomRange(range, count, anchor, factor) {
18
19
  const from = range ?? { start: 0, end: count - 1 };
19
- const span = from.end - from.start;
20
- const next = Math.max(MIN_RANGE_POINTS - 1, span * factor);
21
- const at = from.start + span * clamp(anchor, 0, 1);
22
- const start = at - (at - from.start) * (next / (span || 1));
23
- return clampRange({ start, end: start + next }, count);
20
+ const at = from.start + (from.end - from.start) * clamp(anchor, 0, 1);
21
+ return clampRange(zoomSpan(from.start, from.end, at, factor, MIN_RANGE_POINTS - 1), count);
24
22
  }
25
23
  function panRange(range, count, delta) {
26
- const span = range.end - range.start;
27
- const start = Math.max(0, Math.min(count - 1 - span, range.start + delta));
28
- return clampRange({ start, end: start + span }, count);
24
+ return clampRange(shiftSpan(range.start, range.end, delta, 0, count - 1), count);
29
25
  }
30
26
  function minMaxBuckets(series, slots) {
31
27
  const count = series.reduce((n, values2) => Math.max(n, values2.length), 0);
@@ -19,6 +19,19 @@ export interface LightboxItem {
19
19
  * a marked picture sitting beside plain ones.
20
20
  */
21
21
  spoiler?: boolean;
22
+ /**
23
+ * A video rather than a picture: shown in LpVideoPlayer, with a play badge
24
+ * on its tile and its strip thumbnail. Left out, an address ending in a
25
+ * video extension (.mp4, .webm, .mov…) counts as one; set it for an address
26
+ * that does not say (an API route, a blob: URL).
27
+ */
28
+ kind?: "image" | "video";
29
+ /** A still for a video's tile and thumbnail; the video's first frame when absent. */
30
+ poster?: string;
31
+ /** A video's length in seconds, for the badge on its tile, when known up front. */
32
+ duration?: number;
22
33
  }
34
+ /** Whether the item is a video: said outright by `kind`, else told by its address's extension. */
35
+ export declare function isVideoItem(item: Pick<LightboxItem, "src" | "kind">): boolean;
23
36
  /** Last path segment of a URL, or a fallback — used to name a download. */
24
37
  export declare function fileNameOf(item: LightboxItem, fallback?: string): string;
@@ -1,3 +1,12 @@
1
+ const VIDEO_EXTENSION = /\.(mp4|m4v|webm|mov|ogv|ogg|mkv)$/i;
2
+ function isVideoItem(item) {
3
+ if (item.kind) return item.kind === "video";
4
+ try {
5
+ return VIDEO_EXTENSION.test(new URL(item.src, "http://x").pathname);
6
+ } catch {
7
+ return false;
8
+ }
9
+ }
1
10
  function fileNameOf(item, fallback = "image") {
2
11
  if (item.filename) return item.filename;
3
12
  try {
@@ -9,5 +18,6 @@ function fileNameOf(item, fallback = "image") {
9
18
  return fallback;
10
19
  }
11
20
  export {
12
- fileNameOf
21
+ fileNameOf,
22
+ isVideoItem
13
23
  };
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, h } from "vue";
2
- import { _ as _sfc_main } from "../chunks/LpContextMenu-bn5bc9t7.js";
2
+ import { _ as _sfc_main } from "../chunks/LpContextMenu-DIYhlap8.js";
3
3
  const MenuWhen = defineComponent({
4
4
  name: "MenuWhen",
5
5
  inheritAttrs: false,
@@ -33,5 +33,18 @@ export declare function seamReached(plan: LoopPlan, time: number): boolean;
33
33
  export declare function seamProgress(plan: LoopPlan, incomingTime: number): number;
34
34
  /** Whether the whole clip loops with nothing cut and no overlap, which the media element does natively. */
35
35
  export declare function isNativeLoop(plan: LoopPlan, duration: number): boolean;
36
- /** "1:05", "0:07.5": a position on a clip as a range slider labels it. */
37
- export declare function formatClipTime(seconds: number, precise?: boolean): string;
36
+ /**
37
+ * "1:05", "0:07.5": a position on a clip as a range slider labels it.
38
+ * `precise` adds tenths when there are any; "fixed" always writes them, for a
39
+ * time that changes while it is read, so it keeps one length ("0:05.0", not
40
+ * "0:05" between "0:04.9" and "0:05.1").
41
+ */
42
+ export declare function formatClipTime(seconds: number, precise?: boolean | "fixed"): string;
43
+ /** The widest a clip time up to `seconds` gets, its digits as zeros: what SteadyText reserves. */
44
+ export declare function widestClipTime(seconds: number): string;
45
+ /**
46
+ * The slowest rate a pause eases down to before the element is paused, and a
47
+ * start eases up from. Chromium refuses a rate below a sixteenth; past that
48
+ * point the picture is all but still anyway.
49
+ */
50
+ export declare const SLOWEST_RATE: number;
@@ -29,12 +29,18 @@ function formatClipTime(seconds, precise = false) {
29
29
  const minutes = (t.days * 24 + t.hours) * 60 + t.minutes;
30
30
  const secs = String(t.seconds).padStart(2, "0");
31
31
  const tenth = Math.floor(t.ms / 100);
32
- return precise && tenth ? `${minutes}:${secs}.${tenth}` : `${minutes}:${secs}`;
32
+ return precise === "fixed" || precise && tenth ? `${minutes}:${secs}.${tenth}` : `${minutes}:${secs}`;
33
33
  }
34
+ function widestClipTime(seconds) {
35
+ return formatClipTime(seconds, "fixed").replace(/\d/g, "0");
36
+ }
37
+ const SLOWEST_RATE = 1 / 16;
34
38
  export {
39
+ SLOWEST_RATE,
35
40
  formatClipTime,
36
41
  isNativeLoop,
37
42
  planLoop,
38
43
  seamProgress,
39
- seamReached
44
+ seamReached,
45
+ widestClipTime
40
46
  };
@@ -0,0 +1,37 @@
1
+ export interface FrameRequest {
2
+ key: string;
3
+ time: number;
4
+ }
5
+ type VideoWithFrames = HTMLVideoElement & {
6
+ requestVideoFrameCallback?: (cb: () => void) => number;
7
+ fastSeek?: (time: number) => void;
8
+ };
9
+ export declare class FrameSampler {
10
+ private readonly video;
11
+ private readonly size;
12
+ private readonly onFrame;
13
+ private queue;
14
+ private running;
15
+ private disposed;
16
+ private cache;
17
+ constructor(video: VideoWithFrames, size: () => {
18
+ width: number;
19
+ height: number;
20
+ }, onFrame: (key: string, canvas: HTMLCanvasElement) => void);
21
+ /** A frame taken earlier, if it is still kept. */
22
+ cached(key: string): HTMLCanvasElement | undefined;
23
+ /** The frames wanted now, most wanted first; whatever was queued before is dropped. */
24
+ want(requests: FrameRequest[]): void;
25
+ dispose(): void;
26
+ private pump;
27
+ private take;
28
+ private framePresented;
29
+ private once;
30
+ }
31
+ /**
32
+ * Seconds one still stands for at this zoom: the shortest power of two that
33
+ * keeps a still at least `minPx` wide. Stills sit at fixed points in time, so
34
+ * panning reuses the ones already taken and a zoom step of two keeps half.
35
+ */
36
+ export declare function stillSpan(secondsPerPx: number, minPx: number): number;
37
+ export {};
@@ -0,0 +1,134 @@
1
+ const SEEK_TIMEOUT_MS = 4e3;
2
+ const FRAME_TIMEOUT_MS = 250;
3
+ const CACHE_LIMIT = 240;
4
+ class FrameSampler {
5
+ constructor(video, size, onFrame) {
6
+ this.video = video;
7
+ this.size = size;
8
+ this.onFrame = onFrame;
9
+ }
10
+ video;
11
+ size;
12
+ onFrame;
13
+ queue = [];
14
+ running = false;
15
+ disposed = false;
16
+ cache = /* @__PURE__ */ new Map();
17
+ /** A frame taken earlier, if it is still kept. */
18
+ cached(key) {
19
+ const hit = this.cache.get(key);
20
+ if (hit) {
21
+ this.cache.delete(key);
22
+ this.cache.set(key, hit);
23
+ }
24
+ return hit;
25
+ }
26
+ /** The frames wanted now, most wanted first; whatever was queued before is dropped. */
27
+ want(requests) {
28
+ this.queue = requests.filter((r) => !this.cache.has(r.key));
29
+ void this.pump();
30
+ }
31
+ dispose() {
32
+ this.disposed = true;
33
+ this.queue = [];
34
+ this.cache.clear();
35
+ }
36
+ async pump() {
37
+ if (this.running) return;
38
+ this.running = true;
39
+ try {
40
+ while (!this.disposed && this.queue.length) {
41
+ const next = this.queue.shift();
42
+ if (this.cache.has(next.key)) continue;
43
+ const canvas = await this.take(next.time);
44
+ if (this.disposed) return;
45
+ if (!canvas) continue;
46
+ this.cache.set(next.key, canvas);
47
+ if (this.cache.size > CACHE_LIMIT) this.cache.delete(this.cache.keys().next().value);
48
+ this.onFrame(next.key, canvas);
49
+ }
50
+ } finally {
51
+ this.running = false;
52
+ }
53
+ }
54
+ async take(time) {
55
+ const video = this.video;
56
+ if (video.readyState < 1) {
57
+ const ready = await this.once("loadedmetadata", SEEK_TIMEOUT_MS);
58
+ if (!ready) return null;
59
+ }
60
+ const target = Math.min(Math.max(0, time), Number.isFinite(video.duration) ? Math.max(0, video.duration - 0.05) : time);
61
+ const seeked = this.once("seeked", SEEK_TIMEOUT_MS);
62
+ if (video.fastSeek) video.fastSeek(target);
63
+ else video.currentTime = target;
64
+ if (!await seeked) return null;
65
+ await this.framePresented();
66
+ if (this.disposed || !video.videoWidth) return null;
67
+ const { width, height } = this.size();
68
+ const ratio = Math.min(2, video.ownerDocument.defaultView?.devicePixelRatio ?? 1);
69
+ const canvas = video.ownerDocument.createElement("canvas");
70
+ canvas.width = Math.max(1, Math.round(width * ratio));
71
+ canvas.height = Math.max(1, Math.round(height * ratio));
72
+ const ctx = canvas.getContext("2d");
73
+ if (!ctx) return null;
74
+ const scale = Math.max(canvas.width / video.videoWidth, canvas.height / video.videoHeight);
75
+ const w = video.videoWidth * scale;
76
+ const h = video.videoHeight * scale;
77
+ try {
78
+ ctx.drawImage(video, (canvas.width - w) / 2, (canvas.height - h) / 2, w, h);
79
+ } catch {
80
+ return null;
81
+ }
82
+ return canvas;
83
+ }
84
+ /*
85
+ * `seeked` says the position moved, not that its picture is ready to draw:
86
+ * Chromium can still hand the previous frame for a moment. Wait for the
87
+ * frame where the engine reports it, and a couple of paints where not.
88
+ */
89
+ framePresented() {
90
+ const video = this.video;
91
+ const win = video.ownerDocument.defaultView;
92
+ return new Promise((resolve) => {
93
+ let done = false;
94
+ const finish = () => {
95
+ if (done) return;
96
+ done = true;
97
+ resolve();
98
+ };
99
+ if (video.requestVideoFrameCallback) {
100
+ video.requestVideoFrameCallback(finish);
101
+ win?.setTimeout(finish, FRAME_TIMEOUT_MS);
102
+ } else if (win) {
103
+ win.requestAnimationFrame(() => win.requestAnimationFrame(finish));
104
+ } else finish();
105
+ });
106
+ }
107
+ once(event, timeout) {
108
+ const video = this.video;
109
+ const win = video.ownerDocument.defaultView;
110
+ return new Promise((resolve) => {
111
+ const finish = (ok) => {
112
+ video.removeEventListener(event, onEvent);
113
+ video.removeEventListener("error", onError);
114
+ if (timer) win?.clearTimeout(timer);
115
+ resolve(ok);
116
+ };
117
+ const onEvent = () => finish(true);
118
+ const onError = () => finish(false);
119
+ video.addEventListener(event, onEvent);
120
+ video.addEventListener("error", onError);
121
+ const timer = win?.setTimeout(() => finish(false), timeout);
122
+ });
123
+ }
124
+ }
125
+ function stillSpan(secondsPerPx, minPx) {
126
+ const wanted = secondsPerPx * minPx;
127
+ let span = 1 / 8;
128
+ while (span < wanted && span < 8192) span *= 2;
129
+ return span;
130
+ }
131
+ export {
132
+ FrameSampler,
133
+ stillSpan
134
+ };
@@ -0,0 +1,28 @@
1
+ export declare const FADE: {
2
+ readonly enterActiveClass: "transition-opacity duration-(--duration-medium) ease-(--ease-emphasized) motion-reduce:transition-none";
3
+ readonly leaveActiveClass: "transition-opacity duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none";
4
+ readonly enterFromClass: "opacity-0";
5
+ readonly leaveToClass: "opacity-0";
6
+ };
7
+ /** A fade with a small settle in scale: for a button or a box, which reads as arriving rather than blinking on. */
8
+ export declare const FADE_SCALE: {
9
+ readonly enterActiveClass: "transition-[opacity,scale] duration-(--duration-medium) ease-(--ease-emphasized) motion-reduce:transition-none";
10
+ readonly leaveActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none";
11
+ readonly enterFromClass: "scale-90 opacity-0";
12
+ readonly leaveToClass: "scale-90 opacity-0";
13
+ };
14
+ /** One icon handing over to another in the same spot (play and pause, sound on and off). */
15
+ export declare const ICON_SWAP: {
16
+ readonly mode: "out-in";
17
+ readonly enterActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none";
18
+ readonly leaveActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none";
19
+ readonly enterFromClass: "scale-75 opacity-0";
20
+ readonly leaveToClass: "scale-75 opacity-0";
21
+ };
22
+ /**
23
+ * A ghost button over the picture: white on the video in every theme, as the
24
+ * lightbox's are. The players' own buttons use it, and their `#actions` and
25
+ * `#controls` slots hand it out as `buttonClass`, so an app's button there
26
+ * (a bin that takes the video back out of a dropzone) looks like theirs.
27
+ */
28
+ export declare const OVERLAY_BUTTON = "text-white/85 hover:bg-white/15 hover:text-white";
@@ -0,0 +1,26 @@
1
+ const FADE = {
2
+ enterActiveClass: "transition-opacity duration-(--duration-medium) ease-(--ease-emphasized) motion-reduce:transition-none",
3
+ leaveActiveClass: "transition-opacity duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none",
4
+ enterFromClass: "opacity-0",
5
+ leaveToClass: "opacity-0"
6
+ };
7
+ const FADE_SCALE = {
8
+ enterActiveClass: "transition-[opacity,scale] duration-(--duration-medium) ease-(--ease-emphasized) motion-reduce:transition-none",
9
+ leaveActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none",
10
+ enterFromClass: "scale-90 opacity-0",
11
+ leaveToClass: "scale-90 opacity-0"
12
+ };
13
+ const ICON_SWAP = {
14
+ mode: "out-in",
15
+ enterActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none",
16
+ leaveActiveClass: "transition-[opacity,scale] duration-(--duration-fast) ease-(--ease-emphasized) motion-reduce:transition-none",
17
+ enterFromClass: "scale-75 opacity-0",
18
+ leaveToClass: "scale-75 opacity-0"
19
+ };
20
+ const OVERLAY_BUTTON = "text-white/85 hover:bg-white/15 hover:text-white";
21
+ export {
22
+ FADE,
23
+ FADE_SCALE,
24
+ ICON_SWAP,
25
+ OVERLAY_BUTTON
26
+ };
@@ -0,0 +1,68 @@
1
+ export type TimeRange = [number, number];
2
+ /** A rectangle on the video's frame, every value a fraction of it (0..1). */
3
+ export interface FrameRegion {
4
+ x: number;
5
+ y: number;
6
+ w: number;
7
+ h: number;
8
+ }
9
+ export interface RangeLimits {
10
+ duration: number;
11
+ /** Shortest clip, seconds. */
12
+ minClip: number;
13
+ /** Longest clip, seconds; Infinity for none. */
14
+ maxClip: number;
15
+ }
16
+ /**
17
+ * A typed time, the inverse of `formatClipTime`: "75", "75.5", "1:15",
18
+ * "75:00.5", and "1:02:03.25" for whoever types the hours. A comma reads as
19
+ * the decimal point, as a Russian keyboard's numpad types it. Anything else,
20
+ * a negative or a seconds field past 59 after a colon, is null.
21
+ */
22
+ export declare function parseClipTime(text: string): number | null;
23
+ /** A range that keeps every limit: inside the video, no shorter than minClip, no longer than maxClip. */
24
+ export declare function normalizeRange(range: TimeRange | null | undefined, limits: RangeLimits): TimeRange;
25
+ /**
26
+ * One end dragged to `t`. The dragged end stops at a limit and the other end
27
+ * stays put: a handle that pushed its partner would move the clip's other
28
+ * edge without the person touching it.
29
+ */
30
+ export declare function dragEnd(range: TimeRange, end: 0 | 1, t: number, limits: RangeLimits): TimeRange;
31
+ /**
32
+ * One end set to `t` on purpose (the I or O key, a typed time). That end goes
33
+ * where it was told, and the other follows when a limit asks for it.
34
+ */
35
+ export declare function setEnd(range: TimeRange, end: 0 | 1, t: number, limits: RangeLimits): TimeRange;
36
+ export interface TimeView {
37
+ start: number;
38
+ end: number;
39
+ }
40
+ /** The view zoomed by `factor` (above 1 zooms in) around `anchor`, which stays where it is on screen. */
41
+ export declare function zoomView(view: TimeView, anchor: number, factor: number, duration: number, minSpan: number): TimeView;
42
+ /** The view moved by `delta` seconds, held inside the video. */
43
+ export declare function shiftView(view: TimeView, delta: number, duration: number): TimeView;
44
+ /** The view moved just enough to show `t`, with `margin` of its span to spare. */
45
+ export declare function revealTime(view: TimeView, t: number, duration: number, margin?: number): TimeView;
46
+ /** Seconds between ruler marks, so that marks stand at least `minPx` apart. */
47
+ export declare function tickStep(span: number, width: number, minPx?: number): number;
48
+ /** The ruler's marks within the view. */
49
+ export declare function ticks(view: TimeView, step: number): number[];
50
+ /**
51
+ * Where the picture sits in a box that shows it whole (object-fit: contain):
52
+ * the region is drawn on the picture, not on the black bars around it.
53
+ */
54
+ export declare function containRect(boxWidth: number, boxHeight: number, videoWidth: number, videoHeight: number): {
55
+ x: number;
56
+ y: number;
57
+ width: number;
58
+ height: number;
59
+ };
60
+ /** A region held inside the frame and no smaller than `minSize` a side. */
61
+ export declare function clampRegion(r: FrameRegion, minSize?: number): FrameRegion;
62
+ /** The region spanned by two corners, in either order, cut to the frame. */
63
+ export declare function regionBetween(ax: number, ay: number, bx: number, by: number): FrameRegion;
64
+ export type RegionHandle = "move" | "nw" | "ne" | "sw" | "se";
65
+ /** The region after one of its handles moved by (dx, dy), fractions of the frame. */
66
+ export declare function adjustRegion(r: FrameRegion, handle: RegionHandle, dx: number, dy: number, minSize?: number): FrameRegion;
67
+ /** Why the editor has no video to show; see `VideoErrorCause`. */
68
+ export type { VideoErrorCause as VideoTrimErrorCause } from "../composables/useVideoMedia";