@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
|
@@ -17,11 +17,12 @@ export default { inheritAttrs: false }
|
|
|
17
17
|
* hover per line.
|
|
18
18
|
*/
|
|
19
19
|
import { Motion } from "motion-v"
|
|
20
|
-
import { computed, ref, shallowRef, watch, onMounted
|
|
20
|
+
import { computed, ref, shallowRef, watch, onMounted } from "vue"
|
|
21
21
|
import { useLabels } from "../composables/useLpConfig"
|
|
22
22
|
import { easeTravel, prefersReducedMotion } from "../composables/easing"
|
|
23
23
|
import { usePillTransition } from "../composables/usePillTransition"
|
|
24
24
|
import { useReveal } from "../composables/useReveal"
|
|
25
|
+
import { lerp, mixValues, resample, useTween } from "../composables/useTween"
|
|
25
26
|
import {
|
|
26
27
|
areaPath,
|
|
27
28
|
axisTicks,
|
|
@@ -46,6 +47,8 @@ import {
|
|
|
46
47
|
type ChartSeries,
|
|
47
48
|
type ChartThreshold,
|
|
48
49
|
} from "./chart"
|
|
50
|
+
import { PANEL_SURFACE } from "./dropdown"
|
|
51
|
+
import LegendSwatch from "./LegendSwatch.vue"
|
|
49
52
|
import LpContextMenu, { type ContextMenuItemDef } from "./LpContextMenu.vue"
|
|
50
53
|
import LpEmptyState from "./LpEmptyState.vue"
|
|
51
54
|
import LpShift from "./LpShift.vue"
|
|
@@ -55,6 +58,7 @@ import { sampleValues, skeletonHeights, skeletonWave } from "./chartSkeleton"
|
|
|
55
58
|
import HintSampleTag from "./HintSampleTag.vue"
|
|
56
59
|
import { useSample } from "../composables/useSample"
|
|
57
60
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
61
|
+
import { useResizeObserver } from "../composables/useResizeObserver"
|
|
58
62
|
import { backgroundOf, downloadFile, fileStem, resolveCssColor, svgToPng, toCsv, type CsvOptions } from "./exportData"
|
|
59
63
|
|
|
60
64
|
export interface ChartText {
|
|
@@ -196,7 +200,6 @@ const emit = defineEmits<{
|
|
|
196
200
|
// simply have nothing to draw until the observer reports a real box.
|
|
197
201
|
const root = ref<HTMLElement | null>(null)
|
|
198
202
|
const width = ref(0)
|
|
199
|
-
let ro: ResizeObserver | null = null
|
|
200
203
|
|
|
201
204
|
/*
|
|
202
205
|
* The wipe waits for the chart to be scrolled to. A chart is tall, so it is the
|
|
@@ -216,21 +219,9 @@ onMounted(() => {
|
|
|
216
219
|
// wrapping the chart in a spare div just to carry a second ref.
|
|
217
220
|
revealAnchor.value = root.value
|
|
218
221
|
reduced.value = prefersReducedMotion()
|
|
219
|
-
if (!root.value || typeof ResizeObserver === "undefined") return
|
|
220
|
-
ro = new ResizeObserver(([entry]) => {
|
|
221
|
-
width.value = entry.contentRect.width
|
|
222
|
-
})
|
|
223
|
-
ro.observe(root.value)
|
|
224
|
-
width.value = root.value.clientWidth
|
|
225
222
|
})
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
ro?.disconnect()
|
|
229
|
-
ro = null
|
|
230
|
-
if (presenceFrame) cancelAnimationFrame(presenceFrame)
|
|
231
|
-
if (scaleFrame) cancelAnimationFrame(scaleFrame)
|
|
232
|
-
if (rightFrame) cancelAnimationFrame(rightFrame)
|
|
233
|
-
if (gutterFrame) cancelAnimationFrame(gutterFrame)
|
|
223
|
+
useResizeObserver(root, (entry, el) => (width.value = entry ? entry.contentRect.width : el.clientWidth), {
|
|
224
|
+
immediate: true,
|
|
234
225
|
})
|
|
235
226
|
|
|
236
227
|
// ── data ───────────────────────────────────────
|
|
@@ -282,11 +273,22 @@ const visible = computed(() => allSeries.value.filter((s) => !hidden.value.has(s
|
|
|
282
273
|
a control responding. */
|
|
283
274
|
const SETTLE_MS = 260
|
|
284
275
|
|
|
285
|
-
|
|
286
|
-
|
|
276
|
+
/*
|
|
277
|
+
* Every value the chart moves — presence, both axes, the gutters, the readings
|
|
278
|
+
* themselves — travels on this one clock, so a change reads as one gesture
|
|
279
|
+
* rather than as several things settling at their own pace. The curve is
|
|
280
|
+
* `--ease-travel`'s: an ease-out covers most of a big rescale (800 down to 40)
|
|
281
|
+
* in its first frames and then creeps, which looks like a snap with a slow
|
|
282
|
+
* tail rather than a scale moving.
|
|
283
|
+
*/
|
|
284
|
+
const settle = {
|
|
285
|
+
duration: SETTLE_MS,
|
|
286
|
+
ease: easeTravel,
|
|
287
|
+
enabled: () => props.animate,
|
|
288
|
+
}
|
|
287
289
|
|
|
288
290
|
/*
|
|
289
|
-
* A series with no entry
|
|
291
|
+
* A series with no entry is fully present, NOT "0 because it is hidden".
|
|
290
292
|
*
|
|
291
293
|
* Falling back to the hidden flag raced the animation it was meant to start:
|
|
292
294
|
* the computed that draws the curve and the watcher that animates it both run
|
|
@@ -294,43 +296,87 @@ let presenceFrame: number | undefined
|
|
|
294
296
|
* reported the end state — so a series being hidden jumped to the floor while
|
|
295
297
|
* one being shown eased up from it.
|
|
296
298
|
*/
|
|
299
|
+
const presenceTargets = computed(
|
|
300
|
+
() => new Map(allSeries.value.map((s) => [s.id, hidden.value.has(s.id) ? 0 : 1])),
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
const presence = useTween(
|
|
304
|
+
() => presenceTargets.value,
|
|
305
|
+
(from, to, t) => new Map([...to].map(([id, v]) => [id, lerp(from.get(id) ?? v, v, t)])),
|
|
306
|
+
{
|
|
307
|
+
...settle,
|
|
308
|
+
// `hidden` is replaced wholesale on every toggle, and the map is rebuilt on
|
|
309
|
+
// every data change; only a different set of levels is a change worth moving.
|
|
310
|
+
equal: (a, b) => a.size === b.size && [...b].every(([id, v]) => a.get(id) === v),
|
|
311
|
+
},
|
|
312
|
+
)
|
|
313
|
+
|
|
297
314
|
const presenceOf = (id: string) => presence.value.get(id) ?? 1
|
|
298
315
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
316
|
+
/*
|
|
317
|
+
* The readings as DRAWN: each series travelling from its last values to its
|
|
318
|
+
* new ones, so a refresh moves the curve rather than replacing it.
|
|
319
|
+
*
|
|
320
|
+
* Matched by name, not by `id`: the id carries the series' position, and a
|
|
321
|
+
* series dropped from the front would shift every other one onto a new id and
|
|
322
|
+
* make them all look new. A series that arrives grows up out of the baseline;
|
|
323
|
+
* one that is gone stays in the drawing, collapsing onto it, until the move
|
|
324
|
+
* ends. The axis is on the same clock (`settle`), so each frame is a
|
|
325
|
+
* consistent picture: readings partway, on a scale partway.
|
|
326
|
+
*
|
|
327
|
+
* Only what is drawn moves. Hover, the tooltip's figures, the legend and the
|
|
328
|
+
* exports read the data as it now is.
|
|
329
|
+
*/
|
|
330
|
+
type DrawnSeries = (typeof allSeries.value)[number] & {
|
|
331
|
+
key: string
|
|
332
|
+
/** 0 → 1 for a series arriving, 1 → 0 for one leaving; 1 otherwise. */
|
|
333
|
+
enter: number
|
|
334
|
+
}
|
|
312
335
|
|
|
313
|
-
|
|
314
|
-
|
|
336
|
+
const targetDrawn = computed<DrawnSeries[]>(() => {
|
|
337
|
+
const seen = new Map<string, number>()
|
|
338
|
+
return allSeries.value.map((s) => {
|
|
339
|
+
const n = seen.get(s.name) ?? 0
|
|
340
|
+
seen.set(s.name, n + 1)
|
|
341
|
+
return { ...s, key: `${s.name}#${n}`, enter: 1 }
|
|
342
|
+
})
|
|
343
|
+
})
|
|
315
344
|
|
|
316
|
-
|
|
317
|
-
|
|
345
|
+
const mixDrawn = (from: DrawnSeries[], to: DrawnSeries[], t: number): DrawnSeries[] => {
|
|
346
|
+
const before = new Map(from.map((s) => [s.key, s]))
|
|
347
|
+
const after = new Set(to.map((s) => s.key))
|
|
348
|
+
const out = to.map((s) => {
|
|
349
|
+
const was = before.get(s.key)
|
|
350
|
+
return was
|
|
351
|
+
? { ...s, values: mixValues(was.values, s.values, t), enter: lerp(was.enter, 1, t) }
|
|
352
|
+
: { ...s, enter: t }
|
|
353
|
+
})
|
|
354
|
+
// Laid on the new x positions too, or a leaving curve drawn with the old
|
|
355
|
+
// point count would stop short of (or run past) the plot while it collapses.
|
|
356
|
+
const points = count.value
|
|
357
|
+
for (const s of from)
|
|
358
|
+
if (!after.has(s.key))
|
|
359
|
+
out.push({ ...s, values: resample(s.values, points), enter: s.enter * (1 - t) })
|
|
360
|
+
return out
|
|
361
|
+
}
|
|
318
362
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
)
|
|
363
|
+
const drawnSeries = useTween(() => targetDrawn.value, mixDrawn, {
|
|
364
|
+
...settle,
|
|
365
|
+
/*
|
|
366
|
+
* Only a plot already on screen morphs. While the wipe is still to come, or
|
|
367
|
+
* while the placeholder stands in (no svg yet), the data that follows draws
|
|
368
|
+
* itself in on its own entrance — a morph from readings nobody saw would
|
|
369
|
+
* only muddy it.
|
|
370
|
+
*/
|
|
371
|
+
enabled: () => props.animate && revealed.value && !!svgEl.value,
|
|
372
|
+
})
|
|
373
|
+
|
|
374
|
+
/** The drawn copy of each current series, by id, for marks built from `visible`. */
|
|
375
|
+
const drawnById = computed(() => {
|
|
376
|
+
const out = new Map<string, DrawnSeries>()
|
|
377
|
+
for (const s of drawnSeries.value) if (!out.has(s.id)) out.set(s.id, s)
|
|
378
|
+
return out
|
|
379
|
+
})
|
|
334
380
|
|
|
335
381
|
const count = computed(() => pointCount(allSeries.value))
|
|
336
382
|
const labels = computed(() => resolveLabels(source.value, props.labels, count.value))
|
|
@@ -443,40 +489,21 @@ const targetScale = computed(() =>
|
|
|
443
489
|
* and `y2` on an SVG <line> never became CSS properties, so a gridline jumps
|
|
444
490
|
* while the curve eases, which is the two-beat effect this avoids.
|
|
445
491
|
*/
|
|
446
|
-
|
|
447
|
-
let scaleFrame: number | undefined
|
|
492
|
+
type Range = { min: number; max: number; step: number }
|
|
448
493
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
const tick = (now: number) => {
|
|
460
|
-
const t = Math.min(1, (now - start) / SETTLE_MS)
|
|
461
|
-
/* easeTravel, not easeOut: an ease-out covers most of the range in the first
|
|
462
|
-
frames, which on a big rescale (800 down to 40) looks like a snap with a
|
|
463
|
-
slow tail rather than a scale moving. */
|
|
464
|
-
const eased = easeTravel(t)
|
|
465
|
-
scale.value =
|
|
466
|
-
t < 1
|
|
467
|
-
? {
|
|
468
|
-
min: from.min + (to.min - from.min) * eased,
|
|
469
|
-
max: from.max + (to.max - from.max) * eased,
|
|
470
|
-
/* The step stays the target's: it decides how many ticks there are,
|
|
471
|
-
and a travelling one would add and drop labels mid-move. */
|
|
472
|
-
step: to.step,
|
|
473
|
-
}
|
|
474
|
-
: to
|
|
475
|
-
scaleFrame = t < 1 ? requestAnimationFrame(tick) : undefined
|
|
476
|
-
}
|
|
477
|
-
scaleFrame = requestAnimationFrame(tick)
|
|
494
|
+
const sameRange = (a: Range | null, b: Range | null) =>
|
|
495
|
+
a === b || (!!a && !!b && a.min === b.min && a.max === b.max && a.step === b.step)
|
|
496
|
+
|
|
497
|
+
const mixRange = (from: Range, to: Range, t: number): Range => ({
|
|
498
|
+
min: lerp(from.min, to.min, t),
|
|
499
|
+
max: lerp(from.max, to.max, t),
|
|
500
|
+
/* The step stays the target's: it decides how many ticks there are, and a
|
|
501
|
+
travelling one would add and drop labels mid-move. */
|
|
502
|
+
step: to.step,
|
|
478
503
|
})
|
|
479
504
|
|
|
505
|
+
const scale = useTween(() => targetScale.value, mixRange, { ...settle, equal: sameRange })
|
|
506
|
+
|
|
480
507
|
/*
|
|
481
508
|
* The right axis reuses the LEFT axis's tick COUNT so both sets of labels land
|
|
482
509
|
* on the same gridlines. Two independent tick runs would draw two interleaved
|
|
@@ -501,34 +528,12 @@ const targetRightScale = computed(() => {
|
|
|
501
528
|
|
|
502
529
|
// The right axis travels on the same clock as the left, or a series measured
|
|
503
530
|
// against it arrives before the one beside it.
|
|
504
|
-
const rightScale =
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
return
|
|
511
|
-
}
|
|
512
|
-
if (from.min === to.min && from.max === to.max && from.step === to.step) return
|
|
513
|
-
|
|
514
|
-
const start = performance.now()
|
|
515
|
-
if (rightFrame) cancelAnimationFrame(rightFrame)
|
|
516
|
-
|
|
517
|
-
const tick = (now: number) => {
|
|
518
|
-
const t = Math.min(1, (now - start) / SETTLE_MS)
|
|
519
|
-
const eased = easeTravel(t)
|
|
520
|
-
rightScale.value =
|
|
521
|
-
t < 1
|
|
522
|
-
? {
|
|
523
|
-
min: from.min + (to.min - from.min) * eased,
|
|
524
|
-
max: from.max + (to.max - from.max) * eased,
|
|
525
|
-
step: to.step,
|
|
526
|
-
}
|
|
527
|
-
: to
|
|
528
|
-
rightFrame = t < 1 ? requestAnimationFrame(tick) : undefined
|
|
529
|
-
}
|
|
530
|
-
rightFrame = requestAnimationFrame(tick)
|
|
531
|
-
})
|
|
531
|
+
const rightScale = useTween(
|
|
532
|
+
() => targetRightScale.value,
|
|
533
|
+
// An axis that appears or goes has no range to travel from or to.
|
|
534
|
+
(from, to, t) => (from && to ? mixRange(from, to, t) : to),
|
|
535
|
+
{ ...settle, equal: sameRange },
|
|
536
|
+
)
|
|
532
537
|
|
|
533
538
|
const fmtWith = (v: number, unit?: string, f?: (n: number) => string): string =>
|
|
534
539
|
`${f ? f(v) : formatTick(v)}${unit ?? ""}`
|
|
@@ -583,33 +588,11 @@ const targetGutters = computed(() => ({
|
|
|
583
588
|
right: props.showYAxis && rightLabels.value.length ? gutter(rightLabels.value) : 12,
|
|
584
589
|
}))
|
|
585
590
|
|
|
586
|
-
const gutters =
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
gutters.value = to
|
|
592
|
-
return
|
|
593
|
-
}
|
|
594
|
-
if (from.left === to.left && from.right === to.right) return
|
|
595
|
-
|
|
596
|
-
const start = performance.now()
|
|
597
|
-
if (gutterFrame) cancelAnimationFrame(gutterFrame)
|
|
598
|
-
|
|
599
|
-
const tick = (now: number) => {
|
|
600
|
-
const t = Math.min(1, (now - start) / SETTLE_MS)
|
|
601
|
-
const eased = easeTravel(t)
|
|
602
|
-
gutters.value =
|
|
603
|
-
t < 1
|
|
604
|
-
? {
|
|
605
|
-
left: from.left + (to.left - from.left) * eased,
|
|
606
|
-
right: from.right + (to.right - from.right) * eased,
|
|
607
|
-
}
|
|
608
|
-
: to
|
|
609
|
-
gutterFrame = t < 1 ? requestAnimationFrame(tick) : undefined
|
|
610
|
-
}
|
|
611
|
-
gutterFrame = requestAnimationFrame(tick)
|
|
612
|
-
})
|
|
591
|
+
const gutters = useTween(
|
|
592
|
+
() => targetGutters.value,
|
|
593
|
+
(from, to, t) => ({ left: lerp(from.left, to.left, t), right: lerp(from.right, to.right, t) }),
|
|
594
|
+
{ ...settle, equal: (a, b) => a.left === b.left && a.right === b.right },
|
|
595
|
+
)
|
|
613
596
|
|
|
614
597
|
const box = computed<Box>(() => ({
|
|
615
598
|
width: width.value,
|
|
@@ -705,9 +688,10 @@ const baseY = computed(() =>
|
|
|
705
688
|
* what "stop showing this one" should look like.
|
|
706
689
|
*/
|
|
707
690
|
const lines = computed(() =>
|
|
708
|
-
|
|
691
|
+
drawnSeries.value.map((s) => {
|
|
709
692
|
const g = geoOf(s)
|
|
710
|
-
|
|
693
|
+
// A series leaving the data collapses exactly as one being hidden does.
|
|
694
|
+
const p = presenceOf(s.id) * s.enter
|
|
711
695
|
// Values pulled toward the axis floor, so the curve flattens into it.
|
|
712
696
|
const base = Math.min(Math.max(0, g.min), g.max)
|
|
713
697
|
const values = p === 1 ? s.values : s.values.map((v) => (v == null ? null : base + (v - base) * p))
|
|
@@ -755,9 +739,13 @@ const bars = computed(() => {
|
|
|
755
739
|
const negTop = new Array(count.value).fill(0)
|
|
756
740
|
|
|
757
741
|
visible.value.forEach((s, si) => {
|
|
742
|
+
// Heights from the drawn copy, so bars grow and shrink to their new values;
|
|
743
|
+
// a series just arriving rises from the baseline.
|
|
744
|
+
const drawn = drawnById.value.get(s.id)
|
|
758
745
|
for (let i = 0; i < count.value; i++) {
|
|
759
|
-
const
|
|
760
|
-
if (
|
|
746
|
+
const raw = drawn ? drawn.values[i] : s.values[i]
|
|
747
|
+
if (raw == null) continue
|
|
748
|
+
const v = raw * (drawn?.enter ?? 1)
|
|
761
749
|
const centre = xAt(i, count.value, box.value, true)
|
|
762
750
|
const x = props.stacked ? centre - inner / 2 : centre - inner / 2 + si * slot
|
|
763
751
|
let y: number
|
|
@@ -894,12 +882,14 @@ const activePoints = computed(() => {
|
|
|
894
882
|
.filter((r): r is { s: (typeof visible.value)[number]; v: number } => r.v != null)
|
|
895
883
|
.map(({ s, v }) => {
|
|
896
884
|
const sc = scaleOf(s)
|
|
885
|
+
// The dot rides the curve as drawn; the figure is the reading itself.
|
|
886
|
+
const at = drawnById.value.get(s.id)?.values[active.value] ?? v
|
|
897
887
|
return {
|
|
898
888
|
color: s.color,
|
|
899
889
|
id: s.id,
|
|
900
890
|
name: s.name,
|
|
901
891
|
value: v,
|
|
902
|
-
y: yAt(
|
|
892
|
+
y: yAt(at, sc.min, sc.max, box.value),
|
|
903
893
|
}
|
|
904
894
|
})
|
|
905
895
|
})
|
|
@@ -948,13 +938,14 @@ const tooltipTarget = computed(() => {
|
|
|
948
938
|
const floatTransition = usePillTransition("float")
|
|
949
939
|
|
|
950
940
|
// ── animation ──────────────────────────────────
|
|
951
|
-
// One clip rect wipes across the plot; re-keyed
|
|
952
|
-
//
|
|
941
|
+
// One clip rect wipes across the plot; re-keyed when the chart changes KIND so
|
|
942
|
+
// a line turned into bars is drawn in afresh rather than snapping.
|
|
953
943
|
const revealKey = shallowRef(0)
|
|
954
|
-
/*
|
|
955
|
-
|
|
944
|
+
/* Only the type: new values, a new point count and series coming or going all
|
|
945
|
+
morph (see `drawnSeries`), and a polled dashboard refreshing its numbers
|
|
946
|
+
must not re-wipe on every tick. */
|
|
956
947
|
watch(
|
|
957
|
-
() =>
|
|
948
|
+
() => props.type,
|
|
958
949
|
() => {
|
|
959
950
|
revealKey.value++
|
|
960
951
|
},
|
|
@@ -1179,10 +1170,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
1179
1170
|
:aria-pressed="!hidden.has(s.id)"
|
|
1180
1171
|
@click="toggleSeries(s.id)"
|
|
1181
1172
|
>
|
|
1182
|
-
<
|
|
1183
|
-
class="size-2 shrink-0 rounded-full transition-transform duration-fast group-hover:scale-125"
|
|
1184
|
-
:style="{ backgroundColor: s.color }"
|
|
1185
|
-
/>
|
|
1173
|
+
<LegendSwatch :color="s.color" />
|
|
1186
1174
|
<span class="text-muted-strong group-hover:text-ink">{{ s.name }}</span>
|
|
1187
1175
|
<span
|
|
1188
1176
|
v-if="hasRightAxis && s.axis === 'right'"
|
|
@@ -1296,7 +1284,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
1296
1284
|
<linearGradient
|
|
1297
1285
|
v-for="(s, i) in lines"
|
|
1298
1286
|
:id="gradientId(s.name, i)"
|
|
1299
|
-
:key="s.
|
|
1287
|
+
:key="s.key"
|
|
1300
1288
|
x1="0"
|
|
1301
1289
|
y1="0"
|
|
1302
1290
|
x2="0"
|
|
@@ -1415,7 +1403,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
1415
1403
|
/>
|
|
1416
1404
|
|
|
1417
1405
|
<!-- one group per series, so hiding one drops only that curve -->
|
|
1418
|
-
<g v-for="(s, i) in lines" :key="`s-${s.
|
|
1406
|
+
<g v-for="(s, i) in lines" :key="`s-${s.key}`" :style="{ opacity: s.alpha }">
|
|
1419
1407
|
<path
|
|
1420
1408
|
v-show="type === 'area'"
|
|
1421
1409
|
:d="s.fill"
|
|
@@ -1531,7 +1519,8 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
1531
1519
|
<Motion
|
|
1532
1520
|
v-if="active >= 0 && ready"
|
|
1533
1521
|
as="div"
|
|
1534
|
-
class="pointer-events-none absolute left-0 top-0 z-(--z-tooltip) min-w-32
|
|
1522
|
+
class="pointer-events-none absolute left-0 top-0 z-(--z-tooltip) min-w-32 px-2.5 py-2 group-data-[state=open]/plot:hidden"
|
|
1523
|
+
:class="PANEL_SURFACE"
|
|
1535
1524
|
:initial="{ opacity: 0, scale: 0.96 }"
|
|
1536
1525
|
:animate="{
|
|
1537
1526
|
opacity: 1,
|
|
@@ -9,6 +9,7 @@ export default { inheritAttrs: false }
|
|
|
9
9
|
import { CheckboxIndicator, CheckboxRoot } from "reka-ui"
|
|
10
10
|
import { computed, useId } from "vue"
|
|
11
11
|
import LpIcon from "./LpIcon.vue"
|
|
12
|
+
import LpLoader from "./LpLoader.vue"
|
|
12
13
|
import { useFieldControl } from "../composables/useField"
|
|
13
14
|
import { useOptimisticToggle } from "../composables/useOptimisticToggle"
|
|
14
15
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
@@ -73,6 +74,7 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() =>
|
|
|
73
74
|
:name="name"
|
|
74
75
|
:model-value="indeterminate ? 'indeterminate' : modelValue"
|
|
75
76
|
:disabled="field.disabled"
|
|
77
|
+
:required="field.required"
|
|
76
78
|
:aria-describedby="describedBy"
|
|
77
79
|
:aria-busy="pending || undefined"
|
|
78
80
|
:class="description ? 'mt-px' : ''"
|
|
@@ -84,11 +86,15 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(() =>
|
|
|
84
86
|
>
|
|
85
87
|
<LpIcon :name="indeterminate ? 'lucide:minus' : 'lucide:check'" :size="13" :class="pending && 'opacity-0'" />
|
|
86
88
|
</CheckboxIndicator>
|
|
87
|
-
|
|
89
|
+
<!-- At once, since the check already gave way to it, and hidden from
|
|
90
|
+
screen readers: the box says aria-busy, and a "Loading…" inside it
|
|
91
|
+
would become part of its name. -->
|
|
92
|
+
<LpLoader
|
|
88
93
|
v-if="pending"
|
|
89
|
-
|
|
90
|
-
:
|
|
91
|
-
|
|
94
|
+
size="inline"
|
|
95
|
+
:delay="0"
|
|
96
|
+
aria-hidden="true"
|
|
97
|
+
class="absolute text-[12px]"
|
|
92
98
|
:class="modelValue ? 'text-ink-inverse' : 'text-muted'"
|
|
93
99
|
/>
|
|
94
100
|
</CheckboxRoot>
|
|
@@ -23,9 +23,9 @@ export default { inheritAttrs: false }
|
|
|
23
23
|
* set `region:open` (e.g. `// #region label open`) to start expanded.
|
|
24
24
|
*/
|
|
25
25
|
import { computed, reactive, ref, watch } from "vue"
|
|
26
|
-
import { useClipboard } from "../composables/useClipboard"
|
|
27
26
|
import { type CodeLang, tokenizeLines } from "./codeHighlight"
|
|
28
27
|
import { useLabels } from "../composables/useLpConfig"
|
|
28
|
+
import LpCopyButton from "./LpCopyButton.vue"
|
|
29
29
|
import LpIcon from "./LpIcon.vue"
|
|
30
30
|
import { useMergedAttrs } from "../composables/useMergedClass"
|
|
31
31
|
|
|
@@ -206,12 +206,6 @@ const showHeader = computed(
|
|
|
206
206
|
() => Boolean(props.title || props.lang !== "plain" || props.copyable || props.lockToggle),
|
|
207
207
|
)
|
|
208
208
|
|
|
209
|
-
// ── copy ─────────────────────────────────────────────────────
|
|
210
|
-
// The tick on the button is the whole confirmation here, so no toast: the
|
|
211
|
-
// header is right next to the pointer that just clicked it.
|
|
212
|
-
const { copied, copy: writeClipboard } = useClipboard()
|
|
213
|
-
const copy = () => writeClipboard(copyText.value)
|
|
214
|
-
|
|
215
209
|
function toggleLock() {
|
|
216
210
|
emit("update:locked", !props.locked)
|
|
217
211
|
}
|
|
@@ -253,19 +247,17 @@ const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
|
253
247
|
class="transition-transform duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active/lock:scale-90"
|
|
254
248
|
/>
|
|
255
249
|
</button>
|
|
256
|
-
|
|
250
|
+
<!-- The kit's copy button, trimmed to the header's compact row (the
|
|
251
|
+
lock toggle's box beside it). Its tick is the whole confirmation,
|
|
252
|
+
so no toast: the header is right under the pointer that clicked. -->
|
|
253
|
+
<LpCopyButton
|
|
257
254
|
v-if="copyable"
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
:name="copied ? 'lucide:check' : 'lucide:copy'"
|
|
265
|
-
:size="13"
|
|
266
|
-
:class="copied ? 'text-action' : ''"
|
|
267
|
-
/>
|
|
268
|
-
</button>
|
|
255
|
+
:value="copyText"
|
|
256
|
+
size="xs"
|
|
257
|
+
variant="muted"
|
|
258
|
+
class="size-auto aspect-auto rounded-small px-1.5 py-1 font-normal hover:bg-transparent"
|
|
259
|
+
:labels="{ copy: text.copy, copied: text.copied }"
|
|
260
|
+
/>
|
|
269
261
|
</div>
|
|
270
262
|
</div>
|
|
271
263
|
|