@leavepulse/ui 0.43.3 → 0.44.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 +75 -7
- package/dist/assets/{LpCommandPalette-DH7sPcKP.css → LpCommandPalette-DCP5g2ik.css} +21 -21
- package/dist/assets/{LpDropzone-BBoWvi-J.css → LpDropzone-i4BdMi1H.css} +12 -12
- package/dist/assets/{LpImageEditor-Ct7Y3aNu.css → LpImageEditor-CbMA82g8.css} +6 -6
- package/dist/assets/{LpShortcutsDialog-C6YoQ8_M.css → LpShortcutsDialog-ChUyU7oV.css} +7 -7
- package/dist/assets/{LpSkeleton-D7xU8IPV.css → LpSkeleton-H3Z5dEIk.css} +4 -1
- package/dist/assets/{LpTable-BgPLJOXa.css → LpTable-DDQNdf86.css} +9 -9
- package/dist/chunks/ContextMenuItems-CrfeNPWT.js +123 -0
- package/dist/chunks/{LayoutCanvas-Dd20boUG.js → LayoutCanvas-D-jPOAvg.js} +26 -9
- package/dist/chunks/{LayoutNode-DGpZA9LX.js → LayoutNode-D8Xy9N-o.js} +20 -8
- package/dist/chunks/{LpActionBar-BlvtGB2P.js → LpActionBar-BbwCF6l5.js} +24 -10
- package/dist/chunks/{LpAddressInput-B-Zvxsn7.js → LpAddressInput-BrOqkZqg.js} +53 -48
- package/dist/chunks/{LpAlert-BAYHDSS1.js → LpAlert-DkOIjsbq.js} +15 -8
- package/dist/chunks/{LpAppShell-BGQVIY-3.js → LpAppShell-BUKPcHco.js} +51 -24
- package/dist/chunks/{LpAutocomplete-DExlIZe_.js → LpAutocomplete-DxV3Y9h4.js} +50 -23
- package/dist/chunks/{LpAvatar-B3-xAOH3.js → LpAvatar-ClBbEYZN.js} +17 -8
- package/dist/chunks/LpBreadcrumbs-B8IJgFIc.js +95 -0
- package/dist/chunks/{LpButton-5VXXCjwF.js → LpButton-kqJBHIIb.js} +44 -14
- package/dist/chunks/{LpCard-BhI1N_vL.js → LpCard-CpRByR0q.js} +1 -1
- package/dist/chunks/{LpCheckbox-CVccKYaH.js → LpCheckbox-DpqchzH4.js} +7 -3
- package/dist/chunks/{LpCodeBlock-Bo0B4TFR.js → LpCodeBlock-DeHJPq7p.js} +48 -16
- package/dist/chunks/{LpColorPicker-BlXea7LM.js → LpColorPicker-Bhf1qxhB.js} +32 -9
- package/dist/chunks/{LpConfirmDialog-Q-bxff8z.js → LpConfirmDialog-CIUOSnWo.js} +58 -16
- package/dist/chunks/LpConfirmHost-CDm0Wtpv.js +49 -0
- package/dist/chunks/LpContextMenu-DQw5dGfG.js +68 -0
- package/dist/chunks/LpDatePicker-Drirx1AK.js +191 -0
- package/dist/chunks/{LpDrawer-BZ6k3hvo.js → LpDrawer-bScx-KMO.js} +63 -26
- package/dist/chunks/{LpFileTree-_5vFBgaK.js → LpFileTree-CSI_5SK2.js} +23 -8
- package/dist/chunks/{LpFileTreeNode-BdcIYKIE.js → LpFileTreeNode-B4MiSQX2.js} +2 -2
- package/dist/chunks/LpFormField-CIk5qosh.js +87 -0
- package/dist/chunks/{LpInput-9EXWUM9B.js → LpInput-C0e8y8_d.js} +26 -11
- package/dist/chunks/{LpLightbox-2sYVMY-S.js → LpLightbox-Mr0W_6HK.js} +147 -60
- package/dist/chunks/{LpLink-DCND-zyu.js → LpLink-Krkjhe_y.js} +15 -6
- package/dist/chunks/{LpLogViewer-CaRy5MeS.js → LpLogViewer-YBOaFnc_.js} +68 -34
- package/dist/chunks/{LpMapPicker-ul4oYno6.js → LpMapPicker-NUzS9e37.js} +38 -13
- package/dist/chunks/{LpMediaGallery-FF-NquIo.js → LpMediaGallery-DfJmMW0I.js} +6 -3
- package/dist/chunks/{LpModal-Bt0pQCI_.js → LpModal-DPwGKBPv.js} +49 -26
- package/dist/chunks/{LpModalNav-YaifHrXC.js → LpModalNav-DPg5H9f3.js} +9 -6
- package/dist/chunks/{LpNotificationBell-DyGGsMAM.js → LpNotificationBell-t5yn-siX.js} +58 -24
- package/dist/chunks/{LpNumberField-CWuX08iX.js → LpNumberField-DWnQKktS.js} +20 -7
- package/dist/chunks/{LpNumberFlow-amWYaeuA.js → LpNumberFlow-z4WPZcZu.js} +22 -12
- package/dist/chunks/{LpOtpInput-y2v-pmiN.js → LpOtpInput-CziPF3Oq.js} +37 -8
- package/dist/chunks/{LpPagination-5FxjmmB5.js → LpPagination-DFngX7Xo.js} +30 -19
- package/dist/chunks/{LpPasswordInput--sjYCkLS.js → LpPasswordInput-CWVDuBJ5.js} +10 -7
- package/dist/chunks/{LpPhoneInput-BDSKVl_z.js → LpPhoneInput-CD-ZTeSd.js} +57 -33
- package/dist/chunks/{LpPie-D6OnzwlJ.js → LpPie-BLco31Nx.js} +78 -21
- package/dist/chunks/{LpPopover-8268UmlC.js → LpPopover-p_e_shN3.js} +4 -2
- package/dist/chunks/{LpProgress-Btq5W4Ut.js → LpProgress-CBU1iI69.js} +5 -4
- package/dist/chunks/{LpRadioGroup-xPIuVDO_.js → LpRadioGroup-DmEW0l78.js} +9 -2
- package/dist/chunks/{LpSegmented-fV0Sk92p.js → LpSegmented-Dejd7cIx.js} +7 -3
- package/dist/chunks/{LpSelect-ANIVtrpM.js → LpSelect-DrRD9I7L.js} +40 -18
- package/dist/chunks/{LpSidebar-ClBUwoEz.js → LpSidebar-BgwUNWpJ.js} +30 -22
- package/dist/chunks/{LpSidebarNav-llOcs_Fn.js → LpSidebarNav-Bqxz8aWT.js} +14 -9
- package/dist/chunks/{LpSkeleton-CTI-vBgW.js → LpSkeleton-BB6XIV-w.js} +1 -1
- package/dist/chunks/{LpSlider-BwNIBkAK.js → LpSlider-Cuzmrd7p.js} +7 -2
- package/dist/chunks/{LpSparkline-C6xQ2dwv.js → LpSparkline-CB80N8SJ.js} +11 -4
- package/dist/chunks/{LpStat-CQaW8R--.js → LpStat-dXtyrdX9.js} +1 -1
- package/dist/chunks/{LpSwitch-Blizvqyt.js → LpSwitch-B1aLKulj.js} +40 -26
- package/dist/chunks/{LpTableOfContents-CjvxPMpU.js → LpTableOfContents-BUcAfGPQ.js} +36 -41
- package/dist/chunks/{LpTabs-Cefe_lys.js → LpTabs-_qMVaZJ6.js} +19 -5
- package/dist/chunks/LpTextarea-yP8hGedR.js +77 -0
- package/dist/chunks/LpThemeProvider-Wjm7Tuit.js +35 -0
- package/dist/chunks/LpThemeSwitcher-CKLc10KZ.js +169 -0
- package/dist/chunks/{LpTilt-DuyKbpkA.js → LpTilt-B7KHX1zH.js} +2 -2
- package/dist/chunks/{LpTimeField-K6nAGboX.js → LpTimeField-C5HRgS5H.js} +13 -7
- package/dist/chunks/{LpToaster-gDB1EaU3.js → LpToaster--oT6lfhL.js} +57 -28
- package/dist/chunks/{LpTooltip-hCLPAqMG.js → LpTooltip-CBdzeKNf.js} +13 -6
- package/dist/chunks/LpTooltipProvider-CftjV7Xc.js +25 -0
- package/dist/chunks/{LpTopologyCanvas-Cm1L39uL.js → LpTopologyCanvas-DocsLal3.js} +6 -1
- package/dist/chunks/{LpUptimeBar-DvAMno0S.js → LpUptimeBar-DLtxOMRy.js} +43 -14
- package/dist/chunks/{LpThemeSwitcher-Cue-myST.js → useTheme-C8JHUlPM.js} +173 -215
- package/dist/component-names.d.ts +1 -1
- package/dist/components/ContextMenuItems.vue.d.ts +8 -0
- package/dist/components/ContextMenuItems.vue.js +4 -0
- package/dist/components/LayoutCanvas.vue.js +1 -1
- package/dist/components/LayoutNode.vue.d.ts +4 -0
- package/dist/components/LayoutNode.vue.js +1 -1
- package/dist/components/LpActionBar.vue.d.ts +3 -0
- package/dist/components/LpActionBar.vue.js +1 -1
- package/dist/components/LpAddressInput.vue.d.ts +1 -1
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.d.ts +9 -0
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +10 -0
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAutocomplete.vue.d.ts +31 -6
- package/dist/components/LpAutocomplete.vue.js +1 -1
- package/dist/components/LpAvatar.vue.d.ts +3 -3
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBadge.vue.d.ts +2 -2
- package/dist/components/LpBreadcrumbs.vue.d.ts +13 -9
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +35 -98
- package/dist/components/LpButton.vue.js +1 -1
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.d.ts +31 -2
- package/dist/components/LpChart.vue.js +317 -95
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.d.ts +2 -0
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.d.ts +8 -10
- package/dist/components/LpCommandPalette.vue.js +88 -78
- package/dist/components/LpConfirmDialog.vue.d.ts +15 -3
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpConfirmHost.vue.d.ts +9 -0
- package/dist/components/LpConfirmHost.vue.js +4 -0
- package/dist/components/LpContextMenu.vue.d.ts +3 -5
- package/dist/components/LpContextMenu.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.d.ts +24 -6
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDrawer.vue.d.ts +10 -0
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropzone.vue.js +22 -6
- package/dist/components/LpFileTree.vue.d.ts +11 -2
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.d.ts +9 -0
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.js +92 -57
- package/dist/components/LpInput.vue.d.ts +3 -3
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpLightbox.vue.d.ts +17 -0
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLink.vue.d.ts +11 -11
- package/dist/components/LpLink.vue.js +1 -1
- package/dist/components/LpLogViewer.vue.d.ts +20 -2
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.d.ts +4 -4
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.d.ts +16 -6
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.d.ts +0 -1
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.d.ts +11 -2
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.d.ts +2 -0
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpNumberFlow.vue.js +1 -1
- package/dist/components/LpOtpInput.vue.js +1 -1
- package/dist/components/LpPagination.vue.d.ts +2 -0
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.d.ts +21 -2
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPopover.vue.d.ts +2 -0
- package/dist/components/LpPopover.vue.js +1 -1
- package/dist/components/LpProgress.vue.js +1 -1
- package/dist/components/LpRadioGroup.vue.js +1 -1
- package/dist/components/LpSection.vue.d.ts +1 -1
- package/dist/components/LpSegmented.vue.d.ts +5 -0
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSelect.vue.d.ts +1 -0
- package/dist/components/LpSelect.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.d.ts +1 -1
- package/dist/components/LpShortcutsDialog.vue.js +11 -8
- package/dist/components/LpSidebar.vue.d.ts +6 -2
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSkeleton.vue.js +1 -1
- package/dist/components/LpSlider.vue.js +1 -1
- package/dist/components/LpSparkline.vue.d.ts +1 -0
- package/dist/components/LpSparkline.vue.js +1 -1
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTable.vue.d.ts +23 -1
- package/dist/components/LpTable.vue.js +74 -36
- package/dist/components/LpTableOfContents.vue.d.ts +4 -2
- package/dist/components/LpTableOfContents.vue.js +1 -1
- package/dist/components/LpTabs.vue.d.ts +2 -0
- package/dist/components/LpTabs.vue.js +1 -1
- package/dist/components/LpTextarea.vue.d.ts +19 -6
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.d.ts +22 -0
- package/dist/components/LpThemeProvider.vue.js +4 -0
- package/dist/components/LpThemeSwitcher.vue.d.ts +13 -0
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTilt.vue.js +1 -1
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.d.ts +6 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTooltip.vue.d.ts +1 -2
- package/dist/components/LpTooltip.vue.js +1 -1
- package/dist/components/LpTooltipProvider.vue.d.ts +22 -0
- package/dist/components/LpTooltipProvider.vue.js +4 -0
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpUptimeBar.vue.d.ts +4 -0
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/chart.d.ts +32 -1
- package/dist/components/chart.js +39 -4
- package/dist/components/codeHighlight.d.ts +6 -0
- package/dist/components/codeHighlight.js +92 -20
- package/dist/components/color.d.ts +1 -1
- package/dist/components/color.js +20 -9
- package/dist/components/commandSearch.d.ts +0 -1
- package/dist/components/commandSearch.js +1 -17
- package/dist/components/confirm.d.ts +25 -0
- package/dist/components/confirm.js +26 -0
- package/dist/components/countries.d.ts +6 -0
- package/dist/components/countries.js +7 -0
- package/dist/components/fileTree.js +16 -7
- package/dist/components/imageCrop.d.ts +42 -0
- package/dist/components/imageCrop.js +47 -0
- package/dist/components/link.d.ts +12 -0
- package/dist/components/link.js +19 -0
- package/dist/components/modalDepth.d.ts +18 -2
- package/dist/components/modalDepth.js +17 -5
- package/dist/components/otp.d.ts +5 -0
- package/dist/components/otp.js +10 -0
- package/dist/components/sidebar.d.ts +7 -1
- package/dist/components/tableSort.d.ts +8 -0
- package/dist/components/tableSort.js +31 -0
- package/dist/composables/useField.d.ts +34 -0
- package/dist/composables/useField.js +45 -0
- package/dist/composables/useFormDraft.d.ts +10 -3
- package/dist/composables/useFormDraft.js +9 -14
- package/dist/composables/useHotkeys.d.ts +17 -1
- package/dist/composables/useHotkeys.js +55 -18
- package/dist/composables/useInputFilter.d.ts +17 -0
- package/dist/composables/useInputFilter.js +47 -10
- package/dist/composables/useLpConfig.d.ts +24 -0
- package/dist/composables/useLpConfig.js +44 -0
- package/dist/composables/useRovingFocus.js +7 -0
- package/dist/composables/useTilt.d.ts +2 -2
- package/dist/composables/useTilt.js +5 -6
- package/dist/composables/useToast.d.ts +20 -0
- package/dist/composables/useToast.js +28 -4
- package/dist/composables/useZoomPan.d.ts +3 -3
- package/dist/composables/useZoomPan.js +4 -4
- package/dist/index.d.ts +33 -3
- package/dist/index.js +185 -139
- package/dist/layout/tree.d.ts +2 -0
- package/dist/layout/tree.js +16 -1
- package/dist/layout/useLayout.d.ts +15 -0
- package/dist/layout/useLayout.js +41 -14
- package/dist/theme/useTheme.d.ts +32 -9
- package/package.json +8 -7
- package/src/component-names.ts +5 -7
- package/src/components/ContextMenuItems.vue +88 -0
- package/src/components/LayoutCanvas.vue +26 -6
- package/src/components/LayoutNode.vue +19 -2
- package/src/components/LpActionBar.vue +30 -7
- package/src/components/LpAddressInput.vue +57 -41
- package/src/components/LpAlert.vue +16 -3
- package/src/components/LpAppShell.vue +45 -12
- package/src/components/LpAutocomplete.vue +46 -10
- package/src/components/LpAvatar.vue +19 -5
- package/src/components/LpBreadcrumbs.vue +65 -41
- package/src/components/LpButton.vue +59 -13
- package/src/components/LpChart.vue +272 -28
- package/src/components/LpCheckbox.vue +7 -3
- package/src/components/LpCodeBlock.vue +50 -14
- package/src/components/LpColorPicker.vue +39 -9
- package/src/components/LpCommandPalette.vue +36 -25
- package/src/components/LpConfirmDialog.vue +68 -17
- package/src/components/LpConfirmHost.vue +59 -0
- package/src/components/LpContextMenu.vue +14 -115
- package/src/components/LpDatePicker.vue +99 -68
- package/src/components/LpDrawer.vue +56 -19
- package/src/components/LpDropzone.vue +21 -4
- package/src/components/LpFileTree.vue +33 -7
- package/src/components/LpFormField.vue +30 -7
- package/src/components/LpImageEditor.vue +96 -57
- package/src/components/LpInput.vue +18 -7
- package/src/components/LpLightbox.vue +140 -29
- package/src/components/LpLink.vue +24 -13
- package/src/components/LpLogViewer.vue +86 -17
- package/src/components/LpMapPicker.vue +36 -13
- package/src/components/LpMediaGallery.vue +8 -2
- package/src/components/LpModal.vue +53 -27
- package/src/components/LpModalNav.vue +5 -2
- package/src/components/LpNotificationBell.vue +63 -17
- package/src/components/LpNumberField.vue +21 -6
- package/src/components/LpNumberFlow.vue +26 -10
- package/src/components/LpOtpInput.vue +43 -8
- package/src/components/LpPagination.vue +23 -7
- package/src/components/LpPasswordInput.vue +4 -1
- package/src/components/LpPhoneInput.vue +53 -27
- package/src/components/LpPie.vue +94 -15
- package/src/components/LpPopover.vue +3 -0
- package/src/components/LpProgress.vue +5 -3
- package/src/components/LpRadioGroup.vue +9 -2
- package/src/components/LpSegmented.vue +12 -2
- package/src/components/LpSelect.vue +0 -0
- package/src/components/LpShortcutsDialog.vue +8 -3
- package/src/components/LpSidebar.vue +14 -9
- package/src/components/LpSidebarNav.vue +17 -5
- package/src/components/LpSkeleton.vue +4 -1
- package/src/components/LpSlider.vue +7 -1
- package/src/components/LpSparkline.vue +11 -3
- package/src/components/LpSwitch.vue +30 -7
- package/src/components/LpTable.vue +91 -32
- package/src/components/LpTableOfContents.vue +50 -32
- package/src/components/LpTabs.vue +23 -6
- package/src/components/LpTextarea.vue +44 -6
- package/src/components/LpThemeProvider.vue +41 -0
- package/src/components/LpThemeSwitcher.vue +64 -17
- package/src/components/LpTilt.vue +2 -2
- package/src/components/LpTimeField.vue +14 -3
- package/src/components/LpToaster.vue +66 -26
- package/src/components/LpTooltip.vue +22 -5
- package/src/components/LpTooltipProvider.vue +24 -0
- package/src/components/LpTopologyCanvas.vue +12 -1
- package/src/components/LpUptimeBar.vue +46 -8
- package/src/components/chart.ts +77 -5
- package/src/components/codeHighlight.ts +111 -15
- package/src/components/color.ts +30 -9
- package/src/components/commandSearch.ts +0 -17
- package/src/components/confirm.ts +58 -0
- package/src/components/countries.ts +12 -0
- package/src/components/fileTree.ts +19 -7
- package/src/components/imageCrop.ts +107 -0
- package/src/components/link.ts +34 -0
- package/src/components/modalDepth.ts +48 -6
- package/src/components/otp.ts +16 -0
- package/src/components/sidebar.ts +7 -1
- package/src/components/tableSort.ts +37 -0
- package/src/composables/useField.ts +79 -0
- package/src/composables/useFormDraft.ts +25 -20
- package/src/composables/useHotkeys.ts +89 -18
- package/src/composables/useInputFilter.ts +77 -14
- package/src/composables/useLpConfig.ts +87 -0
- package/src/composables/useRovingFocus.ts +11 -0
- package/src/composables/useTilt.ts +5 -6
- package/src/composables/useToast.ts +56 -4
- package/src/composables/useZoomPan.ts +6 -6
- package/src/index.ts +38 -3
- package/src/layout/tree.ts +30 -0
- package/src/layout/useLayout.ts +68 -18
- package/src/nuxt.ts +59 -17
- package/src/runtime/config.plugin.ts +14 -0
- package/src/runtime/theme.plugin.ts +42 -22
- package/src/theme/useTheme.ts +206 -100
- package/dist/chunks/LpBreadcrumbs-p4jHe_V-.js +0 -62
- package/dist/chunks/LpContextMenu-CwW1QXe_.js +0 -217
- package/dist/chunks/LpDatePicker-CwOToxGq.js +0 -164
- package/dist/chunks/LpFormField-CazBc2-a.js +0 -62
- package/dist/chunks/LpTextarea-t7F6gv8E.js +0 -47
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, openBlock, createBlock, withCtx, createVNode, unref, mergeProps, createCommentVNode, createTextVNode, toDisplayString } from "vue";
|
|
2
2
|
import { AvatarRoot, AvatarImage, AvatarFallback } from "reka-ui";
|
|
3
3
|
import { tv } from "tailwind-variants";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-DQw5dGfG.js";
|
|
5
|
+
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
5
6
|
const __default__ = { inheritAttrs: false };
|
|
6
7
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
7
8
|
...__default__,
|
|
@@ -46,8 +47,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
46
47
|
fontSize: `${Math.max(10, Math.round(props.pixelSize * 0.4))}px`
|
|
47
48
|
} : void 0
|
|
48
49
|
);
|
|
49
|
-
const initials = computed(
|
|
50
|
-
(
|
|
50
|
+
const initials = computed(() => {
|
|
51
|
+
if (props.fallback) return props.fallback;
|
|
52
|
+
const words = (props.alt ?? "").trim().split(/\s+/).filter(Boolean);
|
|
53
|
+
if (!words.length) return "?";
|
|
54
|
+
const first = Array.from(words[0]);
|
|
55
|
+
const letters = words.length > 1 ? [first[0], Array.from(words[words.length - 1])[0]] : first.slice(0, 2);
|
|
56
|
+
return letters.join("").toUpperCase();
|
|
57
|
+
});
|
|
58
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
59
|
+
() => avatar({ size: props.pixelSize ? void 0 : props.size, shape: props.shape, ring: props.ring })
|
|
51
60
|
);
|
|
52
61
|
const mounted = ref(false);
|
|
53
62
|
onMounted(() => {
|
|
@@ -60,9 +69,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
60
69
|
}, {
|
|
61
70
|
default: withCtx(() => [
|
|
62
71
|
createVNode(unref(AvatarRoot), mergeProps({
|
|
63
|
-
class: unref(
|
|
72
|
+
class: unref(rootClass),
|
|
64
73
|
style: sizeStyle.value
|
|
65
|
-
},
|
|
74
|
+
}, unref(rest)), {
|
|
66
75
|
default: withCtx(() => [
|
|
67
76
|
__props.src && mounted.value ? (openBlock(), createBlock(unref(AvatarImage), {
|
|
68
77
|
key: 0,
|
|
@@ -83,11 +92,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
83
92
|
_: 1
|
|
84
93
|
}, 8, ["items"])) : (openBlock(), createBlock(unref(AvatarRoot), mergeProps({
|
|
85
94
|
key: 1,
|
|
86
|
-
class: unref(
|
|
95
|
+
class: unref(rootClass),
|
|
87
96
|
style: sizeStyle.value
|
|
88
|
-
},
|
|
97
|
+
}, unref(rest)), {
|
|
89
98
|
default: withCtx(() => [
|
|
90
|
-
__props.src ? (openBlock(), createBlock(unref(AvatarImage), {
|
|
99
|
+
__props.src && mounted.value ? (openBlock(), createBlock(unref(AvatarImage), {
|
|
91
100
|
key: 0,
|
|
92
101
|
src: __props.src,
|
|
93
102
|
alt: __props.alt,
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, Fragment, renderList, createBlock, createCommentVNode, resolveDynamicComponent, withCtx, createTextVNode, toDisplayString } from "vue";
|
|
2
|
+
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
3
|
+
import { useLabels, useLinkComponent } from "../composables/useLpConfig.js";
|
|
4
|
+
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
5
|
+
import { resolveLink } from "../components/link.js";
|
|
6
|
+
const _hoisted_1 = ["aria-label"];
|
|
7
|
+
const _hoisted_2 = ["aria-current"];
|
|
8
|
+
const __default__ = { inheritAttrs: false };
|
|
9
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
10
|
+
...__default__,
|
|
11
|
+
__name: "LpBreadcrumbs",
|
|
12
|
+
props: {
|
|
13
|
+
items: {},
|
|
14
|
+
as: {},
|
|
15
|
+
labels: {}
|
|
16
|
+
},
|
|
17
|
+
emits: ["navigate"],
|
|
18
|
+
setup(__props) {
|
|
19
|
+
const props = __props;
|
|
20
|
+
const text = useLabels("breadcrumbs", { nav: "Breadcrumb" }, () => props.labels);
|
|
21
|
+
const linkComponent = useLinkComponent();
|
|
22
|
+
function linkOf(item) {
|
|
23
|
+
if (props.as && props.as !== "a") {
|
|
24
|
+
if (item.to != null) return { is: props.as, props: { to: item.to } };
|
|
25
|
+
return item.href != null ? { is: "a", props: { href: item.href } } : null;
|
|
26
|
+
}
|
|
27
|
+
return resolveLink(props.as === "a" ? "a" : linkComponent.value, { to: item.to, href: item.href });
|
|
28
|
+
}
|
|
29
|
+
const crumbs = computed(
|
|
30
|
+
() => props.items.map((item, i) => ({
|
|
31
|
+
item,
|
|
32
|
+
last: i === props.items.length - 1,
|
|
33
|
+
link: i === props.items.length - 1 ? null : linkOf(item)
|
|
34
|
+
}))
|
|
35
|
+
);
|
|
36
|
+
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
37
|
+
"flex items-center gap-1.5 text-sm"
|
|
38
|
+
);
|
|
39
|
+
return (_ctx, _cache) => {
|
|
40
|
+
return openBlock(), createElementBlock("nav", mergeProps({
|
|
41
|
+
"aria-label": unref(text).nav
|
|
42
|
+
}, unref(rest)), [
|
|
43
|
+
createElementVNode("ol", {
|
|
44
|
+
class: normalizeClass(unref(rootClass))
|
|
45
|
+
}, [
|
|
46
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(crumbs.value, ({ item, last, link }, i) => {
|
|
47
|
+
return openBlock(), createElementBlock("li", {
|
|
48
|
+
key: i,
|
|
49
|
+
class: "inline-flex items-center gap-1.5"
|
|
50
|
+
}, [
|
|
51
|
+
i > 0 ? (openBlock(), createBlock(_sfc_main$1, {
|
|
52
|
+
key: 0,
|
|
53
|
+
name: "lucide:chevron-right",
|
|
54
|
+
size: 14,
|
|
55
|
+
class: "text-muted",
|
|
56
|
+
"aria-hidden": "true"
|
|
57
|
+
})) : createCommentVNode("", true),
|
|
58
|
+
link ? (openBlock(), createBlock(resolveDynamicComponent(link.is), mergeProps({
|
|
59
|
+
key: 1,
|
|
60
|
+
ref_for: true
|
|
61
|
+
}, link.props, {
|
|
62
|
+
class: "inline-flex items-center gap-1.5 rounded-xs text-muted outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
63
|
+
onClick: ($event) => _ctx.$emit("navigate", item, i)
|
|
64
|
+
}), {
|
|
65
|
+
default: withCtx(() => [
|
|
66
|
+
item.icon ? (openBlock(), createBlock(_sfc_main$1, {
|
|
67
|
+
key: 0,
|
|
68
|
+
name: item.icon,
|
|
69
|
+
size: 14
|
|
70
|
+
}, null, 8, ["name"])) : createCommentVNode("", true),
|
|
71
|
+
createTextVNode(" " + toDisplayString(item.label), 1)
|
|
72
|
+
]),
|
|
73
|
+
_: 2
|
|
74
|
+
}, 1040, ["onClick"])) : (openBlock(), createElementBlock("span", {
|
|
75
|
+
key: 2,
|
|
76
|
+
class: normalizeClass(["inline-flex items-center gap-1.5", last ? "text-ink" : "text-muted"]),
|
|
77
|
+
"aria-current": last ? "page" : void 0
|
|
78
|
+
}, [
|
|
79
|
+
item.icon ? (openBlock(), createBlock(_sfc_main$1, {
|
|
80
|
+
key: 0,
|
|
81
|
+
name: item.icon,
|
|
82
|
+
size: 14
|
|
83
|
+
}, null, 8, ["name"])) : createCommentVNode("", true),
|
|
84
|
+
createTextVNode(" " + toDisplayString(item.label), 1)
|
|
85
|
+
], 10, _hoisted_2))
|
|
86
|
+
]);
|
|
87
|
+
}), 128))
|
|
88
|
+
], 2)
|
|
89
|
+
], 16, _hoisted_1);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
export {
|
|
94
|
+
_sfc_main as _
|
|
95
|
+
};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { defineComponent, computed, openBlock, createBlock, resolveDynamicComponent,
|
|
1
|
+
import { defineComponent, computed, openBlock, createBlock, resolveDynamicComponent, mergeProps, unref, withCtx, renderSlot } from "vue";
|
|
2
2
|
import { tv } from "tailwind-variants";
|
|
3
|
+
import { useLinkComponent } from "../composables/useLpConfig.js";
|
|
4
|
+
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
5
|
+
import { resolveLink } from "../components/link.js";
|
|
6
|
+
const __default__ = { inheritAttrs: false };
|
|
3
7
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
...__default__,
|
|
4
9
|
__name: "LpButton",
|
|
5
10
|
props: {
|
|
6
11
|
variant: {},
|
|
@@ -8,7 +13,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
8
13
|
block: { type: Boolean },
|
|
9
14
|
square: { type: Boolean },
|
|
10
15
|
glow: { type: Boolean },
|
|
11
|
-
as: {
|
|
16
|
+
as: {},
|
|
17
|
+
to: {},
|
|
18
|
+
href: {},
|
|
12
19
|
type: { default: "button" },
|
|
13
20
|
disabled: { type: Boolean }
|
|
14
21
|
},
|
|
@@ -26,13 +33,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
26
33
|
variant: {
|
|
27
34
|
solid: "bg-brand text-ink-inverse hover:bg-brand-hover",
|
|
28
35
|
action: "bg-action text-ink-inverse shadow-[0_14px_28px_color-mix(in_srgb,var(--color-action)_24%,transparent)] hover:bg-action-hover",
|
|
29
|
-
outline: "border border-line-strong text-ink hover:border-brand hover:bg-
|
|
36
|
+
outline: "border border-line-strong text-ink hover:border-brand hover:bg-ink/[0.04]",
|
|
30
37
|
// raised surface tile with a border — a visible, neutral filled button
|
|
31
38
|
soft: "border border-line bg-surface-raised/80 text-ink hover:border-line-strong hover:bg-surface-soft",
|
|
32
|
-
ghost: "text-ink hover:bg-
|
|
33
|
-
muted: "text-muted hover:bg-
|
|
34
|
-
// high-contrast light fill (e.g. a "download" CTA on a dark hero)
|
|
35
|
-
|
|
39
|
+
ghost: "text-ink hover:bg-ink/[0.06]",
|
|
40
|
+
muted: "text-muted hover:bg-ink/[0.04] hover:text-ink",
|
|
41
|
+
// high-contrast light fill (e.g. a "download" CTA on a dark hero). The
|
|
42
|
+
// text is a fixed dark tone: `ink-inverse` is light in light themes,
|
|
43
|
+
// which made this white on white there.
|
|
44
|
+
light: "border border-black/10 bg-white text-[#0b1210] hover:bg-white/90",
|
|
36
45
|
danger: "bg-danger text-ink-inverse hover:bg-danger-hover"
|
|
37
46
|
},
|
|
38
47
|
size: {
|
|
@@ -65,14 +74,33 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
65
74
|
{
|
|
66
75
|
glow: true,
|
|
67
76
|
variant: "light",
|
|
68
|
-
class: "shadow-[
|
|
77
|
+
class: "shadow-[0_8px_18px_color-mix(in_srgb,var(--color-ink)_20%,transparent)] hover:shadow-[0_12px_24px_color-mix(in_srgb,var(--color-ink)_30%,transparent)]"
|
|
69
78
|
}
|
|
70
79
|
],
|
|
71
80
|
defaultVariants: { variant: "solid", size: "md" }
|
|
72
81
|
});
|
|
73
82
|
const props = __props;
|
|
74
|
-
const
|
|
75
|
-
const
|
|
83
|
+
const linkComponent = useLinkComponent();
|
|
84
|
+
const resolved = computed(() => {
|
|
85
|
+
if (props.as && props.as !== "a") {
|
|
86
|
+
const target = props.to != null ? { to: props.to } : props.href != null ? { href: props.href } : {};
|
|
87
|
+
return { is: props.as, props: props.as === "button" ? {} : target };
|
|
88
|
+
}
|
|
89
|
+
if (props.as === "a") return { is: "a", props: { href: props.href } };
|
|
90
|
+
return resolveLink(linkComponent.value, { to: props.to, href: props.href }) ?? { is: "button", props: {} };
|
|
91
|
+
});
|
|
92
|
+
const isNativeButton = computed(() => resolved.value.is === "button");
|
|
93
|
+
function blockDisabled(event) {
|
|
94
|
+
if (!props.disabled || isNativeButton.value) return;
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
event.stopImmediatePropagation();
|
|
97
|
+
}
|
|
98
|
+
const linkProps = computed(() => {
|
|
99
|
+
if (isNativeButton.value) return {};
|
|
100
|
+
if (!props.disabled) return resolved.value.props;
|
|
101
|
+
return resolved.value.is === "a" ? {} : resolved.value.props;
|
|
102
|
+
});
|
|
103
|
+
const { class: classes, attrs: rest } = useMergedAttrs(
|
|
76
104
|
() => button({
|
|
77
105
|
variant: props.variant,
|
|
78
106
|
size: props.size,
|
|
@@ -82,17 +110,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
82
110
|
})
|
|
83
111
|
);
|
|
84
112
|
return (_ctx, _cache) => {
|
|
85
|
-
return openBlock(), createBlock(resolveDynamicComponent(
|
|
113
|
+
return openBlock(), createBlock(resolveDynamicComponent(resolved.value.is), mergeProps({ ...unref(rest), ...linkProps.value }, {
|
|
86
114
|
type: isNativeButton.value ? __props.type : void 0,
|
|
87
115
|
disabled: isNativeButton.value ? __props.disabled : void 0,
|
|
88
116
|
"aria-disabled": !isNativeButton.value && __props.disabled ? "true" : void 0,
|
|
89
|
-
|
|
90
|
-
|
|
117
|
+
tabindex: !isNativeButton.value && __props.disabled ? -1 : void 0,
|
|
118
|
+
class: unref(classes),
|
|
119
|
+
onClickCapture: blockDisabled
|
|
120
|
+
}), {
|
|
91
121
|
default: withCtx(() => [
|
|
92
122
|
renderSlot(_ctx.$slots, "default")
|
|
93
123
|
]),
|
|
94
124
|
_: 3
|
|
95
|
-
},
|
|
125
|
+
}, 16, ["type", "disabled", "aria-disabled", "tabindex", "class"]);
|
|
96
126
|
};
|
|
97
127
|
}
|
|
98
128
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, computed, openBlock, createBlock, withCtx, resolveDynamicComponent, mergeProps, unref, renderSlot } from "vue";
|
|
2
2
|
import { tv } from "tailwind-variants";
|
|
3
3
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
4
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-DQw5dGfG.js";
|
|
5
5
|
const __default__ = { inheritAttrs: false };
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
7
7
|
...__default__,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { defineComponent, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, renderSlot, createTextVNode, toDisplayString } from "vue";
|
|
2
2
|
import { CheckboxRoot, CheckboxIndicator } from "reka-ui";
|
|
3
3
|
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
4
|
+
import { useFieldControl } from "../composables/useField.js";
|
|
4
5
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
5
6
|
const __default__ = { inheritAttrs: false };
|
|
6
7
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -16,22 +17,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
16
17
|
},
|
|
17
18
|
emits: ["update:modelValue", "change"],
|
|
18
19
|
setup(__props, { emit: __emit }) {
|
|
20
|
+
const props = __props;
|
|
19
21
|
const emit = __emit;
|
|
20
22
|
function onUpdate(v) {
|
|
21
23
|
const checked = v === true;
|
|
22
24
|
emit("update:modelValue", checked);
|
|
23
25
|
emit("change", checked);
|
|
24
26
|
}
|
|
27
|
+
const field = useFieldControl(() => ({ wrapped: false, id: props.id, disabled: props.disabled }));
|
|
25
28
|
const { class: rootClass, attrs: rest } = useMergedAttrs(
|
|
26
29
|
"group inline-flex cursor-pointer items-center gap-2 text-sm text-ink"
|
|
27
30
|
);
|
|
28
31
|
return (_ctx, _cache) => {
|
|
29
32
|
return openBlock(), createElementBlock("label", mergeProps({ class: unref(rootClass) }, unref(rest)), [
|
|
30
33
|
createVNode(unref(CheckboxRoot), {
|
|
31
|
-
id:
|
|
34
|
+
id: unref(field).id,
|
|
32
35
|
name: __props.name,
|
|
33
36
|
"model-value": __props.indeterminate ? "indeterminate" : __props.modelValue,
|
|
34
|
-
disabled:
|
|
37
|
+
disabled: unref(field).disabled,
|
|
38
|
+
"aria-describedby": unref(field).describedBy,
|
|
35
39
|
class: "flex size-[18px] items-center justify-center rounded-[5px] border border-line-strong bg-surface-soft outline-none transition-[color,background-color,border-color,box-shadow,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] not-data-[state=checked]:not-data-[state=indeterminate]:group-hover:border-brand active:scale-90 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand data-[state=indeterminate]:border-transparent data-[state=indeterminate]:bg-brand disabled:cursor-not-allowed disabled:opacity-55",
|
|
36
40
|
"onUpdate:modelValue": onUpdate
|
|
37
41
|
}, {
|
|
@@ -47,7 +51,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
47
51
|
})
|
|
48
52
|
]),
|
|
49
53
|
_: 1
|
|
50
|
-
}, 8, ["id", "name", "model-value", "disabled"]),
|
|
54
|
+
}, 8, ["id", "name", "model-value", "disabled", "aria-describedby"]),
|
|
51
55
|
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
52
56
|
createTextVNode(toDisplayString(__props.label), 1)
|
|
53
57
|
])
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { defineComponent, computed, reactive, watch, openBlock, createElementBlock, mergeProps, unref, toDisplayString, createCommentVNode, createElementVNode, createVNode, normalizeClass, normalizeStyle, Fragment, renderList } from "vue";
|
|
1
|
+
import { defineComponent, computed, reactive, watch, ref, openBlock, createElementBlock, mergeProps, unref, toDisplayString, createCommentVNode, createElementVNode, createVNode, normalizeClass, normalizeStyle, Fragment, renderList } from "vue";
|
|
2
2
|
import { useClipboard } from "../composables/useClipboard.js";
|
|
3
|
-
import {
|
|
3
|
+
import { tokenizeLines } from "../components/codeHighlight.js";
|
|
4
|
+
import { useLabels } from "../composables/useLpConfig.js";
|
|
4
5
|
import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
|
|
5
6
|
import { useMergedAttrs } from "../composables/useMergedClass.js";
|
|
6
7
|
const _hoisted_1 = {
|
|
@@ -50,12 +51,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
50
51
|
copyable: { type: Boolean, default: true },
|
|
51
52
|
title: {},
|
|
52
53
|
height: {},
|
|
53
|
-
foldImports: { type: Boolean, default: false }
|
|
54
|
+
foldImports: { type: Boolean, default: false },
|
|
55
|
+
labels: {}
|
|
54
56
|
},
|
|
55
57
|
emits: ["update:modelValue", "update:locked"],
|
|
56
58
|
setup(__props, { emit: __emit }) {
|
|
57
59
|
const props = __props;
|
|
58
60
|
const emit = __emit;
|
|
61
|
+
const text = useLabels(
|
|
62
|
+
"codeBlock",
|
|
63
|
+
{
|
|
64
|
+
unlock: "Unlock to edit",
|
|
65
|
+
lock: "Lock (read-only)",
|
|
66
|
+
copy: "Copy code",
|
|
67
|
+
copied: "Copied",
|
|
68
|
+
imports: "imports",
|
|
69
|
+
details: "details",
|
|
70
|
+
/** `{n}` is replaced by the count. */
|
|
71
|
+
lines: "({n} lines)"
|
|
72
|
+
},
|
|
73
|
+
() => props.labels
|
|
74
|
+
);
|
|
59
75
|
const code = computed(() => props.modelValue ?? "");
|
|
60
76
|
const rawLines = computed(() => code.value.replace(/\n$/, "").split("\n"));
|
|
61
77
|
const REGION_START = /^\s*(?:\/\/|#|--)\s*#region\b\s*(.*?)\s*$/;
|
|
@@ -85,7 +101,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
85
101
|
flushPlain();
|
|
86
102
|
const lines = [];
|
|
87
103
|
for (let k = start; k < realEnd; k++) lines.push({ n: k + 1, text: src[k] });
|
|
88
|
-
out.push({ kind: "fold", id: foldId++, label:
|
|
104
|
+
out.push({ kind: "fold", id: foldId++, label: text.value.imports, defaultOpen: false, lines });
|
|
89
105
|
i = realEnd;
|
|
90
106
|
}
|
|
91
107
|
}
|
|
@@ -96,7 +112,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
96
112
|
flushPlain();
|
|
97
113
|
const rest2 = startMatch[1] ?? "";
|
|
98
114
|
const defaultOpen = /\bopen\b/.test(rest2);
|
|
99
|
-
const label = rest2.replace(/\bopen\b/, "").trim() ||
|
|
115
|
+
const label = rest2.replace(/\bopen\b/, "").trim() || text.value.details;
|
|
100
116
|
const lines = [];
|
|
101
117
|
i++;
|
|
102
118
|
for (; i < src.length; i++) {
|
|
@@ -112,6 +128,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
112
128
|
return out;
|
|
113
129
|
});
|
|
114
130
|
const hasFolds = computed(() => segments.value.some((s) => s.kind === "fold"));
|
|
131
|
+
const editing = computed(() => !props.locked && !hasFolds.value);
|
|
115
132
|
const openState = reactive({});
|
|
116
133
|
watch(
|
|
117
134
|
segments,
|
|
@@ -124,8 +141,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
124
141
|
function toggleFold(id) {
|
|
125
142
|
openState[id] = !openState[id];
|
|
126
143
|
}
|
|
127
|
-
|
|
128
|
-
|
|
144
|
+
const highlighted = computed(() => tokenizeLines(rawLines.value, props.lang));
|
|
145
|
+
function tokens(n) {
|
|
146
|
+
return highlighted.value[n - 1] ?? [];
|
|
147
|
+
}
|
|
148
|
+
const preEl = ref(null);
|
|
149
|
+
function syncScroll(e) {
|
|
150
|
+
const area = e.target;
|
|
151
|
+
if (!preEl.value) return;
|
|
152
|
+
preEl.value.scrollLeft = area.scrollLeft;
|
|
153
|
+
preEl.value.scrollTop = area.scrollTop;
|
|
129
154
|
}
|
|
130
155
|
const copyText = computed(
|
|
131
156
|
() => segments.value.flatMap((s) => s.lines.map((l) => l.text)).join("\n")
|
|
@@ -154,7 +179,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
154
179
|
key: 0,
|
|
155
180
|
type: "button",
|
|
156
181
|
class: "group/lock flex items-center gap-1 rounded px-1.5 py-1 outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
157
|
-
"aria-label": __props.locked ?
|
|
182
|
+
"aria-label": __props.locked ? unref(text).unlock : unref(text).lock,
|
|
158
183
|
onClick: toggleLock
|
|
159
184
|
}, [
|
|
160
185
|
createVNode(_sfc_main$1, {
|
|
@@ -167,7 +192,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
167
192
|
key: 1,
|
|
168
193
|
type: "button",
|
|
169
194
|
class: "group/copy flex items-center gap-1 rounded px-1.5 py-1 outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
170
|
-
"aria-label": unref(copied) ?
|
|
195
|
+
"aria-label": unref(copied) ? unref(text).copied : unref(text).copy,
|
|
171
196
|
onClick: copy
|
|
172
197
|
}, [
|
|
173
198
|
createVNode(_sfc_main$1, {
|
|
@@ -179,18 +204,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
179
204
|
])
|
|
180
205
|
])) : createCommentVNode("", true),
|
|
181
206
|
createElementVNode("div", {
|
|
182
|
-
class: normalizeClass(["lp-scrollbar-none relative", __props.height ? "overflow-auto" : ""]),
|
|
207
|
+
class: normalizeClass(["lp-scrollbar-none relative", __props.height ? editing.value ? "overflow-hidden" : "overflow-auto" : ""]),
|
|
183
208
|
style: normalizeStyle(__props.height ? { height: __props.height } : void 0)
|
|
184
209
|
}, [
|
|
185
210
|
!__props.locked && !hasFolds.value ? (openBlock(), createElementBlock("textarea", {
|
|
186
211
|
key: 0,
|
|
187
212
|
value: code.value,
|
|
188
213
|
spellcheck: "false",
|
|
189
|
-
class: normalizeClass(["lp-scrollbar-none absolute inset-0 size-full resize-none overflow-auto whitespace-pre bg-transparent p-3 leading-relaxed text-transparent caret-brand outline-none", [__props.wrap ? "whitespace-pre-wrap break-words" : "whitespace-pre", __props.lineNumbers ? "pl-
|
|
190
|
-
onInput
|
|
214
|
+
class: normalizeClass(["lp-scrollbar-none absolute inset-0 size-full resize-none overflow-auto whitespace-pre bg-transparent p-3 leading-relaxed text-transparent caret-brand outline-none", [__props.wrap ? "whitespace-pre-wrap break-words" : "whitespace-pre", __props.lineNumbers ? "pl-13" : ""]]),
|
|
215
|
+
onInput,
|
|
216
|
+
onScroll: syncScroll
|
|
191
217
|
}, null, 42, _hoisted_7)) : createCommentVNode("", true),
|
|
192
218
|
createElementVNode("pre", {
|
|
193
|
-
|
|
219
|
+
ref_key: "preEl",
|
|
220
|
+
ref: preEl,
|
|
221
|
+
class: normalizeClass(["lp-scrollbar-none m-0 overflow-auto p-3 leading-relaxed", [
|
|
222
|
+
__props.wrap ? "whitespace-pre-wrap break-words" : "whitespace-pre",
|
|
223
|
+
editing.value ? "pointer-events-none" : "",
|
|
224
|
+
editing.value && __props.height ? "h-full overflow-hidden" : ""
|
|
225
|
+
]])
|
|
194
226
|
}, [
|
|
195
227
|
createElementVNode("code", _hoisted_8, [
|
|
196
228
|
(openBlock(true), createElementBlock(Fragment, null, renderList(segments.value, (seg, s) => {
|
|
@@ -201,7 +233,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
201
233
|
class: "block min-h-[1.4em]"
|
|
202
234
|
}, [
|
|
203
235
|
__props.lineNumbers ? (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(ln.n), 1)) : createCommentVNode("", true),
|
|
204
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(tokens(ln.
|
|
236
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(tokens(ln.n), (tok, j) => {
|
|
205
237
|
return openBlock(), createElementBlock("span", {
|
|
206
238
|
key: j,
|
|
207
239
|
class: normalizeClass(tok.cls)
|
|
@@ -221,7 +253,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
221
253
|
class: "shrink-0"
|
|
222
254
|
}, null, 8, ["name"]),
|
|
223
255
|
createElementVNode("span", _hoisted_11, toDisplayString(openState[seg.id] ? seg.label : seg.label + " …"), 1),
|
|
224
|
-
!openState[seg.id] ? (openBlock(), createElementBlock("span", _hoisted_12,
|
|
256
|
+
!openState[seg.id] ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(unref(text).lines.replace("{n}", String(seg.lines.length))), 1)) : createCommentVNode("", true)
|
|
225
257
|
], 8, _hoisted_10),
|
|
226
258
|
openState[seg.id] ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(seg.lines, (ln) => {
|
|
227
259
|
return openBlock(), createElementBlock("span", {
|
|
@@ -229,7 +261,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
229
261
|
class: "block min-h-[1.4em]"
|
|
230
262
|
}, [
|
|
231
263
|
__props.lineNumbers ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(ln.n), 1)) : createCommentVNode("", true),
|
|
232
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(tokens(ln.
|
|
264
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(tokens(ln.n), (tok, j) => {
|
|
233
265
|
return openBlock(), createElementBlock("span", {
|
|
234
266
|
key: j,
|
|
235
267
|
class: normalizeClass(tok.cls)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { defineComponent, computed, ref, watch, openBlock, createBlock, unref, withCtx, createVNode, createElementVNode, normalizeClass, normalizeStyle, toDisplayString, createElementBlock, createCommentVNode, Fragment, renderList, renderSlot } from "vue";
|
|
1
|
+
import { defineComponent, computed, ref, watch, openBlock, createBlock, unref, withCtx, createVNode, createElementVNode, normalizeClass, normalizeStyle, toDisplayString, createElementBlock, createCommentVNode, withKeys, Fragment, renderList, renderSlot } from "vue";
|
|
2
2
|
import { PopoverRoot, PopoverAnchor, PopoverTrigger, PopoverPortal, PopoverContent } from "reka-ui";
|
|
3
|
+
import { useFieldControl } from "../composables/useField.js";
|
|
3
4
|
import { DEFAULT_SWATCHES, formatColor, opaqueCss, parseColor, rgbToHsv, isLight, clampHsv } from "../components/color.js";
|
|
4
5
|
import { useClipboard } from "../composables/useClipboard.js";
|
|
5
6
|
import { POPOVER_PANEL } from "../components/dropdown.js";
|
|
6
|
-
import { _ as _sfc_main$1 } from "./LpContextMenu-
|
|
7
|
+
import { _ as _sfc_main$1 } from "./LpContextMenu-DQw5dGfG.js";
|
|
7
8
|
import { _ as _sfc_main$2 } from "./LpIcon-CCnX5_2j.js";
|
|
8
|
-
const _hoisted_1 = ["disabled", "aria-label"];
|
|
9
|
+
const _hoisted_1 = ["id", "disabled", "aria-label", "aria-invalid", "aria-describedby"];
|
|
9
10
|
const _hoisted_2 = { class: "min-w-0 flex-1 truncate font-mono text-xs text-muted-strong" };
|
|
10
11
|
const _hoisted_3 = { class: "flex flex-col gap-3" };
|
|
11
|
-
const _hoisted_4 = ["tabindex", "aria-label", "aria-valuetext"];
|
|
12
|
+
const _hoisted_4 = ["tabindex", "aria-label", "aria-valuenow", "aria-valuetext"];
|
|
12
13
|
const _hoisted_5 = ["aria-label", "aria-valuenow", "tabindex"];
|
|
13
14
|
const _hoisted_6 = ["aria-label", "aria-valuenow", "tabindex"];
|
|
14
15
|
const _hoisted_7 = {
|
|
@@ -123,7 +124,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
123
124
|
el.addEventListener("pointercancel", up);
|
|
124
125
|
}
|
|
125
126
|
const onFieldPointer = (e) => trackPointer(e, (x, y) => set({ s: x, v: 1 - y }));
|
|
126
|
-
const onHuePointer = (e) => trackPointer(e, (x) => set({ h: x * 360 }));
|
|
127
|
+
const onHuePointer = (e) => trackPointer(e, (x) => set({ h: Math.min(x * 360, 359.9) }));
|
|
127
128
|
const onAlphaPointer = (e) => trackPointer(e, (x) => set({ a: x }));
|
|
128
129
|
function step(e, axis) {
|
|
129
130
|
const big = e.shiftKey;
|
|
@@ -148,6 +149,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
148
149
|
set({ s: hsv.value.s + dx / 100, v: hsv.value.v + dy / 100 }, true);
|
|
149
150
|
}
|
|
150
151
|
const typed = ref(null);
|
|
152
|
+
let typedChange = false;
|
|
151
153
|
const inputValue = computed(() => typed.value ?? current.value);
|
|
152
154
|
function onInput(e) {
|
|
153
155
|
const value = e.target.value;
|
|
@@ -157,10 +159,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
157
159
|
const next = rgbToHsv(rgb);
|
|
158
160
|
if (next.s === 0) next.h = hsv.value.h;
|
|
159
161
|
if (next.v === 0) next.s = hsv.value.s;
|
|
160
|
-
set(props.alpha ? next : { ...next, a: 1 }
|
|
162
|
+
set(props.alpha ? next : { ...next, a: 1 });
|
|
163
|
+
typedChange = true;
|
|
164
|
+
}
|
|
165
|
+
function commitTyped() {
|
|
166
|
+
if (!typedChange) return;
|
|
167
|
+
typedChange = false;
|
|
168
|
+
emit("change", current.value);
|
|
161
169
|
}
|
|
162
170
|
function onInputBlur() {
|
|
163
171
|
typed.value = null;
|
|
172
|
+
commitTyped();
|
|
164
173
|
}
|
|
165
174
|
function pickSwatch(value) {
|
|
166
175
|
const rgb = parseColor(value);
|
|
@@ -223,8 +232,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
223
232
|
} catch {
|
|
224
233
|
}
|
|
225
234
|
}
|
|
235
|
+
let openedOn = "";
|
|
226
236
|
watch(open, (isOpen, was) => {
|
|
227
|
-
if (
|
|
237
|
+
if (isOpen) openedOn = current.value;
|
|
238
|
+
else if (was && current.value !== openedOn) remember(current.value);
|
|
228
239
|
});
|
|
229
240
|
const swatchRows = computed(
|
|
230
241
|
() => [
|
|
@@ -294,6 +305,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
294
305
|
];
|
|
295
306
|
return own.length ? [...builtin, { ...own[0], separatorBefore: true }, ...own.slice(1)] : builtin;
|
|
296
307
|
});
|
|
308
|
+
const field = useFieldControl(() => ({
|
|
309
|
+
wrapped: false,
|
|
310
|
+
invalid: props.invalid,
|
|
311
|
+
disabled: props.disabled
|
|
312
|
+
}));
|
|
297
313
|
__expose({ open });
|
|
298
314
|
return (_ctx, _cache) => {
|
|
299
315
|
return openBlock(), createBlock(unref(PopoverRoot), {
|
|
@@ -309,11 +325,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
309
325
|
default: withCtx(() => [
|
|
310
326
|
createElementVNode("button", {
|
|
311
327
|
type: "button",
|
|
312
|
-
|
|
328
|
+
id: unref(field).id,
|
|
329
|
+
disabled: unref(field).disabled,
|
|
313
330
|
"aria-label": __props.ariaLabel,
|
|
331
|
+
"aria-invalid": unref(field).invalid || void 0,
|
|
332
|
+
"aria-describedby": unref(field).describedBy,
|
|
314
333
|
class: normalizeClass(["group inline-flex w-full items-center gap-2 rounded-control border bg-surface-soft px-2 text-left text-ink outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:border-brand disabled:cursor-not-allowed disabled:opacity-55", [
|
|
315
334
|
triggerSize[__props.size],
|
|
316
|
-
|
|
335
|
+
unref(field).invalid ? "border-danger focus-visible:ring-danger-soft" : "border-line focus-visible:border-brand"
|
|
317
336
|
]])
|
|
318
337
|
}, [
|
|
319
338
|
createElementVNode("span", {
|
|
@@ -359,6 +378,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
359
378
|
role: "slider",
|
|
360
379
|
tabindex: __props.disabled ? -1 : 0,
|
|
361
380
|
"aria-label": l.value.saturation,
|
|
381
|
+
"aria-valuemin": 0,
|
|
382
|
+
"aria-valuemax": 100,
|
|
383
|
+
"aria-valuenow": Math.round(hsv.value.s * 100),
|
|
362
384
|
"aria-valuetext": fill(l.value.saturationValueText, { s: Math.round(hsv.value.s * 100), v: Math.round(hsv.value.v * 100) }),
|
|
363
385
|
class: "relative h-36 w-full cursor-crosshair touch-none overflow-hidden rounded-control outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
|
|
364
386
|
style: normalizeStyle(fieldStyle.value),
|
|
@@ -427,6 +449,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
427
449
|
"aria-label": l.value.value,
|
|
428
450
|
class: "min-w-0 flex-1 select-text bg-transparent font-mono text-xs text-ink outline-none placeholder:text-muted",
|
|
429
451
|
onInput,
|
|
452
|
+
onKeydown: withKeys(commitTyped, ["enter"]),
|
|
430
453
|
onBlur: onInputBlur
|
|
431
454
|
}, null, 40, _hoisted_8)
|
|
432
455
|
])) : createCommentVNode("", true),
|