@leavepulse/ui 0.69.0 → 0.70.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 +37 -0
- package/dist/assets/LoaderMark-DxBV2iDJ.css +43 -0
- package/dist/assets/LpActivityLine-B3EwNQEB.css +33 -0
- package/dist/assets/{LpCommandPalette-DxyjhYn_.css → LpCommandPalette-u-zOxKWa.css} +21 -31
- package/dist/assets/LpDock-Cbh0wQUv.css +17 -0
- package/dist/assets/{LpDropzone-Qb8k7cg4.css → LpDropzone-Bb1vBTeU.css} +12 -17
- package/dist/assets/{LpImageEditor-CElPDzpF.css → LpImageEditor-XM5bAziW.css} +6 -6
- package/dist/assets/LpLogViewer-BDNW6P52.css +38 -0
- package/dist/assets/{LpPalettePreview-CJmAKgYW.css → LpPalettePreview-B9VKDrvA.css} +2 -7
- package/dist/assets/LpShinyText-D69cBYDR.css +61 -0
- package/dist/assets/LpStatus-430OGTZY.css +17 -0
- package/dist/assets/LpStepMark-Drvx33Vg.css +10 -0
- package/dist/assets/{LpTable-BPERfJIk.css → LpTable-DHxEQ_-3.css} +19 -19
- package/dist/assets/LpTabs-BJ-nrJuI.css +18 -0
- package/dist/assets/LpTextReveal-DjI1MsDS.css +35 -0
- package/dist/assets/LpTypewriter-CXAm9Nca.css +27 -0
- package/dist/chunks/AttentionDot-DCBf4aWg.js +25 -0
- package/dist/chunks/{ContextMenuItems-B7XFHksm.js → ContextMenuItems-B5uE8Znw.js} +1 -1
- package/dist/chunks/{DropzoneLinkField-CjkrpDqO.js → DropzoneLinkField-Bw8Flkhk.js} +2 -2
- package/dist/chunks/FieldWrapper-BiennROB.js +43 -0
- package/dist/chunks/{LayoutCanvas-DF9CovaK.js → LayoutCanvas-BsJIzhdd.js} +1 -1
- package/dist/chunks/{LayoutNode-D9bIFzk0.js → LayoutNode-DJVhkSGk.js} +6 -8
- package/dist/chunks/LegendSwatch-BhRjrtzv.js +18 -0
- package/dist/chunks/LoaderMark-C1dubiKn.js +85 -0
- package/dist/chunks/{LpActionBar-MPKMu3pz.js → LpActionBar-CzOFar5t.js} +14 -20
- package/dist/chunks/LpActivityLine-CJvzrNpj.js +95 -0
- package/dist/chunks/{LpAddressInput-DG0BTqdH.js → LpAddressInput-CNnLTDZg.js} +7 -7
- package/dist/chunks/LpAlert-C5igj802.js +119 -0
- package/dist/chunks/{LpAppShell-DPh1756q.js → LpAppShell-CEUAB8kK.js} +15 -16
- package/dist/chunks/{LpAutocomplete-Dgn6hw3p.js → LpAutocomplete-D92niDHE.js} +15 -32
- package/dist/chunks/{LpAvatar-Bs0Fb1lC.js → LpAvatar-CLPl-qOF.js} +18 -6
- package/dist/chunks/LpBadge-HOEPBYmi.js +126 -0
- package/dist/chunks/LpBreadcrumbs-DYoPc3P4.js +144 -0
- package/dist/chunks/{LpButton-DNR-YAq5.js → LpButton-CVxBfGjd.js} +12 -4
- package/dist/chunks/{LpCalendar-BLya39Fh.js → LpCalendar-pVL91-Pl.js} +1 -1
- package/dist/chunks/{LpCard-Bf71NXZq.js → LpCard-CqKLnEhl.js} +18 -8
- package/dist/chunks/{LpCheckbox-Da5oZPHo.js → LpCheckbox-DHc2bHDe.js} +9 -6
- package/dist/chunks/{LpCodeBlock-lLbmslfs.js → LpCodeBlock-BGsQhxw8.js} +24 -32
- package/dist/chunks/LpCodeDisplay-CIKKT2iW.js +189 -0
- package/dist/chunks/LpCollapse-CWS9M_lm.js +115 -0
- package/dist/chunks/{LpColorPicker-DtEfBAcK.js → LpColorPicker-DFugXNUi.js} +10 -5
- package/dist/chunks/{LpConfirmDialog-D7s4jakB.js → LpConfirmDialog-CfGCux8m.js} +3 -3
- package/dist/chunks/{LpConfirmHost-DrYI5y1K.js → LpConfirmHost-exB7JmcO.js} +1 -1
- package/dist/chunks/{LpContextMenu-CRnjoqSt.js → LpContextMenu-COwOwRgI.js} +13 -5
- package/dist/chunks/LpCopyButton-DzHjnFs0.js +133 -0
- package/dist/chunks/LpCountdown-Dtq1ihlJ.js +231 -0
- package/dist/chunks/LpDataList-B-5nHfNw.js +120 -0
- package/dist/chunks/LpDatePicker-BUe1VUC0.js +168 -0
- package/dist/chunks/LpDateRangePicker-C_k65vGR.js +126 -0
- package/dist/chunks/{LpDisclosure-6AplYBub.js → LpDisclosure-DOarzlAG.js} +22 -11
- package/dist/chunks/{LpDrawer-Q4SOxM4s.js → LpDrawer-DGNKRsGq.js} +9 -4
- package/dist/chunks/{LpDropdownMenu-DWTt0ooM.js → LpDropdownMenu-CRgrhdAH.js} +10 -5
- package/dist/chunks/LpEditable-DTqLt2lT.js +236 -0
- package/dist/chunks/{LpEmptyState-om1UnFjV.js → LpEmptyState-KTKipws2.js} +1 -1
- package/dist/chunks/{LpFieldNotice-CHuDeLjc.js → LpFieldNotice-CurbNuXI.js} +1 -1
- package/dist/chunks/{LpFileTree-CW24YsVX.js → LpFileTree-DMISXVHC.js} +5 -3
- package/dist/chunks/{LpFileTreeNode-BXhTHaKW.js → LpFileTreeNode-CPXB_Yy3.js} +42 -55
- package/dist/chunks/{LpFormField-DPb47HEm.js → LpFormField-BWwgm1E4.js} +23 -9
- package/dist/chunks/LpFrame-BVQCQLDI.js +155 -0
- package/dist/chunks/LpGauge-Bk8TwJj0.js +204 -0
- package/dist/chunks/LpGlowBorder-B8V-QzIl.js +40 -0
- package/dist/chunks/{LpHintExample-C1eKYdeL.js → LpHintExample-9Py0wc-L.js} +11 -34
- package/dist/chunks/{LpHintLayer-7UOdWQG3.js → LpHintLayer-p4hqzdyA.js} +27 -14
- package/dist/chunks/{LpHints-BUtBp9-w.js → LpHints-CCrhRfy9.js} +3 -3
- package/dist/chunks/LpHoverCard-spGxyw7T.js +130 -0
- package/dist/chunks/{LpIcon-6tSrZ3Zy.js → LpIcon-HJP5xMz4.js} +1 -1
- package/dist/chunks/LpIdenticon-BzdC_qz9.js +63 -0
- package/dist/chunks/{LpInfraNode-Ds_8SZgN.js → LpInfraNode-CUC3t4na.js} +39 -25
- package/dist/chunks/{LpInput-CUyr6PIE.js → LpInput-CDuwODJG.js} +44 -18
- package/dist/chunks/{LpLightbox-B9J8rzsj.js → LpLightbox-XJ0LpTcZ.js} +69 -69
- package/dist/chunks/LpLoader-DjJEX8hL.js +92 -0
- package/dist/chunks/{LpLogViewer-4QFc-sVN.js → LpLogViewer-elZHbj85.js} +225 -129
- package/dist/chunks/LpMagnetic-CtXKLa2Y.js +62 -0
- package/dist/chunks/{LpMapPicker-BTbkFeSG.js → LpMapPicker-BtIl7NOM.js} +34 -31
- package/dist/chunks/LpMasonry--k0571qG.js +185 -0
- package/dist/chunks/{LpMediaGallery-CuPcscx3.js → LpMediaGallery-D5swlmZ_.js} +3 -3
- package/dist/chunks/{LpModal-hk1noDcr.js → LpModal-eBMt2Fqn.js} +8 -3
- package/dist/chunks/{LpModalNav-DQd2keZm.js → LpModalNav-D4Z0wVHR.js} +4 -4
- package/dist/chunks/{LpNotificationBell-X84PJIxD.js → LpNotificationBell-DPZmP5dM.js} +32 -48
- package/dist/chunks/LpNumberField-B9k-h2HE.js +140 -0
- package/dist/chunks/{LpNumberFlow-z4WPZcZu.js → LpNumberFlow-Cfyh033Q.js} +8 -28
- package/dist/chunks/{LpOtpInput-PbeNJ5In.js → LpOtpInput-CeBPsM7D.js} +2 -1
- package/dist/chunks/{LpPagination-Bx-VG4Ag.js → LpPagination-VNCX6pFC.js} +37 -6
- package/dist/chunks/{LpPalettePreview-CFav_7co.js → LpPalettePreview-BNB8T_MY.js} +1 -1
- package/dist/chunks/{LpPasswordInput-CbnXitAS.js → LpPasswordInput-DTV18FIh.js} +20 -20
- package/dist/chunks/{LpPhoneInput-DP69HONS.js → LpPhoneInput-C60tx1tC.js} +12 -7
- package/dist/chunks/{LpPie-yLF9-aDR.js → LpPie-CFuV7pZv.js} +158 -47
- package/dist/chunks/LpPipeline-D81yh_NX.js +329 -0
- package/dist/chunks/{LpPopover-DVnkHaOu.js → LpPopover-BEIcqb9p.js} +8 -3
- package/dist/chunks/{LpProgress-CA86wxXu.js → LpProgress-CE-m5OpD.js} +23 -63
- package/dist/chunks/LpQuota-2Sw_gqcJ.js +162 -0
- package/dist/chunks/{LpRadioGroup-8S5hf8lE.js → LpRadioGroup-CGBr5nIp.js} +1 -1
- package/dist/chunks/{LpRangeCalendar-ByQi-WUz.js → LpRangeCalendar-c5qj7YcC.js} +1 -1
- package/dist/chunks/{LpRangeSlider-C1yF9-nP.js → LpRangeSlider-Dv6lNvHY.js} +6 -2
- package/dist/chunks/LpRelativeTime-CKzVqAo9.js +73 -0
- package/dist/chunks/LpRepeater-D0VjmD6y.js +140 -0
- package/dist/chunks/LpRevealOnScroll-DcQjexLy.js +76 -0
- package/dist/chunks/LpScramble-TDO5Kdou.js +85 -0
- package/dist/chunks/LpSecretField-DMfdJ1cQ.js +307 -0
- package/dist/chunks/{LpSection-BmRXe6ZP.js → LpSection-BW4xJ-Li.js} +1 -1
- package/dist/chunks/{LpSegmented-CW3bFHM4.js → LpSegmented-BO99Sr4m.js} +11 -14
- package/dist/chunks/{LpSelect-BCyDYoih.js → LpSelect-B4f_yRi5.js} +93 -108
- package/dist/chunks/LpShaderBackdrop-Bote0iuy.js +332 -0
- package/dist/chunks/LpShinyText-DX2ajtWq.js +48 -0
- package/dist/chunks/{LpSidebar-DfIiS-lB.js → LpSidebar-D-M0Y_7U.js} +5 -3
- package/dist/chunks/{LpSidebarNav-C5FDNI0t.js → LpSidebarNav-DF-TYxOV.js} +3 -3
- package/dist/chunks/{LpSlider-Cuzmrd7p.js → LpSlider-DuoRpOrH.js} +6 -2
- package/dist/chunks/{LpSparkline-DXT4KrSi.js → LpSparkline-CExIRDb3.js} +32 -27
- package/dist/chunks/LpSpotlight-4F3NeUMY.js +41 -0
- package/dist/chunks/{LpStat-iBMF5QNk.js → LpStat-B2ix1Q7t.js} +38 -35
- package/dist/chunks/LpStatus-C7kx5PKE.js +86 -0
- package/dist/chunks/LpStepMark-DK-5BKAt.js +101 -0
- package/dist/chunks/LpStepper-DRFfdJaq.js +76 -0
- package/dist/chunks/{LpSwap-D82jiecV.js → LpSwap-DzE6M3Mg.js} +1 -1
- package/dist/chunks/LpSwitch-DrzKrZZV.js +112 -0
- package/dist/chunks/{LpTableFilter-CuIbgdW0.js → LpTableFilter-DyvHGbOk.js} +3 -2
- package/dist/chunks/{LpTableOfContents-C_4VBktT.js → LpTableOfContents-rYvo8z5T.js} +34 -21
- package/dist/chunks/{LpTagsInput-DiXrpYeE.js → LpTagsInput-DgpBFRV2.js} +68 -71
- package/dist/chunks/LpTextReveal-CtAnOUkp.js +140 -0
- package/dist/chunks/{LpTextarea-xoQd5Lnp.js → LpTextarea-DiWjeVoJ.js} +12 -11
- package/dist/chunks/{LpThemeProvider-CQ2jC9TA.js → LpThemeProvider-DcbfOxsU.js} +1 -1
- package/dist/chunks/LpThemeStudio-DguwHdGt.js +416 -0
- package/dist/chunks/LpThemeStudioSection-BwhqYDLf.js +20 -0
- package/dist/chunks/LpThemeSwitcher-D5uz0MhK.js +278 -0
- package/dist/chunks/{LpTimeField-MFgAsNc5.js → LpTimeField-BFQVf_PW.js} +13 -5
- package/dist/chunks/{LpToaster-C4zE9zB7.js → LpToaster-Wv9ksj4q.js} +49 -82
- package/dist/chunks/{LpTooltip-suFCM34F.js → LpTooltip-Cz8SQwRt.js} +8 -3
- package/dist/chunks/{LpTopologyCanvas-6ozNrQKh.js → LpTopologyCanvas-ZhKthfgz.js} +1 -1
- package/dist/chunks/{LpTour-BUp3Jt2e.js → LpTour-NfRJNEIP.js} +24 -18
- package/dist/chunks/LpTruncate-D_5Pfv5B.js +112 -0
- package/dist/chunks/LpTypewriter-BCL_a6wE.js +159 -0
- package/dist/chunks/{LpUptimeBar-B6kHw4Cj.js → LpUptimeBar-DWegV2p6.js} +9 -8
- package/dist/chunks/{LpVideoBackdrop-qWRYBOTQ.js → LpVideoBackdrop-DS1wGv-X.js} +7 -8
- package/dist/chunks/{MenuTitle-obgek0B7.js → MenuTitle-BjQZX8tQ.js} +1 -1
- package/dist/chunks/OptionContent-CmYUUeWj.js +40 -0
- package/dist/chunks/PickerField-CHRS1h7K.js +116 -0
- package/dist/chunks/RevealToggle-C-KzaQGJ.js +65 -0
- package/dist/chunks/StepConnector-37OgEOXA.js +41 -0
- package/dist/chunks/TourCard-BXuVHsfn.js +123 -0
- package/dist/chunks/backdrop-Dkf2vM81.js +59 -0
- package/dist/chunks/{icons-DVhZ_plB.js → icons-4IywzkHk.js} +1 -1
- package/dist/chunks/{useTheme-2qHG8NEU.js → useTheme-BOV_-AiY.js} +9 -65
- package/dist/component-names.d.ts +1 -1
- package/dist/components/AttentionDot.vue.d.ts +9 -0
- package/dist/components/AttentionDot.vue.js +4 -0
- package/dist/components/ContextMenuItems.vue.js +1 -1
- package/dist/components/DropzoneLinkField.vue.js +1 -1
- package/dist/components/FieldWrapper.vue.d.ts +25 -0
- package/dist/components/FieldWrapper.vue.js +4 -0
- package/dist/components/LayoutCanvas.vue.js +1 -1
- package/dist/components/LayoutNode.vue.d.ts +4 -4
- package/dist/components/LayoutNode.vue.js +1 -1
- package/dist/components/LegendSwatch.vue.d.ts +6 -0
- package/dist/components/LegendSwatch.vue.js +4 -0
- package/dist/components/LoaderMark.vue.d.ts +12 -0
- package/dist/components/LoaderMark.vue.js +4 -0
- package/dist/components/LpActionBar.vue.js +1 -1
- package/dist/components/LpActivityLine.vue.d.ts +58 -0
- package/dist/components/LpActivityLine.vue.js +4 -0
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.d.ts +2 -2
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +8 -7
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAutocomplete.vue.js +1 -1
- package/dist/components/LpAvatar.vue.d.ts +16 -0
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBadge.vue.d.ts +19 -5
- package/dist/components/LpBadge.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +2 -2
- package/dist/components/LpButton.vue.js +1 -1
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpCard.vue.d.ts +24 -0
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.js +107 -138
- package/dist/components/LpCheckbox.vue.d.ts +2 -2
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpCodeDisplay.vue.d.ts +89 -0
- package/dist/components/LpCodeDisplay.vue.js +4 -0
- package/dist/components/LpCollapse.vue.d.ts +58 -0
- package/dist/components/LpCollapse.vue.js +4 -0
- package/dist/components/LpColorPicker.vue.d.ts +2 -2
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.js +34 -23
- 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.d.ts +82 -0
- package/dist/components/LpCopyButton.vue.js +4 -0
- package/dist/components/LpCountdown.vue.d.ts +100 -0
- package/dist/components/LpCountdown.vue.js +4 -0
- package/dist/components/LpDataList.vue.d.ts +66 -0
- package/dist/components/LpDataList.vue.js +4 -0
- package/dist/components/LpDatePicker.vue.d.ts +1 -1
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDateRangePicker.vue.d.ts +1 -1
- package/dist/components/LpDateRangePicker.vue.js +1 -1
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDock.vue.d.ts +74 -0
- package/dist/components/LpDock.vue.js +204 -0
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.d.ts +8 -1
- package/dist/components/LpDropzone.vue.js +36 -15
- package/dist/components/LpEditable.vue.d.ts +85 -0
- package/dist/components/LpEditable.vue.js +4 -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/LpFrame.vue.d.ts +22 -0
- package/dist/components/LpFrame.vue.js +4 -0
- package/dist/components/LpGauge.vue.d.ts +116 -0
- package/dist/components/LpGauge.vue.js +4 -0
- package/dist/components/LpGlowBorder.vue.d.ts +47 -0
- package/dist/components/LpGlowBorder.vue.js +4 -0
- package/dist/components/LpHintExample.vue.d.ts +2 -2
- 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.d.ts +60 -0
- package/dist/components/LpHoverCard.vue.js +4 -0
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpIdenticon.vue.d.ts +37 -0
- package/dist/components/LpIdenticon.vue.js +4 -0
- package/dist/components/LpImageEditor.vue.js +13 -19
- package/dist/components/LpInfraNode.vue.js +1 -1
- package/dist/components/LpInput.vue.d.ts +10 -0
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLoader.vue.d.ts +106 -0
- package/dist/components/LpLoader.vue.js +4 -0
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMagnetic.vue.d.ts +28 -0
- package/dist/components/LpMagnetic.vue.js +4 -0
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMasonry.vue.d.ts +42 -0
- package/dist/components/LpMasonry.vue.js +4 -0
- 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.d.ts +15 -6
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.d.ts +57 -0
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpNumberFlow.vue.js +1 -1
- package/dist/components/LpOtpInput.vue.d.ts +12 -4
- 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/LpPalettePreview.vue.js +1 -1
- package/dist/components/LpPaletteStats.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.d.ts +12 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.d.ts +3 -1
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPipeline.vue.d.ts +91 -0
- package/dist/components/LpPipeline.vue.js +4 -0
- package/dist/components/LpPopover.vue.d.ts +2 -2
- package/dist/components/LpPopover.vue.js +1 -1
- package/dist/components/LpProgress.vue.d.ts +11 -4
- package/dist/components/LpProgress.vue.js +1 -1
- package/dist/components/LpQuota.vue.d.ts +68 -0
- package/dist/components/LpQuota.vue.js +4 -0
- 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.d.ts +41 -0
- package/dist/components/LpRelativeTime.vue.js +4 -0
- package/dist/components/LpRepeater.vue.d.ts +48 -0
- package/dist/components/LpRepeater.vue.js +4 -0
- package/dist/components/LpRevealOnScroll.vue.d.ts +67 -0
- package/dist/components/LpRevealOnScroll.vue.js +4 -0
- package/dist/components/LpRollingText.vue.d.ts +1 -1
- package/dist/components/LpScramble.vue.d.ts +55 -0
- package/dist/components/LpScramble.vue.js +4 -0
- package/dist/components/LpScrollArea.vue.d.ts +1 -1
- package/dist/components/LpSecretField.vue.d.ts +108 -0
- package/dist/components/LpSecretField.vue.js +4 -0
- package/dist/components/LpSection.vue.js +1 -1
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSelect.vue.d.ts +2 -0
- package/dist/components/LpSelect.vue.js +1 -1
- package/dist/components/LpShaderBackdrop.vue.d.ts +39 -0
- package/dist/components/LpShaderBackdrop.vue.js +4 -0
- package/dist/components/LpShinyText.vue.d.ts +39 -0
- package/dist/components/LpShinyText.vue.js +4 -0
- package/dist/components/LpShortcutsDialog.vue.js +1 -1
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSlider.vue.js +1 -1
- package/dist/components/LpSparkline.vue.d.ts +4 -3
- package/dist/components/LpSparkline.vue.js +1 -1
- package/dist/components/LpSpotlight.vue.d.ts +37 -0
- package/dist/components/LpSpotlight.vue.js +4 -0
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpStatus.vue.d.ts +65 -0
- package/dist/components/LpStatus.vue.js +4 -0
- package/dist/components/LpStepMark.vue.d.ts +31 -0
- package/dist/components/LpStepMark.vue.js +4 -0
- package/dist/components/LpStepper.vue.js +1 -1
- package/dist/components/LpSwap.vue.js +1 -1
- package/dist/components/LpSwitch.vue.d.ts +2 -2
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTable.vue.js +104 -120
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpTableOfContents.vue.d.ts +6 -1
- package/dist/components/LpTableOfContents.vue.js +1 -1
- package/dist/components/LpTabs.vue.d.ts +5 -5
- package/dist/components/LpTabs.vue.js +25 -33
- package/dist/components/LpTagsInput.vue.js +1 -1
- package/dist/components/LpTextReveal.vue.d.ts +58 -0
- package/dist/components/LpTextReveal.vue.js +4 -0
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.js +1 -1
- package/dist/components/LpThemeStudio.vue.d.ts +54 -0
- package/dist/components/LpThemeStudio.vue.js +4 -0
- package/dist/components/LpThemeStudioSection.vue.d.ts +16 -0
- package/dist/components/LpThemeStudioSection.vue.js +4 -0
- package/dist/components/LpThemeSwitcher.vue.d.ts +32 -1
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTimeField.vue.d.ts +2 -0
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTooltip.vue.d.ts +2 -2
- package/dist/components/LpTooltip.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpTour.vue.js +1 -1
- package/dist/components/LpTruncate.vue.d.ts +34 -0
- package/dist/components/LpTruncate.vue.js +4 -0
- package/dist/components/LpTypewriter.vue.d.ts +61 -0
- package/dist/components/LpTypewriter.vue.js +4 -0
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/LpVideoBackdrop.vue.js +1 -1
- package/dist/components/MenuTitle.vue.js +1 -1
- package/dist/components/OptionContent.vue.d.ts +7 -0
- package/dist/components/OptionContent.vue.js +4 -0
- package/dist/components/PickerField.vue.d.ts +43 -0
- package/dist/components/PickerField.vue.js +4 -0
- package/dist/components/RevealToggle.vue.d.ts +21 -0
- package/dist/components/RevealToggle.vue.js +4 -0
- package/dist/components/StepConnector.vue.d.ts +19 -0
- package/dist/components/StepConnector.vue.js +4 -0
- package/dist/components/TourCard.vue.js +1 -1
- package/dist/components/badge.d.ts +1 -0
- package/dist/components/badge.js +4 -0
- package/dist/components/chart.d.ts +5 -1
- package/dist/components/chart.js +2 -21
- package/dist/components/dateRange.d.ts +11 -0
- package/dist/components/dateRange.js +12 -0
- package/dist/components/dock.d.ts +19 -0
- package/dist/components/dock.js +16 -0
- package/dist/components/dropdown.d.ts +10 -1
- package/dist/components/dropdown.js +7 -2
- package/dist/components/fieldText.d.ts +38 -0
- package/dist/components/fieldText.js +53 -0
- package/dist/components/fileTree.d.ts +7 -3
- package/dist/components/fileTree.js +12 -18
- package/dist/components/format.d.ts +41 -0
- package/dist/components/format.js +67 -0
- package/dist/components/identicon.d.ts +38 -0
- package/dist/components/identicon.js +85 -0
- package/dist/components/masonry.d.ts +32 -0
- package/dist/components/masonry.js +40 -0
- package/dist/components/menuWhen.js +1 -1
- package/dist/components/meter.d.ts +64 -0
- package/dist/components/meter.js +53 -0
- package/dist/components/otp.d.ts +1 -1
- package/dist/components/otp.js +7 -2
- package/dist/components/pipeline.d.ts +55 -0
- package/dist/components/pipeline.js +51 -0
- package/dist/components/quota.d.ts +57 -0
- package/dist/components/quota.js +40 -0
- package/dist/components/relativeTime.d.ts +24 -0
- package/dist/components/relativeTime.js +56 -0
- package/dist/components/reveal.d.ts +18 -0
- package/dist/components/reveal.js +32 -0
- package/dist/components/scramble.d.ts +68 -0
- package/dist/components/scramble.js +58 -0
- package/dist/components/shaderBackdrop.d.ts +20 -0
- package/dist/components/shaderBackdrop.js +156 -0
- package/dist/components/slider.d.ts +5 -0
- package/dist/components/slider.js +24 -0
- package/dist/components/slotText.d.ts +2 -0
- package/dist/components/slotText.js +9 -0
- package/dist/components/status.d.ts +14 -0
- package/dist/components/status.js +22 -0
- package/dist/components/tableFacets.d.ts +8 -0
- package/dist/components/tableFacets.js +19 -0
- package/dist/components/textSplit.d.ts +17 -0
- package/dist/components/textSplit.js +24 -0
- package/dist/components/timeSpan.d.ts +78 -0
- package/dist/components/timeSpan.js +85 -0
- package/dist/components/tone.d.ts +43 -0
- package/dist/components/tone.js +82 -0
- package/dist/components/tour.js +3 -2
- package/dist/components/typewriter.d.ts +36 -0
- package/dist/components/typewriter.js +53 -0
- package/dist/components/videoBackdrop.js +5 -6
- package/dist/composables/easing.d.ts +22 -1
- package/dist/composables/easing.js +42 -1
- package/dist/composables/pseudoLocale.d.ts +15 -0
- package/dist/composables/pseudoLocale.js +96 -0
- package/dist/composables/scroll.js +5 -3
- package/dist/composables/useClipboard.d.ts +4 -1
- package/dist/composables/useClipboard.js +12 -2
- package/dist/composables/useField.d.ts +8 -0
- package/dist/composables/useField.js +5 -0
- package/dist/composables/useForm.js +19 -5
- package/dist/composables/useInView.d.ts +11 -0
- package/dist/composables/useInView.js +39 -0
- package/dist/composables/useLoadingGate.d.ts +8 -0
- package/dist/composables/useLoadingGate.js +38 -0
- package/dist/composables/useLpConfig.d.ts +10 -0
- package/dist/composables/useLpConfig.js +11 -1
- package/dist/composables/useMediaQuery.js +3 -1
- package/dist/composables/useNow.d.ts +16 -0
- package/dist/composables/useNow.js +39 -0
- package/dist/composables/usePersisted.js +14 -7
- package/dist/composables/usePillTransition.d.ts +5 -2
- package/dist/composables/usePillTransition.js +4 -3
- package/dist/composables/usePointerFrame.d.ts +18 -0
- package/dist/composables/usePointerFrame.js +31 -0
- package/dist/composables/useReducedMotion.d.ts +2 -0
- package/dist/composables/useReducedMotion.js +7 -0
- package/dist/composables/useRepeater.d.ts +17 -0
- package/dist/composables/useRepeater.js +31 -0
- package/dist/composables/useResizeObserver.d.ts +8 -0
- package/dist/composables/useResizeObserver.js +33 -0
- package/dist/composables/useRevealedValue.d.ts +31 -0
- package/dist/composables/useRevealedValue.js +26 -0
- package/dist/composables/useScramble.d.ts +42 -0
- package/dist/composables/useScramble.js +76 -0
- package/dist/composables/useShift.js +2 -10
- package/dist/composables/useSpotlight.d.ts +18 -0
- package/dist/composables/useSpotlight.js +53 -0
- package/dist/composables/useTilt.js +26 -18
- package/dist/composables/useTween.d.ts +43 -0
- package/dist/composables/useTween.js +69 -0
- package/dist/composables/useView.d.ts +18 -0
- package/dist/composables/useView.js +61 -0
- package/dist/icons-all.js +1 -1
- package/dist/index.d.ts +98 -1
- package/dist/index.js +262 -104
- package/dist/theme/define.d.ts +12 -0
- package/dist/theme/studio.d.ts +90 -0
- package/package.json +5 -2
- package/src/component-names.ts +33 -0
- package/src/components/AttentionDot.vue +27 -0
- package/src/components/FieldWrapper.vue +38 -0
- package/src/components/LayoutNode.vue +5 -9
- package/src/components/LegendSwatch.vue +15 -0
- package/src/components/LoaderMark.vue +90 -0
- package/src/components/LpActionBar.vue +12 -20
- package/src/components/LpActivityLine.vue +186 -0
- package/src/components/LpAlert.vue +54 -24
- package/src/components/LpAppShell.vue +7 -11
- package/src/components/LpAutocomplete.vue +16 -14
- package/src/components/LpAvatar.vue +17 -2
- package/src/components/LpBadge.vue +77 -13
- package/src/components/LpBreadcrumbs.vue +101 -35
- package/src/components/LpButton.vue +15 -3
- package/src/components/LpCard.vue +30 -7
- package/src/components/LpChart.vue +143 -154
- package/src/components/LpCheckbox.vue +10 -4
- package/src/components/LpCodeBlock.vue +11 -19
- package/src/components/LpCodeDisplay.vue +228 -0
- package/src/components/LpCollapse.vue +162 -0
- package/src/components/LpColorPicker.vue +10 -1
- package/src/components/LpCommandPalette.vue +38 -24
- package/src/components/LpContextMenu.vue +10 -1
- package/src/components/LpCopyButton.vue +185 -0
- package/src/components/LpCountdown.vue +308 -0
- package/src/components/LpDataList.vue +154 -0
- package/src/components/LpDatePicker.vue +53 -104
- package/src/components/LpDateRangePicker.vue +49 -95
- package/src/components/LpDisclosure.vue +58 -36
- package/src/components/LpDock.vue +274 -0
- package/src/components/LpDrawer.vue +10 -1
- package/src/components/LpDropdownMenu.vue +10 -1
- package/src/components/LpDropzone.vue +34 -13
- package/src/components/LpEditable.vue +293 -0
- package/src/components/LpFileTree.vue +5 -1
- package/src/components/LpFileTreeNode.vue +25 -50
- package/src/components/LpFormField.vue +22 -3
- package/src/components/LpFrame.vue +200 -0
- package/src/components/LpGauge.vue +287 -0
- package/src/components/LpGlowBorder.vue +60 -0
- package/src/components/LpHintExample.vue +9 -32
- package/src/components/LpHintLayer.vue +13 -3
- package/src/components/LpHoverCard.vue +175 -0
- package/src/components/LpIdenticon.vue +69 -0
- package/src/components/LpImageEditor.vue +15 -18
- package/src/components/LpInfraNode.vue +27 -16
- package/src/components/LpInput.vue +30 -16
- package/src/components/LpLightbox.vue +44 -23
- package/src/components/LpLoader.vue +145 -0
- package/src/components/LpLogViewer.vue +311 -82
- package/src/components/LpMagnetic.vue +97 -0
- package/src/components/LpMapPicker.vue +26 -28
- package/src/components/LpMasonry.vue +247 -0
- package/src/components/LpModal.vue +10 -1
- package/src/components/LpNotificationBell.vue +33 -49
- package/src/components/LpNumberField.vue +79 -14
- package/src/components/LpNumberFlow.vue +10 -35
- package/src/components/LpOtpInput.vue +7 -2
- package/src/components/LpPagination.vue +38 -4
- package/src/components/LpPalettePreview.vue +2 -7
- package/src/components/LpPasswordInput.vue +16 -14
- package/src/components/LpPhoneInput.vue +12 -3
- package/src/components/LpPie.vue +197 -36
- package/src/components/LpPipeline.vue +366 -0
- package/src/components/LpPopover.vue +10 -1
- package/src/components/LpProgress.vue +22 -84
- package/src/components/LpQuota.vue +197 -0
- package/src/components/LpRangeSlider.vue +5 -1
- package/src/components/LpRelativeTime.vue +90 -0
- package/src/components/LpRepeater.vue +80 -0
- package/src/components/LpRevealOnScroll.vue +125 -0
- package/src/components/LpScramble.vue +107 -0
- package/src/components/LpSecretField.vue +313 -0
- package/src/components/LpSegmented.vue +3 -10
- package/src/components/LpSelect.vue +78 -64
- package/src/components/LpShaderBackdrop.vue +434 -0
- package/src/components/LpShinyText.vue +139 -0
- package/src/components/LpSidebar.vue +2 -0
- package/src/components/LpSlider.vue +5 -1
- package/src/components/LpSparkline.vue +55 -37
- package/src/components/LpSpotlight.vue +51 -0
- package/src/components/LpStat.vue +6 -2
- package/src/components/LpStatus.vue +127 -0
- package/src/components/LpStepMark.vue +138 -0
- package/src/components/LpStepper.vue +37 -43
- package/src/components/LpSwap.vue +2 -2
- package/src/components/LpSwitch.vue +15 -22
- package/src/components/LpTable.vue +47 -63
- package/src/components/LpTableFilter.vue +1 -0
- package/src/components/LpTableOfContents.vue +53 -29
- package/src/components/LpTabs.vue +10 -21
- package/src/components/LpTagsInput.vue +53 -37
- package/src/components/LpTextReveal.vue +236 -0
- package/src/components/LpTextarea.vue +11 -11
- package/src/components/LpThemeStudio.vue +216 -0
- package/src/components/LpThemeStudioSection.vue +16 -0
- package/src/components/LpThemeSwitcher.vue +156 -47
- package/src/components/LpTimeField.vue +9 -1
- package/src/components/LpToaster.vue +63 -83
- package/src/components/LpTooltip.vue +10 -1
- package/src/components/LpTour.vue +24 -13
- package/src/components/LpTruncate.vue +135 -0
- package/src/components/LpTypewriter.vue +236 -0
- package/src/components/LpUptimeBar.vue +6 -5
- package/src/components/LpVideoBackdrop.vue +15 -13
- package/src/components/OptionContent.vue +17 -0
- package/src/components/PickerField.vue +58 -0
- package/src/components/RevealToggle.vue +51 -0
- package/src/components/StepConnector.vue +54 -0
- package/src/components/TourCard.vue +29 -16
- package/src/components/badge.ts +8 -0
- package/src/components/chart.ts +8 -23
- package/src/components/dateRange.ts +25 -0
- package/src/components/dock.ts +31 -0
- package/src/components/dropdown.ts +15 -3
- package/src/components/fieldText.ts +95 -0
- package/src/components/fileTree.ts +19 -21
- package/src/components/format.ts +136 -0
- package/src/components/identicon.ts +160 -0
- package/src/components/masonry.ts +73 -0
- package/src/components/meter.ts +122 -0
- package/src/components/otp.ts +14 -3
- package/src/components/pipeline.ts +101 -0
- package/src/components/quota.ts +111 -0
- package/src/components/relativeTime.ts +118 -0
- package/src/components/reveal.ts +56 -0
- package/src/components/scramble.ts +138 -0
- package/src/components/shaderBackdrop.ts +208 -0
- package/src/components/slider.ts +30 -0
- package/src/components/slotText.ts +13 -0
- package/src/components/status.ts +46 -0
- package/src/components/tableFacets.ts +25 -0
- package/src/components/textSplit.ts +55 -0
- package/src/components/timeSpan.ts +183 -0
- package/src/components/tone.ts +144 -0
- package/src/components/tour.ts +3 -2
- package/src/components/typewriter.ts +104 -0
- package/src/components/videoBackdrop.ts +7 -6
- package/src/composables/easing.ts +66 -1
- package/src/composables/pseudoLocale.ts +105 -0
- package/src/composables/scroll.ts +6 -3
- package/src/composables/useClipboard.ts +25 -3
- package/src/composables/useField.ts +12 -0
- package/src/composables/useForm.ts +27 -6
- package/src/composables/useInView.ts +61 -0
- package/src/composables/useLoadingGate.ts +63 -0
- package/src/composables/useLpConfig.ts +20 -1
- package/src/composables/useMediaQuery.ts +6 -2
- package/src/composables/useNow.ts +84 -0
- package/src/composables/usePersisted.ts +19 -8
- package/src/composables/usePillTransition.ts +21 -13
- package/src/composables/usePointerFrame.ts +72 -0
- package/src/composables/useReducedMotion.ts +22 -0
- package/src/composables/useRepeater.ts +44 -0
- package/src/composables/useResizeObserver.ts +59 -0
- package/src/composables/useRevealedValue.ts +84 -0
- package/src/composables/useScramble.ts +152 -0
- package/src/composables/useShift.ts +10 -16
- package/src/composables/useSpotlight.ts +82 -0
- package/src/composables/useTilt.ts +40 -23
- package/src/composables/useTween.ts +149 -0
- package/src/composables/useView.ts +93 -0
- package/src/index.css +1 -0
- package/src/index.ts +143 -1
- package/src/kit-icons.ts +1 -1
- package/src/theme/define.ts +65 -0
- package/src/theme/studio.ts +202 -0
- package/src/tokens/effects.css +151 -0
- package/src/tokens/tokens.css +131 -39
- package/src/tokens/utilities.css +81 -0
- package/dist/assets/LpTabs-Bk7v4bZz.css +0 -18
- package/dist/chunks/LpAlert-BdvxvcWE.js +0 -85
- package/dist/chunks/LpBadge-Fe0D1bYx.js +0 -62
- package/dist/chunks/LpBreadcrumbs-rzOKkLiI.js +0 -98
- package/dist/chunks/LpDatePicker-BMfM454Y.js +0 -243
- package/dist/chunks/LpDateRangePicker-CNb9X3eL.js +0 -195
- package/dist/chunks/LpNumberField-DO1ufKvE.js +0 -107
- package/dist/chunks/LpStepper-C2slwObu.js +0 -90
- package/dist/chunks/LpSwitch-CZy9_IoA.js +0 -132
- package/dist/chunks/LpThemeSwitcher-CDoziW0z.js +0 -166
- package/dist/chunks/TourCard-BKI7X9-r.js +0 -105
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export default { inheritAttrs: false }
|
|
3
|
+
|
|
4
|
+
export interface DockItem {
|
|
5
|
+
/** Stable identity; what `select` reports and `active` matches. */
|
|
6
|
+
id: string
|
|
7
|
+
/** Name shown in the tooltip and announced as the button's name. */
|
|
8
|
+
label: string
|
|
9
|
+
/** Icon name (`lucide:*`). Use the `#icon` slot for an image or avatar instead. */
|
|
10
|
+
icon?: string
|
|
11
|
+
/** Render as a link. */
|
|
12
|
+
href?: string
|
|
13
|
+
disabled?: boolean
|
|
14
|
+
}
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<script setup lang="ts">
|
|
18
|
+
/*
|
|
19
|
+
* LpDock — a row (or column) of icon buttons that swell under the pointer,
|
|
20
|
+
* their neighbours less with distance: the launcher's quick bar of apps,
|
|
21
|
+
* instances or tools.
|
|
22
|
+
*
|
|
23
|
+
* <LpDock :items="apps" :active="running" @select="open" />
|
|
24
|
+
*
|
|
25
|
+
* The magnification is a way to aim at small targets in a dense bar, not
|
|
26
|
+
* decoration, so it is only on where it helps: a mouse. Touch and pen get
|
|
27
|
+
* plain buttons at rest size (no hover to follow; a finger would only ever see
|
|
28
|
+
* the icon it already pressed grow), and so does reduced motion.
|
|
29
|
+
*
|
|
30
|
+
* Sizes are springs stepped once per animation frame and written straight to
|
|
31
|
+
* the elements, so the bar costs no re-render while the pointer moves — the
|
|
32
|
+
* launcher runs on WebKitGTK, where a reactive update per pointermove shows.
|
|
33
|
+
* The loop stops as soon as every icon is at rest.
|
|
34
|
+
*
|
|
35
|
+
* Keyboard: one Tab stop; arrows move along the bar (useRovingFocus), Home and
|
|
36
|
+
* End jump, letters jump by label, Enter or Space selects. The focused icon
|
|
37
|
+
* swells the same way the hovered one does, so keyboard users see where they
|
|
38
|
+
* are in the same language. Labels live in tooltips, which also name the
|
|
39
|
+
* buttons for screen readers.
|
|
40
|
+
*/
|
|
41
|
+
import { computed, onBeforeUnmount, ref, watch } from "vue"
|
|
42
|
+
import { prefersReducedMotion } from "../composables/easing"
|
|
43
|
+
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
44
|
+
import { springSettled, springStep, type SpringState } from "../composables/usePillTransition"
|
|
45
|
+
import { useRovingFocus } from "../composables/useRovingFocus"
|
|
46
|
+
import { dockSize } from "./dock"
|
|
47
|
+
import LpIcon from "./LpIcon.vue"
|
|
48
|
+
import LpTooltip from "./LpTooltip.vue"
|
|
49
|
+
|
|
50
|
+
const props = withDefaults(
|
|
51
|
+
defineProps<{
|
|
52
|
+
items: DockItem[]
|
|
53
|
+
/** Ids marked with a dot: running, open, or the current section. */
|
|
54
|
+
active?: string | string[]
|
|
55
|
+
/** Lay the bar out in a row or a column. */
|
|
56
|
+
orientation?: "horizontal" | "vertical"
|
|
57
|
+
/** Resting icon size in px. */
|
|
58
|
+
size?: number
|
|
59
|
+
/** Size of the icon right under the pointer, in px. Equal to `size` turns magnification off. */
|
|
60
|
+
magnify?: number
|
|
61
|
+
/** How far, in px, the swell reaches to either side of the pointer. */
|
|
62
|
+
reach?: number
|
|
63
|
+
/** Which side the tooltips open on; defaults to away from the bar's edge. */
|
|
64
|
+
tooltipSide?: "top" | "right" | "bottom" | "left"
|
|
65
|
+
/**
|
|
66
|
+
* Drive the swell from outside — a pointer position along the bar, in px
|
|
67
|
+
* from its start. For demos and guided tours; `null` hands it back to the
|
|
68
|
+
* pointer.
|
|
69
|
+
*/
|
|
70
|
+
focusAt?: number | null
|
|
71
|
+
}>(),
|
|
72
|
+
{ orientation: "horizontal", size: 44, magnify: 72, reach: 150, focusAt: null },
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
const emit = defineEmits<{ select: [id: string, item: DockItem] }>()
|
|
76
|
+
|
|
77
|
+
defineSlots<{
|
|
78
|
+
icon?(props: { item: DockItem; active: boolean }): unknown
|
|
79
|
+
}>()
|
|
80
|
+
|
|
81
|
+
const vertical = computed(() => props.orientation === "vertical")
|
|
82
|
+
|
|
83
|
+
const { class: classes, attrs: rest } = useMergedAttrs(() =>
|
|
84
|
+
[
|
|
85
|
+
"lp-skin-panel inline-flex rounded-card border border-line bg-surface-raised p-1.5 gap-1.5",
|
|
86
|
+
vertical.value ? "flex-col items-start" : "flex-row items-end",
|
|
87
|
+
].join(" "),
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
const activeIds = computed(() => new Set(Array.isArray(props.active) ? props.active : props.active ? [props.active] : []))
|
|
91
|
+
|
|
92
|
+
function select(id: string) {
|
|
93
|
+
const item = props.items.find((entry) => entry.id === id)
|
|
94
|
+
if (item && !item.disabled) emit("select", id, item)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const roving = useRovingFocus(
|
|
98
|
+
() => props.items.map((item) => ({ id: item.id, label: item.label, disabled: item.disabled })),
|
|
99
|
+
{ orientation: props.orientation, onActivate: select },
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
// ── magnification ─────────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
const buttons = new Map<string, HTMLElement>()
|
|
105
|
+
const springs = new Map<string, SpringState>()
|
|
106
|
+
const bar = ref<HTMLElement | null>(null)
|
|
107
|
+
|
|
108
|
+
// Where the swell is centred, in client px along the bar's axis; null = rest.
|
|
109
|
+
let pointer: number | null = null
|
|
110
|
+
let frame = 0
|
|
111
|
+
let lastTime = 0
|
|
112
|
+
|
|
113
|
+
function setButton(id: string, el: unknown) {
|
|
114
|
+
if (el instanceof HTMLElement) buttons.set(id, el)
|
|
115
|
+
else buttons.delete(id)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function centreOf(el: HTMLElement): number {
|
|
119
|
+
const rect = el.getBoundingClientRect()
|
|
120
|
+
return vertical.value ? rect.top + rect.height / 2 : rect.left + rect.width / 2
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function targetFor(el: HTMLElement): number {
|
|
124
|
+
if (pointer === null) return props.size
|
|
125
|
+
return dockSize(props.size, Math.max(props.size, props.magnify), pointer - centreOf(el), props.reach)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function step(time: number) {
|
|
129
|
+
frame = 0
|
|
130
|
+
const dt = lastTime ? (time - lastTime) / 1000 : 1 / 60
|
|
131
|
+
lastTime = time
|
|
132
|
+
let moving = false
|
|
133
|
+
// Read every target before writing any size: interleaving reads and writes
|
|
134
|
+
// would force a layout per icon per frame.
|
|
135
|
+
const targets = new Map<string, number>()
|
|
136
|
+
for (const [id, el] of buttons) targets.set(id, targetFor(el))
|
|
137
|
+
for (const [id, el] of buttons) {
|
|
138
|
+
const target = targets.get(id)!
|
|
139
|
+
const next = springStep(springs.get(id) ?? { value: props.size, velocity: 0 }, target, "pill", dt)
|
|
140
|
+
const settled = springSettled(next, target)
|
|
141
|
+
const value = settled ? target : next.value
|
|
142
|
+
springs.set(id, settled ? { value: target, velocity: 0 } : next)
|
|
143
|
+
el.style.setProperty("--lp-dock-size", `${value.toFixed(2)}px`)
|
|
144
|
+
if (!settled) moving = true
|
|
145
|
+
}
|
|
146
|
+
if (moving) frame = requestAnimationFrame(step)
|
|
147
|
+
else lastTime = 0
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function kick() {
|
|
151
|
+
if (!frame) frame = requestAnimationFrame(step)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function magnifying(): boolean {
|
|
155
|
+
return props.magnify > props.size && !prefersReducedMotion()
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function onPointerMove(event: PointerEvent) {
|
|
159
|
+
if (event.pointerType !== "mouse" || props.focusAt !== null || !magnifying()) return
|
|
160
|
+
pointer = vertical.value ? event.clientY : event.clientX
|
|
161
|
+
kick()
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function onPointerLeave() {
|
|
165
|
+
if (props.focusAt !== null) return
|
|
166
|
+
pointer = null
|
|
167
|
+
kick()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function onFocusIn(event: FocusEvent) {
|
|
171
|
+
const target = event.target as HTMLElement | null
|
|
172
|
+
if (!target?.matches(":focus-visible") || props.focusAt !== null || !magnifying()) return
|
|
173
|
+
pointer = centreOf(target)
|
|
174
|
+
kick()
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function onFocusOut(event: FocusEvent) {
|
|
178
|
+
if (bar.value?.contains(event.relatedTarget as Node | null) || props.focusAt !== null) return
|
|
179
|
+
pointer = null
|
|
180
|
+
kick()
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// The outside-driven swell: converted from bar-relative to client px on every
|
|
184
|
+
// frame it is set, so a bar that moves (scrolls) keeps the swell in place.
|
|
185
|
+
watch(
|
|
186
|
+
() => props.focusAt,
|
|
187
|
+
(at) => {
|
|
188
|
+
if (at === null) {
|
|
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
|
+
}
|
|
194
|
+
kick()
|
|
195
|
+
},
|
|
196
|
+
{ flush: "post" },
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
onBeforeUnmount(() => {
|
|
200
|
+
if (frame) cancelAnimationFrame(frame)
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
const dotSide = computed(() => (vertical.value ? "left" : "bottom"))
|
|
204
|
+
const tipSide = computed(() => props.tooltipSide ?? (vertical.value ? "right" : "top"))
|
|
205
|
+
</script>
|
|
206
|
+
|
|
207
|
+
<template>
|
|
208
|
+
<div
|
|
209
|
+
:ref="(el) => { bar = el as HTMLElement | null; roving.setContainer(el as HTMLElement | null) }"
|
|
210
|
+
role="toolbar"
|
|
211
|
+
:aria-orientation="orientation"
|
|
212
|
+
:class="classes"
|
|
213
|
+
:style="{ '--lp-dock-rest': `${size}px` }"
|
|
214
|
+
:data-orientation="orientation"
|
|
215
|
+
v-bind="rest"
|
|
216
|
+
@keydown="roving.onKeydown"
|
|
217
|
+
@pointermove="onPointerMove"
|
|
218
|
+
@pointerleave="onPointerLeave"
|
|
219
|
+
@focusin="onFocusIn"
|
|
220
|
+
@focusout="onFocusOut"
|
|
221
|
+
>
|
|
222
|
+
<div
|
|
223
|
+
v-for="item in items"
|
|
224
|
+
:key="item.id"
|
|
225
|
+
class="relative flex shrink-0 items-center justify-center"
|
|
226
|
+
>
|
|
227
|
+
<LpTooltip :content="item.label" label :side="tipSide" :delay="0">
|
|
228
|
+
<component
|
|
229
|
+
:is="item.href && !item.disabled ? 'a' : 'button'"
|
|
230
|
+
:ref="(el: unknown) => setButton(item.id, el)"
|
|
231
|
+
:type="item.href ? undefined : 'button'"
|
|
232
|
+
:href="item.disabled ? undefined : item.href"
|
|
233
|
+
:disabled="item.href ? undefined : item.disabled"
|
|
234
|
+
:aria-disabled="item.disabled || undefined"
|
|
235
|
+
:aria-current="activeIds.has(item.id) ? 'true' : undefined"
|
|
236
|
+
v-bind="roving.itemProps(item.id)"
|
|
237
|
+
class="lp-dock-item flex items-center justify-center rounded-control bg-surface-soft text-ink outline-none transition-colors duration-(--duration-fast) hover:bg-surface-hover focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:opacity-50"
|
|
238
|
+
@click="select(item.id)"
|
|
239
|
+
>
|
|
240
|
+
<slot name="icon" :item="item" :active="activeIds.has(item.id)">
|
|
241
|
+
<LpIcon v-if="item.icon" :name="item.icon" class="size-[52%]" aria-hidden="true" />
|
|
242
|
+
</slot>
|
|
243
|
+
</component>
|
|
244
|
+
</LpTooltip>
|
|
245
|
+
<span
|
|
246
|
+
aria-hidden="true"
|
|
247
|
+
class="pointer-events-none absolute size-1 rounded-pill bg-brand transition-[opacity,scale] duration-(--duration-medium) ease-(--ease-emphasized)"
|
|
248
|
+
:class="[
|
|
249
|
+
dotSide === 'bottom' ? '-bottom-1 left-1/2 -translate-x-1/2' : '-left-1 top-1/2 -translate-y-1/2',
|
|
250
|
+
activeIds.has(item.id) ? 'opacity-100 scale-100' : 'opacity-0 scale-0',
|
|
251
|
+
]"
|
|
252
|
+
/>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</template>
|
|
256
|
+
|
|
257
|
+
<style scoped>
|
|
258
|
+
/* The bar keeps its rest thickness while icons swell: they grow out of it
|
|
259
|
+
(upward, or to the right when vertical) instead of pushing the bar, and
|
|
260
|
+
with it whatever sits next to the bar, around on every pointer move. */
|
|
261
|
+
[data-orientation="horizontal"] {
|
|
262
|
+
height: calc(var(--lp-dock-rest) + 0.75rem + 2px);
|
|
263
|
+
}
|
|
264
|
+
[data-orientation="vertical"] {
|
|
265
|
+
width: calc(var(--lp-dock-rest) + 0.75rem + 2px);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Size is a custom property the spring writes per frame; the rest size is the
|
|
269
|
+
fallback so the first paint (and touch, and reduced motion) needs no script. */
|
|
270
|
+
.lp-dock-item {
|
|
271
|
+
width: var(--lp-dock-size, var(--lp-dock-rest));
|
|
272
|
+
height: var(--lp-dock-size, var(--lp-dock-rest));
|
|
273
|
+
}
|
|
274
|
+
</style>
|
|
@@ -42,6 +42,7 @@ import { usePersisted } from "../composables/usePersisted"
|
|
|
42
42
|
import LpIcon from "./LpIcon.vue"
|
|
43
43
|
import LpScrollArea from "./LpScrollArea.vue"
|
|
44
44
|
import { anyModalOpen, useModalLayer } from "./modalDepth"
|
|
45
|
+
import { useOutsideGuard, usePortalTarget } from "../composables/useView"
|
|
45
46
|
|
|
46
47
|
type Direction = "top" | "bottom" | "left" | "right"
|
|
47
48
|
|
|
@@ -513,6 +514,12 @@ const previewStyle = computed(() => {
|
|
|
513
514
|
pointerEvents: "none" as const,
|
|
514
515
|
}
|
|
515
516
|
})
|
|
517
|
+
|
|
518
|
+
// Overlays open in the window this component renders in (an LpFrame's, inside one).
|
|
519
|
+
const portalTo = usePortalTarget()
|
|
520
|
+
// What happens in another document (the page around a frame, or a frame in
|
|
521
|
+
// the page) is not "outside" for this layer.
|
|
522
|
+
const guardOutside = useOutsideGuard()
|
|
516
523
|
</script>
|
|
517
524
|
|
|
518
525
|
<template>
|
|
@@ -552,7 +559,7 @@ const previewStyle = computed(() => {
|
|
|
552
559
|
:close-threshold="closeThreshold"
|
|
553
560
|
@update:open="(v: boolean) => emit('update:open', v)"
|
|
554
561
|
>
|
|
555
|
-
<DrawerPortal>
|
|
562
|
+
<DrawerPortal :to="portalTo">
|
|
556
563
|
<DrawerOverlay
|
|
557
564
|
:style="{ zIndex: layer.scrim }"
|
|
558
565
|
@click="guarded && requestClose()"
|
|
@@ -560,6 +567,8 @@ const previewStyle = computed(() => {
|
|
|
560
567
|
:class="{ 'lp-scrim--light': frosted, 'lp-scrim--nested': layer.nested, 'lp-scrim--covered': layer.covered }"
|
|
561
568
|
/>
|
|
562
569
|
<DrawerContent
|
|
570
|
+
@interact-outside="guardOutside"
|
|
571
|
+
@escape-key-down="guardOutside"
|
|
563
572
|
ref="contentRef"
|
|
564
573
|
v-bind="description ? {} : { 'aria-describedby': undefined }"
|
|
565
574
|
:class="contentClass"
|
|
@@ -12,6 +12,7 @@ import ContextMenuItems from "./ContextMenuItems.vue"
|
|
|
12
12
|
import type { ContextMenuItemDef } from "./LpContextMenu.vue"
|
|
13
13
|
import { POPOVER_PANEL } from "./dropdown"
|
|
14
14
|
import MenuTitle from "./MenuTitle.vue"
|
|
15
|
+
import { useOutsideGuard, usePortalTarget } from "../composables/useView"
|
|
15
16
|
|
|
16
17
|
/** A dropdown item: the context-menu item shape, kept under its old name. */
|
|
17
18
|
export type MenuItem = ContextMenuItemDef
|
|
@@ -35,6 +36,12 @@ const PANEL = `${POPOVER_PANEL} z-(--z-popover) min-w-44 p-1 outline-none`
|
|
|
35
36
|
function opened(open: boolean) {
|
|
36
37
|
if (open && props.rightClickToo) hints.use(HINT_SIGNALS.menuButton)
|
|
37
38
|
}
|
|
39
|
+
|
|
40
|
+
// Overlays open in the window this component renders in (an LpFrame's, inside one).
|
|
41
|
+
const portalTo = usePortalTarget()
|
|
42
|
+
// What happens in another document (the page around a frame, or a frame in
|
|
43
|
+
// the page) is not "outside" for this layer.
|
|
44
|
+
const guardOutside = useOutsideGuard()
|
|
38
45
|
</script>
|
|
39
46
|
|
|
40
47
|
<template>
|
|
@@ -42,8 +49,10 @@ function opened(open: boolean) {
|
|
|
42
49
|
<DropdownMenuTrigger as-child>
|
|
43
50
|
<slot name="trigger" />
|
|
44
51
|
</DropdownMenuTrigger>
|
|
45
|
-
<DropdownMenuPortal>
|
|
52
|
+
<DropdownMenuPortal :to="portalTo">
|
|
46
53
|
<DropdownMenuContent
|
|
54
|
+
@interact-outside="guardOutside"
|
|
55
|
+
@escape-key-down="guardOutside"
|
|
47
56
|
:collision-padding="8"
|
|
48
57
|
:side-offset="6"
|
|
49
58
|
align="end"
|
|
@@ -43,6 +43,7 @@ import { PopoverAnchor, PopoverContent, PopoverPortal, PopoverRoot } from "reka-
|
|
|
43
43
|
import DropzoneLinkField from "./DropzoneLinkField.vue"
|
|
44
44
|
import { POPOVER_PANEL } from "./dropdown"
|
|
45
45
|
import LpIcon from "./LpIcon.vue"
|
|
46
|
+
import { useOutsideGuard, usePortalTarget } from "../composables/useView"
|
|
46
47
|
|
|
47
48
|
const props = withDefaults(
|
|
48
49
|
defineProps<{
|
|
@@ -266,7 +267,9 @@ function onPaste(event: ClipboardEvent) {
|
|
|
266
267
|
* zone back. A click on the zone around the field also only closes it: the
|
|
267
268
|
* file dialog opening under a half-typed address would lose it.
|
|
268
269
|
*/
|
|
269
|
-
|
|
270
|
+
// Bindable (v-model:linking) so a page can open the field itself, a tour
|
|
271
|
+
// step or a demo showing that an address works too.
|
|
272
|
+
const linking = defineModel<boolean>("linking", { default: false })
|
|
270
273
|
const draft = ref("")
|
|
271
274
|
const invalid = ref(false)
|
|
272
275
|
const linkField = ref<InstanceType<typeof DropzoneLinkField> | null>(null)
|
|
@@ -280,14 +283,30 @@ const pressTarget = ref<HTMLButtonElement | null>(null)
|
|
|
280
283
|
// nothing below it moves when an address is being typed.
|
|
281
284
|
const heldHeight = ref<number | null>(null)
|
|
282
285
|
|
|
283
|
-
function
|
|
284
|
-
if (!props.links || props.disabled) return
|
|
286
|
+
function measure() {
|
|
285
287
|
const zone = revealAnchor.value as HTMLElement | null
|
|
286
288
|
floating.value = (zone?.offsetWidth ?? 0) < IN_PLACE_MIN
|
|
287
289
|
heldHeight.value = floating.value ? null : (zone?.offsetHeight ?? null)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Focus goes to the field only when the person opened it: one opened by the
|
|
293
|
+
// page must not pull focus away from wherever they are.
|
|
294
|
+
let byUser = false
|
|
295
|
+
function startLink() {
|
|
296
|
+
if (!props.links || props.disabled) return
|
|
297
|
+
byUser = true
|
|
298
|
+
measure()
|
|
288
299
|
linking.value = true
|
|
289
300
|
invalid.value = false
|
|
290
301
|
}
|
|
302
|
+
watch(
|
|
303
|
+
linking,
|
|
304
|
+
(open) => {
|
|
305
|
+
if (open && !byUser) measure()
|
|
306
|
+
if (!open) byUser = false
|
|
307
|
+
},
|
|
308
|
+
{ flush: "sync" },
|
|
309
|
+
)
|
|
291
310
|
|
|
292
311
|
// Released only once the zone's own content is back: between the field fading
|
|
293
312
|
// out and the content fading in the zone is empty, and without the hold it
|
|
@@ -299,7 +318,7 @@ function contentBack() {
|
|
|
299
318
|
// The field arrives only after the zone's content has faded out, later than
|
|
300
319
|
// the next tick, so it takes focus when it is actually there.
|
|
301
320
|
watch(linkField, (field) => {
|
|
302
|
-
if (field && linking.value) field.focus()
|
|
321
|
+
if (field && linking.value && byUser) field.focus()
|
|
303
322
|
})
|
|
304
323
|
|
|
305
324
|
function stopLink(refocus = true) {
|
|
@@ -410,6 +429,12 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
|
|
|
410
429
|
over.value ? "lp-dropzone--over" : "",
|
|
411
430
|
props.animate && !revealed.value ? "lp-dropzone--waiting" : "",
|
|
412
431
|
].join(" "))
|
|
432
|
+
|
|
433
|
+
// Overlays open in the window this component renders in (an LpFrame's, inside one).
|
|
434
|
+
const portalTo = usePortalTarget()
|
|
435
|
+
// What happens in another document (the page around a frame, or a frame in
|
|
436
|
+
// the page) is not "outside" for this layer.
|
|
437
|
+
const guardOutside = useOutsideGuard()
|
|
413
438
|
</script>
|
|
414
439
|
|
|
415
440
|
<template>
|
|
@@ -502,8 +527,10 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
|
|
|
502
527
|
keeps its picture and opens the field under itself instead. -->
|
|
503
528
|
<PopoverRoot :open="linking && floating" @update:open="(open: boolean) => !open && stopLink(false)">
|
|
504
529
|
<PopoverAnchor :reference="revealAnchor ?? undefined" />
|
|
505
|
-
<PopoverPortal>
|
|
530
|
+
<PopoverPortal :to="portalTo">
|
|
506
531
|
<PopoverContent
|
|
532
|
+
@interact-outside="guardOutside"
|
|
533
|
+
@escape-key-down="guardOutside"
|
|
507
534
|
:collision-padding="8"
|
|
508
535
|
side="bottom"
|
|
509
536
|
align="start"
|
|
@@ -558,7 +585,8 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
|
|
|
558
585
|
|
|
559
586
|
/* The dashes fade in and the block settles up a few pixels. */
|
|
560
587
|
.lp-dropzone {
|
|
561
|
-
|
|
588
|
+
--rise: 6px;
|
|
589
|
+
animation: rise-in var(--duration-slow) var(--ease-settle) both;
|
|
562
590
|
}
|
|
563
591
|
|
|
564
592
|
.lp-dropzone--waiting {
|
|
@@ -566,13 +594,6 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
|
|
|
566
594
|
animation: none;
|
|
567
595
|
}
|
|
568
596
|
|
|
569
|
-
@keyframes lp-dropzone-in {
|
|
570
|
-
from {
|
|
571
|
-
opacity: 0;
|
|
572
|
-
transform: translateY(6px);
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
|
|
576
597
|
@media (prefers-reduced-motion: reduce) {
|
|
577
598
|
.lp-dropzone,
|
|
578
599
|
.lp-dropzone--waiting {
|