@leavepulse/ui 0.77.2 → 0.78.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 +68 -0
- package/dist/assets/{LpCommandPalette-DOIZHw-g.css → LpCommandPalette-DDJKICKh.css} +19 -19
- package/dist/assets/{LpDock-Cbh0wQUv.css → LpDock-Dw82tWVD.css} +3 -3
- package/dist/assets/{LpDropzone-B_qRq1-R.css → LpDropzone-DNbh_NFJ.css} +10 -10
- package/dist/assets/{LpImageEditor-XM5bAziW.css → LpImageEditor-Bgu20XLs.css} +6 -6
- package/dist/assets/{LpTable-Bv-EcQs7.css → LpTable-CCk0ZHo7.css} +19 -19
- package/dist/assets/LpTabs-Bh7a-Bdl.css +18 -0
- package/dist/chunks/AppShellContextNav-C6Ho2mof.js +49 -0
- package/dist/chunks/ChartRangeSelector-HO0sMMz6.js +129 -0
- package/dist/chunks/{ContextMenuItems-BXumicbh.js → ContextMenuItems-DmaKSJVv.js} +1 -1
- package/dist/chunks/{DropzoneLinkField-C-9BCGJn.js → DropzoneLinkField-DXIr0eFz.js} +2 -2
- package/dist/chunks/{FieldWrapper-CORPzo9s.js → FieldWrapper-DnuMTrqW.js} +1 -1
- package/dist/chunks/IconCloseButton-COZEsa9u.js +29 -0
- package/dist/chunks/{LayoutCanvas-CNOAUk7D.js → LayoutCanvas-CZKOltfA.js} +1 -1
- package/dist/chunks/{LayoutNode-DF5BMN0J.js → LayoutNode-D2f7v683.js} +45 -45
- package/dist/chunks/{LpActionBar-BP1ld7-S.js → LpActionBar-BGMk5KoG.js} +3 -3
- package/dist/chunks/{LpActivityLine-CJvzrNpj.js → LpActivityLine-Ea-t5Vza.js} +4 -2
- package/dist/chunks/{LpAddressInput-sYMvYzcY.js → LpAddressInput-ZqoZ-N2Y.js} +12 -11
- package/dist/chunks/{LpAlert-n5XPAZfv.js → LpAlert-CjvTZIKF.js} +3 -3
- package/dist/chunks/LpAppShell-BNAVTQsY.js +582 -0
- package/dist/chunks/{LpAutocomplete-DOu7FN5P.js → LpAutocomplete-DkY6CSyD.js} +26 -42
- package/dist/chunks/{LpAvatar-Cg6Az3wz.js → LpAvatar-cQVsNk6F.js} +2 -2
- package/dist/chunks/{LpBadge-wUYLN4U9.js → LpBadge-D5QQdDQ_.js} +2 -2
- package/dist/chunks/{LpBottomNav-CbNQQPuL.js → LpBottomNav-zxLGGbjm.js} +9 -2
- package/dist/chunks/{LpBreadcrumbs-DPdbth-c.js → LpBreadcrumbs-CIIBsygI.js} +4 -3
- package/dist/chunks/{LpButton-CFb44IjC.js → LpButton-DSHioIfD.js} +5 -4
- package/dist/chunks/{LpCalendar-CuoWks-0.js → LpCalendar-D4-LVjfF.js} +1 -1
- package/dist/chunks/{LpCard-r13WRqox.js → LpCard-BPtYXwnT.js} +1 -1
- package/dist/chunks/{LpCheckbox-Cs4SHaHX.js → LpCheckbox-D6RuDW4X.js} +38 -16
- package/dist/chunks/{LpCodeBlock-DRC8VbXW.js → LpCodeBlock-DuzmnIHl.js} +19 -41
- package/dist/chunks/{LpCodeDisplay-CE9TxCA4.js → LpCodeDisplay-CO8fngxa.js} +5 -5
- package/dist/chunks/{LpCollapse-CWS9M_lm.js → LpCollapse-DrAw5DBZ.js} +5 -4
- package/dist/chunks/{LpColorPicker-1y1QJHZR.js → LpColorPicker-BxAHEnR5.js} +11 -12
- package/dist/chunks/{LpCommandScope-CtUhJe8T.js → LpCommandScope-DRUvHiX7.js} +1 -1
- package/dist/chunks/{LpConfirmDialog-DlD45Bi_.js → LpConfirmDialog-6oCIJTDa.js} +3 -3
- package/dist/chunks/{LpConfirmHost-BIWjBLmI.js → LpConfirmHost-DgHvfT6s.js} +1 -1
- package/dist/chunks/{LpContextMenu-rx2tCjwk.js → LpContextMenu--eMGIql6.js} +13 -15
- package/dist/chunks/{LpContextSwitcher-Dwh6dyID.js → LpContextSwitcher-1C1tExdl.js} +2 -2
- package/dist/chunks/{LpCopyButton-xF7wFVoU.js → LpCopyButton-7EOSIuwa.js} +3 -3
- package/dist/chunks/{LpCountdown-DgeY3cLG.js → LpCountdown-DVl7vXI1.js} +4 -3
- package/dist/chunks/{LpDataList-Jxyl9H5w.js → LpDataList-DgBeM01y.js} +13 -4
- package/dist/chunks/{LpDatePicker-CA0QTfBC.js → LpDatePicker-DwSDY0mt.js} +12 -18
- package/dist/chunks/{LpDateRangePicker-u3J51xXk.js → LpDateRangePicker-CNQXdTVv.js} +10 -16
- package/dist/chunks/{LpDisclosure-Cpa7Hc5T.js → LpDisclosure-DG7JCo-d.js} +2 -2
- package/dist/chunks/{LpDrawer-CrG8t_KP.js → LpDrawer-Bt9UUqt_.js} +61 -61
- package/dist/chunks/{LpDropdownMenu-Dl7Z4ZhS.js → LpDropdownMenu-CLzxIOgM.js} +9 -17
- package/dist/chunks/{LpEditable-Cy6GLbFx.js → LpEditable-DVT0Rh8F.js} +9 -6
- package/dist/chunks/{LpEmptyState-EQHiRYhG.js → LpEmptyState-DurPF001.js} +1 -1
- package/dist/chunks/{LpFieldNotice-CzQ2_5rQ.js → LpFieldNotice-DJ10cYIo.js} +1 -1
- package/dist/chunks/LpFileTree-BSx1kBoV.js +735 -0
- package/dist/chunks/{LpFileTreeNode-cT6BIWvz.js → LpFileTreeNode-4dVmFHb3.js} +116 -34
- package/dist/chunks/{LpFormField-Ch69Jd-X.js → LpFormField-BKYn9dyP.js} +3 -3
- package/dist/chunks/{LpFrame-BVQCQLDI.js → LpFrame-Bv5Fphte.js} +25 -11
- package/dist/chunks/{LpHintExample-9Py0wc-L.js → LpHintExample-YzCXiSUp.js} +1 -1
- package/dist/chunks/{LpHintLayer-CgObdUsM.js → LpHintLayer-BeKRsRon.js} +2 -2
- package/dist/chunks/{LpHints-Bz-BlaSl.js → LpHints-qf3xYsza.js} +3 -3
- package/dist/chunks/{LpHoverCard-spGxyw7T.js → LpHoverCard-DanH3Nz1.js} +23 -5
- package/dist/chunks/{LpIcon--5WSb3jJ.js → LpIcon-C6JpQ5td.js} +6 -3
- package/dist/chunks/{LpIdenticon-BzdC_qz9.js → LpIdenticon-Dbbr4fvt.js} +2 -1
- package/dist/chunks/{LpInfraNode-46XOCkfq.js → LpInfraNode-BAU40Km2.js} +2 -2
- package/dist/chunks/{LpInput-Tw-yxT4I.js → LpInput-DL6HEJdi.js} +16 -28
- package/dist/chunks/LpInspector-CuoMAhiw.js +209 -0
- package/dist/chunks/{LpLightbox-B95yu22B.js → LpLightbox-xvpQ64MM.js} +57 -32
- package/dist/chunks/{LpLoader-DVwkOmt9.js → LpLoader-Bf1yZwaU.js} +1 -1
- package/dist/chunks/LpLogInspector-6cNnXqp4.js +119 -0
- package/dist/chunks/{LpLogViewer-ngqkns4m.js → LpLogViewer-Dvb1E9_G.js} +234 -53
- package/dist/chunks/{LpMapPicker-DRGgh89B.js → LpMapPicker-D5_YLLBC.js} +4 -3
- package/dist/chunks/{LpMasonry--k0571qG.js → LpMasonry-DPYekFxs.js} +8 -5
- package/dist/chunks/{LpMediaGallery-Bkram-MO.js → LpMediaGallery-Df-tiWeq.js} +3 -3
- package/dist/chunks/{LpModal-CoGhLTyH.js → LpModal-DrtQ_1A2.js} +11 -13
- package/dist/chunks/{LpModalNav-BGvs2y5Q.js → LpModalNav-DkmGCnZE.js} +11 -37
- package/dist/chunks/{LpNotificationBell-B0034Lk-.js → LpNotificationBell-D_wklO1m.js} +9 -9
- package/dist/chunks/{LpNumberField-e0IBkWU1.js → LpNumberField-CNHsmSDZ.js} +7 -16
- package/dist/chunks/{LpOtpInput-CeBPsM7D.js → LpOtpInput-BRpLBbOD.js} +2 -2
- package/dist/chunks/{LpPagination-BIIiYHXR.js → LpPagination-snQ020xQ.js} +6 -4
- package/dist/chunks/{LpPaletteTheme-DiLYKQiZ.js → LpPaletteTheme-dVtxHx-F.js} +4 -4
- package/dist/chunks/{LpPasswordInput-BkHKQDhM.js → LpPasswordInput-B-zD6tUS.js} +2 -2
- package/dist/chunks/{LpPhoneInput-CETEp5W7.js → LpPhoneInput-BSL7NX4z.js} +15 -26
- package/dist/chunks/{LpPie-DrZepi0p.js → LpPie-9t_guO49.js} +22 -21
- package/dist/chunks/{LpPipeline-B3aOVOkV.js → LpPipeline-rjXvEDRJ.js} +16 -7
- package/dist/chunks/{LpPopover-DmZ3wUtP.js → LpPopover-BQSuxtai.js} +10 -1
- package/dist/chunks/{LpProgress-Yr6ONG5t.js → LpProgress-D_MSjowb.js} +2 -1
- package/dist/chunks/{LpQuota-Dk2MyI2Z.js → LpQuota-CgWPgdVt.js} +1 -1
- package/dist/chunks/{LpRadioGroup-ggaPL92T.js → LpRadioGroup-BrazjLY_.js} +4 -4
- package/dist/chunks/{LpRangeCalendar-CYYUYqJ7.js → LpRangeCalendar-BrqlGZzE.js} +1 -1
- package/dist/chunks/{LpRangeSlider-CM-0ZITZ.js → LpRangeSlider-fz61tzc-.js} +5 -9
- package/dist/chunks/{LpRelativeTime-DwgCb5-8.js → LpRelativeTime-BovUk8MP.js} +1 -1
- package/dist/chunks/{LpRepeater-D7ZmnIYd.js → LpRepeater-BkJHSPI1.js} +3 -3
- package/dist/chunks/{LpRevealOnScroll-DcQjexLy.js → LpRevealOnScroll-CPwyiQAr.js} +1 -1
- package/dist/chunks/{LpScramble-Bn9OoOtC.js → LpScramble-DsE77iVp.js} +1 -1
- package/dist/chunks/{LpScrollArea-MyEnVB_5.js → LpScrollArea-ay4Xo_hg.js} +22 -10
- package/dist/chunks/{LpSecretField-BbmqM9ye.js → LpSecretField-DBvU6iAw.js} +10 -9
- package/dist/chunks/{LpSection-DFK_uoJE.js → LpSection-BfteipxU.js} +1 -1
- package/dist/chunks/{LpSegmented-CeACsMMA.js → LpSegmented-DbEJhbv-.js} +8 -10
- package/dist/chunks/{LpSelect-Cxq4yBGd.js → LpSelect-Y-iuSymW.js} +47 -30
- package/dist/chunks/{LpShaderBackdrop-Bote0iuy.js → LpShaderBackdrop-wQygYb5h.js} +13 -10
- package/dist/chunks/{LpShift-CCq7dofl.js → LpShift-DAgS_d2x.js} +18 -15
- package/dist/chunks/{LpSidebar-DzE1783C.js → LpSidebar-kSkpPh3-.js} +74 -87
- package/dist/chunks/{LpSidebarNav-DE3PhXVP.js → LpSidebarNav-C2mvqrY2.js} +8 -6
- package/dist/chunks/{LpSidebarRow-BRYhNDSo.js → LpSidebarRow-eRP4Q31q.js} +6 -5
- package/dist/chunks/{LpSlider-DxYoCJJO.js → LpSlider-A4ixovgS.js} +5 -9
- package/dist/chunks/{LpSpotlight-4F3NeUMY.js → LpSpotlight-DwxkhFgR.js} +2 -1
- package/dist/chunks/{LpStat-f2LfDCJ4.js → LpStat-pMNZgFcq.js} +2 -2
- package/dist/chunks/{LpStatus-DglxttQ7.js → LpStatus-DGJFwk5F.js} +2 -2
- package/dist/chunks/{LpStepMark-DpzKVyh8.js → LpStepMark-Dw2MRTrt.js} +2 -2
- package/dist/chunks/{LpStepper-DpsocBNJ.js → LpStepper-DNnh7lCu.js} +1 -1
- package/dist/chunks/{LpSwap-C96c0LWh.js → LpSwap-M7nFeW3C.js} +1 -1
- package/dist/chunks/{LpSwitch-BnXd1llc.js → LpSwitch-DnC2-0aV.js} +3 -3
- package/dist/chunks/{LpTabFace-DPCwKkH2.js → LpTabFace-DQoV8mQG.js} +2 -2
- package/dist/chunks/{LpTableFilter-CiVBpaq0.js → LpTableFilter-DgARTsA1.js} +4 -4
- package/dist/chunks/{LpTableOfContents-BN5zvpnx.js → LpTableOfContents-CKkWEK6R.js} +14 -9
- package/dist/chunks/{LpTagsInput-C-mDG648.js → LpTagsInput-Dt0mteSj.js} +19 -27
- package/dist/chunks/{LpTextarea-TE-yZv2U.js → LpTextarea-Co0b9PVx.js} +8 -16
- package/dist/chunks/LpThemeProvider-XK6ZeWAE.js +81 -0
- package/dist/chunks/{LpThemeStudio-BpORDvH6.js → LpThemeStudio-DzYfE-5k.js} +12 -195
- package/dist/chunks/{LpThemeSwitcher-BnEn_mvf.js → LpThemeSwitcher-CFLkdbBL.js} +8 -6
- package/dist/chunks/{LpTimeField-BawSVsmt.js → LpTimeField-DeOcKWJq.js} +6 -9
- package/dist/chunks/{LpToaster-IwTXjbbU.js → LpToaster-QFj0P-5m.js} +10 -8
- package/dist/chunks/{LpTooltip-BcBvIx4z.js → LpTooltip-BJf3lZMq.js} +51 -19
- package/dist/chunks/LpTopologyCanvas-BOHHHZ_6.js +673 -0
- package/dist/chunks/{LpTour-BZq-mUMv.js → LpTour-ClKYhx4h.js} +7 -5
- package/dist/chunks/{LpTruncate-CflAIwiJ.js → LpTruncate-C6u3gjc6.js} +6 -5
- package/dist/chunks/{LpTypewriter-BCL_a6wE.js → LpTypewriter-CZIzpdbe.js} +2 -1
- package/dist/chunks/{LpUptimeBar-DqNvvMBK.js → LpUptimeBar-BnYmR2rj.js} +3 -3
- package/dist/chunks/{LpVideoBackdrop-DS1wGv-X.js → LpVideoBackdrop-Ct4St4ZL.js} +10 -13
- package/dist/chunks/LpWindow-B8YSRVTH.js +297 -0
- package/dist/chunks/LpWorkspaceSwitcher-D0e9upAy.js +139 -0
- package/dist/chunks/{MenuTitle-BmCNNTKH.js → MenuTitle-Bh5dAdV1.js} +1 -1
- package/dist/chunks/{OptionContent-22UT8zLn.js → OptionContent-CGb8QlHA.js} +1 -1
- package/dist/chunks/{PickerField-Bfh8id3d.js → PickerField-BM1dyafh.js} +4 -4
- package/dist/chunks/{RevealToggle-BEit1n6Z.js → RevealToggle-CCPDE8Mv.js} +3 -3
- package/dist/chunks/SliderRail-DhPREa_R.js +18 -0
- package/dist/chunks/{TourCard-DNclH3u_.js → TourCard-DAzTYfav.js} +4 -4
- package/dist/chunks/{icons-DMITlfw5.js → icons-CYfcpSDS.js} +26 -10
- package/dist/component-names.d.ts +1 -1
- package/dist/components/AppShellContextNav.vue.d.ts +13 -0
- package/dist/components/AppShellContextNav.vue.js +4 -0
- package/dist/components/ChartRangeSelector.vue.d.ts +21 -0
- package/dist/components/ChartRangeSelector.vue.js +4 -0
- package/dist/components/ContextMenuItems.vue.js +1 -1
- package/dist/components/DropzoneLinkField.vue.d.ts +2 -2
- package/dist/components/DropzoneLinkField.vue.js +1 -1
- package/dist/components/FieldWrapper.vue.js +1 -1
- package/dist/components/IconCloseButton.vue.d.ts +7 -0
- package/dist/components/IconCloseButton.vue.js +4 -0
- 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/LpActivityLine.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 +110 -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 +5 -0
- package/dist/components/LpBottomNav.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +14 -2
- 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.d.ts +74 -2
- package/dist/components/LpChart.vue.js +326 -85
- package/dist/components/LpCheckbox.vue.d.ts +6 -2
- 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/LpCollapse.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.d.ts +8 -0
- package/dist/components/LpCommandPalette.vue.js +107 -56
- 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/LpContextSwitcher.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.d.ts +1 -1
- package/dist/components/LpDataList.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.d.ts +3 -15
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDateRangePicker.vue.d.ts +3 -13
- package/dist/components/LpDateRangePicker.vue.js +1 -1
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDock.vue.js +21 -18
- package/dist/components/LpDrawer.vue.d.ts +1 -1
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.js +14 -11
- 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.d.ts +96 -6
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.d.ts +48 -0
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpFrame.vue.js +1 -1
- package/dist/components/LpGauge.vue.d.ts +1 -1
- package/dist/components/LpHintExample.vue.js +1 -1
- package/dist/components/LpHintLayer.vue.js +1 -1
- package/dist/components/LpHints.vue.js +1 -1
- package/dist/components/LpHoverCard.vue.js +1 -1
- package/dist/components/LpIcon.vue.d.ts +2 -0
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpIdenticon.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.js +7 -6
- package/dist/components/LpInfraNode.vue.js +1 -1
- package/dist/components/LpInput.vue.d.ts +1 -1
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpInspector.vue.d.ts +87 -0
- package/dist/components/LpInspector.vue.js +4 -0
- package/dist/components/LpLightbox.vue.d.ts +8 -0
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLoader.vue.d.ts +1 -1
- package/dist/components/LpLoader.vue.js +1 -1
- package/dist/components/LpLogInspector.vue.d.ts +18 -0
- package/dist/components/LpLogInspector.vue.js +4 -0
- package/dist/components/LpLogViewer.vue.d.ts +93 -0
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMasonry.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.d.ts +4 -2
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.d.ts +5 -5
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.d.ts +2 -2
- package/dist/components/LpNotificationBell.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.js +1 -1
- package/dist/components/LpPaletteFacts.vue.js +1 -1
- package/dist/components/LpPaletteHeader.vue.js +2 -2
- 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.d.ts +2 -2
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPipeline.vue.d.ts +4 -0
- package/dist/components/LpPipeline.vue.js +1 -1
- package/dist/components/LpPopover.vue.d.ts +7 -3
- package/dist/components/LpPopover.vue.js +1 -1
- package/dist/components/LpProgress.vue.d.ts +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/LpRangeSlider.vue.js +1 -1
- package/dist/components/LpRelativeTime.vue.js +1 -1
- package/dist/components/LpRepeater.vue.js +1 -1
- package/dist/components/LpRevealOnScroll.vue.js +1 -1
- package/dist/components/LpScramble.vue.js +1 -1
- package/dist/components/LpScrollArea.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/LpShaderBackdrop.vue.js +1 -1
- package/dist/components/LpShift.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.js +1 -1
- package/dist/components/LpSidebar.vue.d.ts +1 -1
- 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 +1 -1
- package/dist/components/LpSpotlight.vue.js +1 -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/LpSwap.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.d.ts +132 -0
- package/dist/components/LpTable.vue.js +547 -135
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpTableOfContents.vue.js +1 -1
- package/dist/components/LpTabs.vue.js +6 -5
- package/dist/components/LpTagsInput.vue.js +1 -1
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.d.ts +2 -0
- package/dist/components/LpThemeProvider.vue.js +1 -1
- package/dist/components/LpThemeStudio.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/LpTooltip.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.d.ts +131 -5
- 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/LpTypewriter.vue.js +1 -1
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/LpVideoBackdrop.vue.js +1 -1
- package/dist/components/LpWindow.vue.d.ts +99 -0
- package/dist/components/LpWindow.vue.js +4 -0
- package/dist/components/LpWorkspaceSwitcher.vue.d.ts +18 -0
- package/dist/components/LpWorkspaceSwitcher.vue.js +4 -0
- package/dist/components/MenuTitle.vue.js +1 -1
- package/dist/components/OptionContent.vue.js +1 -1
- package/dist/components/PickerField.vue.d.ts +2 -2
- package/dist/components/PickerField.vue.js +1 -1
- package/dist/components/RevealToggle.vue.js +1 -1
- package/dist/components/SliderRail.vue.d.ts +3 -0
- package/dist/components/SliderRail.vue.js +4 -0
- package/dist/components/TourCard.vue.js +1 -1
- package/dist/components/address.js +2 -1
- package/dist/components/appShell.d.ts +36 -0
- package/dist/components/appShell.js +30 -0
- package/dist/components/calendar.d.ts +12 -3
- package/dist/components/calendar.js +2 -5
- package/dist/components/chart.d.ts +21 -0
- package/dist/components/chart.js +4 -3
- package/dist/components/chartWindow.d.ts +57 -0
- package/dist/components/chartWindow.js +136 -0
- package/dist/components/color.js +1 -1
- package/dist/components/commandPalette.d.ts +16 -2
- package/dist/components/commandPalette.js +39 -4
- package/dist/components/controlSize.d.ts +5 -0
- package/dist/components/controlSize.js +8 -0
- package/dist/components/dropdown.d.ts +5 -0
- package/dist/components/dropdown.js +2 -0
- package/dist/components/exportData.d.ts +6 -1
- package/dist/components/exportData.js +25 -18
- package/dist/components/fileTree.d.ts +67 -0
- package/dist/components/fileTree.js +141 -1
- package/dist/components/identicon.js +3 -2
- package/dist/components/logTools.d.ts +93 -0
- package/dist/components/logTools.js +210 -0
- package/dist/components/menuWhen.js +1 -1
- package/dist/components/meter.js +2 -1
- package/dist/components/pipeline.d.ts +2 -0
- package/dist/components/pipeline.js +5 -0
- package/dist/components/relativeTime.js +2 -1
- package/dist/components/reveal.js +2 -1
- package/dist/components/select.d.ts +5 -0
- package/dist/components/select.js +10 -0
- package/dist/components/sidebar.d.ts +1 -0
- package/dist/components/tableFeatures.d.ts +58 -0
- package/dist/components/tableFeatures.js +87 -0
- package/dist/components/topologyGraph.d.ts +164 -0
- package/dist/components/topologyGraph.js +416 -0
- package/dist/components/tour.js +5 -3
- package/dist/components/videoBackdrop.js +7 -6
- package/dist/composables/clamp.d.ts +2 -0
- package/dist/composables/clamp.js +4 -0
- package/dist/composables/devWarn.d.ts +3 -0
- package/dist/composables/devWarn.js +14 -0
- package/dist/composables/easing.d.ts +13 -4
- package/dist/composables/easing.js +16 -10
- package/dist/composables/overlayHistory.js +14 -1
- package/dist/composables/pointerDrag.d.ts +15 -0
- package/dist/composables/pointerDrag.js +40 -0
- package/dist/composables/propCheck.d.ts +10 -0
- package/dist/composables/propCheck.js +78 -0
- package/dist/composables/realm.d.ts +6 -0
- package/dist/composables/realm.js +23 -0
- package/dist/composables/scroll.js +4 -2
- package/dist/composables/scrollMemory.d.ts +12 -1
- package/dist/composables/scrollMemory.js +36 -12
- package/dist/composables/spatialNav.js +2 -1
- package/dist/composables/textEntry.d.ts +17 -0
- package/dist/composables/textEntry.js +19 -0
- package/dist/composables/useAsyncTask.d.ts +6 -0
- package/dist/composables/useChartSync.d.ts +5 -0
- package/dist/composables/useChartSync.js +33 -0
- package/dist/composables/useCloseGuard.d.ts +3 -1
- package/dist/composables/useCloseGuard.js +6 -3
- package/dist/composables/useCommands.d.ts +50 -0
- package/dist/composables/useCommands.js +66 -0
- package/dist/composables/useField.d.ts +37 -0
- package/dist/composables/useField.js +27 -2
- package/dist/composables/useFitScale.js +4 -1
- package/dist/composables/useFormDraft.d.ts +13 -2
- package/dist/composables/useFormDraft.js +17 -9
- package/dist/composables/useHintSystem.js +2 -2
- package/dist/composables/useHotkeys.js +11 -32
- package/dist/composables/useInView.js +2 -1
- package/dist/composables/useInputFilter.js +7 -5
- package/dist/composables/useInputMask.js +5 -3
- package/dist/composables/useLinkedView.d.ts +97 -0
- package/dist/composables/useLinkedView.js +139 -0
- package/dist/composables/useOptimisticToggle.d.ts +3 -1
- package/dist/composables/useOptimisticToggle.js +2 -1
- package/dist/composables/useOverlayHistory.d.ts +7 -0
- package/dist/composables/useOverlayHistory.js +16 -2
- package/dist/composables/usePaintSelect.js +18 -14
- package/dist/composables/usePaletteCommands.d.ts +7 -0
- package/dist/composables/usePaletteCommands.js +12 -1
- package/dist/composables/usePersisted.d.ts +10 -0
- package/dist/composables/usePersisted.js +1 -1
- package/dist/composables/usePillTransition.d.ts +2 -2
- package/dist/composables/usePillTransition.js +5 -5
- package/dist/composables/useResizeObserver.js +2 -1
- package/dist/composables/useReveal.js +2 -1
- package/dist/composables/useRovingFocus.d.ts +2 -2
- package/dist/composables/useRovingFocus.js +9 -11
- package/dist/composables/useScramble.js +7 -1
- package/dist/composables/useShift.js +8 -6
- package/dist/composables/useTilt.js +2 -1
- package/dist/composables/useTween.js +9 -5
- package/dist/composables/useView.d.ts +1 -0
- package/dist/composables/useView.js +14 -2
- package/dist/composables/useZoomPan.js +2 -4
- package/dist/composables/windowing.d.ts +40 -0
- package/dist/composables/windowing.js +118 -0
- package/dist/icons-all.js +1 -1
- package/dist/icons.d.ts +4 -0
- package/dist/index.d.ts +30 -5
- package/dist/index.js +310 -264
- package/dist/layout/tree.js +19 -15
- package/dist/layout/useLayout.d.ts +2 -0
- package/dist/layout/useLayout.js +5 -1
- package/dist/layout/useWorkspaces.d.ts +52 -0
- package/dist/layout/useWorkspaces.js +140 -0
- package/dist/{chunks/backdrop-Dkf2vM81.js → theme/backdrop.js} +5 -5
- package/dist/theme/config.js +25 -0
- package/dist/theme/define.js +61 -0
- package/dist/{chunks/palette-Co8tSASo.js → theme/palette.js} +2 -2
- package/dist/theme/presets.js +239 -0
- package/dist/theme/studio.js +134 -0
- package/dist/theme/tokens.js +63 -0
- package/dist/theme/useTheme.d.ts +3 -2
- package/dist/theme/useTheme.js +325 -0
- package/package.json +8 -1
- package/src/component-names.ts +5 -1
- package/src/components/AppShellContextNav.vue +44 -0
- package/src/components/ChartRangeSelector.vue +120 -0
- package/src/components/IconCloseButton.vue +21 -0
- package/src/components/LayoutCanvas.vue +3 -0
- package/src/components/LayoutNode.vue +37 -38
- package/src/components/LpActivityLine.vue +4 -2
- package/src/components/LpAddressInput.vue +3 -3
- package/src/components/LpAppShell.vue +362 -24
- package/src/components/LpAutocomplete.vue +18 -30
- package/src/components/LpBottomNav.vue +9 -1
- package/src/components/LpBreadcrumbs.vue +2 -1
- package/src/components/LpButton.vue +11 -4
- package/src/components/LpChart.vue +336 -37
- package/src/components/LpCheckbox.vue +43 -9
- package/src/components/LpCodeBlock.vue +17 -23
- package/src/components/LpCollapse.vue +5 -4
- package/src/components/LpColorPicker.vue +8 -9
- package/src/components/LpCommandPalette.vue +133 -50
- package/src/components/LpContextMenu.vue +15 -13
- package/src/components/LpCountdown.vue +2 -1
- package/src/components/LpDataList.vue +13 -1
- package/src/components/LpDatePicker.vue +5 -17
- package/src/components/LpDateRangePicker.vue +5 -16
- package/src/components/LpDock.vue +25 -16
- package/src/components/LpDrawer.vue +70 -61
- package/src/components/LpDropdownMenu.vue +6 -10
- package/src/components/LpDropzone.vue +12 -7
- package/src/components/LpEditable.vue +6 -2
- package/src/components/LpFileTree.vue +507 -66
- package/src/components/LpFileTreeNode.vue +106 -5
- package/src/components/LpFormField.vue +1 -1
- package/src/components/LpFrame.vue +33 -13
- package/src/components/LpHoverCard.vue +30 -5
- package/src/components/LpIcon.vue +6 -2
- package/src/components/LpIdenticon.vue +2 -1
- package/src/components/LpImageEditor.vue +5 -2
- package/src/components/LpInput.vue +15 -23
- package/src/components/LpInspector.vue +197 -0
- package/src/components/LpLightbox.vue +74 -29
- package/src/components/LpLogInspector.vue +85 -0
- package/src/components/LpLogViewer.vue +239 -29
- package/src/components/LpMapPicker.vue +2 -1
- package/src/components/LpMasonry.vue +8 -5
- package/src/components/LpModal.vue +12 -12
- package/src/components/LpModalNav.vue +2 -21
- package/src/components/LpNumberField.vue +6 -15
- package/src/components/LpOtpInput.vue +2 -2
- package/src/components/LpPagination.vue +5 -3
- package/src/components/LpPhoneInput.vue +8 -19
- package/src/components/LpPie.vue +25 -23
- package/src/components/LpPipeline.vue +14 -1
- package/src/components/LpPopover.vue +23 -2
- package/src/components/LpProgress.vue +2 -1
- package/src/components/LpRadioGroup.vue +2 -2
- package/src/components/LpRangeSlider.vue +5 -6
- package/src/components/LpRevealOnScroll.vue +1 -1
- package/src/components/LpScrollArea.vue +28 -11
- package/src/components/LpSecretField.vue +2 -1
- package/src/components/LpSegmented.vue +6 -8
- package/src/components/LpSelect.vue +54 -24
- package/src/components/LpShaderBackdrop.vue +12 -9
- package/src/components/LpShift.vue +18 -15
- package/src/components/LpSidebar.vue +77 -74
- package/src/components/LpSidebarNav.vue +3 -2
- package/src/components/LpSidebarRow.vue +2 -1
- package/src/components/LpSlider.vue +5 -6
- package/src/components/LpSpotlight.vue +2 -1
- package/src/components/LpSwitch.vue +5 -3
- package/src/components/LpTable.vue +609 -93
- package/src/components/LpTableFilter.vue +1 -1
- package/src/components/LpTableOfContents.vue +16 -9
- package/src/components/LpTabs.vue +2 -1
- package/src/components/LpTagsInput.vue +12 -19
- package/src/components/LpTextarea.vue +5 -11
- package/src/components/LpThemeProvider.vue +29 -13
- package/src/components/LpTimeField.vue +4 -7
- package/src/components/LpToaster.vue +7 -6
- package/src/components/LpTooltip.vue +62 -18
- package/src/components/LpTopologyCanvas.vue +567 -42
- package/src/components/LpTour.vue +7 -5
- package/src/components/LpTruncate.vue +4 -3
- package/src/components/LpTypewriter.vue +2 -1
- package/src/components/LpVideoBackdrop.vue +11 -13
- package/src/components/LpWindow.vue +373 -0
- package/src/components/LpWorkspaceSwitcher.vue +116 -0
- package/src/components/PickerField.vue +2 -2
- package/src/components/SliderRail.vue +10 -0
- package/src/components/address.ts +3 -1
- package/src/components/appShell.ts +74 -0
- package/src/components/calendar.ts +12 -5
- package/src/components/chart.ts +27 -3
- package/src/components/chartWindow.ts +198 -0
- package/src/components/color.ts +2 -1
- package/src/components/commandPalette.ts +66 -5
- package/src/components/controlSize.ts +6 -0
- package/src/components/dropdown.ts +3 -0
- package/src/components/exportData.ts +33 -18
- package/src/components/fileTree.ts +215 -0
- package/src/components/identicon.ts +4 -2
- package/src/components/logTools.ts +298 -0
- package/src/components/meter.ts +2 -1
- package/src/components/pipeline.ts +6 -0
- package/src/components/relativeTime.ts +2 -1
- package/src/components/reveal.ts +3 -1
- package/src/components/select.ts +14 -0
- package/src/components/sidebar.ts +1 -0
- package/src/components/tableFeatures.ts +149 -0
- package/src/components/topologyGraph.ts +655 -0
- package/src/components/tour.ts +5 -3
- package/src/components/videoBackdrop.ts +7 -6
- package/src/composables/clamp.ts +2 -0
- package/src/composables/devWarn.ts +19 -0
- package/src/composables/easing.ts +37 -12
- package/src/composables/overlayHistory.ts +24 -0
- package/src/composables/pointerDrag.ts +54 -0
- package/src/composables/propCheck.ts +90 -0
- package/src/composables/realm.ts +25 -0
- package/src/composables/scroll.ts +4 -2
- package/src/composables/scrollMemory.ts +56 -14
- package/src/composables/spatialNav.ts +2 -1
- package/src/composables/textEntry.ts +33 -0
- package/src/composables/useAsyncTask.ts +6 -0
- package/src/composables/useChartSync.ts +52 -0
- package/src/composables/useCloseGuard.ts +22 -10
- package/src/composables/useCommands.ts +123 -0
- package/src/composables/useField.ts +41 -2
- package/src/composables/useFitScale.ts +4 -1
- package/src/composables/useFormDraft.ts +38 -14
- package/src/composables/useHintSystem.ts +2 -2
- package/src/composables/useHotkeys.ts +19 -48
- package/src/composables/useInView.ts +2 -1
- package/src/composables/useInputFilter.ts +8 -5
- package/src/composables/useInputMask.ts +8 -3
- package/src/composables/useLinkedView.ts +222 -0
- package/src/composables/useOptimisticToggle.ts +7 -1
- package/src/composables/useOverlayHistory.ts +20 -0
- package/src/composables/usePaintSelect.ts +20 -14
- package/src/composables/usePaletteCommands.ts +13 -0
- package/src/composables/usePersisted.ts +10 -0
- package/src/composables/usePillTransition.ts +9 -6
- package/src/composables/useResizeObserver.ts +2 -1
- package/src/composables/useReveal.ts +2 -1
- package/src/composables/useRovingFocus.ts +11 -14
- package/src/composables/useScramble.ts +12 -1
- package/src/composables/useShift.ts +8 -6
- package/src/composables/useTilt.ts +2 -1
- package/src/composables/useTween.ts +10 -5
- package/src/composables/useView.ts +17 -3
- package/src/composables/useZoomPan.ts +2 -5
- package/src/composables/windowing.ts +190 -0
- package/src/icons.ts +27 -6
- package/src/index.ts +41 -4
- package/src/kit-icons.ts +1 -1
- package/src/layout/tree.ts +31 -16
- package/src/layout/useLayout.ts +6 -0
- package/src/layout/useWorkspaces.ts +234 -0
- package/src/nuxt.ts +9 -1
- package/src/runtime/propCheck.plugin.ts +10 -0
- package/src/theme/studio.ts +7 -5
- package/src/theme/useTheme.ts +89 -15
- package/src/tokens/tokens.css +8 -1
- package/dist/assets/LpTabs-CJ0rYQbx.css +0 -18
- package/dist/chunks/LpAppShell-Dgejipzz.js +0 -319
- package/dist/chunks/LpFileTree-CooHinsC.js +0 -425
- package/dist/chunks/LpThemeProvider-8MG6yqU9.js +0 -640
- package/dist/chunks/LpTopologyCanvas-B1gIbS0n.js +0 -298
|
@@ -43,6 +43,7 @@ import { prefersReducedMotion } from "../composables/easing"
|
|
|
43
43
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
44
44
|
import { springSettled, springStep, type SpringState } from "../composables/usePillTransition"
|
|
45
45
|
import { useRovingFocus } from "../composables/useRovingFocus"
|
|
46
|
+
import { isHTMLElement } from "../composables/useView"
|
|
46
47
|
import { dockSize } from "./dock"
|
|
47
48
|
import LpIcon from "./LpIcon.vue"
|
|
48
49
|
import LpTooltip from "./LpTooltip.vue"
|
|
@@ -96,7 +97,7 @@ function select(id: string) {
|
|
|
96
97
|
|
|
97
98
|
const roving = useRovingFocus(
|
|
98
99
|
() => props.items.map((item) => ({ id: item.id, label: item.label, disabled: item.disabled })),
|
|
99
|
-
{ orientation: props.orientation, onActivate: select },
|
|
100
|
+
{ orientation: () => props.orientation, onActivate: select },
|
|
100
101
|
)
|
|
101
102
|
|
|
102
103
|
// ── magnification ─────────────────────────────────────────
|
|
@@ -111,7 +112,7 @@ let frame = 0
|
|
|
111
112
|
let lastTime = 0
|
|
112
113
|
|
|
113
114
|
function setButton(id: string, el: unknown) {
|
|
114
|
-
if (el
|
|
115
|
+
if (isHTMLElement(el)) buttons.set(id, el)
|
|
115
116
|
else buttons.delete(id)
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -120,9 +121,21 @@ function centreOf(el: HTMLElement): number {
|
|
|
120
121
|
return vertical.value ? rect.top + rect.height / 2 : rect.left + rect.width / 2
|
|
121
122
|
}
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
/*
|
|
125
|
+
* `focusAt` stays relative to the bar and is read here: stored as client px it
|
|
126
|
+
* went stale as soon as the bar scrolled, while the icons it is measured
|
|
127
|
+
* against moved on.
|
|
128
|
+
*/
|
|
129
|
+
function swellCentre(): number | null {
|
|
130
|
+
if (props.focusAt === null) return pointer
|
|
131
|
+
if (!bar.value || !magnifying()) return null
|
|
132
|
+
const rect = bar.value.getBoundingClientRect()
|
|
133
|
+
return (vertical.value ? rect.top : rect.left) + props.focusAt
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function targetFor(el: HTMLElement, centre: number | null): number {
|
|
137
|
+
if (centre === null) return props.size
|
|
138
|
+
return dockSize(props.size, Math.max(props.size, props.magnify), centre - centreOf(el), props.reach)
|
|
126
139
|
}
|
|
127
140
|
|
|
128
141
|
function step(time: number) {
|
|
@@ -133,7 +146,8 @@ function step(time: number) {
|
|
|
133
146
|
// Read every target before writing any size: interleaving reads and writes
|
|
134
147
|
// would force a layout per icon per frame.
|
|
135
148
|
const targets = new Map<string, number>()
|
|
136
|
-
|
|
149
|
+
const centre = swellCentre()
|
|
150
|
+
for (const [id, el] of buttons) targets.set(id, targetFor(el, centre))
|
|
137
151
|
for (const [id, el] of buttons) {
|
|
138
152
|
const target = targets.get(id)!
|
|
139
153
|
const next = springStep(springs.get(id) ?? { value: props.size, velocity: 0 }, target, "pill", dt)
|
|
@@ -180,17 +194,12 @@ function onFocusOut(event: FocusEvent) {
|
|
|
180
194
|
kick()
|
|
181
195
|
}
|
|
182
196
|
|
|
183
|
-
//
|
|
184
|
-
//
|
|
197
|
+
// A coordinate along the old axis means nothing along the new one, so the
|
|
198
|
+
// swell rests until the pointer moves again.
|
|
185
199
|
watch(
|
|
186
|
-
() => props.focusAt,
|
|
187
|
-
(
|
|
188
|
-
|
|
189
|
-
pointer = null
|
|
190
|
-
} else if (bar.value && magnifying()) {
|
|
191
|
-
const rect = bar.value.getBoundingClientRect()
|
|
192
|
-
pointer = (vertical.value ? rect.top : rect.left) + at
|
|
193
|
-
}
|
|
200
|
+
[() => props.focusAt, vertical],
|
|
201
|
+
() => {
|
|
202
|
+
pointer = null
|
|
194
203
|
kick()
|
|
195
204
|
},
|
|
196
205
|
{ flush: "post" },
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { clamp } from "../composables/clamp"
|
|
2
3
|
import { ref as sharedRef, type Ref } from "vue"
|
|
3
4
|
|
|
4
5
|
// One pull at a time across every edge-open drawer on the page, pinned to a
|
|
@@ -37,13 +38,14 @@ import { CLOSE_ICON } from "./dropdown"
|
|
|
37
38
|
import { prefersReducedMotion } from "../composables/easing"
|
|
38
39
|
import { useCloseGuard, type CloseGuard } from "../composables/useCloseGuard"
|
|
39
40
|
import { useGlass } from "../composables/useGlass"
|
|
40
|
-
import {
|
|
41
|
+
import { useModelOverlayHistory, type OverlayHistoryMode } from "../composables/useOverlayHistory"
|
|
41
42
|
import { useLabels } from "../composables/useLpConfig"
|
|
42
43
|
import { usePersisted } from "../composables/usePersisted"
|
|
43
44
|
import LpIcon from "./LpIcon.vue"
|
|
44
45
|
import LpScrollArea from "./LpScrollArea.vue"
|
|
45
46
|
import { anyModalOpen, useModalLayer } from "./modalDepth"
|
|
46
|
-
import {
|
|
47
|
+
import { startPointerDrag } from "../composables/pointerDrag"
|
|
48
|
+
import { isElement, nodeWindow, useOutsideGuard, usePortalTarget, useView, viewDocument, viewWindow } from "../composables/useView"
|
|
47
49
|
|
|
48
50
|
type Direction = "top" | "bottom" | "left" | "right"
|
|
49
51
|
|
|
@@ -223,16 +225,11 @@ async function requestClose() {
|
|
|
223
225
|
// ways out do. Handed to the body and footer slots, and exposed.
|
|
224
226
|
defineExpose({ close: requestClose })
|
|
225
227
|
|
|
226
|
-
|
|
228
|
+
useModelOverlayHistory({
|
|
227
229
|
mode: () => props.history,
|
|
228
230
|
open: () => !!props.open,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
emit("update:open", false)
|
|
232
|
-
return true
|
|
233
|
-
},
|
|
234
|
-
reopen: () => emit("update:open", true),
|
|
235
|
-
navigated: () => emit("update:open", false),
|
|
231
|
+
setOpen: (open) => emit("update:open", open),
|
|
232
|
+
allowClose,
|
|
236
233
|
})
|
|
237
234
|
|
|
238
235
|
// The header's close button is vaul's own and would slide the panel away at
|
|
@@ -255,22 +252,26 @@ const sizeStyle = computed(() => {
|
|
|
255
252
|
if (props.snapPoints?.length && isSheet.value) return undefined
|
|
256
253
|
// A live resize wins over the preset/width.
|
|
257
254
|
if (props.resizable && isHorizontal.value && resizedPx.value != null) {
|
|
258
|
-
|
|
255
|
+
// Capped live: a width dragged or remembered on a wide window must still
|
|
256
|
+
// fit once the window shrinks or the device turns.
|
|
257
|
+
return { width: `min(${resizedPx.value}px, ${props.maxSize})` }
|
|
259
258
|
}
|
|
260
259
|
const len = props.width ?? `min(${isHorizontal.value ? "94vw" : "94vh"}, ${SIZES[props.size]}rem)`
|
|
261
260
|
return isHorizontal.value ? { width: len } : { height: len }
|
|
262
261
|
})
|
|
263
262
|
|
|
264
|
-
// Resolve a CSS length to px against the viewport.
|
|
265
|
-
// (calc(), min()) comes back NaN
|
|
266
|
-
|
|
263
|
+
// Resolve a CSS length to px against the viewport. Only px, rem, vw and vh are
|
|
264
|
+
// read; anything else (calc(), min()) comes back NaN and the caller falls back
|
|
265
|
+
// to the viewport, while the CSS itself still applies the length as written.
|
|
266
|
+
function toPx(css: string, win?: Window): number {
|
|
267
267
|
const n = Number.parseFloat(css)
|
|
268
268
|
if (css.endsWith("rem")) {
|
|
269
|
-
const
|
|
269
|
+
const view = win ?? (typeof window === "undefined" ? null : window)
|
|
270
|
+
const root = view ? Number.parseFloat(view.getComputedStyle(view.document.documentElement).fontSize) || 16 : 16
|
|
270
271
|
return n * root
|
|
271
272
|
}
|
|
272
|
-
if (css.endsWith("vw")) return (n / 100) * window.innerWidth
|
|
273
|
-
if (css.endsWith("vh")) return (n / 100) * window.innerHeight
|
|
273
|
+
if (css.endsWith("vw")) return (n / 100) * (win ?? window).innerWidth
|
|
274
|
+
if (css.endsWith("vh")) return (n / 100) * (win ?? window).innerHeight
|
|
274
275
|
if (css.endsWith("px") || /^[\d.]+$/.test(css.trim())) return n
|
|
275
276
|
return Number.NaN
|
|
276
277
|
}
|
|
@@ -283,34 +284,22 @@ let endResize: (() => void) | null = null
|
|
|
283
284
|
|
|
284
285
|
function startResize(e: PointerEvent) {
|
|
285
286
|
if (!props.resizable || !isHorizontal.value) return
|
|
286
|
-
e.preventDefault()
|
|
287
287
|
endResize?.()
|
|
288
|
-
|
|
289
|
-
|
|
288
|
+
// The window the panel lives in: an LpFrame's, inside one.
|
|
289
|
+
const win = nodeWindow(e.currentTarget as Node)
|
|
290
290
|
const fromRight = dir.value === "right"
|
|
291
|
-
const min = toPx(props.minSize)
|
|
292
|
-
const max = toPx(props.maxSize)
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
document.body.style.userSelect = ""
|
|
304
|
-
document.body.style.cursor = ""
|
|
305
|
-
endResize = null
|
|
306
|
-
}
|
|
307
|
-
endResize = end
|
|
308
|
-
document.body.style.userSelect = "none"
|
|
309
|
-
document.body.style.cursor = "ew-resize"
|
|
310
|
-
window.addEventListener("pointermove", onMove)
|
|
311
|
-
window.addEventListener("pointerup", end)
|
|
312
|
-
window.addEventListener("pointercancel", end)
|
|
313
|
-
grip?.addEventListener("lostpointercapture", end)
|
|
291
|
+
const min = toPx(props.minSize, win)
|
|
292
|
+
const max = toPx(props.maxSize, win)
|
|
293
|
+
endResize = startPointerDrag(e, {
|
|
294
|
+
cursor: "ew-resize",
|
|
295
|
+
move(ev) {
|
|
296
|
+
const raw = fromRight ? win.innerWidth - ev.clientX : ev.clientX
|
|
297
|
+
resizedPx.value = Math.max(Number.isNaN(min) ? 0 : min, Math.min(Number.isNaN(max) ? win.innerWidth : Math.min(max, win.innerWidth), raw))
|
|
298
|
+
},
|
|
299
|
+
end() {
|
|
300
|
+
endResize = null
|
|
301
|
+
},
|
|
302
|
+
})
|
|
314
303
|
}
|
|
315
304
|
|
|
316
305
|
onBeforeUnmount(() => endResize?.())
|
|
@@ -380,22 +369,30 @@ const skipOpenSlide = ref(false)
|
|
|
380
369
|
watch(
|
|
381
370
|
() => props.open,
|
|
382
371
|
(open) => {
|
|
383
|
-
if (
|
|
372
|
+
if (open) return
|
|
373
|
+
skipOpenSlide.value = false
|
|
374
|
+
// Closing mid-resize removes the grip, which takes its capture events along.
|
|
375
|
+
endResize?.()
|
|
384
376
|
},
|
|
385
377
|
)
|
|
386
378
|
|
|
387
379
|
// Resolve the panel's main-axis size in px to map drag distance → progress.
|
|
388
380
|
function panelPx(): number {
|
|
389
|
-
const vw = typeof window === "undefined" ? 0 :
|
|
381
|
+
const vw = typeof window === "undefined" ? 0 : edgeWindow().innerWidth
|
|
390
382
|
const preset = toPx(`${SIZES[props.size]}rem`)
|
|
391
|
-
const
|
|
383
|
+
const resized = props.resizable ? resizedPx.value : null
|
|
384
|
+
const cap = resized ?? (props.width ? toPx(props.width) : preset)
|
|
392
385
|
return Math.min(vw * 0.94, Number.isFinite(cap) ? cap : preset)
|
|
393
386
|
}
|
|
394
387
|
|
|
388
|
+
// The window the drawer renders in (an LpFrame's, inside one).
|
|
389
|
+
const view = useView()
|
|
390
|
+
const edgeWindow = () => viewWindow(view.value)
|
|
391
|
+
|
|
395
392
|
function edgeEnabled(): boolean {
|
|
396
393
|
if (!props.edgeOpen || !isHorizontal.value || props.open || handingOff.value) return false
|
|
397
394
|
const bp = props.edgeBreakpoint ? BREAKPOINT_PX[props.edgeBreakpoint] : null
|
|
398
|
-
return bp === null ||
|
|
395
|
+
return bp === null || edgeWindow().innerWidth < bp
|
|
399
396
|
}
|
|
400
397
|
|
|
401
398
|
let track: { id: number; x: number; y: number; t: number; lastX: number; lastT: number; speed: number } | null = null
|
|
@@ -405,12 +402,13 @@ const owner = Symbol("edge-pull")
|
|
|
405
402
|
// pulls (a carousel, a wide table) keeps the gesture: the pull only claims
|
|
406
403
|
// what nothing under the finger wants.
|
|
407
404
|
function scrollsWithPull(target: EventTarget | null): boolean {
|
|
408
|
-
let el = target
|
|
405
|
+
let el = isElement(target) ? target : null
|
|
409
406
|
const pullsRight = dir.value === "left"
|
|
410
|
-
|
|
407
|
+
const body = el?.ownerDocument.body
|
|
408
|
+
while (el && el !== body) {
|
|
411
409
|
if (el.closest(EDGE_IGNORE) === el) return true
|
|
412
410
|
if (el.scrollWidth > el.clientWidth) {
|
|
413
|
-
const overflow = getComputedStyle(el).overflowX
|
|
411
|
+
const overflow = nodeWindow(el).getComputedStyle(el).overflowX
|
|
414
412
|
if (overflow === "auto" || overflow === "scroll") {
|
|
415
413
|
if (pullsRight ? el.scrollLeft > 0 : el.scrollLeft + el.clientWidth < el.scrollWidth) return true
|
|
416
414
|
}
|
|
@@ -421,7 +419,7 @@ function scrollsWithPull(target: EventTarget | null): boolean {
|
|
|
421
419
|
}
|
|
422
420
|
|
|
423
421
|
function inward(x: number): number {
|
|
424
|
-
return dir.value === "right" ?
|
|
422
|
+
return dir.value === "right" ? edgeWindow().innerWidth - x : x
|
|
425
423
|
}
|
|
426
424
|
|
|
427
425
|
function onTouchStart(e: TouchEvent) {
|
|
@@ -457,7 +455,7 @@ function onTouchMove(e: TouchEvent) {
|
|
|
457
455
|
if (dt > 0) track.speed = (((t.clientX - track.lastX) * sign) / dt) * 0.6 + track.speed * 0.4
|
|
458
456
|
track.lastX = t.clientX
|
|
459
457
|
track.lastT = e.timeStamp
|
|
460
|
-
peek.value =
|
|
458
|
+
peek.value = clamp(inward(t.clientX) / panelPx(), 0, 1)
|
|
461
459
|
}
|
|
462
460
|
|
|
463
461
|
function dropTrack() {
|
|
@@ -465,6 +463,15 @@ function dropTrack() {
|
|
|
465
463
|
if (edgeOwner.value === owner) edgeOwner.value = null
|
|
466
464
|
}
|
|
467
465
|
|
|
466
|
+
// The system took the touch (a gesture, a dialog): the pull did not finish, so
|
|
467
|
+
// it never opens the drawer, however far it had come.
|
|
468
|
+
function cancelPull() {
|
|
469
|
+
if (!track) return
|
|
470
|
+
dropTrack()
|
|
471
|
+
peeking.value = false
|
|
472
|
+
peek.value = 0
|
|
473
|
+
}
|
|
474
|
+
|
|
468
475
|
function settle() {
|
|
469
476
|
const flick = track !== null && track.speed > FLICK_SPEED && peek.value > 0.05
|
|
470
477
|
dropTrack()
|
|
@@ -503,19 +510,21 @@ function onTouchEnd(e: TouchEvent) {
|
|
|
503
510
|
|
|
504
511
|
if (typeof document !== "undefined") {
|
|
505
512
|
watch(
|
|
506
|
-
() => props.edgeOpen && isHorizontal.value,
|
|
513
|
+
() => (props.edgeOpen && isHorizontal.value ? viewDocument(view.value) : null),
|
|
507
514
|
(on, _, onCleanup) => {
|
|
508
515
|
if (!on) return
|
|
516
|
+
const doc = viewDocument(view.value)
|
|
509
517
|
const passive = { passive: true }
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
518
|
+
doc.addEventListener("touchstart", onTouchStart, passive)
|
|
519
|
+
doc.addEventListener("touchmove", onTouchMove, { passive: false })
|
|
520
|
+
doc.addEventListener("touchend", onTouchEnd, passive)
|
|
521
|
+
doc.addEventListener("touchcancel", cancelPull, passive)
|
|
514
522
|
onCleanup(() => {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
523
|
+
doc.removeEventListener("touchstart", onTouchStart)
|
|
524
|
+
doc.removeEventListener("touchmove", onTouchMove)
|
|
525
|
+
doc.removeEventListener("touchend", onTouchEnd)
|
|
526
|
+
doc.removeEventListener("touchcancel", cancelPull)
|
|
527
|
+
cancelPull()
|
|
519
528
|
})
|
|
520
529
|
},
|
|
521
530
|
{ immediate: true },
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import { menuPaletteCommands } from "./commandPalette"
|
|
4
|
-
import { usePaletteCommands, usePaletteScope, type PaletteControlOptions } from "../composables/usePaletteCommands"
|
|
2
|
+
import { useMenuPalette, type PaletteControlOptions } from "../composables/usePaletteCommands"
|
|
5
3
|
/*
|
|
6
4
|
* A menu opened from a button (usually a row's "…"). Its items are the same
|
|
7
5
|
* shape as LpContextMenu's and are drawn by the same renderer, so one array
|
|
@@ -36,6 +34,9 @@ const props = withDefaults(defineProps<{
|
|
|
36
34
|
}>(), { palette: undefined })
|
|
37
35
|
|
|
38
36
|
const PANEL = `${POPOVER_PANEL} z-(--z-popover) min-w-44 p-1 outline-none`
|
|
37
|
+
// reka names the menu after its trigger, and aria-labelledby beats aria-label:
|
|
38
|
+
// a `title` only names the menu with that link taken off. MenuTitle itself is
|
|
39
|
+
// hidden from assistive tech, so nothing is announced twice.
|
|
39
40
|
|
|
40
41
|
function opened(open: boolean) {
|
|
41
42
|
if (open && props.rightClickToo) hints.use(HINT_SIGNALS.menuButton)
|
|
@@ -47,12 +48,7 @@ const portalTo = usePortalTarget()
|
|
|
47
48
|
// the page) is not "outside" for this layer.
|
|
48
49
|
const guardOutside = useOutsideGuard()
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
const paletteId = useId()
|
|
52
|
-
usePaletteCommands(() => props.palette === false || !props.title || !props.items.length ? [] : [{
|
|
53
|
-
id: `${paletteScope?.id}/${props.palette?.id ?? paletteId}`, label: props.palette?.label ?? props.title,
|
|
54
|
-
children: menuPaletteCommands(props.items, `${paletteScope?.id}/${props.palette?.id ?? paletteId}`),
|
|
55
|
-
}], { automatic: true })
|
|
51
|
+
useMenuPalette(props)
|
|
56
52
|
</script>
|
|
57
53
|
|
|
58
54
|
<template>
|
|
@@ -68,7 +64,7 @@ usePaletteCommands(() => props.palette === false || !props.title || !props.items
|
|
|
68
64
|
:side-offset="6"
|
|
69
65
|
align="end"
|
|
70
66
|
:class="PANEL"
|
|
71
|
-
|
|
67
|
+
v-bind="title ? { 'aria-label': title, 'aria-labelledby': undefined } : {}"
|
|
72
68
|
>
|
|
73
69
|
<MenuTitle v-if="title" :title="title" :subtitle="subtitle" :icon="titleIcon" :image="titleImage" />
|
|
74
70
|
<ContextMenuItems :items="items" :panel="PANEL" kind="dropdown" />
|
|
@@ -6,6 +6,7 @@ export default { inheritAttrs: false }
|
|
|
6
6
|
</script>
|
|
7
7
|
|
|
8
8
|
<script setup lang="ts">
|
|
9
|
+
import { isElement, nodeWindow } from "../composables/realm"
|
|
9
10
|
/*
|
|
10
11
|
* A place to put files: drop them, click to browse, or paste from the
|
|
11
12
|
* clipboard.
|
|
@@ -43,7 +44,9 @@ import { PopoverAnchor, PopoverContent, PopoverPortal, PopoverRoot } from "reka-
|
|
|
43
44
|
import DropzoneLinkField from "./DropzoneLinkField.vue"
|
|
44
45
|
import { POPOVER_PANEL } from "./dropdown"
|
|
45
46
|
import LpIcon from "./LpIcon.vue"
|
|
46
|
-
import {
|
|
47
|
+
import { inTextField } from "../composables/textEntry"
|
|
48
|
+
import { useOutsideGuard, usePortalTarget, useView, viewWindow } from "../composables/useView"
|
|
49
|
+
|
|
47
50
|
|
|
48
51
|
const props = withDefaults(
|
|
49
52
|
defineProps<{
|
|
@@ -378,7 +381,7 @@ function onPicked(event: Event) {
|
|
|
378
381
|
if (el.files?.length) {
|
|
379
382
|
hints.use(HINT_SIGNALS.dropzoneBrowse)
|
|
380
383
|
const zone = revealAnchor.value
|
|
381
|
-
if (zone
|
|
384
|
+
if (isElement(zone)) noteDropzone(zone)
|
|
382
385
|
}
|
|
383
386
|
take(el.files)
|
|
384
387
|
// Cleared so picking the same file twice in a row fires again — otherwise
|
|
@@ -389,18 +392,20 @@ function onPicked(event: Event) {
|
|
|
389
392
|
function windowPaste(event: ClipboardEvent) {
|
|
390
393
|
// Already taken by the zone itself, which the paste bubbled up from.
|
|
391
394
|
if (props.disabled || event.defaultPrevented) return
|
|
392
|
-
const target = event.target as HTMLElement | null
|
|
393
395
|
// A paste aimed at somewhere you can type belongs to that thing.
|
|
394
|
-
if (target
|
|
396
|
+
if (inTextField(event.target)) return
|
|
395
397
|
onPaste(event)
|
|
396
398
|
}
|
|
397
399
|
|
|
400
|
+
const view = useView()
|
|
398
401
|
let listening = false
|
|
399
402
|
function listen(on: boolean) {
|
|
400
403
|
if (on === listening || typeof window === "undefined") return
|
|
401
404
|
listening = on
|
|
402
|
-
|
|
403
|
-
|
|
405
|
+
// A paste stays in the document it happened in: inside an LpFrame, that one.
|
|
406
|
+
const win = viewWindow(view.value)
|
|
407
|
+
if (on) win.addEventListener("paste", windowPaste)
|
|
408
|
+
else win.removeEventListener("paste", windowPaste)
|
|
404
409
|
}
|
|
405
410
|
let mounted = false
|
|
406
411
|
onMounted(() => {
|
|
@@ -443,7 +448,7 @@ const frameRadius = computed(() =>
|
|
|
443
448
|
)
|
|
444
449
|
function measureRadius() {
|
|
445
450
|
const zone = revealAnchor.value as HTMLElement | null
|
|
446
|
-
if (zone) measuredRadius.value = getComputedStyle(zone).borderTopLeftRadius
|
|
451
|
+
if (zone) measuredRadius.value = nodeWindow(zone).getComputedStyle(zone).borderTopLeftRadius
|
|
447
452
|
}
|
|
448
453
|
watch(rootClass, () => nextTick(measureRadius))
|
|
449
454
|
|
|
@@ -36,6 +36,7 @@ import { computed, nextTick, ref, watch } from "vue"
|
|
|
36
36
|
import { useFieldNotice } from "../composables/useFieldNotice"
|
|
37
37
|
import { useLabels } from "../composables/useLpConfig"
|
|
38
38
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
39
|
+
import { useView, viewDocument } from "../composables/useView"
|
|
39
40
|
import LpFieldNotice from "./LpFieldNotice.vue"
|
|
40
41
|
import LpIcon from "./LpIcon.vue"
|
|
41
42
|
import LpLoader from "./LpLoader.vue"
|
|
@@ -75,6 +76,8 @@ const props = withDefaults(
|
|
|
75
76
|
{ modelValue: "", trim: true, size: "md" },
|
|
76
77
|
)
|
|
77
78
|
|
|
79
|
+
const view = useView()
|
|
80
|
+
|
|
78
81
|
const emit = defineEmits<{
|
|
79
82
|
(e: "update:modelValue", value: string): void
|
|
80
83
|
/** Editing opened. */
|
|
@@ -157,8 +160,9 @@ async function commit(refocus: boolean) {
|
|
|
157
160
|
editing.value = true
|
|
158
161
|
await nextTick()
|
|
159
162
|
// Back into the field only if focus is not already somewhere else.
|
|
160
|
-
const
|
|
161
|
-
|
|
163
|
+
const page = viewDocument(view.value)
|
|
164
|
+
const active = page.activeElement
|
|
165
|
+
if (!active || active === page.body || active === idle.value) field.value?.focus({ preventScroll: true })
|
|
162
166
|
notice.show(error instanceof Error && error.message ? error.message : text.value.failed, { tone: "danger" })
|
|
163
167
|
} finally {
|
|
164
168
|
pending.value = null
|