@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.
- package/README.md +22 -0
- package/dist/assets/{LpDropzone-DNbh_NFJ.css → LpDropzone-CfL3Vrx4.css} +10 -10
- package/dist/assets/{LpImageEditor-Bgu20XLs.css → LpImageEditor-y3B-aW3H.css} +6 -6
- package/dist/assets/{LpKeys-C5VMcBOW.css → LpKeys-5ijsXX-M.css} +6 -6
- package/dist/assets/{LpShortcutsDialog-C6uzPeMf.css → LpShortcutsDialog-BBdVWxZq.css} +7 -7
- package/dist/assets/LpVideoTrim-CMoUw3dJ.css +8 -0
- package/dist/chunks/{ContextMenuItems-h-apPY2d.js → ContextMenuItems-D15cGEw9.js} +1 -1
- package/dist/chunks/{DropzoneLinkField-_Op8b_ee.js → DropzoneLinkField-Dz7fIaLh.js} +1 -1
- package/dist/chunks/{FieldLeading-mOMcwNqi.js → FieldLeading-DZZLK02U.js} +1 -1
- package/dist/chunks/{FieldWrapper-DtT-AIcn.js → FieldWrapper-BDDw1F9H.js} +1 -1
- package/dist/chunks/{IconCloseButton-YmisskyZ.js → IconCloseButton-Cn_w4aN3.js} +1 -1
- package/dist/chunks/{LayoutCanvas-BrISZEBr.js → LayoutCanvas-Dr5eSfAu.js} +1 -1
- package/dist/chunks/{LayoutNode-CwMQ8ACa.js → LayoutNode-CViJnx6q.js} +1 -1
- package/dist/chunks/{LpActionBar-CVVC6YbC.js → LpActionBar-C0LK-Aqs.js} +1 -1
- package/dist/chunks/{LpAddressInput-tiuJ-bru.js → LpAddressInput-B9sSvodU.js} +7 -7
- package/dist/chunks/{LpAlert-8-x4H_Nk.js → LpAlert-Bpd7122M.js} +1 -1
- package/dist/chunks/{LpAppShell-BW2YMq-A.js → LpAppShell-DW8JmY1o.js} +4 -4
- package/dist/chunks/{LpAutocomplete-BZODIops.js → LpAutocomplete-CQID7Zc-.js} +4 -4
- package/dist/chunks/{LpAvatar-BZq4nH53.js → LpAvatar-DLkiMGKx.js} +1 -1
- package/dist/chunks/{LpBadge-Cz0pSSUu.js → LpBadge-RFp8uHFt.js} +1 -1
- package/dist/chunks/{LpBottomNav-DVdR5Mry.js → LpBottomNav-BcJVkAhh.js} +1 -1
- package/dist/chunks/{LpBreadcrumbs-B2jphAel.js → LpBreadcrumbs-DJ_DB45r.js} +1 -1
- package/dist/chunks/{LpCalendar-C0_N5LVT.js → LpCalendar-D6tfCr2G.js} +1 -1
- package/dist/chunks/{LpCheckbox-CwqLNdw4.js → LpCheckbox-DcXC2qd5.js} +2 -2
- package/dist/chunks/{LpCodeBlock-Dcss6bnl.js → LpCodeBlock-Dx0J9xlm.js} +2 -2
- package/dist/chunks/{LpCodeDisplay-CLms1zDY.js → LpCodeDisplay-BlN7U8Z-.js} +4 -4
- package/dist/chunks/{LpColorPicker-CbIY450X.js → LpColorPicker-Cjna_Bio.js} +3 -3
- package/dist/chunks/{LpConfirmDialog-RmP4z6va.js → LpConfirmDialog-bfcX5F9d.js} +2 -2
- package/dist/chunks/{LpConfirmHost-DheBgRMB.js → LpConfirmHost-DIgloymi.js} +1 -1
- package/dist/chunks/{LpContextMenu-DIYhlap8.js → LpContextMenu-CUFZIQX2.js} +2 -2
- package/dist/chunks/{LpContextSwitcher-fDA6ERl-.js → LpContextSwitcher-CMweLbv2.js} +2 -2
- package/dist/chunks/{LpCopyButton-DSqKFGEb.js → LpCopyButton-BrbvIVMG.js} +1 -1
- package/dist/chunks/{LpDataList-f9UjSx9m.js → LpDataList-DhETPjzv.js} +2 -2
- package/dist/chunks/{LpDatePicker-3kDQLVbg.js → LpDatePicker-B5gzwI3T.js} +5 -5
- package/dist/chunks/{LpDateRangePicker-DUPiTt0_.js → LpDateRangePicker-CwNnpyoL.js} +3 -3
- package/dist/chunks/{LpDisclosure-C5WZjhbQ.js → LpDisclosure-CsJ7nnFz.js} +1 -1
- package/dist/chunks/{LpDrawer-CkYvIGIa.js → LpDrawer-C1q2bl1r.js} +1 -1
- package/dist/chunks/{LpDropdownMenu-zSsK2Xra.js → LpDropdownMenu-DRABI-Bl.js} +2 -2
- package/dist/chunks/{LpEditable-CP7Y_lKg.js → LpEditable-DCPdDDBb.js} +2 -2
- package/dist/chunks/{LpEmptyState-dsc5x-ya.js → LpEmptyState-DT8U4R8L.js} +1 -1
- package/dist/chunks/{LpFieldNotice-TOTbWvgv.js → LpFieldNotice-mcmO-O-J.js} +1 -1
- package/dist/chunks/{LpFileTree-BPjnOTln.js → LpFileTree-wiXExcZI.js} +4 -4
- package/dist/chunks/{LpFileTreeNode-_-MiWmie.js → LpFileTreeNode-DfvIGmSz.js} +4 -4
- package/dist/chunks/{LpFormField-BJwD1iEF.js → LpFormField-C5GOuOY-.js} +1 -1
- package/dist/chunks/{LpHintLayer-CmfGnxYu.js → LpHintLayer-B0choo1r.js} +1 -1
- package/dist/chunks/{LpHints-C2Xvc1Fd.js → LpHints-BEetUVTl.js} +3 -3
- package/dist/chunks/{LpIcon-CoOLz1oJ.js → LpIcon-DCGhNsCU.js} +1 -1
- package/dist/chunks/{LpInfraNode-CW3qsM-U.js → LpInfraNode-BsExhdPE.js} +2 -2
- package/dist/chunks/{LpInput-BVWhkPuN.js → LpInput-CKMblRtp.js} +3 -3
- package/dist/chunks/{LpInspector-REmoX_es.js → LpInspector-CqPgVXrm.js} +4 -4
- package/dist/chunks/{LpLightbox-C3FFTYP5.js → LpLightbox-D7iJqdmH.js} +4 -4
- package/dist/chunks/{LpLogInspector-Cs8Z_fM0.js → LpLogInspector-Yj310k4n.js} +2 -2
- package/dist/chunks/{LpLogViewer-DQRGe-ZK.js → LpLogViewer-Bki-IdNC.js} +6 -6
- package/dist/chunks/{LpMapPicker-CQnQPgKm.js → LpMapPicker-CnpJhiY0.js} +1 -1
- package/dist/chunks/{LpMediaGallery-DkKqTy9P.js → LpMediaGallery-D6DyJDvL.js} +4 -4
- package/dist/chunks/{LpModal-DwejR7VP.js → LpModal-B5y9_LgA.js} +1 -1
- package/dist/chunks/{LpModalNav-D1-dSe6f.js → LpModalNav-BLvDVl2-.js} +3 -3
- package/dist/chunks/{LpNotificationBell-EKLkN0sp.js → LpNotificationBell-Bf0u3t5q.js} +4 -4
- package/dist/chunks/{LpNotificationFeed-Dc-yQ4NH.js → LpNotificationFeed-BPZM3zkS.js} +4 -4
- package/dist/chunks/{LpNumberField-DvUjEMp-.js → LpNumberField-BeYT7zzt.js} +3 -3
- package/dist/chunks/{LpOtpInput-xvDO14f4.js → LpOtpInput-DqwY-U5R.js} +1 -1
- package/dist/chunks/{LpPagination-BFZY8dFn.js → LpPagination-V1wEhu1K.js} +1 -1
- package/dist/chunks/{LpPaletteTheme-EBJv0Bwz.js → LpPaletteTheme-Bi6pD1GL.js} +2 -2
- package/dist/chunks/{LpPasswordInput-DRJR3fF1.js → LpPasswordInput-LaOXNYuV.js} +2 -2
- package/dist/chunks/{LpPhoneInput-BGOOtUoW.js → LpPhoneInput-D7Tq2iaz.js} +3 -3
- package/dist/chunks/{LpPie-Deyn8h5J.js → LpPie-Bzv8mnVR.js} +2 -2
- package/dist/chunks/{LpPipeline-9ChjeNh5.js → LpPipeline-D-uPcbMN.js} +2 -2
- package/dist/chunks/{LpQuota-CNh5eF_p.js → LpQuota-BR8ck2a9.js} +1 -1
- package/dist/chunks/{LpRadioGroup-Br2Nl9Gr.js → LpRadioGroup-DSOCL9MD.js} +2 -2
- package/dist/chunks/{LpRangeCalendar-D66Y3U_w.js → LpRangeCalendar-QepHrmba.js} +1 -1
- package/dist/chunks/{LpRangeSlider-eX-fIlOw.js → LpRangeSlider-BaAM7XIs.js} +1 -1
- package/dist/chunks/{LpRepeater-0XvnlVd_.js → LpRepeater-BKq5XPh4.js} +3 -3
- package/dist/chunks/{LpSecretField-1RCooChq.js → LpSecretField-_B2qPfk8.js} +5 -5
- package/dist/chunks/{LpSection-B9gbJJcP.js → LpSection-BGzlKIWO.js} +1 -1
- package/dist/chunks/{LpSegmented-hIjGzGTo.js → LpSegmented-CiaF9DUK.js} +2 -2
- package/dist/chunks/{LpSelect-DugubwTc.js → LpSelect-CB6Xbnfk.js} +4 -4
- package/dist/chunks/{LpSidebar-DevSoN8W.js → LpSidebar-DnqbKULj.js} +4 -4
- package/dist/chunks/{LpSidebarNav-DwQQ3KXe.js → LpSidebarNav-B3Eo_VIS.js} +4 -4
- package/dist/chunks/{LpSidebarRow-CAGgtJCS.js → LpSidebarRow-CDBnvvd8.js} +3 -3
- package/dist/chunks/{LpSlider-1fHpVxpB.js → LpSlider-DTb_Ivkm.js} +1 -1
- package/dist/chunks/{LpStat-Cm9-FaWQ.js → LpStat-BtxSto7K.js} +2 -2
- package/dist/chunks/{LpStatus-CE8FSAT1.js → LpStatus-_fIwWXQV.js} +1 -1
- package/dist/chunks/{LpStepMark-BWSlV69R.js → LpStepMark-iDZw1DYf.js} +1 -1
- package/dist/chunks/{LpStepper-1D0ZA7Nx.js → LpStepper-CjC3cp1F.js} +1 -1
- package/dist/chunks/{LpSwitch-D_kvE0oQ.js → LpSwitch-BNHyYDhX.js} +1 -1
- package/dist/chunks/{LpTabFace-CpbFKi-N.js → LpTabFace-gATEe9pQ.js} +2 -2
- package/dist/chunks/{LpTableFilter-BYHyCu38.js → LpTableFilter-B_BFoBqS.js} +2 -2
- package/dist/chunks/{LpTagsInput-Cqm38t5N.js → LpTagsInput-By7LMb47.js} +5 -5
- package/dist/chunks/{LpTextarea-DaSKBkiV.js → LpTextarea-Ck6RAfzu.js} +1 -1
- package/dist/chunks/{LpThemeStudio-BNdfi-Ds.js → LpThemeStudio-C1xKiv8C.js} +5 -5
- package/dist/chunks/{LpThemeSwitcher-CbC1nqBP.js → LpThemeSwitcher-Dk4Bk6u1.js} +3 -3
- package/dist/chunks/{LpTimeField-CCfPCWPT.js → LpTimeField-BTKJVeNt.js} +2 -2
- package/dist/chunks/{LpToaster-BhlI7h-h.js → LpToaster-C_CFWSys.js} +2 -2
- package/dist/chunks/{LpTopologyCanvas-DlKbu7E5.js → LpTopologyCanvas-paC1Dup-.js} +4 -4
- package/dist/chunks/{LpTour-CSLerA1B.js → LpTour-D_AN_SsZ.js} +1 -1
- package/dist/chunks/{LpTruncate-Ct26BSYB.js → LpTruncate-CBUKnr36.js} +1 -1
- package/dist/chunks/LpVideoCompress-DD2nShyT.js +242 -0
- package/dist/chunks/{LpVideoPlayer-DcWd9DDW.js → LpVideoPlayer-koYKHKkC.js} +4 -4
- package/dist/chunks/{LpWindow-YnF_knSj.js → LpWindow-Bo5qQgVY.js} +2 -2
- package/dist/chunks/{LpWorkspaceSwitcher-B-5UU6o4.js → LpWorkspaceSwitcher-D50sHs9N.js} +3 -3
- package/dist/chunks/{MenuTitle-BnZbFSwq.js → MenuTitle-DCHcfyPH.js} +1 -1
- package/dist/chunks/{OptionContent-D5e_eklA.js → OptionContent-o58kS7Zh.js} +1 -1
- package/dist/chunks/{PickerField-KpHiowNI.js → PickerField-DNo1k89A.js} +1 -1
- package/dist/chunks/{RevealToggle-CE1hAIJB.js → RevealToggle-w7-BMcgC.js} +1 -1
- package/dist/chunks/{TourCard-t2csiTDS.js → TourCard-0yYxSdd4.js} +1 -1
- package/dist/chunks/{VideoThumb-Csf9bUz3.js → VideoThumb-DL_QkAJY.js} +1 -1
- package/dist/chunks/{VideoVolume-B4_DNmNi.js → VideoVolume-D-2TmsVj.js} +2 -2
- package/dist/chunks/{icons-CdSlCrle.js → icons-V0k93Puc.js} +3 -3
- package/dist/component-names.d.ts +1 -1
- package/dist/components/ContextMenuItems.vue.js +1 -1
- package/dist/components/DropzoneLinkField.vue.js +1 -1
- package/dist/components/FieldLeading.vue.js +1 -1
- package/dist/components/FieldWrapper.vue.js +1 -1
- package/dist/components/HintSampleTag.vue.d.ts +5 -3
- package/dist/components/IconCloseButton.vue.js +1 -1
- package/dist/components/LayoutCanvas.vue.js +1 -1
- package/dist/components/LayoutNode.vue.js +1 -1
- package/dist/components/LpActionBar.vue.d.ts +5 -3
- package/dist/components/LpActionBar.vue.js +1 -1
- package/dist/components/LpActivityLine.vue.d.ts +6 -6
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.d.ts +1 -1
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +10 -14
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAutocomplete.vue.js +1 -1
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBadge.vue.d.ts +4 -0
- package/dist/components/LpBadge.vue.js +1 -1
- package/dist/components/LpBottomNav.vue.d.ts +6 -4
- package/dist/components/LpBottomNav.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.d.ts +6 -6
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +6 -6
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpChart.vue.js +2 -2
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.d.ts +12 -2
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpCodeDisplay.vue.d.ts +1 -1
- package/dist/components/LpCodeDisplay.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.d.ts +1 -1
- package/dist/components/LpCommandPalette.vue.js +2 -2
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpConfirmHost.vue.js +1 -1
- package/dist/components/LpContextMenu.vue.js +1 -1
- package/dist/components/LpContextSwitcher.vue.d.ts +6 -4
- package/dist/components/LpContextSwitcher.vue.js +1 -1
- package/dist/components/LpCopyButton.vue.js +1 -1
- package/dist/components/LpDataList.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDateRangePicker.vue.js +1 -1
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDock.vue.js +1 -1
- package/dist/components/LpDrawer.vue.d.ts +6 -6
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.d.ts +10 -14
- package/dist/components/LpDropzone.vue.js +4 -4
- package/dist/components/LpEditable.vue.js +1 -1
- package/dist/components/LpEmptyState.vue.js +1 -1
- package/dist/components/LpFieldNotice.vue.js +1 -1
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpHintExample.vue.d.ts +2 -3
- package/dist/components/LpHintLayer.vue.d.ts +7 -8
- package/dist/components/LpHintLayer.vue.js +1 -1
- package/dist/components/LpHints.vue.d.ts +6 -5
- package/dist/components/LpHints.vue.js +1 -1
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.d.ts +14 -3
- package/dist/components/LpImageEditor.vue.js +3 -3
- package/dist/components/LpInfraNode.vue.js +1 -1
- package/dist/components/LpInput.vue.d.ts +6 -6
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpInspector.vue.d.ts +8 -6
- package/dist/components/LpInspector.vue.js +1 -1
- package/dist/components/LpKeys.vue.js +2 -2
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLogInspector.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.d.ts +8 -0
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.d.ts +3 -7
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.d.ts +5 -3
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.d.ts +4 -0
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNotificationFeed.vue.js +1 -1
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpOtpInput.vue.js +1 -1
- package/dist/components/LpPagination.vue.d.ts +8 -2
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPaletteFacts.vue.js +1 -1
- package/dist/components/LpPaletteHeader.vue.js +2 -2
- package/dist/components/LpPaletteTheme.vue.d.ts +12 -0
- package/dist/components/LpPaletteTheme.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPipeline.vue.js +1 -1
- package/dist/components/LpQuota.vue.js +1 -1
- package/dist/components/LpRadioGroup.vue.js +1 -1
- package/dist/components/LpRangeCalendar.vue.js +1 -1
- package/dist/components/LpRangeSlider.vue.js +1 -1
- package/dist/components/LpRepeater.vue.d.ts +9 -7
- package/dist/components/LpRepeater.vue.js +1 -1
- package/dist/components/LpSecretField.vue.js +1 -1
- package/dist/components/LpSection.vue.js +1 -1
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSelect.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.d.ts +11 -1
- package/dist/components/LpShortcutsDialog.vue.js +3 -3
- package/dist/components/LpSidebar.vue.d.ts +13 -11
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSidebarRow.vue.js +1 -1
- package/dist/components/LpSlider.vue.js +1 -1
- package/dist/components/LpSparkline.vue.d.ts +10 -1
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpStatus.vue.js +1 -1
- package/dist/components/LpStepMark.vue.js +1 -1
- package/dist/components/LpStepper.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTabFace.vue.js +1 -1
- package/dist/components/LpTable.vue.js +9 -9
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpTableOfContents.vue.d.ts +5 -3
- package/dist/components/LpTabs.vue.js +2 -2
- package/dist/components/LpTagsInput.vue.js +1 -1
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeStudio.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.d.ts +8 -6
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.d.ts +7 -5
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpTour.vue.d.ts +13 -20
- package/dist/components/LpTour.vue.js +1 -1
- package/dist/components/LpTruncate.vue.js +1 -1
- package/dist/components/LpTypewriter.vue.d.ts +1 -1
- package/dist/components/LpUptimeBar.vue.d.ts +4 -2
- package/dist/components/LpVideoCompress.vue.d.ts +63 -0
- package/dist/components/LpVideoCompress.vue.js +4 -0
- package/dist/components/LpVideoPlayer.vue.d.ts +33 -3
- package/dist/components/LpVideoPlayer.vue.js +1 -1
- package/dist/components/LpVideoTrim.vue.d.ts +40 -3
- package/dist/components/LpVideoTrim.vue.js +6 -6
- package/dist/components/LpWindow.vue.d.ts +7 -8
- package/dist/components/LpWindow.vue.js +1 -1
- package/dist/components/LpWorkspaceSwitcher.vue.d.ts +13 -11
- package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
- package/dist/components/MenuTitle.vue.js +1 -1
- package/dist/components/OptionContent.vue.js +1 -1
- package/dist/components/PickerField.vue.js +1 -1
- package/dist/components/RevealToggle.vue.js +1 -1
- package/dist/components/TourCard.vue.js +1 -1
- package/dist/components/VideoFlash.vue.js +1 -1
- package/dist/components/VideoThumb.vue.js +1 -1
- package/dist/components/VideoVolume.vue.js +1 -1
- package/dist/components/menuWhen.js +1 -1
- package/dist/components/status.d.ts +3 -1
- package/dist/composables/usePaletteCommands.d.ts +4 -0
- package/dist/composables/videoTranscode.d.ts +55 -0
- package/dist/composables/videoTranscode.js +134 -0
- package/dist/icons-all.js +1 -1
- package/dist/index.d.ts +44 -10
- package/dist/index.js +748 -170
- package/dist/locales/uk.d.ts +165 -0
- package/package.json +2 -1
- package/src/component-names.ts +1 -0
- package/src/components/HintSampleTag.vue +7 -2
- package/src/components/LpActionBar.vue +7 -2
- package/src/components/LpActivityLine.vue +7 -2
- package/src/components/LpAppShell.vue +11 -2
- package/src/components/LpBadge.vue +6 -1
- package/src/components/LpBottomNav.vue +8 -2
- package/src/components/LpBreadcrumbs.vue +7 -2
- package/src/components/LpButton.vue +7 -2
- package/src/components/LpCodeBlock.vue +13 -2
- package/src/components/LpContextSwitcher.vue +8 -2
- package/src/components/LpDrawer.vue +7 -2
- package/src/components/LpDropzone.vue +11 -2
- package/src/components/LpHintExample.vue +2 -2
- package/src/components/LpHintLayer.vue +9 -3
- package/src/components/LpHints.vue +17 -3
- package/src/components/LpImageEditor.vue +14 -7
- package/src/components/LpInput.vue +7 -2
- package/src/components/LpInspector.vue +10 -2
- package/src/components/LpKeys.vue +2 -1
- package/src/components/LpMapPicker.vue +10 -1
- package/src/components/LpMediaGallery.vue +12 -3
- package/src/components/LpModal.vue +7 -2
- package/src/components/LpModalNav.vue +6 -1
- package/src/components/LpPagination.vue +9 -2
- package/src/components/LpPaletteTheme.vue +14 -1
- package/src/components/LpRepeater.vue +11 -2
- package/src/components/LpShortcutsDialog.vue +12 -1
- package/src/components/LpSidebar.vue +15 -12
- package/src/components/LpSparkline.vue +12 -2
- package/src/components/LpTableOfContents.vue +7 -2
- package/src/components/LpThemeSwitcher.vue +10 -2
- package/src/components/LpToaster.vue +9 -2
- package/src/components/LpTour.vue +15 -3
- package/src/components/LpUptimeBar.vue +5 -2
- package/src/components/LpVideoCompress.vue +237 -0
- package/src/components/LpVideoPlayer.vue +33 -7
- package/src/components/LpVideoTrim.vue +40 -9
- package/src/components/LpWindow.vue +8 -2
- package/src/components/LpWorkspaceSwitcher.vue +15 -12
- package/src/components/status.ts +4 -1
- package/src/composables/usePaletteCommands.ts +6 -1
- package/src/composables/videoTranscode.ts +192 -0
- package/src/index.ts +51 -10
- package/src/locales/uk.ts +746 -0
- package/src/nuxt.ts +5 -1
- package/src/theme/palette.ts +2 -1
- package/dist/assets/LpVideoTrim-BcGs3Sh0.css +0 -8
|
@@ -50,6 +50,18 @@ import LpIcon from "./LpIcon.vue"
|
|
|
50
50
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
51
51
|
import { useResizeObserver } from "../composables/useResizeObserver"
|
|
52
52
|
|
|
53
|
+
/** Wording of the image editor's controls and errors. */
|
|
54
|
+
export type ImageEditorLabels = {
|
|
55
|
+
rotateLeft: string
|
|
56
|
+
rotateRight: string
|
|
57
|
+
zoomIn: string
|
|
58
|
+
zoomOut: string
|
|
59
|
+
reset: string
|
|
60
|
+
canvas: string
|
|
61
|
+
failed: string
|
|
62
|
+
cors: string
|
|
63
|
+
}
|
|
64
|
+
|
|
53
65
|
const props = withDefaults(
|
|
54
66
|
defineProps<{
|
|
55
67
|
/** The picture to work on: a file, or an http(s)/data address. */
|
|
@@ -86,12 +98,7 @@ const props = withDefaults(
|
|
|
86
98
|
* kit cannot reach the consumer's translations. Apps with i18n pass their
|
|
87
99
|
* own strings.
|
|
88
100
|
*/
|
|
89
|
-
labels?: Partial<
|
|
90
|
-
Record<
|
|
91
|
-
"rotateLeft" | "rotateRight" | "zoomIn" | "zoomOut" | "reset" | "canvas" | "failed" | "cors",
|
|
92
|
-
string
|
|
93
|
-
>
|
|
94
|
-
>
|
|
101
|
+
labels?: Partial<ImageEditorLabels>
|
|
95
102
|
/** Fade the picture in when the editor first comes into view. */
|
|
96
103
|
animate?: boolean
|
|
97
104
|
}>(),
|
|
@@ -107,7 +114,7 @@ const emit = defineEmits<{
|
|
|
107
114
|
// mount. An editor inside a dialog that opens a minute later still draws.
|
|
108
115
|
const { el: revealAnchor, revealed } = useReveal({ immediate: () => !props.animate })
|
|
109
116
|
|
|
110
|
-
const text = useLabels(
|
|
117
|
+
const text = useLabels<ImageEditorLabels>(
|
|
111
118
|
"imageEditor",
|
|
112
119
|
{
|
|
113
120
|
rotateLeft: "Rotate left",
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
export default { inheritAttrs: false }
|
|
3
|
+
|
|
4
|
+
/** Wording of the input's clear button. */
|
|
5
|
+
export type InputLabels = {
|
|
6
|
+
clear: string
|
|
7
|
+
}
|
|
3
8
|
</script>
|
|
4
9
|
|
|
5
10
|
<script setup lang="ts">
|
|
@@ -61,7 +66,7 @@ const props = withDefaults(
|
|
|
61
66
|
icon?: string
|
|
62
67
|
/** Show an accessible clear button, returning focus to the input. */
|
|
63
68
|
clearable?: boolean
|
|
64
|
-
labels?: Partial<
|
|
69
|
+
labels?: Partial<InputLabels>
|
|
65
70
|
/**
|
|
66
71
|
* Marks the label with the required indicator. The attribute still reaches
|
|
67
72
|
* the underlying <input> for native validation; this only makes the field
|
|
@@ -148,7 +153,7 @@ const field = useFieldControl(() => ({
|
|
|
148
153
|
required: props.required,
|
|
149
154
|
disabled: props.disabled,
|
|
150
155
|
}))
|
|
151
|
-
const text = useLabels("input", { clear: "Clear" }, () => props.labels)
|
|
156
|
+
const text = useLabels<InputLabels>("input", { clear: "Clear" }, () => props.labels)
|
|
152
157
|
const showClear = computed(() => props.clearable && !!props.modelValue && !field.value.disabled && !isAttrOn(attrs.readonly) && !isAttrOn(attrs.readOnly))
|
|
153
158
|
const isInvalidState = computed(() => field.value.invalid)
|
|
154
159
|
const shellClass = computed(() =>
|
|
@@ -16,6 +16,14 @@ export interface InspectorSection {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export default { inheritAttrs: false }
|
|
19
|
+
|
|
20
|
+
/** Wording of the inspector panel. */
|
|
21
|
+
export type InspectorLabels = {
|
|
22
|
+
close: string
|
|
23
|
+
empty: string
|
|
24
|
+
resize: string
|
|
25
|
+
region: string
|
|
26
|
+
}
|
|
19
27
|
</script>
|
|
20
28
|
|
|
21
29
|
<script setup lang="ts" generic="T">
|
|
@@ -71,14 +79,14 @@ const props = withDefaults(
|
|
|
71
79
|
closable?: boolean
|
|
72
80
|
/** Unsaved edits: `true` asks before closing, a function asks the app. */
|
|
73
81
|
guard?: CloseGuard
|
|
74
|
-
labels?: Partial<
|
|
82
|
+
labels?: Partial<InspectorLabels>
|
|
75
83
|
}>(),
|
|
76
84
|
{ side: "right", width: 320, minWidth: 240, maxWidth: 640, closable: true, subject: undefined },
|
|
77
85
|
)
|
|
78
86
|
|
|
79
87
|
const open = defineModel<boolean>("open", { default: true })
|
|
80
88
|
const slots = useSlots()
|
|
81
|
-
const text = useLabels(
|
|
89
|
+
const text = useLabels<InspectorLabels>(
|
|
82
90
|
"inspector",
|
|
83
91
|
{ close: "Close", empty: "Nothing selected", resize: "Resize panel", region: "Details" },
|
|
84
92
|
() => props.labels,
|
|
@@ -12,6 +12,7 @@ import { computed } from "vue"
|
|
|
12
12
|
import { appleModifierLabel, useAppleKeyboard } from "../composables/useHotkeys"
|
|
13
13
|
import { useLabels } from "../composables/useLpConfig"
|
|
14
14
|
import { comboSteps } from "./keys"
|
|
15
|
+
import type { ShortcutsLabels } from "./LpShortcutsDialog.vue"
|
|
15
16
|
|
|
16
17
|
const props = withDefaults(
|
|
17
18
|
defineProps<{
|
|
@@ -24,7 +25,7 @@ const props = withDefaults(
|
|
|
24
25
|
{ size: "md" },
|
|
25
26
|
)
|
|
26
27
|
|
|
27
|
-
const text = useLabels("shortcuts", { then: "then" })
|
|
28
|
+
const text = useLabels<Pick<ShortcutsLabels, "then">>("shortcuts", { then: "then" })
|
|
28
29
|
const apple = useAppleKeyboard()
|
|
29
30
|
|
|
30
31
|
const steps = computed(() => (Array.isArray(props.combo) ? [props.combo] : comboSteps(props.combo)))
|
|
@@ -30,6 +30,15 @@ import { useMergedAttrs } from "../composables/useMergedClass"
|
|
|
30
30
|
import { useLabels } from "../composables/useLpConfig"
|
|
31
31
|
import { useResizeObserver } from "../composables/useResizeObserver"
|
|
32
32
|
|
|
33
|
+
/** Wording of the map picker's controls. */
|
|
34
|
+
export type MapPickerLabels = {
|
|
35
|
+
zoomIn: string
|
|
36
|
+
zoomOut: string
|
|
37
|
+
locate: string
|
|
38
|
+
recentre: string
|
|
39
|
+
map: string
|
|
40
|
+
}
|
|
41
|
+
|
|
33
42
|
const props = withDefaults(
|
|
34
43
|
defineProps<{
|
|
35
44
|
/** Picked point. Bind with v-model; undefined leaves the map unpinned. */
|
|
@@ -63,7 +72,7 @@ const props = withDefaults(
|
|
|
63
72
|
|
|
64
73
|
const emit = defineEmits<{ (e: "update:modelValue", value: LatLon): void }>()
|
|
65
74
|
|
|
66
|
-
const labelSet = useLabels("mapPicker", {
|
|
75
|
+
const labelSet = useLabels<MapPickerLabels>("mapPicker", {
|
|
67
76
|
zoomIn: "Zoom in",
|
|
68
77
|
zoomOut: "Zoom out",
|
|
69
78
|
locate: "Use my location",
|
|
@@ -33,7 +33,16 @@ import LpIcon from "./LpIcon.vue"
|
|
|
33
33
|
import LpLightbox from "./LpLightbox.vue"
|
|
34
34
|
import VideoThumb from "./VideoThumb.vue"
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
/** Wording of the media gallery. `{n}` and `{total}` are replaced. */
|
|
37
|
+
export type MediaGalleryLabels = {
|
|
38
|
+
gallery: string
|
|
39
|
+
image: string
|
|
40
|
+
spoiler: string
|
|
41
|
+
showSpoiler: string
|
|
42
|
+
showMore: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const DEFAULT_LABELS: MediaGalleryLabels = {
|
|
37
46
|
/** Accessible name of the grid. */
|
|
38
47
|
gallery: "Media",
|
|
39
48
|
/** Name of an image without a title; `{n}` and `{total}` are replaced. */
|
|
@@ -80,7 +89,7 @@ const props = withDefaults(
|
|
|
80
89
|
* image without one; it keeps the browser's own menu.
|
|
81
90
|
*/
|
|
82
91
|
itemMenu?: (item: LightboxItem, index: number) => ContextMenuItemDef[]
|
|
83
|
-
labels?: Partial<
|
|
92
|
+
labels?: Partial<MediaGalleryLabels>
|
|
84
93
|
}>(),
|
|
85
94
|
{
|
|
86
95
|
columns: 3,
|
|
@@ -92,7 +101,7 @@ const props = withDefaults(
|
|
|
92
101
|
},
|
|
93
102
|
)
|
|
94
103
|
|
|
95
|
-
const text = useLabels("mediaGallery", DEFAULT_LABELS, () => props.labels)
|
|
104
|
+
const text = useLabels<MediaGalleryLabels>("mediaGallery", DEFAULT_LABELS, () => props.labels)
|
|
96
105
|
|
|
97
106
|
/** `{n}` is the image's position, `{total}` the size of the set. */
|
|
98
107
|
function fill(template: string, n: number, total = 0): string {
|
|
@@ -41,6 +41,11 @@ import { useOutsideGuard, usePortalTarget } from "../composables/useView"
|
|
|
41
41
|
const panelRef = ref<HTMLElement | null>(null)
|
|
42
42
|
const { claim, release, layer } = useModalLayer({ element: () => panelRef.value?.parentElement })
|
|
43
43
|
|
|
44
|
+
/** Wording of the modal's close button. */
|
|
45
|
+
export type ModalLabels = {
|
|
46
|
+
close: string
|
|
47
|
+
}
|
|
48
|
+
|
|
44
49
|
const props = withDefaults(
|
|
45
50
|
defineProps<{
|
|
46
51
|
open?: boolean
|
|
@@ -104,12 +109,12 @@ const props = withDefaults(
|
|
|
104
109
|
* overlay the app already drives from its route.
|
|
105
110
|
*/
|
|
106
111
|
history?: OverlayHistoryMode
|
|
107
|
-
labels?: Partial<
|
|
112
|
+
labels?: Partial<ModalLabels>
|
|
108
113
|
}>(),
|
|
109
114
|
{ size: "md", autoFocus: "auto", glass: undefined, dismissible: true, guard: undefined, history: undefined },
|
|
110
115
|
)
|
|
111
116
|
|
|
112
|
-
const text = useLabels("modal", { close: "Close" }, () => props.labels)
|
|
117
|
+
const text = useLabels<ModalLabels>("modal", { close: "Close" }, () => props.labels)
|
|
113
118
|
|
|
114
119
|
const frosted = useGlass(() => props.glass)
|
|
115
120
|
|
|
@@ -26,6 +26,11 @@ export type { SidebarItem, SidebarSection } from "./sidebar"
|
|
|
26
26
|
|
|
27
27
|
type Breakpoint = "sm" | "md" | "lg" | "xl"
|
|
28
28
|
|
|
29
|
+
/** Wording of the modal's section navigation. */
|
|
30
|
+
export type ModalNavLabels = {
|
|
31
|
+
nav: string
|
|
32
|
+
}
|
|
33
|
+
|
|
29
34
|
const props = withDefaults(
|
|
30
35
|
defineProps<{
|
|
31
36
|
open?: boolean
|
|
@@ -74,7 +79,7 @@ const emit = defineEmits<{
|
|
|
74
79
|
(e: "update:modelValue", value: string): void
|
|
75
80
|
}>()
|
|
76
81
|
|
|
77
|
-
const text = useLabels("modalNav", { nav: "Sections" })
|
|
82
|
+
const text = useLabels<ModalNavLabels>("modalNav", { nav: "Sections" })
|
|
78
83
|
const navName = computed(() => props.navLabel ?? text.value.nav)
|
|
79
84
|
|
|
80
85
|
const navOpen = ref(false)
|
|
@@ -27,6 +27,13 @@ import { useMergedAttrs } from "../composables/useMergedClass"
|
|
|
27
27
|
import { useLabels } from "../composables/useLpConfig"
|
|
28
28
|
import { useResizeObserver } from "../composables/useResizeObserver"
|
|
29
29
|
|
|
30
|
+
/** Wording of the pagination controls. */
|
|
31
|
+
export type PaginationLabels = {
|
|
32
|
+
nav: string
|
|
33
|
+
previous: string
|
|
34
|
+
next: string
|
|
35
|
+
}
|
|
36
|
+
|
|
30
37
|
const props = withDefaults(
|
|
31
38
|
defineProps<{
|
|
32
39
|
/** Current page, 1-based (v-model:page). */
|
|
@@ -39,12 +46,12 @@ const props = withDefaults(
|
|
|
39
46
|
/** Pages shown on each side of the current one in the inner run. */
|
|
40
47
|
siblings?: number
|
|
41
48
|
disabled?: boolean
|
|
42
|
-
labels?: Partial<
|
|
49
|
+
labels?: Partial<PaginationLabels>
|
|
43
50
|
}>(),
|
|
44
51
|
{ page: 1, pageSize: 10, siblings: 1 },
|
|
45
52
|
)
|
|
46
53
|
|
|
47
|
-
const text = useLabels(
|
|
54
|
+
const text = useLabels<PaginationLabels>(
|
|
48
55
|
"pagination",
|
|
49
56
|
{ nav: "Pagination", previous: "Previous page", next: "Next page" },
|
|
50
57
|
() => props.labels,
|
|
@@ -8,9 +8,22 @@ import LpThemeProvider from "./LpThemeProvider.vue"
|
|
|
8
8
|
import LpButton from "./LpButton.vue"
|
|
9
9
|
import LpInput from "./LpInput.vue"
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Wording of the theme editor in the command palette. The scope is shared with
|
|
13
|
+
* `usePaletteTheme`, which names the command after `title`.
|
|
14
|
+
*/
|
|
15
|
+
export type PaletteThemeLabels = {
|
|
16
|
+
title: string
|
|
17
|
+
apply: string
|
|
18
|
+
revert: string
|
|
19
|
+
sample: string
|
|
20
|
+
action: string
|
|
21
|
+
placeholder: string
|
|
22
|
+
}
|
|
23
|
+
|
|
11
24
|
const props = defineProps<{ studio: PreviewableThemeStudio; hide?: ThemeStudioPart[] }>()
|
|
12
25
|
suppressPaletteDiscovery()
|
|
13
|
-
const text = useLabels("paletteTheme", { title: "Theme", apply: "Apply theme", revert: "Revert draft", sample: "Preview", action: "Continue", placeholder: "A field in this theme" })
|
|
26
|
+
const text = useLabels<PaletteThemeLabels>("paletteTheme", { title: "Theme", apply: "Apply theme", revert: "Revert draft", sample: "Preview", action: "Continue", placeholder: "A field in this theme" })
|
|
14
27
|
const snapshot = ref({ ...props.studio.state.value })
|
|
15
28
|
const state = ref<StudioState>({ ...snapshot.value })
|
|
16
29
|
const preview = computed(() => props.studio.preview(state.value))
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/** Wording of the repeater. `{index}` in `remove` is the item's position. */
|
|
3
|
+
export type RepeaterLabels = {
|
|
4
|
+
add: string
|
|
5
|
+
remove: string
|
|
6
|
+
empty: string
|
|
7
|
+
}
|
|
8
|
+
</script>
|
|
9
|
+
|
|
1
10
|
<script setup lang="ts" generic="T extends object">
|
|
2
11
|
import FieldWrapper from "./FieldWrapper.vue"
|
|
3
12
|
import { nextTick, ref } from "vue"
|
|
@@ -20,7 +29,7 @@ const props = defineProps<{
|
|
|
20
29
|
disabled?: boolean
|
|
21
30
|
/** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
|
|
22
31
|
error?: string
|
|
23
|
-
labels?: Partial<
|
|
32
|
+
labels?: Partial<RepeaterLabels>
|
|
24
33
|
}>()
|
|
25
34
|
const model = defineModel<T[]>({ default: () => [] })
|
|
26
35
|
defineSlots<{
|
|
@@ -29,7 +38,7 @@ defineSlots<{
|
|
|
29
38
|
}>()
|
|
30
39
|
|
|
31
40
|
const { field, wrapper, ownAttrs } = useOwnField(() => ({ error: props.error, disabled: props.disabled }))
|
|
32
|
-
const text = useLabels("repeater", { add: "Add item", remove: "Remove item {index}", empty: "No items" }, () => props.labels)
|
|
41
|
+
const text = useLabels<RepeaterLabels>("repeater", { add: "Add item", remove: "Remove item {index}", empty: "No items" }, () => props.labels)
|
|
33
42
|
const list = useRepeater({
|
|
34
43
|
value: () => model.value,
|
|
35
44
|
set: (items) => { model.value = items },
|
|
@@ -27,6 +27,17 @@ import {
|
|
|
27
27
|
} from "../composables/useHotkeys"
|
|
28
28
|
import { useLabels } from "../composables/useLpConfig"
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Wording of the shortcuts dialog. The scope is shared with LpKeys, which reads
|
|
32
|
+
* `then` (between the steps of a sequence such as "g then i").
|
|
33
|
+
*/
|
|
34
|
+
export type ShortcutsLabels = {
|
|
35
|
+
title: string
|
|
36
|
+
conflict: string
|
|
37
|
+
group: string
|
|
38
|
+
then: string
|
|
39
|
+
}
|
|
40
|
+
|
|
30
41
|
const props = withDefaults(
|
|
31
42
|
defineProps<{
|
|
32
43
|
open?: boolean
|
|
@@ -49,7 +60,7 @@ const props = withDefaults(
|
|
|
49
60
|
{ open: false, groups: () => [], live: false, title: undefined, glass: undefined, history: undefined },
|
|
50
61
|
)
|
|
51
62
|
|
|
52
|
-
const text = useLabels("shortcuts", {
|
|
63
|
+
const text = useLabels<Omit<ShortcutsLabels, "then">>("shortcuts", {
|
|
53
64
|
title: "Keyboard shortcuts",
|
|
54
65
|
conflict: "Also bound elsewhere: only one of them runs",
|
|
55
66
|
group: "General",
|
|
@@ -28,6 +28,19 @@ import type { SidebarItem, SidebarSection } from "./sidebar"
|
|
|
28
28
|
|
|
29
29
|
export type { SidebarItem, SidebarSection } from "./sidebar"
|
|
30
30
|
|
|
31
|
+
/** Wording of the sidebar's landmark and controls. */
|
|
32
|
+
export type SidebarLabels = {
|
|
33
|
+
nav: string
|
|
34
|
+
search: string
|
|
35
|
+
pinned: string
|
|
36
|
+
pin: string
|
|
37
|
+
unpin: string
|
|
38
|
+
expand: string
|
|
39
|
+
compact: string
|
|
40
|
+
expandRail: string
|
|
41
|
+
resize: string
|
|
42
|
+
}
|
|
43
|
+
|
|
31
44
|
const props = withDefaults(
|
|
32
45
|
defineProps<{
|
|
33
46
|
/** Active item id (v-model). Ignored when `isActive` is provided. */
|
|
@@ -55,17 +68,7 @@ const props = withDefaults(
|
|
|
55
68
|
/** Placeholder for that field (defaults to the `search` label). */
|
|
56
69
|
searchPlaceholder?: string
|
|
57
70
|
/** Text overrides: `nav` names the landmark, `search` the filter field. */
|
|
58
|
-
labels?: Partial<
|
|
59
|
-
nav: string
|
|
60
|
-
search: string
|
|
61
|
-
pinned: string
|
|
62
|
-
pin: string
|
|
63
|
-
unpin: string
|
|
64
|
-
expand: string
|
|
65
|
-
compact: string
|
|
66
|
-
expandRail: string
|
|
67
|
-
resize: string
|
|
68
|
-
}>
|
|
71
|
+
labels?: Partial<SidebarLabels>
|
|
69
72
|
/** The query, when the app wants to own it (v-model:search). */
|
|
70
73
|
search?: string
|
|
71
74
|
/** Show a skeleton placeholder instead of the items. */
|
|
@@ -215,7 +218,7 @@ defineSlots<{
|
|
|
215
218
|
item?: (props: { item: SidebarItem; active: boolean }) => unknown
|
|
216
219
|
}>()
|
|
217
220
|
|
|
218
|
-
const text = useLabels(
|
|
221
|
+
const text = useLabels<SidebarLabels>(
|
|
219
222
|
"sidebar",
|
|
220
223
|
{
|
|
221
224
|
nav: "Sidebar",
|
|
@@ -24,6 +24,16 @@ import { useLabels } from "../composables/useLpConfig"
|
|
|
24
24
|
import { areaPath, extent, linePath, normalise, type Box } from "./chart"
|
|
25
25
|
import { toneLook, type ToneName } from "./tone"
|
|
26
26
|
|
|
27
|
+
/** Wording of the sparkline's states and trend. */
|
|
28
|
+
export type SparklineLabels = {
|
|
29
|
+
empty: string
|
|
30
|
+
up: string
|
|
31
|
+
down: string
|
|
32
|
+
flat: string
|
|
33
|
+
latest: string
|
|
34
|
+
loading: string
|
|
35
|
+
}
|
|
36
|
+
|
|
27
37
|
const props = withDefaults(
|
|
28
38
|
defineProps<{
|
|
29
39
|
/** Oldest → newest. `null` breaks the line, as in LpChart. */
|
|
@@ -74,7 +84,7 @@ const props = withDefaults(
|
|
|
74
84
|
* says it is an example). Off: the flat stub shows on the tour too.
|
|
75
85
|
*/
|
|
76
86
|
sample?: boolean
|
|
77
|
-
labels?: Partial<
|
|
87
|
+
labels?: Partial<SparklineLabels>
|
|
78
88
|
}>(),
|
|
79
89
|
{ width: 84, height: 24, tone: "brand", smooth: 0.9, animate: true, duration: 900, sample: true },
|
|
80
90
|
)
|
|
@@ -184,7 +194,7 @@ const lastPoint = computed(() => {
|
|
|
184
194
|
const hasData = computed(() => series.value[0].values.some((v) => v != null))
|
|
185
195
|
|
|
186
196
|
/* A bare <svg> is invisible to a screen reader; say the shape out loud. */
|
|
187
|
-
const text = useLabels(
|
|
197
|
+
const text = useLabels<SparklineLabels>(
|
|
188
198
|
"sparkline",
|
|
189
199
|
{
|
|
190
200
|
empty: "No data",
|
|
@@ -23,6 +23,11 @@ export interface TocLink {
|
|
|
23
23
|
children?: TocLink[]
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
/** Wording of the table of contents. */
|
|
27
|
+
export type TableOfContentsLabels = {
|
|
28
|
+
title: string
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
const props = withDefaults(
|
|
27
32
|
defineProps<{
|
|
28
33
|
links: TocLink[]
|
|
@@ -35,7 +40,7 @@ const props = withDefaults(
|
|
|
35
40
|
* near the top kept the previous section lit under it.
|
|
36
41
|
*/
|
|
37
42
|
offset?: number
|
|
38
|
-
labels?: Partial<
|
|
43
|
+
labels?: Partial<TableOfContentsLabels>
|
|
39
44
|
/**
|
|
40
45
|
* The bar glides under the hovered link and springs back on leave (the
|
|
41
46
|
* default), as in LpTabs. False pins it to the section in view: calmer for
|
|
@@ -46,7 +51,7 @@ const props = withDefaults(
|
|
|
46
51
|
{ offset: 96, hoverFollow: true },
|
|
47
52
|
)
|
|
48
53
|
|
|
49
|
-
const text = useLabels("toc", { title: "On this page" }, () => props.labels)
|
|
54
|
+
const text = useLabels<TableOfContentsLabels>("toc", { title: "On this page" }, () => props.labels)
|
|
50
55
|
const heading = computed(() => props.title ?? text.value.title)
|
|
51
56
|
|
|
52
57
|
// Every level of the tree as one ordered list; depth drives the indent, so
|
|
@@ -27,6 +27,14 @@ import LpRollingText from "./LpRollingText.vue"
|
|
|
27
27
|
import LpShift from "./LpShift.vue"
|
|
28
28
|
import LpThemeStudio, { type ThemeStudioPart } from "./LpThemeStudio.vue"
|
|
29
29
|
|
|
30
|
+
/** Wording of the theme switcher. `{name}` in `trigger` is the current theme. */
|
|
31
|
+
export type ThemeSwitcherLabels = {
|
|
32
|
+
trigger: string
|
|
33
|
+
system: string
|
|
34
|
+
studio: string
|
|
35
|
+
openStudio: string
|
|
36
|
+
}
|
|
37
|
+
|
|
30
38
|
const props = withDefaults(
|
|
31
39
|
defineProps<{
|
|
32
40
|
/** Active theme NAME (v-model). Falls back to the first theme. */
|
|
@@ -66,7 +74,7 @@ const props = withDefaults(
|
|
|
66
74
|
*/
|
|
67
75
|
system?: { light: string | TokenSet; dark: string | TokenSet }
|
|
68
76
|
/** Text overrides. `trigger` may contain `{name}`. */
|
|
69
|
-
labels?: Partial<
|
|
77
|
+
labels?: Partial<ThemeSwitcherLabels>
|
|
70
78
|
/**
|
|
71
79
|
* The right-click menu ends with "Theme studio…", set apart from the
|
|
72
80
|
* themes, which opens LpThemeStudio by the trigger: the theme plus brand
|
|
@@ -125,7 +133,7 @@ function keepForTrigger(event: Event) {
|
|
|
125
133
|
}
|
|
126
134
|
}
|
|
127
135
|
|
|
128
|
-
const text = useLabels(
|
|
136
|
+
const text = useLabels<ThemeSwitcherLabels>(
|
|
129
137
|
"themeSwitcher",
|
|
130
138
|
{
|
|
131
139
|
trigger: "Theme: {name}. Click to switch, right-click to choose.",
|
|
@@ -21,8 +21,15 @@ import LpIcon from "./LpIcon.vue"
|
|
|
21
21
|
import { toneLook } from "./tone"
|
|
22
22
|
import { nodeWindow, usePortalTarget, useView, viewDocument, viewWindow } from "../composables/useView"
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
/** Wording of a toast's controls. */
|
|
25
|
+
export type ToasterLabels = {
|
|
26
|
+
dismiss: string
|
|
27
|
+
copy: string
|
|
28
|
+
copied: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const props = defineProps<{ labels?: Partial<ToasterLabels> }>()
|
|
32
|
+
const text = useLabels<ToasterLabels>("toast", { dismiss: "Dismiss", copy: "Copy message", copied: "Copied" }, () => props.labels)
|
|
26
33
|
|
|
27
34
|
const { queue, dismiss } = useToast()
|
|
28
35
|
|
|
@@ -75,12 +75,24 @@ import type { Box } from "../composables/spatialNav"
|
|
|
75
75
|
import { holeClip, holeOf, panelsAround } from "./tour"
|
|
76
76
|
import { usePortalTarget } from "../composables/useView"
|
|
77
77
|
|
|
78
|
+
/** Wording of the tour. `{n}` and `{total}` in `progress` are replaced. */
|
|
79
|
+
export type TourLabels = {
|
|
80
|
+
next: string
|
|
81
|
+
back: string
|
|
82
|
+
done: string
|
|
83
|
+
close: string
|
|
84
|
+
progress: string
|
|
85
|
+
perform: string
|
|
86
|
+
tryIt: string
|
|
87
|
+
example: string
|
|
88
|
+
}
|
|
89
|
+
|
|
78
90
|
const props = withDefaults(
|
|
79
91
|
defineProps<{
|
|
80
92
|
steps: TourStep[]
|
|
81
93
|
/** Room around the target inside the lit hole, px. */
|
|
82
94
|
padding?: number
|
|
83
|
-
labels?: Partial<
|
|
95
|
+
labels?: Partial<TourLabels>
|
|
84
96
|
}>(),
|
|
85
97
|
{ padding: 6 },
|
|
86
98
|
)
|
|
@@ -95,7 +107,7 @@ const emit = defineEmits<{
|
|
|
95
107
|
const open = defineModel<boolean>("open", { default: false })
|
|
96
108
|
const index = defineModel<number>("step", { default: 0 })
|
|
97
109
|
|
|
98
|
-
const DEFAULT_LABELS = {
|
|
110
|
+
const DEFAULT_LABELS: TourLabels = {
|
|
99
111
|
next: "Next",
|
|
100
112
|
back: "Back",
|
|
101
113
|
done: "Done",
|
|
@@ -105,7 +117,7 @@ const DEFAULT_LABELS = {
|
|
|
105
117
|
tryIt: "Try it: press the highlighted control.",
|
|
106
118
|
example: "This is an example: there are none right now.",
|
|
107
119
|
}
|
|
108
|
-
const labels = useLabels("tour", DEFAULT_LABELS, () => props.labels)
|
|
120
|
+
const labels = useLabels<TourLabels>("tour", DEFAULT_LABELS, () => props.labels)
|
|
109
121
|
|
|
110
122
|
const WAIT_MS = 800
|
|
111
123
|
const TRY_SETTLE_MS = 120
|
|
@@ -22,6 +22,9 @@ import { DEFAULT_UNIT_LABELS, formatTime, toEpoch, type TimeUnitLabels } from ".
|
|
|
22
22
|
import { UPTIME_SEVERITY, uptimeFigure, uptimeRange, uptimeShare, type UptimeSegment, type UptimeStatus } from "./uptimeBar"
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
/** Wording of the uptime bar: one name per status, plus its own states. */
|
|
26
|
+
export type UptimeBarLabels = Record<UptimeStatus | "empty" | "loading" | "uptime", string>
|
|
27
|
+
|
|
25
28
|
const props = withDefaults(
|
|
26
29
|
defineProps<{
|
|
27
30
|
/** Oldest → newest. Each entry is one slice of the timeline. */
|
|
@@ -48,7 +51,7 @@ const props = withDefaults(
|
|
|
48
51
|
*/
|
|
49
52
|
colors?: Partial<Record<UptimeStatus, string>>
|
|
50
53
|
/** Status names, for the tooltip and screen readers. */
|
|
51
|
-
labels?: Partial<
|
|
54
|
+
labels?: Partial<UptimeBarLabels>
|
|
52
55
|
/**
|
|
53
56
|
* The history is on its way. The row of ticks pulses in place of the
|
|
54
57
|
* slices (as many as `segments` already holds, else `skeletonSlices`) at
|
|
@@ -83,7 +86,7 @@ const opacityFor = (status: UptimeStatus): number =>
|
|
|
83
86
|
const colorFor = (status: UptimeStatus): string =>
|
|
84
87
|
props.colors?.[status] ?? defaultColor[status]
|
|
85
88
|
|
|
86
|
-
const statusLabel = useLabels(
|
|
89
|
+
const statusLabel = useLabels<UptimeBarLabels>(
|
|
87
90
|
"uptimeBar",
|
|
88
91
|
{
|
|
89
92
|
operational: "Operational",
|