@leavepulse/ui 0.71.1 → 0.72.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/dist/assets/{LpCommandPalette-DgPZX0us.css → LpCommandPalette-Rtbg669l.css} +19 -19
- package/dist/assets/{LpNumberFlow-rZkwQwlU.css → LpNumberFlow-Chp9pEDe.css} +8 -0
- package/dist/assets/LpTabs-CDchzoRL.css +18 -0
- package/dist/chunks/{ContextMenuItems-eS7qx9gD.js → ContextMenuItems-BXumicbh.js} +1 -1
- package/dist/chunks/{DropzoneLinkField-DkFhdfEJ.js → DropzoneLinkField-D2Rnkcys.js} +2 -2
- package/dist/chunks/{FieldWrapper-YzbvvC3M.js → FieldWrapper-DnA1rxZ8.js} +1 -1
- package/dist/chunks/{LayoutCanvas-Ba4A9QC5.js → LayoutCanvas-CNOAUk7D.js} +1 -1
- package/dist/chunks/{LayoutNode-CTTTLMDM.js → LayoutNode-DF5BMN0J.js} +1 -1
- package/dist/chunks/{LpActionBar-B7anGlkI.js → LpActionBar-DfiBL1dE.js} +3 -3
- package/dist/chunks/{LpAddressInput-CD0bzrt-.js → LpAddressInput-B1bB3F6M.js} +7 -7
- package/dist/chunks/{LpAlert-BHi7ARqu.js → LpAlert-CpRF9eYr.js} +3 -3
- package/dist/chunks/{LpAppShell-1RmBp6xQ.js → LpAppShell-D8Q0Jv9d.js} +68 -18
- package/dist/chunks/{LpAutocomplete-DDqe2M5g.js → LpAutocomplete-DOu7FN5P.js} +2 -2
- package/dist/chunks/{LpAvatar-DqfKCIdr.js → LpAvatar-Cg6Az3wz.js} +1 -1
- package/dist/chunks/{LpBadge-C8fKEmTF.js → LpBadge-vtCpsDmv.js} +3 -3
- package/dist/chunks/LpBottomNav-VXJf0cKc.js +89 -0
- package/dist/chunks/{LpBreadcrumbs-DhcoStFa.js → LpBreadcrumbs-BdzjQcql.js} +3 -3
- package/dist/chunks/{LpButton-BQDAFXBd.js → LpButton-Dk7eT4ro.js} +1 -1
- package/dist/chunks/{LpCalendar-NmrA47J9.js → LpCalendar-CuoWks-0.js} +1 -1
- package/dist/chunks/{LpCard-CqKLnEhl.js → LpCard-Ce3rw8zm.js} +1 -1
- package/dist/chunks/{LpCheckbox-BoOuLnGB.js → LpCheckbox-DLX4amba.js} +2 -2
- package/dist/chunks/{LpCodeBlock-Czu-fq1M.js → LpCodeBlock-j0W5bpmF.js} +2 -2
- package/dist/chunks/{LpCodeDisplay-BK2FHbtM.js → LpCodeDisplay-COdiv4xu.js} +6 -6
- package/dist/chunks/{LpColorPicker-Ee1DZiRd.js → LpColorPicker-1y1QJHZR.js} +56 -28
- package/dist/chunks/{LpCommandScope-ubtWDMa0.js → LpCommandScope-BlKcgBnK.js} +1 -1
- package/dist/chunks/{LpConfirmDialog-i15pulMT.js → LpConfirmDialog-w1ni5nxh.js} +3 -3
- package/dist/chunks/{LpConfirmHost-D0oGavtd.js → LpConfirmHost-Br_-Gn-6.js} +1 -1
- package/dist/chunks/{LpContextMenu-DXpFJjlO.js → LpContextMenu-rx2tCjwk.js} +2 -2
- package/dist/chunks/{LpCopyButton-Dmq7DmFw.js → LpCopyButton-DaD1KCn6.js} +2 -2
- package/dist/chunks/{LpCountdown-DTdMF8DL.js → LpCountdown-Cgy0mVEq.js} +3 -3
- package/dist/chunks/{LpDataList-CFPtSsBB.js → LpDataList-CkcGFJgv.js} +3 -3
- package/dist/chunks/{LpDatePicker-cC9K-Pk8.js → LpDatePicker-CA0QTfBC.js} +4 -4
- package/dist/chunks/{LpDateRangePicker-BVQKPbvo.js → LpDateRangePicker-u3J51xXk.js} +2 -2
- package/dist/chunks/{LpDisclosure-hRnX3FWL.js → LpDisclosure-Cpa7Hc5T.js} +1 -1
- package/dist/chunks/{LpDrawer-u4rxnuR-.js → LpDrawer-RRamxbLV.js} +1 -1
- package/dist/chunks/{LpDropdownMenu-BgZ0Z_Im.js → LpDropdownMenu-Dl7Z4ZhS.js} +2 -2
- package/dist/chunks/{LpEditable-CjxuOVh_.js → LpEditable-D3PvD6Zm.js} +5 -5
- package/dist/chunks/{LpEmptyState-CKFTtQgJ.js → LpEmptyState-EQHiRYhG.js} +7 -3
- package/dist/chunks/{LpFieldNotice-CPI8EwtU.js → LpFieldNotice-CzQ2_5rQ.js} +1 -1
- package/dist/chunks/{LpFileTree-BH0gNlSJ.js → LpFileTree-D7KTaJiM.js} +2 -2
- package/dist/chunks/{LpFileTreeNode-gPVB1oXM.js → LpFileTreeNode-14GVqQTd.js} +5 -5
- package/dist/chunks/{LpFormField-gRASfyj2.js → LpFormField-MSQhRCTz.js} +2 -2
- package/dist/chunks/{LpGauge-BdjPGnqw.js → LpGauge-BO1PYYqD.js} +2 -2
- package/dist/chunks/{LpHintLayer-C2asBIfs.js → LpHintLayer-CmYm37z7.js} +2 -2
- package/dist/chunks/{LpHints-CNZQ76JV.js → LpHints-iLIRUkCj.js} +3 -3
- package/dist/chunks/{LpIcon-DkP-9mzK.js → LpIcon--5WSb3jJ.js} +1 -1
- package/dist/chunks/{LpInfraNode-yTh4-5qa.js → LpInfraNode-BT0VQrOa.js} +2 -2
- package/dist/chunks/{LpInput-2H-5ILOB.js → LpInput-1eNvtzXs.js} +2 -2
- package/dist/chunks/{LpLightbox-lAt5uIfx.js → LpLightbox-DWw6OSA4.js} +3 -3
- package/dist/chunks/{LpLoader-DjJEX8hL.js → LpLoader-B82_CcV0.js} +1 -1
- package/dist/chunks/{LpLogViewer-x78YfhJf.js → LpLogViewer-pzanZASC.js} +6 -6
- package/dist/chunks/{LpMapPicker-Dp5RSCi9.js → LpMapPicker-DNIUvF6V.js} +2 -2
- package/dist/chunks/{LpMediaGallery-D92oJfY_.js → LpMediaGallery-Dx8xzg5N.js} +3 -3
- package/dist/chunks/{LpModal-CpH0bNo7.js → LpModal-BnjZ2iem.js} +1 -1
- package/dist/chunks/{LpModalNav-BH4ANQGJ.js → LpModalNav-Cu04W1pV.js} +4 -4
- package/dist/chunks/{LpNotificationBell-BdUQqZhs.js → LpNotificationBell-PSQqFqEv.js} +8 -8
- package/dist/chunks/{LpNumberField-DZY3Z670.js → LpNumberField-e0IBkWU1.js} +1 -1
- package/dist/chunks/{LpNumberFlow-5khYxsfX.js → LpNumberFlow-CcxEGUy0.js} +10 -7
- package/dist/chunks/{LpPagination-DbeACavM.js → LpPagination-BIIiYHXR.js} +1 -1
- package/dist/chunks/{LpPaletteTheme-CqWNRwHE.js → LpPaletteTheme-D05ywM1W.js} +8 -6
- package/dist/chunks/{LpPasswordInput-BzAZsf5V.js → LpPasswordInput-vdcw-koG.js} +2 -2
- package/dist/chunks/{LpPhoneInput-BMpd-0QR.js → LpPhoneInput-CETEp5W7.js} +2 -2
- package/dist/chunks/{LpPie-DdFSTbGE.js → LpPie-BlWDxCtG.js} +6 -6
- package/dist/chunks/{LpPipeline-zjEM1Lwc.js → LpPipeline-BXjoxkq_.js} +4 -4
- package/dist/chunks/{LpProgress-BX33EKkN.js → LpProgress-rOlyafqp.js} +1 -1
- package/dist/chunks/{LpQuota-DqNv1yjs.js → LpQuota-B12yijdB.js} +3 -3
- package/dist/chunks/{LpRadioGroup-CsXeV9Ct.js → LpRadioGroup-ggaPL92T.js} +1 -1
- package/dist/chunks/{LpRangeCalendar-l-0nSFmY.js → LpRangeCalendar-CYYUYqJ7.js} +1 -1
- package/dist/chunks/{LpRelativeTime-UM8EkfrN.js → LpRelativeTime-DwgCb5-8.js} +1 -1
- package/dist/chunks/{LpRepeater-OvzByE5L.js → LpRepeater-fliVBcN7.js} +3 -3
- package/dist/chunks/LpRollingText-B54Pje7P.js +86 -0
- package/dist/chunks/{LpScramble-TDO5Kdou.js → LpScramble-Cw-af0Yh.js} +1 -1
- package/dist/chunks/{LpSecretField-DwQiPOko.js → LpSecretField-D_IMxEGW.js} +7 -7
- package/dist/chunks/{LpSection-DcQsieHG.js → LpSection-DFK_uoJE.js} +1 -1
- package/dist/chunks/{LpSegmented-D2VST0o3.js → LpSegmented-CeACsMMA.js} +4 -2
- package/dist/chunks/{LpSelect-DYX2-u5A.js → LpSelect-Cxq4yBGd.js} +7 -7
- package/dist/chunks/LpShift-BAp8lGoa.js +160 -0
- package/dist/chunks/LpSidebar-BftYsk5d.js +494 -0
- package/dist/chunks/LpSidebarNav-BzNWMZfc.js +357 -0
- package/dist/chunks/LpSidebarRow-BIReMT1f.js +302 -0
- package/dist/chunks/{LpStat-DIsQfbeD.js → LpStat-BFCM6fUn.js} +9 -7
- package/dist/chunks/{LpStatus-BQU1TUsv.js → LpStatus-BWTLVPVh.js} +3 -3
- package/dist/chunks/{LpStepMark-CXa7DJy_.js → LpStepMark-DkdkebLC.js} +3 -3
- package/dist/chunks/{LpStepper-C9RM_yTG.js → LpStepper-BgqjKrqg.js} +1 -1
- package/dist/chunks/{LpSwap-DzE6M3Mg.js → LpSwap-B5YOXgtx.js} +1 -1
- package/dist/chunks/{LpSwitch-bGZxUDSx.js → LpSwitch-DyrRes7s.js} +1 -1
- package/dist/chunks/LpTabFace-D6BMCbAP.js +77 -0
- package/dist/chunks/{LpTableFilter-CTZMqFDU.js → LpTableFilter-Dkzamzkl.js} +3 -3
- package/dist/chunks/{LpTagsInput-DrjmrOge.js → LpTagsInput-DAZNNehI.js} +5 -5
- package/dist/chunks/{LpTextarea-BbYqmG1S.js → LpTextarea-DbmVPj2X.js} +32 -7
- package/dist/chunks/{useTheme-BOV_-AiY.js → LpThemeProvider-8MG6yqU9.js} +66 -1
- package/dist/chunks/{LpThemeStudio-B2nPaG-h.js → LpThemeStudio-DWtG6OZZ.js} +140 -106
- package/dist/chunks/LpThemeStudioSection-B7bt8Iyg.js +32 -0
- package/dist/chunks/{LpThemeSwitcher-C0A5sg_E.js → LpThemeSwitcher-Dcx-VkSk.js} +9 -8
- package/dist/chunks/{LpTimeField-DQ8WvPr2.js → LpTimeField-BawSVsmt.js} +1 -1
- package/dist/chunks/{LpToaster-BTTl_wuy.js → LpToaster-50hp_B5O.js} +2 -2
- package/dist/chunks/{LpTopologyCanvas-B0wEvAoq.js → LpTopologyCanvas-CnUh8uzS.js} +43 -13
- package/dist/chunks/{LpTour-BgCfNlaW.js → LpTour-DC3LTlxg.js} +1 -1
- package/dist/chunks/{LpTruncate-TcqfkyJM.js → LpTruncate-Ced4gquB.js} +1 -1
- package/dist/chunks/{LpUptimeBar-DRadGq4Y.js → LpUptimeBar-CuB0LX8K.js} +4 -4
- package/dist/chunks/{MenuTitle-Dab3EGOp.js → MenuTitle-BmCNNTKH.js} +1 -1
- package/dist/chunks/{OptionContent-DPzNsybd.js → OptionContent-22UT8zLn.js} +1 -1
- package/dist/chunks/{PickerField-DwLw7j0L.js → PickerField-Bfh8id3d.js} +2 -2
- package/dist/chunks/{RevealToggle-BVFM_FAU.js → RevealToggle-B0ITuIX-.js} +2 -2
- package/dist/chunks/{TourCard--2IfgnUU.js → TourCard-CBkj1GYi.js} +5 -5
- package/dist/chunks/{icons-CLu1iR1j.js → icons-DMITlfw5.js} +1 -1
- package/dist/chunks/{palette-BiY7yQZL.js → palette-Cvxl_1tM.js} +1 -1
- 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/FieldWrapper.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.js +1 -1
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +67 -2
- 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.js +1 -1
- package/dist/components/LpBottomNav.vue.d.ts +28 -0
- package/dist/components/LpBottomNav.vue.js +4 -0
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.js +1 -1
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.js +26 -8
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpCodeDisplay.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.d.ts +15 -2
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.js +47 -26
- package/dist/components/LpCommandScope.vue.js +1 -1
- 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/LpCopyButton.vue.js +1 -1
- package/dist/components/LpCountdown.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.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.js +2 -2
- package/dist/components/LpEditable.vue.js +1 -1
- package/dist/components/LpEmptyState.vue.d.ts +2 -0
- 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/LpGauge.vue.js +1 -1
- package/dist/components/LpHintLayer.vue.js +1 -1
- package/dist/components/LpHints.vue.js +1 -1
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.js +2 -2
- package/dist/components/LpInfraNode.vue.js +1 -1
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLoader.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.d.ts +1 -1
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpNumberFlow.vue.js +1 -1
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPaletteFacts.vue.js +2 -2
- package/dist/components/LpPaletteHeader.vue.js +2 -2
- package/dist/components/LpPaletteStats.vue.js +2 -2
- package/dist/components/LpPaletteTheme.vue.d.ts +2 -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/LpProgress.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/LpRelativeTime.vue.js +1 -1
- package/dist/components/LpRepeater.vue.js +1 -1
- package/dist/components/LpRollingText.vue.d.ts +2 -2
- package/dist/components/LpRollingText.vue.js +1 -1
- package/dist/components/LpScramble.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/LpShift.vue.d.ts +20 -0
- package/dist/components/LpShift.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.js +1 -1
- package/dist/components/LpSidebar.vue.d.ts +74 -23
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.d.ts +30 -2
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSidebarRow.vue.d.ts +49 -0
- package/dist/components/LpSidebarRow.vue.js +4 -0
- package/dist/components/LpStat.vue.d.ts +11 -0
- 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/LpSwap.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTabFace.vue.d.ts +14 -0
- package/dist/components/LpTabFace.vue.js +4 -0
- package/dist/components/LpTable.vue.js +11 -11
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpTabs.vue.d.ts +12 -4
- package/dist/components/LpTabs.vue.js +22 -74
- package/dist/components/LpTagsInput.vue.js +1 -1
- package/dist/components/LpTextarea.vue.d.ts +19 -1
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.js +1 -1
- package/dist/components/LpThemeStudio.vue.d.ts +2 -2
- package/dist/components/LpThemeStudio.vue.js +1 -1
- package/dist/components/LpThemeStudioSection.vue.d.ts +4 -1
- package/dist/components/LpThemeStudioSection.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.d.ts +3 -1
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpTour.vue.js +1 -1
- package/dist/components/LpTruncate.vue.js +1 -1
- package/dist/components/LpUptimeBar.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/chart.d.ts +14 -0
- package/dist/components/chart.js +13 -0
- package/dist/components/format.d.ts +10 -3
- package/dist/components/format.js +14 -2
- package/dist/components/menuWhen.js +1 -1
- package/dist/components/rolling.d.ts +5 -0
- package/dist/components/rolling.js +23 -0
- package/dist/components/sidebar.d.ts +33 -0
- package/dist/components/tabs.d.ts +3 -0
- package/dist/components/tabs.js +6 -0
- package/dist/composables/usePaletteCommands.js +1 -0
- package/dist/composables/useReveal.js +1 -22
- package/dist/icons-all.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +156 -154
- package/dist/theme/palette.d.ts +3 -0
- package/package.json +1 -1
- package/src/component-names.ts +1 -0
- package/src/components/LpAppShell.vue +75 -7
- package/src/components/LpBottomNav.vue +84 -0
- package/src/components/LpChart.vue +23 -3
- package/src/components/LpColorPicker.vue +32 -1
- package/src/components/LpCommandPalette.vue +23 -5
- package/src/components/LpEmptyState.vue +4 -1
- package/src/components/LpNumberFlow.vue +23 -9
- package/src/components/LpPaletteTheme.vue +3 -3
- package/src/components/LpRollingText.vue +27 -2
- package/src/components/LpSegmented.vue +3 -1
- package/src/components/LpSelect.vue +5 -4
- package/src/components/LpShift.vue +174 -2
- package/src/components/LpSidebar.vue +304 -18
- package/src/components/LpSidebarNav.vue +200 -70
- package/src/components/LpSidebarRow.vue +238 -0
- package/src/components/LpStat.vue +12 -4
- package/src/components/LpTabFace.vue +52 -0
- package/src/components/LpTabs.vue +15 -42
- package/src/components/LpTextarea.vue +34 -4
- package/src/components/LpThemeStudio.vue +92 -56
- package/src/components/LpThemeStudioSection.vue +15 -7
- package/src/components/LpThemeSwitcher.vue +4 -1
- package/src/components/LpTopologyCanvas.vue +35 -4
- package/src/components/chart.ts +26 -0
- package/src/components/format.ts +31 -5
- package/src/components/rolling.ts +28 -0
- package/src/components/sidebar.ts +33 -0
- package/src/components/tabs.ts +9 -0
- package/src/composables/usePaletteCommands.ts +3 -0
- package/src/composables/useReveal.ts +7 -30
- package/src/index.ts +2 -1
- package/src/kit-icons.ts +1 -1
- package/src/theme/palette.ts +4 -2
- package/dist/assets/LpTabs-CO3EcsNV.css +0 -18
- package/dist/chunks/LpRollingText-DiL717LK.js +0 -51
- package/dist/chunks/LpShift-DXNsauQZ.js +0 -40
- package/dist/chunks/LpSidebar-D44peKq2.js +0 -256
- package/dist/chunks/LpSidebarNav--VwkXO_a.js +0 -211
- package/dist/chunks/LpThemeProvider-DcbfOxsU.js +0 -69
- package/dist/chunks/LpThemeStudioSection-BwhqYDLf.js +0 -20
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
import { defineComponent, computed, ref, watch, nextTick, useId, openBlock, createBlock, unref, withCtx, createVNode, normalizeClass, createElementBlock, Fragment, renderList, createCommentVNode,
|
|
1
|
+
import { defineComponent, computed, ref, watch, nextTick, useId, openBlock, createBlock, unref, withCtx, createVNode, normalizeClass, createElementBlock, Fragment, renderList, createCommentVNode, renderSlot } from "vue";
|
|
2
2
|
import { usePaletteScope, usePaletteCommands } from "../composables/usePaletteCommands.js";
|
|
3
3
|
import { Motion } from "motion-v";
|
|
4
4
|
import { TabsRoot, TabsList, TabsTrigger, TabsContent } from "reka-ui";
|
|
5
5
|
import { usePillTransition } from "../composables/usePillTransition.js";
|
|
6
6
|
import { prefersReducedMotion } from "../composables/easing.js";
|
|
7
|
-
import { _ as _sfc_main$
|
|
8
|
-
import { _ as _sfc_main$
|
|
9
|
-
import { _ as _sfc_main$
|
|
10
|
-
import {
|
|
11
|
-
import { _ as _sfc_main$5 } from "../chunks/LpRollingText-DiL717LK.js";
|
|
12
|
-
import { _ as _sfc_main$6 } from "../chunks/LpSkeleton-BB6XIV-w.js";
|
|
13
|
-
import { pickTab } from "./tabs.js";
|
|
7
|
+
import { _ as _sfc_main$1 } from "../chunks/LpContextMenu-rx2tCjwk.js";
|
|
8
|
+
import { _ as _sfc_main$3 } from "../chunks/LpSkeleton-BB6XIV-w.js";
|
|
9
|
+
import { _ as _sfc_main$2 } from "../chunks/LpTabFace-D6BMCbAP.js";
|
|
10
|
+
import { pickTab, BOTTOM_BAR, BOTTOM_ITEM, BOTTOM_MARKER } from "./tabs.js";
|
|
14
11
|
import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
|
|
15
|
-
import '../assets/LpTabs-
|
|
16
|
-
key: 1,
|
|
17
|
-
class: "relative z-10 inline-flex"
|
|
18
|
-
};
|
|
19
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
12
|
+
import '../assets/LpTabs-CDchzoRL.css';const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
20
13
|
__name: "LpTabs",
|
|
21
14
|
props: {
|
|
22
15
|
modelValue: {},
|
|
@@ -26,7 +19,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
26
19
|
accent: { type: Boolean, default: false },
|
|
27
20
|
block: { type: Boolean, default: false },
|
|
28
21
|
label: {},
|
|
29
|
-
hoverFollow: { type: Boolean, default: true }
|
|
22
|
+
hoverFollow: { type: Boolean, default: true },
|
|
23
|
+
compact: { type: Boolean, default: false }
|
|
30
24
|
},
|
|
31
25
|
emits: ["update:modelValue"],
|
|
32
26
|
setup(__props, { emit: __emit }) {
|
|
@@ -94,7 +88,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
94
88
|
ref_key: "list",
|
|
95
89
|
ref: list,
|
|
96
90
|
"aria-label": __props.label,
|
|
97
|
-
class: normalizeClass(bottom.value ?
|
|
91
|
+
class: normalizeClass(bottom.value ? unref(BOTTOM_BAR) : [
|
|
98
92
|
"max-w-full gap-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
99
93
|
__props.block ? "flex w-full" : "inline-flex",
|
|
100
94
|
__props.variant === "contained" ? "rounded-control border border-line bg-surface-soft p-1" : "",
|
|
@@ -114,8 +108,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
114
108
|
createVNode(unref(TabsTrigger), {
|
|
115
109
|
value: item.value,
|
|
116
110
|
disabled: item.disabled,
|
|
111
|
+
title: __props.compact && item.icon && !bottom.value ? item.label : void 0,
|
|
117
112
|
class: normalizeClass(["relative inline-flex items-center justify-center outline-none transition-[color,opacity] duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[disabled]:cursor-not-allowed data-[disabled]:opacity-45", [
|
|
118
|
-
bottom.value ?
|
|
113
|
+
bottom.value ? unref(BOTTOM_ITEM) : "shrink-0 gap-1.5 whitespace-nowrap text-sm",
|
|
119
114
|
__props.block && !bottom.value ? "flex-1" : "",
|
|
120
115
|
__props.variant === "underline" ? "rounded-t-inner px-3 pt-1.5 pb-2" : "",
|
|
121
116
|
__props.variant === "contained" || __props.variant === "plain" ? "rounded-inner px-3 py-1.5" : "",
|
|
@@ -133,67 +128,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
133
128
|
class: normalizeClass(__props.variant === "underline" ? [
|
|
134
129
|
"absolute inset-x-0 -bottom-px z-0 h-0.5 rounded-full",
|
|
135
130
|
__props.accent ? "bg-brand" : "bg-ink"
|
|
136
|
-
] : bottom.value ? [
|
|
137
|
-
"absolute inset-x-[22%] top-0 z-0 h-0.5 rounded-b-full",
|
|
138
|
-
__props.accent ? "bg-brand" : "bg-ink"
|
|
139
|
-
] : [
|
|
131
|
+
] : bottom.value ? [unref(BOTTOM_MARKER), __props.accent ? "bg-brand" : "bg-ink"] : [
|
|
140
132
|
"absolute inset-0 z-0 rounded-inner shadow-sm",
|
|
141
133
|
__props.accent ? "border border-brand/35 bg-brand/12" : "border border-line bg-surface-raised"
|
|
142
134
|
])
|
|
143
135
|
}, null, 8, ["transition", "class"])) : createCommentVNode("", true),
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
key: 0,
|
|
151
|
-
corner: ""
|
|
152
|
-
})) : createCommentVNode("", true),
|
|
153
|
-
createVNode(Transition, { name: "lp-tab-badge" }, {
|
|
154
|
-
default: withCtx(() => [
|
|
155
|
-
bottom.value && item.badge != null ? (openBlock(), createBlock(_sfc_main$4, {
|
|
156
|
-
key: 0,
|
|
157
|
-
size: "sm",
|
|
158
|
-
tone: current.value === item.value ? "brand" : "neutral",
|
|
159
|
-
class: "absolute -right-3 -top-1.5 min-w-[18px] justify-center"
|
|
160
|
-
}, {
|
|
161
|
-
default: withCtx(() => [
|
|
162
|
-
createVNode(_sfc_main$5, {
|
|
163
|
-
value: item.badge
|
|
164
|
-
}, null, 8, ["value"])
|
|
165
|
-
]),
|
|
166
|
-
_: 2
|
|
167
|
-
}, 1032, ["tone"])) : createCommentVNode("", true)
|
|
168
|
-
]),
|
|
169
|
-
_: 2
|
|
170
|
-
}, 1024)
|
|
171
|
-
])) : createCommentVNode("", true),
|
|
172
|
-
createElementVNode("span", {
|
|
173
|
-
class: normalizeClass(["relative z-10", bottom.value ? "max-w-full truncate" : ""])
|
|
174
|
-
}, toDisplayString(item.label), 3),
|
|
175
|
-
item.dot && !item.icon ? (openBlock(), createBlock(_sfc_main$3, { key: 2 })) : createCommentVNode("", true),
|
|
176
|
-
createVNode(Transition, { name: "lp-tab-badge" }, {
|
|
177
|
-
default: withCtx(() => [
|
|
178
|
-
!(bottom.value && item.icon) && item.badge != null ? (openBlock(), createBlock(_sfc_main$4, {
|
|
179
|
-
key: 0,
|
|
180
|
-
size: "sm",
|
|
181
|
-
tone: current.value === item.value ? "brand" : "neutral",
|
|
182
|
-
class: "relative z-10 min-w-[18px] justify-center"
|
|
183
|
-
}, {
|
|
184
|
-
default: withCtx(() => [
|
|
185
|
-
createVNode(_sfc_main$5, {
|
|
186
|
-
value: item.badge
|
|
187
|
-
}, null, 8, ["value"])
|
|
188
|
-
]),
|
|
189
|
-
_: 2
|
|
190
|
-
}, 1032, ["tone"])) : createCommentVNode("", true)
|
|
191
|
-
]),
|
|
192
|
-
_: 2
|
|
193
|
-
}, 1024)
|
|
136
|
+
createVNode(_sfc_main$2, {
|
|
137
|
+
item,
|
|
138
|
+
bottom: bottom.value,
|
|
139
|
+
compact: __props.compact,
|
|
140
|
+
active: current.value === item.value
|
|
141
|
+
}, null, 8, ["item", "bottom", "compact", "active"])
|
|
194
142
|
]),
|
|
195
143
|
_: 2
|
|
196
|
-
}, 1032, ["value", "disabled", "class", "onPointerenter"])
|
|
144
|
+
}, 1032, ["value", "disabled", "title", "class", "onPointerenter"])
|
|
197
145
|
]),
|
|
198
146
|
_: 2
|
|
199
147
|
}, 1032, ["items", "title", "title-icon"]);
|
|
@@ -203,12 +151,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
203
151
|
key: `skeleton-${n}`,
|
|
204
152
|
class: normalizeClass(["flex items-center justify-center", bottom.value ? "min-h-14 flex-col gap-1.5 py-1.5" : "px-1 py-1.5"])
|
|
205
153
|
}, [
|
|
206
|
-
bottom.value ? (openBlock(), createBlock(_sfc_main$
|
|
154
|
+
bottom.value ? (openBlock(), createBlock(_sfc_main$3, {
|
|
207
155
|
key: 0,
|
|
208
156
|
rounded: "pill",
|
|
209
157
|
class: "size-5"
|
|
210
158
|
})) : createCommentVNode("", true),
|
|
211
|
-
createVNode(_sfc_main$
|
|
159
|
+
createVNode(_sfc_main$3, {
|
|
212
160
|
class: normalizeClass(bottom.value ? "h-2.5 w-10" : "h-5 w-16")
|
|
213
161
|
}, null, 8, ["class"])
|
|
214
162
|
], 2);
|
|
@@ -247,7 +195,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
247
195
|
};
|
|
248
196
|
}
|
|
249
197
|
});
|
|
250
|
-
const LpTabs = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
198
|
+
const LpTabs = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9f51a497"]]);
|
|
251
199
|
export {
|
|
252
200
|
LpTabs as default
|
|
253
201
|
};
|
|
@@ -17,7 +17,17 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
17
17
|
* the <textarea> for native validation.
|
|
18
18
|
*/
|
|
19
19
|
required?: boolean;
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Grows with what is typed, wrapped lines included, from `rows` up to
|
|
22
|
+
* `maxRows`, then scrolls; the drag handle goes, since the height is the
|
|
23
|
+
* text's. For a composer, where a fixed box is either cramped or empty.
|
|
24
|
+
*/
|
|
25
|
+
autosize?: boolean;
|
|
26
|
+
maxRows?: number;
|
|
27
|
+
}, {
|
|
28
|
+
el: import("vue").Ref<HTMLTextAreaElement | null, HTMLTextAreaElement | null>;
|
|
29
|
+
fit: () => void;
|
|
30
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
21
31
|
"update:modelValue": (value: string) => any;
|
|
22
32
|
}, string, import("vue").PublicProps, Readonly<{
|
|
23
33
|
/** Contextual palette metadata; false excludes this control. */
|
|
@@ -35,8 +45,16 @@ declare const __VLS_export: import("vue").DefineComponent<{
|
|
|
35
45
|
* the <textarea> for native validation.
|
|
36
46
|
*/
|
|
37
47
|
required?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Grows with what is typed, wrapped lines included, from `rows` up to
|
|
50
|
+
* `maxRows`, then scrolls; the drag handle goes, since the height is the
|
|
51
|
+
* text's. For a composer, where a fixed box is either cramped or empty.
|
|
52
|
+
*/
|
|
53
|
+
autosize?: boolean;
|
|
54
|
+
maxRows?: number;
|
|
38
55
|
}> & Readonly<{
|
|
39
56
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
40
57
|
}>, {
|
|
41
58
|
palette: PaletteControlOptions;
|
|
59
|
+
maxRows: number;
|
|
42
60
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -35,13 +35,13 @@ type __VLS_Props = {
|
|
|
35
35
|
};
|
|
36
36
|
declare var __VLS_14: {
|
|
37
37
|
studio: ThemeStudio;
|
|
38
|
-
},
|
|
38
|
+
}, __VLS_89: {
|
|
39
39
|
studio: ThemeStudio;
|
|
40
40
|
};
|
|
41
41
|
type __VLS_Slots = {} & {
|
|
42
42
|
start?: (props: typeof __VLS_14) => any;
|
|
43
43
|
} & {
|
|
44
|
-
end?: (props: typeof
|
|
44
|
+
end?: (props: typeof __VLS_89) => any;
|
|
45
45
|
};
|
|
46
46
|
declare const __VLS_base: 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>;
|
|
47
47
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
label: string;
|
|
3
|
+
inline?: boolean;
|
|
3
4
|
};
|
|
4
|
-
declare var __VLS_1: {};
|
|
5
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
5
6
|
type __VLS_Slots = {} & {
|
|
6
7
|
default?: (props: typeof __VLS_1) => any;
|
|
8
|
+
} & {
|
|
9
|
+
default?: (props: typeof __VLS_3) => any;
|
|
7
10
|
};
|
|
8
11
|
declare const __VLS_base: 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
12
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -120,13 +120,15 @@ type __VLS_Props = {
|
|
|
120
120
|
minimap?: boolean;
|
|
121
121
|
controls?: boolean;
|
|
122
122
|
};
|
|
123
|
+
declare const fitView: import("@vue-flow/core").FitView;
|
|
124
|
+
declare function fitFramed(params?: Parameters<typeof fitView>[0]): Promise<boolean>;
|
|
123
125
|
declare function applyViewport(v: CanvasViewport): Promise<void>;
|
|
124
126
|
declare var __VLS_29: {};
|
|
125
127
|
type __VLS_Slots = {} & {
|
|
126
128
|
'legend-extra'?: (props: typeof __VLS_29) => any;
|
|
127
129
|
};
|
|
128
130
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
129
|
-
fitView:
|
|
131
|
+
fitView: typeof fitFramed;
|
|
130
132
|
setViewport: typeof applyViewport;
|
|
131
133
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
132
134
|
connect: (value: Connection) => any;
|
|
@@ -19,6 +19,13 @@ export interface ChartSeries {
|
|
|
19
19
|
* own scale and its own ticks.
|
|
20
20
|
*/
|
|
21
21
|
axis?: "left" | "right";
|
|
22
|
+
/**
|
|
23
|
+
* Start with this series switched off, the legend turning it back on. For a
|
|
24
|
+
* series worth having but loud next to the rest: messages in thousands beside
|
|
25
|
+
* people in tens flatten the people line on a shared axis until they are
|
|
26
|
+
* hidden, so the chart opens on the readable view.
|
|
27
|
+
*/
|
|
28
|
+
hidden?: boolean;
|
|
22
29
|
}
|
|
23
30
|
export type ChartAxis = "left" | "right";
|
|
24
31
|
/**
|
|
@@ -45,6 +52,13 @@ export interface ChartMarker {
|
|
|
45
52
|
label?: string;
|
|
46
53
|
color?: string;
|
|
47
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Which x labels to print with every `stride`-th one shown. The last point is
|
|
57
|
+
* always labelled (it is usually "now"), and when it lands within half a
|
|
58
|
+
* stride to the previous shown label that one gives way: "20 22 23" read as
|
|
59
|
+
* one smudge at the end of an hourly axis.
|
|
60
|
+
*/
|
|
61
|
+
export declare function xLabelIndices(count: number, stride: number): number[];
|
|
48
62
|
/** The x index a marker points at, or -1 when it names nothing on the axis. */
|
|
49
63
|
export declare const markerIndex: (at: number | string, labels: string[], count: number) => number;
|
|
50
64
|
/**
|
package/dist/components/chart.js
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import { compactNumber } from "./format.js";
|
|
2
|
+
function xLabelIndices(count, stride) {
|
|
3
|
+
if (count <= 0) return [];
|
|
4
|
+
const step = Math.max(1, Math.floor(stride));
|
|
5
|
+
const out = [];
|
|
6
|
+
for (let i = 0; i < count; i += step) out.push(i);
|
|
7
|
+
const last = count - 1;
|
|
8
|
+
if (out[out.length - 1] !== last) {
|
|
9
|
+
if (out.length > 1 && last - out[out.length - 1] <= step / 2) out.pop();
|
|
10
|
+
out.push(last);
|
|
11
|
+
}
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
2
14
|
const markerIndex = (at, labels, count) => {
|
|
3
15
|
if (typeof at === "number") return Number.isInteger(at) && at >= 0 && at < count ? at : -1;
|
|
4
16
|
return labels.indexOf(at);
|
|
@@ -383,5 +395,6 @@ export {
|
|
|
383
395
|
resolveLabels,
|
|
384
396
|
resolveSlices,
|
|
385
397
|
xAt,
|
|
398
|
+
xLabelIndices,
|
|
386
399
|
yAt
|
|
387
400
|
};
|
|
@@ -17,10 +17,16 @@ export interface CompactNumberOptions {
|
|
|
17
17
|
/**
|
|
18
18
|
* Writes the decimal separator the locale's way ("1,2k" in Russian). The
|
|
19
19
|
* k/M/B/T suffixes stay: Intl's own compact notation changes the shape of
|
|
20
|
-
* the figure per locale ("1,2 тыс."), which a tick label
|
|
21
|
-
*
|
|
20
|
+
* the figure per locale ("1,2 тыс."), which a tick label cannot absorb.
|
|
21
|
+
* Unset keeps a plain "." whatever the browser says.
|
|
22
22
|
*/
|
|
23
23
|
locale?: string;
|
|
24
|
+
/**
|
|
25
|
+
* With a locale, write the unit as that locale does: "11,9 тыс." in Russian.
|
|
26
|
+
* For a figure read on its own (a stat tile, a counter), where "11,9k" looks
|
|
27
|
+
* foreign; not for axis ticks, where the longer word crowds the axis.
|
|
28
|
+
*/
|
|
29
|
+
words?: boolean;
|
|
24
30
|
/** Places for a figure below a thousand (12.25). Default 2. */
|
|
25
31
|
plainDecimals?: number;
|
|
26
32
|
/** Places once a unit is in play (1.2k). Default 1. */
|
|
@@ -32,7 +38,8 @@ export interface CompactNumberOptions {
|
|
|
32
38
|
fixed?: boolean;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
|
-
* A figure shortened with k/M/B/T: 1 200 → "1.2k", 3 400 000 → "3.4M"
|
|
41
|
+
* A figure shortened with k/M/B/T: 1 200 → "1.2k", 3 400 000 → "3.4M"; with
|
|
42
|
+
* `words` and a locale in that locale's own words, "1,2 тыс." in Russian.
|
|
36
43
|
*
|
|
37
44
|
* The unit is picked by what will PRINT, not by the raw size: 999 950 at one
|
|
38
45
|
* place rounds to "1000k", which reads as the next unit up, so it becomes
|
|
@@ -39,9 +39,21 @@ const COMPACT_UNITS = [
|
|
|
39
39
|
[1e9, "B"],
|
|
40
40
|
[1e12, "T"]
|
|
41
41
|
];
|
|
42
|
+
const compactSuffixes = /* @__PURE__ */ new Map();
|
|
43
|
+
function compactSuffix(locale, step) {
|
|
44
|
+
const key = `${locale}|${step}`;
|
|
45
|
+
let found = compactSuffixes.get(key);
|
|
46
|
+
if (found === void 0) {
|
|
47
|
+
const parts = numberFormat(locale, { notation: "compact", compactDisplay: "short" }).formatToParts(COMPACT_UNITS[step][0]);
|
|
48
|
+
const at = parts.findIndex((p) => p.type === "compact");
|
|
49
|
+
found = at < 0 ? COMPACT_UNITS[step][1] : (parts[at - 1]?.type === "literal" ? parts[at - 1].value : "") + parts[at].value;
|
|
50
|
+
compactSuffixes.set(key, found);
|
|
51
|
+
}
|
|
52
|
+
return found;
|
|
53
|
+
}
|
|
42
54
|
function compactNumber(value, options = {}) {
|
|
43
55
|
if (!Number.isFinite(value)) return String(value);
|
|
44
|
-
const { locale, plainDecimals = 2, decimals = 1, fixed = false } = options;
|
|
56
|
+
const { locale, plainDecimals = 2, decimals = 1, fixed = false, words = false } = options;
|
|
45
57
|
const abs = Math.abs(value);
|
|
46
58
|
let i = COMPACT_UNITS.length - 1;
|
|
47
59
|
while (i > 0 && abs < COMPACT_UNITS[i][0]) i--;
|
|
@@ -59,7 +71,7 @@ function compactNumber(value, options = {}) {
|
|
|
59
71
|
maximumFractionDigits: places,
|
|
60
72
|
useGrouping: false
|
|
61
73
|
}).format(scaled);
|
|
62
|
-
return `${number}${COMPACT_UNITS[i][1]}`;
|
|
74
|
+
return `${number}${words && locale !== void 0 && i > 0 ? compactSuffix(locale, i) : COMPACT_UNITS[i][1]}`;
|
|
63
75
|
}
|
|
64
76
|
function decimalMark(locale) {
|
|
65
77
|
return numberFormat(locale, {}).formatToParts(1.5).find((p) => p.type === "decimal")?.value ?? ".";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const LETTER = new RegExp("\\p{L}", "u");
|
|
2
|
+
function letter(ch) {
|
|
3
|
+
return ch !== void 0 && LETTER.test(ch);
|
|
4
|
+
}
|
|
5
|
+
function splitChange(before, after) {
|
|
6
|
+
if (before === after) return { head: "", mid: after, tail: "" };
|
|
7
|
+
const a = [...before];
|
|
8
|
+
const b = [...after];
|
|
9
|
+
let head = 0;
|
|
10
|
+
while (head < a.length && head < b.length && a[head] === b[head]) head++;
|
|
11
|
+
while (head > 0 && letter(b[head - 1]) && (letter(b[head]) || letter(a[head]))) head--;
|
|
12
|
+
let tail = 0;
|
|
13
|
+
while (tail < a.length - head && tail < b.length - head && a[a.length - 1 - tail] === b[b.length - 1 - tail]) tail++;
|
|
14
|
+
while (tail > 0 && letter(b[b.length - tail]) && (letter(b[b.length - tail - 1]) || letter(a[a.length - tail - 1]))) tail--;
|
|
15
|
+
return {
|
|
16
|
+
head: b.slice(0, head).join(""),
|
|
17
|
+
mid: b.slice(head, b.length - tail).join(""),
|
|
18
|
+
tail: b.slice(b.length - tail).join("")
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
splitChange
|
|
23
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Component } from "vue";
|
|
1
2
|
import type { ContextMenuItemDef } from "./LpContextMenu.vue";
|
|
2
3
|
export interface SidebarItem {
|
|
3
4
|
id: string;
|
|
@@ -27,6 +28,38 @@ export interface SidebarItem {
|
|
|
27
28
|
* "invoice", a page found by the feature it used to be called.
|
|
28
29
|
*/
|
|
29
30
|
keywords?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Pages under this one, one level deep: folded under the row and opened
|
|
33
|
+
* while one of them is the current page, so a section's tabs are a click
|
|
34
|
+
* away without opening the section first. In a compact sidebar they open in
|
|
35
|
+
* a card beside the icon.
|
|
36
|
+
*/
|
|
37
|
+
children?: SidebarItem[];
|
|
38
|
+
/** A dot instead of a count: something new here that has no number to it. */
|
|
39
|
+
dot?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* The keys that open this page ("G D"), shown at the row's end on hover and
|
|
42
|
+
* in the compact card. Display only: the app binds the keys.
|
|
43
|
+
*/
|
|
44
|
+
hotkey?: string;
|
|
45
|
+
/**
|
|
46
|
+
* What the page holds, shown in a card beside the row once the pointer has
|
|
47
|
+
* rested on it (`previewDelay`): a glance before going there.
|
|
48
|
+
*/
|
|
49
|
+
preview?: Component;
|
|
50
|
+
/**
|
|
51
|
+
* The hint-system page (or pages) this row opens. With the sidebar's
|
|
52
|
+
* `hints`, the row carries a dot while that page has news nobody has read,
|
|
53
|
+
* and loses it once the news is read there.
|
|
54
|
+
*/
|
|
55
|
+
hintPage?: string | string[];
|
|
56
|
+
/**
|
|
57
|
+
* Work started on this page is still running (a publish, a deploy): a thin
|
|
58
|
+
* bar along the row's foot, sweeping while `true`, filled to a fraction
|
|
59
|
+
* while a number from 0 to 1. Leaving the page no longer hides that it is
|
|
60
|
+
* not done.
|
|
61
|
+
*/
|
|
62
|
+
busy?: boolean | number;
|
|
30
63
|
}
|
|
31
64
|
export interface SidebarSection {
|
|
32
65
|
/** Optional heading above the group. */
|
|
@@ -14,3 +14,6 @@ export interface TabChoice {
|
|
|
14
14
|
* that contain it rather than being thrown away before they load.
|
|
15
15
|
*/
|
|
16
16
|
export declare function pickTab(items: readonly TabChoice[], current: string | undefined): string | undefined;
|
|
17
|
+
export declare const BOTTOM_BAR = "grid w-full auto-cols-fr grid-flow-col border-t border-line bg-surface pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]";
|
|
18
|
+
export declare const BOTTOM_ITEM = "min-h-14 min-w-0 flex-col gap-0.5 px-1 py-1.5 text-[11px] font-medium focus-visible:ring-inset";
|
|
19
|
+
export declare const BOTTOM_MARKER = "absolute inset-x-[22%] top-0 z-0 h-0.5 rounded-b-full";
|
package/dist/components/tabs.js
CHANGED
|
@@ -3,6 +3,12 @@ function pickTab(items, current) {
|
|
|
3
3
|
if (items.some((item) => item.value === current && !item.disabled)) return current;
|
|
4
4
|
return items.find((item) => !item.disabled)?.value ?? current;
|
|
5
5
|
}
|
|
6
|
+
const BOTTOM_BAR = "grid w-full auto-cols-fr grid-flow-col border-t border-line bg-surface pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]";
|
|
7
|
+
const BOTTOM_ITEM = "min-h-14 min-w-0 flex-col gap-0.5 px-1 py-1.5 text-[11px] font-medium focus-visible:ring-inset";
|
|
8
|
+
const BOTTOM_MARKER = "absolute inset-x-[22%] top-0 z-0 h-0.5 rounded-b-full";
|
|
6
9
|
export {
|
|
10
|
+
BOTTOM_BAR,
|
|
11
|
+
BOTTOM_ITEM,
|
|
12
|
+
BOTTOM_MARKER,
|
|
7
13
|
pickTab
|
|
8
14
|
};
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
import { ref, watch, toValue, onBeforeUnmount } from "vue";
|
|
2
2
|
import { prefersReducedMotion } from "./easing.js";
|
|
3
|
-
import { atScrollEnd } from "./scroll.js";
|
|
4
3
|
function useReveal(options = {}) {
|
|
5
|
-
const { threshold = 0.25, rootMargin = "0px
|
|
4
|
+
const { threshold = 0.25, rootMargin = "0px" } = options;
|
|
6
5
|
const el = ref(null);
|
|
7
6
|
const revealed = ref(typeof window === "undefined");
|
|
8
7
|
let observer = null;
|
|
9
|
-
let edge = null;
|
|
10
|
-
let onScroll = null;
|
|
11
8
|
function stop() {
|
|
12
9
|
observer?.disconnect();
|
|
13
10
|
observer = null;
|
|
14
|
-
edge?.disconnect();
|
|
15
|
-
edge = null;
|
|
16
|
-
if (onScroll) window.removeEventListener("scroll", onScroll, true);
|
|
17
|
-
onScroll = null;
|
|
18
11
|
}
|
|
19
12
|
function reveal() {
|
|
20
13
|
revealed.value = true;
|
|
@@ -41,20 +34,6 @@ function useReveal(options = {}) {
|
|
|
41
34
|
{ threshold, rootMargin }
|
|
42
35
|
);
|
|
43
36
|
observer.observe(node);
|
|
44
|
-
let onScreen = false;
|
|
45
|
-
const check = () => {
|
|
46
|
-
if (onScreen && atScrollEnd(node)) reveal();
|
|
47
|
-
};
|
|
48
|
-
edge = new IntersectionObserver(
|
|
49
|
-
(entries) => {
|
|
50
|
-
onScreen = entries.some((entry) => entry.isIntersecting);
|
|
51
|
-
check();
|
|
52
|
-
},
|
|
53
|
-
{ threshold }
|
|
54
|
-
);
|
|
55
|
-
edge.observe(node);
|
|
56
|
-
onScroll = check;
|
|
57
|
-
window.addEventListener("scroll", onScroll, { capture: true, passive: true });
|
|
58
37
|
},
|
|
59
38
|
{ immediate: true, flush: "post" }
|
|
60
39
|
);
|