@leavepulse/ui 0.77.2 → 0.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -0
- package/dist/assets/{LpCommandPalette-DOIZHw-g.css → LpCommandPalette-DDJKICKh.css} +19 -19
- package/dist/assets/{LpDock-Cbh0wQUv.css → LpDock-Dw82tWVD.css} +3 -3
- package/dist/assets/{LpDropzone-B_qRq1-R.css → LpDropzone-DNbh_NFJ.css} +10 -10
- package/dist/assets/{LpImageEditor-XM5bAziW.css → LpImageEditor-Bgu20XLs.css} +6 -6
- package/dist/assets/{LpTable-Bv-EcQs7.css → LpTable-CCk0ZHo7.css} +19 -19
- package/dist/assets/LpTabs-Bh7a-Bdl.css +18 -0
- package/dist/chunks/AppShellContextNav-C6Ho2mof.js +49 -0
- package/dist/chunks/ChartRangeSelector-HO0sMMz6.js +129 -0
- package/dist/chunks/{ContextMenuItems-BXumicbh.js → ContextMenuItems-DmaKSJVv.js} +1 -1
- package/dist/chunks/{DropzoneLinkField-C-9BCGJn.js → DropzoneLinkField-DXIr0eFz.js} +2 -2
- package/dist/chunks/{FieldWrapper-CORPzo9s.js → FieldWrapper-DnuMTrqW.js} +1 -1
- package/dist/chunks/IconCloseButton-COZEsa9u.js +29 -0
- package/dist/chunks/{LayoutCanvas-CNOAUk7D.js → LayoutCanvas-CZKOltfA.js} +1 -1
- package/dist/chunks/{LayoutNode-DF5BMN0J.js → LayoutNode-D2f7v683.js} +45 -45
- package/dist/chunks/{LpActionBar-BP1ld7-S.js → LpActionBar-BGMk5KoG.js} +3 -3
- package/dist/chunks/{LpActivityLine-CJvzrNpj.js → LpActivityLine-Ea-t5Vza.js} +4 -2
- package/dist/chunks/{LpAddressInput-sYMvYzcY.js → LpAddressInput-ZqoZ-N2Y.js} +12 -11
- package/dist/chunks/{LpAlert-n5XPAZfv.js → LpAlert-CjvTZIKF.js} +3 -3
- package/dist/chunks/LpAppShell-BNAVTQsY.js +582 -0
- package/dist/chunks/{LpAutocomplete-DOu7FN5P.js → LpAutocomplete-DkY6CSyD.js} +26 -42
- package/dist/chunks/{LpAvatar-Cg6Az3wz.js → LpAvatar-cQVsNk6F.js} +2 -2
- package/dist/chunks/{LpBadge-wUYLN4U9.js → LpBadge-D5QQdDQ_.js} +2 -2
- package/dist/chunks/{LpBottomNav-CbNQQPuL.js → LpBottomNav-zxLGGbjm.js} +9 -2
- package/dist/chunks/{LpBreadcrumbs-DPdbth-c.js → LpBreadcrumbs-CIIBsygI.js} +4 -3
- package/dist/chunks/{LpButton-CFb44IjC.js → LpButton-DSHioIfD.js} +5 -4
- package/dist/chunks/{LpCalendar-CuoWks-0.js → LpCalendar-D4-LVjfF.js} +1 -1
- package/dist/chunks/{LpCard-r13WRqox.js → LpCard-BPtYXwnT.js} +1 -1
- package/dist/chunks/{LpCheckbox-Cs4SHaHX.js → LpCheckbox-D6RuDW4X.js} +38 -16
- package/dist/chunks/{LpCodeBlock-DRC8VbXW.js → LpCodeBlock-DuzmnIHl.js} +19 -41
- package/dist/chunks/{LpCodeDisplay-CE9TxCA4.js → LpCodeDisplay-CO8fngxa.js} +5 -5
- package/dist/chunks/{LpCollapse-CWS9M_lm.js → LpCollapse-DrAw5DBZ.js} +5 -4
- package/dist/chunks/{LpColorPicker-1y1QJHZR.js → LpColorPicker-BxAHEnR5.js} +11 -12
- package/dist/chunks/{LpCommandScope-CtUhJe8T.js → LpCommandScope-DRUvHiX7.js} +1 -1
- package/dist/chunks/{LpConfirmDialog-DlD45Bi_.js → LpConfirmDialog-6oCIJTDa.js} +3 -3
- package/dist/chunks/{LpConfirmHost-BIWjBLmI.js → LpConfirmHost-DgHvfT6s.js} +1 -1
- package/dist/chunks/{LpContextMenu-rx2tCjwk.js → LpContextMenu--eMGIql6.js} +13 -15
- package/dist/chunks/{LpContextSwitcher-Dwh6dyID.js → LpContextSwitcher-1C1tExdl.js} +2 -2
- package/dist/chunks/{LpCopyButton-xF7wFVoU.js → LpCopyButton-7EOSIuwa.js} +3 -3
- package/dist/chunks/{LpCountdown-DgeY3cLG.js → LpCountdown-DVl7vXI1.js} +4 -3
- package/dist/chunks/{LpDataList-Jxyl9H5w.js → LpDataList-DgBeM01y.js} +13 -4
- package/dist/chunks/{LpDatePicker-CA0QTfBC.js → LpDatePicker-DwSDY0mt.js} +12 -18
- package/dist/chunks/{LpDateRangePicker-u3J51xXk.js → LpDateRangePicker-CNQXdTVv.js} +10 -16
- package/dist/chunks/{LpDisclosure-Cpa7Hc5T.js → LpDisclosure-DG7JCo-d.js} +2 -2
- package/dist/chunks/{LpDrawer-CrG8t_KP.js → LpDrawer-Bt9UUqt_.js} +61 -61
- package/dist/chunks/{LpDropdownMenu-Dl7Z4ZhS.js → LpDropdownMenu-CLzxIOgM.js} +9 -17
- package/dist/chunks/{LpEditable-Cy6GLbFx.js → LpEditable-DVT0Rh8F.js} +9 -6
- package/dist/chunks/{LpEmptyState-EQHiRYhG.js → LpEmptyState-DurPF001.js} +1 -1
- package/dist/chunks/{LpFieldNotice-CzQ2_5rQ.js → LpFieldNotice-DJ10cYIo.js} +1 -1
- package/dist/chunks/LpFileTree-BSx1kBoV.js +735 -0
- package/dist/chunks/{LpFileTreeNode-cT6BIWvz.js → LpFileTreeNode-4dVmFHb3.js} +116 -34
- package/dist/chunks/{LpFormField-Ch69Jd-X.js → LpFormField-BKYn9dyP.js} +3 -3
- package/dist/chunks/{LpFrame-BVQCQLDI.js → LpFrame-Bv5Fphte.js} +25 -11
- package/dist/chunks/{LpHintExample-9Py0wc-L.js → LpHintExample-YzCXiSUp.js} +1 -1
- package/dist/chunks/{LpHintLayer-CgObdUsM.js → LpHintLayer-BeKRsRon.js} +2 -2
- package/dist/chunks/{LpHints-Bz-BlaSl.js → LpHints-qf3xYsza.js} +3 -3
- package/dist/chunks/{LpHoverCard-spGxyw7T.js → LpHoverCard-DanH3Nz1.js} +23 -5
- package/dist/chunks/{LpIcon--5WSb3jJ.js → LpIcon-C6JpQ5td.js} +6 -3
- package/dist/chunks/{LpIdenticon-BzdC_qz9.js → LpIdenticon-Dbbr4fvt.js} +2 -1
- package/dist/chunks/{LpInfraNode-46XOCkfq.js → LpInfraNode-BAU40Km2.js} +2 -2
- package/dist/chunks/{LpInput-Tw-yxT4I.js → LpInput-DL6HEJdi.js} +16 -28
- package/dist/chunks/LpInspector-CuoMAhiw.js +209 -0
- package/dist/chunks/{LpLightbox-B95yu22B.js → LpLightbox-xvpQ64MM.js} +57 -32
- package/dist/chunks/{LpLoader-DVwkOmt9.js → LpLoader-Bf1yZwaU.js} +1 -1
- package/dist/chunks/LpLogInspector-6cNnXqp4.js +119 -0
- package/dist/chunks/{LpLogViewer-ngqkns4m.js → LpLogViewer-Dvb1E9_G.js} +234 -53
- package/dist/chunks/{LpMapPicker-DRGgh89B.js → LpMapPicker-D5_YLLBC.js} +4 -3
- package/dist/chunks/{LpMasonry--k0571qG.js → LpMasonry-DPYekFxs.js} +8 -5
- package/dist/chunks/{LpMediaGallery-Bkram-MO.js → LpMediaGallery-Df-tiWeq.js} +3 -3
- package/dist/chunks/{LpModal-CoGhLTyH.js → LpModal-DrtQ_1A2.js} +11 -13
- package/dist/chunks/{LpModalNav-BGvs2y5Q.js → LpModalNav-DkmGCnZE.js} +11 -37
- package/dist/chunks/{LpNotificationBell-B0034Lk-.js → LpNotificationBell-D_wklO1m.js} +9 -9
- package/dist/chunks/{LpNumberField-e0IBkWU1.js → LpNumberField-CNHsmSDZ.js} +7 -16
- package/dist/chunks/{LpOtpInput-CeBPsM7D.js → LpOtpInput-BRpLBbOD.js} +2 -2
- package/dist/chunks/{LpPagination-BIIiYHXR.js → LpPagination-snQ020xQ.js} +6 -4
- package/dist/chunks/{LpPaletteTheme-DiLYKQiZ.js → LpPaletteTheme-dVtxHx-F.js} +4 -4
- package/dist/chunks/{LpPasswordInput-BkHKQDhM.js → LpPasswordInput-B-zD6tUS.js} +2 -2
- package/dist/chunks/{LpPhoneInput-CETEp5W7.js → LpPhoneInput-BSL7NX4z.js} +15 -26
- package/dist/chunks/{LpPie-DrZepi0p.js → LpPie-9t_guO49.js} +22 -21
- package/dist/chunks/{LpPipeline-B3aOVOkV.js → LpPipeline-rjXvEDRJ.js} +16 -7
- package/dist/chunks/{LpPopover-DmZ3wUtP.js → LpPopover-BQSuxtai.js} +10 -1
- package/dist/chunks/{LpProgress-Yr6ONG5t.js → LpProgress-D_MSjowb.js} +2 -1
- package/dist/chunks/{LpQuota-Dk2MyI2Z.js → LpQuota-CgWPgdVt.js} +1 -1
- package/dist/chunks/{LpRadioGroup-ggaPL92T.js → LpRadioGroup-BrazjLY_.js} +4 -4
- package/dist/chunks/{LpRangeCalendar-CYYUYqJ7.js → LpRangeCalendar-BrqlGZzE.js} +1 -1
- package/dist/chunks/{LpRangeSlider-CM-0ZITZ.js → LpRangeSlider-fz61tzc-.js} +5 -9
- package/dist/chunks/{LpRelativeTime-DwgCb5-8.js → LpRelativeTime-BovUk8MP.js} +1 -1
- package/dist/chunks/{LpRepeater-D7ZmnIYd.js → LpRepeater-BkJHSPI1.js} +3 -3
- package/dist/chunks/{LpRevealOnScroll-DcQjexLy.js → LpRevealOnScroll-CPwyiQAr.js} +1 -1
- package/dist/chunks/{LpScramble-Bn9OoOtC.js → LpScramble-DsE77iVp.js} +1 -1
- package/dist/chunks/{LpScrollArea-MyEnVB_5.js → LpScrollArea-ay4Xo_hg.js} +22 -10
- package/dist/chunks/{LpSecretField-BbmqM9ye.js → LpSecretField-DBvU6iAw.js} +10 -9
- package/dist/chunks/{LpSection-DFK_uoJE.js → LpSection-BfteipxU.js} +1 -1
- package/dist/chunks/{LpSegmented-CeACsMMA.js → LpSegmented-DbEJhbv-.js} +8 -10
- package/dist/chunks/{LpSelect-Cxq4yBGd.js → LpSelect-Y-iuSymW.js} +47 -30
- package/dist/chunks/{LpShaderBackdrop-Bote0iuy.js → LpShaderBackdrop-wQygYb5h.js} +13 -10
- package/dist/chunks/{LpShift-CCq7dofl.js → LpShift-DAgS_d2x.js} +18 -15
- package/dist/chunks/{LpSidebar-DzE1783C.js → LpSidebar-kSkpPh3-.js} +74 -87
- package/dist/chunks/{LpSidebarNav-DE3PhXVP.js → LpSidebarNav-C2mvqrY2.js} +8 -6
- package/dist/chunks/{LpSidebarRow-BRYhNDSo.js → LpSidebarRow-eRP4Q31q.js} +6 -5
- package/dist/chunks/{LpSlider-DxYoCJJO.js → LpSlider-A4ixovgS.js} +5 -9
- package/dist/chunks/{LpSpotlight-4F3NeUMY.js → LpSpotlight-DwxkhFgR.js} +2 -1
- package/dist/chunks/{LpStat-f2LfDCJ4.js → LpStat-pMNZgFcq.js} +2 -2
- package/dist/chunks/{LpStatus-DglxttQ7.js → LpStatus-DGJFwk5F.js} +2 -2
- package/dist/chunks/{LpStepMark-DpzKVyh8.js → LpStepMark-Dw2MRTrt.js} +2 -2
- package/dist/chunks/{LpStepper-DpsocBNJ.js → LpStepper-DNnh7lCu.js} +1 -1
- package/dist/chunks/{LpSwap-C96c0LWh.js → LpSwap-M7nFeW3C.js} +1 -1
- package/dist/chunks/{LpSwitch-BnXd1llc.js → LpSwitch-DnC2-0aV.js} +3 -3
- package/dist/chunks/{LpTabFace-DPCwKkH2.js → LpTabFace-DQoV8mQG.js} +2 -2
- package/dist/chunks/{LpTableFilter-CiVBpaq0.js → LpTableFilter-DgARTsA1.js} +4 -4
- package/dist/chunks/{LpTableOfContents-BN5zvpnx.js → LpTableOfContents-CKkWEK6R.js} +14 -9
- package/dist/chunks/{LpTagsInput-C-mDG648.js → LpTagsInput-Dt0mteSj.js} +19 -27
- package/dist/chunks/{LpTextarea-TE-yZv2U.js → LpTextarea-Co0b9PVx.js} +8 -16
- package/dist/chunks/LpThemeProvider-XK6ZeWAE.js +81 -0
- package/dist/chunks/{LpThemeStudio-BpORDvH6.js → LpThemeStudio-DzYfE-5k.js} +12 -195
- package/dist/chunks/{LpThemeSwitcher-BnEn_mvf.js → LpThemeSwitcher-CFLkdbBL.js} +8 -6
- package/dist/chunks/{LpTimeField-BawSVsmt.js → LpTimeField-DeOcKWJq.js} +6 -9
- package/dist/chunks/{LpToaster-IwTXjbbU.js → LpToaster-QFj0P-5m.js} +10 -8
- package/dist/chunks/{LpTooltip-BcBvIx4z.js → LpTooltip-BJf3lZMq.js} +51 -19
- package/dist/chunks/LpTopologyCanvas-BOHHHZ_6.js +673 -0
- package/dist/chunks/{LpTour-BZq-mUMv.js → LpTour-ClKYhx4h.js} +7 -5
- package/dist/chunks/{LpTruncate-CflAIwiJ.js → LpTruncate-C6u3gjc6.js} +6 -5
- package/dist/chunks/{LpTypewriter-BCL_a6wE.js → LpTypewriter-CZIzpdbe.js} +2 -1
- package/dist/chunks/{LpUptimeBar-DqNvvMBK.js → LpUptimeBar-BnYmR2rj.js} +3 -3
- package/dist/chunks/{LpVideoBackdrop-DS1wGv-X.js → LpVideoBackdrop-Ct4St4ZL.js} +10 -13
- package/dist/chunks/LpWindow-B8YSRVTH.js +297 -0
- package/dist/chunks/LpWorkspaceSwitcher-D0e9upAy.js +139 -0
- package/dist/chunks/{MenuTitle-BmCNNTKH.js → MenuTitle-Bh5dAdV1.js} +1 -1
- package/dist/chunks/{OptionContent-22UT8zLn.js → OptionContent-CGb8QlHA.js} +1 -1
- package/dist/chunks/{PickerField-Bfh8id3d.js → PickerField-BM1dyafh.js} +4 -4
- package/dist/chunks/{RevealToggle-BEit1n6Z.js → RevealToggle-CCPDE8Mv.js} +3 -3
- package/dist/chunks/SliderRail-DhPREa_R.js +18 -0
- package/dist/chunks/{TourCard-DNclH3u_.js → TourCard-DAzTYfav.js} +4 -4
- package/dist/chunks/{icons-DMITlfw5.js → icons-CYfcpSDS.js} +26 -10
- package/dist/component-names.d.ts +1 -1
- package/dist/components/AppShellContextNav.vue.d.ts +13 -0
- package/dist/components/AppShellContextNav.vue.js +4 -0
- package/dist/components/ChartRangeSelector.vue.d.ts +21 -0
- package/dist/components/ChartRangeSelector.vue.js +4 -0
- package/dist/components/ContextMenuItems.vue.js +1 -1
- package/dist/components/DropzoneLinkField.vue.d.ts +2 -2
- package/dist/components/DropzoneLinkField.vue.js +1 -1
- package/dist/components/FieldWrapper.vue.js +1 -1
- package/dist/components/IconCloseButton.vue.d.ts +7 -0
- package/dist/components/IconCloseButton.vue.js +4 -0
- package/dist/components/LayoutCanvas.vue.js +1 -1
- package/dist/components/LayoutNode.vue.js +1 -1
- package/dist/components/LpActionBar.vue.js +1 -1
- package/dist/components/LpActivityLine.vue.js +1 -1
- package/dist/components/LpAddressInput.vue.js +1 -1
- package/dist/components/LpAlert.vue.js +1 -1
- package/dist/components/LpAppShell.vue.d.ts +110 -2
- package/dist/components/LpAppShell.vue.js +1 -1
- package/dist/components/LpAutocomplete.vue.js +1 -1
- package/dist/components/LpAvatar.vue.js +1 -1
- package/dist/components/LpBadge.vue.js +1 -1
- package/dist/components/LpBottomNav.vue.d.ts +5 -0
- package/dist/components/LpBottomNav.vue.js +1 -1
- package/dist/components/LpBreadcrumbs.vue.js +1 -1
- package/dist/components/LpButton.vue.d.ts +14 -2
- package/dist/components/LpButton.vue.js +1 -1
- package/dist/components/LpCalendar.vue.js +1 -1
- package/dist/components/LpCard.vue.js +1 -1
- package/dist/components/LpChart.vue.d.ts +74 -2
- package/dist/components/LpChart.vue.js +326 -85
- package/dist/components/LpCheckbox.vue.d.ts +6 -2
- package/dist/components/LpCheckbox.vue.js +1 -1
- package/dist/components/LpCodeBlock.vue.js +1 -1
- package/dist/components/LpCodeDisplay.vue.js +1 -1
- package/dist/components/LpCollapse.vue.js +1 -1
- package/dist/components/LpColorPicker.vue.js +1 -1
- package/dist/components/LpCommandPalette.vue.d.ts +8 -0
- package/dist/components/LpCommandPalette.vue.js +107 -56
- package/dist/components/LpCommandScope.vue.js +1 -1
- package/dist/components/LpConfirmDialog.vue.js +1 -1
- package/dist/components/LpConfirmHost.vue.js +1 -1
- package/dist/components/LpContextMenu.vue.js +1 -1
- package/dist/components/LpContextSwitcher.vue.js +1 -1
- package/dist/components/LpCopyButton.vue.js +1 -1
- package/dist/components/LpCountdown.vue.js +1 -1
- package/dist/components/LpDataList.vue.d.ts +1 -1
- package/dist/components/LpDataList.vue.js +1 -1
- package/dist/components/LpDatePicker.vue.d.ts +3 -15
- package/dist/components/LpDatePicker.vue.js +1 -1
- package/dist/components/LpDateRangePicker.vue.d.ts +3 -13
- package/dist/components/LpDateRangePicker.vue.js +1 -1
- package/dist/components/LpDisclosure.vue.js +1 -1
- package/dist/components/LpDock.vue.js +21 -18
- package/dist/components/LpDrawer.vue.d.ts +1 -1
- package/dist/components/LpDrawer.vue.js +1 -1
- package/dist/components/LpDropdownMenu.vue.js +1 -1
- package/dist/components/LpDropzone.vue.js +14 -11
- package/dist/components/LpEditable.vue.js +1 -1
- package/dist/components/LpEmptyState.vue.js +1 -1
- package/dist/components/LpFieldNotice.vue.js +1 -1
- package/dist/components/LpFileTree.vue.d.ts +96 -6
- package/dist/components/LpFileTree.vue.js +1 -1
- package/dist/components/LpFileTreeNode.vue.d.ts +48 -0
- package/dist/components/LpFileTreeNode.vue.js +1 -1
- package/dist/components/LpFormField.vue.js +1 -1
- package/dist/components/LpFrame.vue.js +1 -1
- package/dist/components/LpGauge.vue.d.ts +1 -1
- package/dist/components/LpHintExample.vue.js +1 -1
- package/dist/components/LpHintLayer.vue.js +1 -1
- package/dist/components/LpHints.vue.js +1 -1
- package/dist/components/LpHoverCard.vue.js +1 -1
- package/dist/components/LpIcon.vue.d.ts +2 -0
- package/dist/components/LpIcon.vue.js +1 -1
- package/dist/components/LpIdenticon.vue.js +1 -1
- package/dist/components/LpImageEditor.vue.js +7 -6
- package/dist/components/LpInfraNode.vue.js +1 -1
- package/dist/components/LpInput.vue.d.ts +1 -1
- package/dist/components/LpInput.vue.js +1 -1
- package/dist/components/LpInspector.vue.d.ts +87 -0
- package/dist/components/LpInspector.vue.js +4 -0
- package/dist/components/LpLightbox.vue.d.ts +8 -0
- package/dist/components/LpLightbox.vue.js +1 -1
- package/dist/components/LpLoader.vue.d.ts +1 -1
- package/dist/components/LpLoader.vue.js +1 -1
- package/dist/components/LpLogInspector.vue.d.ts +18 -0
- package/dist/components/LpLogInspector.vue.js +4 -0
- package/dist/components/LpLogViewer.vue.d.ts +93 -0
- package/dist/components/LpLogViewer.vue.js +1 -1
- package/dist/components/LpMapPicker.vue.js +1 -1
- package/dist/components/LpMasonry.vue.js +1 -1
- package/dist/components/LpMediaGallery.vue.js +1 -1
- package/dist/components/LpModal.vue.d.ts +4 -2
- package/dist/components/LpModal.vue.js +1 -1
- package/dist/components/LpModalNav.vue.d.ts +5 -5
- package/dist/components/LpModalNav.vue.js +1 -1
- package/dist/components/LpNotificationBell.vue.d.ts +2 -2
- package/dist/components/LpNotificationBell.vue.js +1 -1
- package/dist/components/LpNumberField.vue.js +1 -1
- package/dist/components/LpOtpInput.vue.js +1 -1
- package/dist/components/LpPagination.vue.js +1 -1
- package/dist/components/LpPaletteFacts.vue.js +1 -1
- package/dist/components/LpPaletteHeader.vue.js +2 -2
- package/dist/components/LpPaletteTheme.vue.js +1 -1
- package/dist/components/LpPasswordInput.vue.js +1 -1
- package/dist/components/LpPhoneInput.vue.js +1 -1
- package/dist/components/LpPie.vue.d.ts +2 -2
- package/dist/components/LpPie.vue.js +1 -1
- package/dist/components/LpPipeline.vue.d.ts +4 -0
- package/dist/components/LpPipeline.vue.js +1 -1
- package/dist/components/LpPopover.vue.d.ts +7 -3
- package/dist/components/LpPopover.vue.js +1 -1
- package/dist/components/LpProgress.vue.d.ts +1 -1
- package/dist/components/LpProgress.vue.js +1 -1
- package/dist/components/LpQuota.vue.js +1 -1
- package/dist/components/LpRadioGroup.vue.js +1 -1
- package/dist/components/LpRangeCalendar.vue.js +1 -1
- package/dist/components/LpRangeSlider.vue.js +1 -1
- package/dist/components/LpRelativeTime.vue.js +1 -1
- package/dist/components/LpRepeater.vue.js +1 -1
- package/dist/components/LpRevealOnScroll.vue.js +1 -1
- package/dist/components/LpScramble.vue.js +1 -1
- package/dist/components/LpScrollArea.vue.js +1 -1
- package/dist/components/LpSecretField.vue.js +1 -1
- package/dist/components/LpSection.vue.js +1 -1
- package/dist/components/LpSegmented.vue.js +1 -1
- package/dist/components/LpSelect.vue.js +1 -1
- package/dist/components/LpShaderBackdrop.vue.js +1 -1
- package/dist/components/LpShift.vue.js +1 -1
- package/dist/components/LpShortcutsDialog.vue.js +1 -1
- package/dist/components/LpSidebar.vue.d.ts +1 -1
- package/dist/components/LpSidebar.vue.js +1 -1
- package/dist/components/LpSidebarNav.vue.js +1 -1
- package/dist/components/LpSidebarRow.vue.js +1 -1
- package/dist/components/LpSlider.vue.js +1 -1
- package/dist/components/LpSparkline.vue.d.ts +1 -1
- package/dist/components/LpSpotlight.vue.js +1 -1
- package/dist/components/LpStat.vue.js +1 -1
- package/dist/components/LpStatus.vue.js +1 -1
- package/dist/components/LpStepMark.vue.js +1 -1
- package/dist/components/LpStepper.vue.js +1 -1
- package/dist/components/LpSwap.vue.js +1 -1
- package/dist/components/LpSwitch.vue.js +1 -1
- package/dist/components/LpTabFace.vue.js +1 -1
- package/dist/components/LpTable.vue.d.ts +132 -0
- package/dist/components/LpTable.vue.js +547 -135
- package/dist/components/LpTableFilter.vue.js +1 -1
- package/dist/components/LpTableOfContents.vue.js +1 -1
- package/dist/components/LpTabs.vue.js +6 -5
- package/dist/components/LpTagsInput.vue.js +1 -1
- package/dist/components/LpTextarea.vue.js +1 -1
- package/dist/components/LpThemeProvider.vue.d.ts +2 -0
- package/dist/components/LpThemeProvider.vue.js +1 -1
- package/dist/components/LpThemeStudio.vue.js +1 -1
- package/dist/components/LpThemeSwitcher.vue.js +1 -1
- package/dist/components/LpTimeField.vue.js +1 -1
- package/dist/components/LpToaster.vue.js +1 -1
- package/dist/components/LpTooltip.vue.js +1 -1
- package/dist/components/LpTopologyCanvas.vue.d.ts +131 -5
- package/dist/components/LpTopologyCanvas.vue.js +1 -1
- package/dist/components/LpTour.vue.js +1 -1
- package/dist/components/LpTruncate.vue.js +1 -1
- package/dist/components/LpTypewriter.vue.js +1 -1
- package/dist/components/LpUptimeBar.vue.js +1 -1
- package/dist/components/LpVideoBackdrop.vue.js +1 -1
- package/dist/components/LpWindow.vue.d.ts +99 -0
- package/dist/components/LpWindow.vue.js +4 -0
- package/dist/components/LpWorkspaceSwitcher.vue.d.ts +18 -0
- package/dist/components/LpWorkspaceSwitcher.vue.js +4 -0
- package/dist/components/MenuTitle.vue.js +1 -1
- package/dist/components/OptionContent.vue.js +1 -1
- package/dist/components/PickerField.vue.d.ts +2 -2
- package/dist/components/PickerField.vue.js +1 -1
- package/dist/components/RevealToggle.vue.js +1 -1
- package/dist/components/SliderRail.vue.d.ts +3 -0
- package/dist/components/SliderRail.vue.js +4 -0
- package/dist/components/TourCard.vue.js +1 -1
- package/dist/components/address.js +2 -1
- package/dist/components/appShell.d.ts +36 -0
- package/dist/components/appShell.js +30 -0
- package/dist/components/calendar.d.ts +12 -3
- package/dist/components/calendar.js +2 -5
- package/dist/components/chart.d.ts +21 -0
- package/dist/components/chart.js +4 -3
- package/dist/components/chartWindow.d.ts +57 -0
- package/dist/components/chartWindow.js +136 -0
- package/dist/components/color.js +1 -1
- package/dist/components/commandPalette.d.ts +16 -2
- package/dist/components/commandPalette.js +39 -4
- package/dist/components/controlSize.d.ts +5 -0
- package/dist/components/controlSize.js +8 -0
- package/dist/components/dropdown.d.ts +5 -0
- package/dist/components/dropdown.js +2 -0
- package/dist/components/exportData.d.ts +6 -1
- package/dist/components/exportData.js +25 -18
- package/dist/components/fileTree.d.ts +67 -0
- package/dist/components/fileTree.js +141 -1
- package/dist/components/identicon.js +3 -2
- package/dist/components/logTools.d.ts +93 -0
- package/dist/components/logTools.js +210 -0
- package/dist/components/menuWhen.js +1 -1
- package/dist/components/meter.js +2 -1
- package/dist/components/pipeline.d.ts +2 -0
- package/dist/components/pipeline.js +5 -0
- package/dist/components/relativeTime.js +2 -1
- package/dist/components/reveal.js +2 -1
- package/dist/components/select.d.ts +5 -0
- package/dist/components/select.js +10 -0
- package/dist/components/sidebar.d.ts +1 -0
- package/dist/components/tableFeatures.d.ts +58 -0
- package/dist/components/tableFeatures.js +87 -0
- package/dist/components/topologyGraph.d.ts +164 -0
- package/dist/components/topologyGraph.js +416 -0
- package/dist/components/tour.js +5 -3
- package/dist/components/videoBackdrop.js +7 -6
- package/dist/composables/clamp.d.ts +2 -0
- package/dist/composables/clamp.js +4 -0
- package/dist/composables/devWarn.d.ts +3 -0
- package/dist/composables/devWarn.js +14 -0
- package/dist/composables/easing.d.ts +13 -4
- package/dist/composables/easing.js +16 -10
- package/dist/composables/overlayHistory.js +14 -1
- package/dist/composables/pointerDrag.d.ts +15 -0
- package/dist/composables/pointerDrag.js +40 -0
- package/dist/composables/propCheck.d.ts +10 -0
- package/dist/composables/propCheck.js +78 -0
- package/dist/composables/realm.d.ts +6 -0
- package/dist/composables/realm.js +23 -0
- package/dist/composables/scroll.js +4 -2
- package/dist/composables/scrollMemory.d.ts +12 -1
- package/dist/composables/scrollMemory.js +36 -12
- package/dist/composables/spatialNav.js +2 -1
- package/dist/composables/textEntry.d.ts +17 -0
- package/dist/composables/textEntry.js +19 -0
- package/dist/composables/useAsyncTask.d.ts +6 -0
- package/dist/composables/useChartSync.d.ts +5 -0
- package/dist/composables/useChartSync.js +33 -0
- package/dist/composables/useCloseGuard.d.ts +3 -1
- package/dist/composables/useCloseGuard.js +6 -3
- package/dist/composables/useCommands.d.ts +50 -0
- package/dist/composables/useCommands.js +66 -0
- package/dist/composables/useField.d.ts +37 -0
- package/dist/composables/useField.js +27 -2
- package/dist/composables/useFitScale.js +4 -1
- package/dist/composables/useFormDraft.d.ts +13 -2
- package/dist/composables/useFormDraft.js +17 -9
- package/dist/composables/useHintSystem.js +2 -2
- package/dist/composables/useHotkeys.js +11 -32
- package/dist/composables/useInView.js +2 -1
- package/dist/composables/useInputFilter.js +7 -5
- package/dist/composables/useInputMask.js +5 -3
- package/dist/composables/useLinkedView.d.ts +97 -0
- package/dist/composables/useLinkedView.js +139 -0
- package/dist/composables/useOptimisticToggle.d.ts +3 -1
- package/dist/composables/useOptimisticToggle.js +2 -1
- package/dist/composables/useOverlayHistory.d.ts +7 -0
- package/dist/composables/useOverlayHistory.js +16 -2
- package/dist/composables/usePaintSelect.js +18 -14
- package/dist/composables/usePaletteCommands.d.ts +7 -0
- package/dist/composables/usePaletteCommands.js +12 -1
- package/dist/composables/usePersisted.d.ts +10 -0
- package/dist/composables/usePersisted.js +1 -1
- package/dist/composables/usePillTransition.d.ts +2 -2
- package/dist/composables/usePillTransition.js +5 -5
- package/dist/composables/useResizeObserver.js +2 -1
- package/dist/composables/useReveal.js +2 -1
- package/dist/composables/useRovingFocus.d.ts +2 -2
- package/dist/composables/useRovingFocus.js +9 -11
- package/dist/composables/useScramble.js +7 -1
- package/dist/composables/useShift.js +8 -6
- package/dist/composables/useTilt.js +2 -1
- package/dist/composables/useTween.js +9 -5
- package/dist/composables/useView.d.ts +1 -0
- package/dist/composables/useView.js +14 -2
- package/dist/composables/useZoomPan.js +2 -4
- package/dist/composables/windowing.d.ts +40 -0
- package/dist/composables/windowing.js +118 -0
- package/dist/icons-all.js +1 -1
- package/dist/icons.d.ts +4 -0
- package/dist/index.d.ts +30 -5
- package/dist/index.js +310 -264
- package/dist/layout/tree.js +19 -15
- package/dist/layout/useLayout.d.ts +2 -0
- package/dist/layout/useLayout.js +5 -1
- package/dist/layout/useWorkspaces.d.ts +52 -0
- package/dist/layout/useWorkspaces.js +140 -0
- package/dist/{chunks/backdrop-Dkf2vM81.js → theme/backdrop.js} +5 -5
- package/dist/theme/config.js +25 -0
- package/dist/theme/define.js +61 -0
- package/dist/{chunks/palette-Co8tSASo.js → theme/palette.js} +2 -2
- package/dist/theme/presets.js +239 -0
- package/dist/theme/studio.js +134 -0
- package/dist/theme/tokens.js +63 -0
- package/dist/theme/useTheme.d.ts +3 -2
- package/dist/theme/useTheme.js +325 -0
- package/package.json +8 -1
- package/src/component-names.ts +5 -1
- package/src/components/AppShellContextNav.vue +44 -0
- package/src/components/ChartRangeSelector.vue +120 -0
- package/src/components/IconCloseButton.vue +21 -0
- package/src/components/LayoutCanvas.vue +3 -0
- package/src/components/LayoutNode.vue +37 -38
- package/src/components/LpActivityLine.vue +4 -2
- package/src/components/LpAddressInput.vue +3 -3
- package/src/components/LpAppShell.vue +362 -24
- package/src/components/LpAutocomplete.vue +18 -30
- package/src/components/LpBottomNav.vue +9 -1
- package/src/components/LpBreadcrumbs.vue +2 -1
- package/src/components/LpButton.vue +11 -4
- package/src/components/LpChart.vue +336 -37
- package/src/components/LpCheckbox.vue +43 -9
- package/src/components/LpCodeBlock.vue +17 -23
- package/src/components/LpCollapse.vue +5 -4
- package/src/components/LpColorPicker.vue +8 -9
- package/src/components/LpCommandPalette.vue +133 -50
- package/src/components/LpContextMenu.vue +15 -13
- package/src/components/LpCountdown.vue +2 -1
- package/src/components/LpDataList.vue +13 -1
- package/src/components/LpDatePicker.vue +5 -17
- package/src/components/LpDateRangePicker.vue +5 -16
- package/src/components/LpDock.vue +25 -16
- package/src/components/LpDrawer.vue +70 -61
- package/src/components/LpDropdownMenu.vue +6 -10
- package/src/components/LpDropzone.vue +12 -7
- package/src/components/LpEditable.vue +6 -2
- package/src/components/LpFileTree.vue +507 -66
- package/src/components/LpFileTreeNode.vue +106 -5
- package/src/components/LpFormField.vue +1 -1
- package/src/components/LpFrame.vue +33 -13
- package/src/components/LpHoverCard.vue +30 -5
- package/src/components/LpIcon.vue +6 -2
- package/src/components/LpIdenticon.vue +2 -1
- package/src/components/LpImageEditor.vue +5 -2
- package/src/components/LpInput.vue +15 -23
- package/src/components/LpInspector.vue +197 -0
- package/src/components/LpLightbox.vue +74 -29
- package/src/components/LpLogInspector.vue +85 -0
- package/src/components/LpLogViewer.vue +239 -29
- package/src/components/LpMapPicker.vue +2 -1
- package/src/components/LpMasonry.vue +8 -5
- package/src/components/LpModal.vue +12 -12
- package/src/components/LpModalNav.vue +2 -21
- package/src/components/LpNumberField.vue +6 -15
- package/src/components/LpOtpInput.vue +2 -2
- package/src/components/LpPagination.vue +5 -3
- package/src/components/LpPhoneInput.vue +8 -19
- package/src/components/LpPie.vue +25 -23
- package/src/components/LpPipeline.vue +14 -1
- package/src/components/LpPopover.vue +23 -2
- package/src/components/LpProgress.vue +2 -1
- package/src/components/LpRadioGroup.vue +2 -2
- package/src/components/LpRangeSlider.vue +5 -6
- package/src/components/LpRevealOnScroll.vue +1 -1
- package/src/components/LpScrollArea.vue +28 -11
- package/src/components/LpSecretField.vue +2 -1
- package/src/components/LpSegmented.vue +6 -8
- package/src/components/LpSelect.vue +54 -24
- package/src/components/LpShaderBackdrop.vue +12 -9
- package/src/components/LpShift.vue +18 -15
- package/src/components/LpSidebar.vue +77 -74
- package/src/components/LpSidebarNav.vue +3 -2
- package/src/components/LpSidebarRow.vue +2 -1
- package/src/components/LpSlider.vue +5 -6
- package/src/components/LpSpotlight.vue +2 -1
- package/src/components/LpSwitch.vue +5 -3
- package/src/components/LpTable.vue +609 -93
- package/src/components/LpTableFilter.vue +1 -1
- package/src/components/LpTableOfContents.vue +16 -9
- package/src/components/LpTabs.vue +2 -1
- package/src/components/LpTagsInput.vue +12 -19
- package/src/components/LpTextarea.vue +5 -11
- package/src/components/LpThemeProvider.vue +29 -13
- package/src/components/LpTimeField.vue +4 -7
- package/src/components/LpToaster.vue +7 -6
- package/src/components/LpTooltip.vue +62 -18
- package/src/components/LpTopologyCanvas.vue +567 -42
- package/src/components/LpTour.vue +7 -5
- package/src/components/LpTruncate.vue +4 -3
- package/src/components/LpTypewriter.vue +2 -1
- package/src/components/LpVideoBackdrop.vue +11 -13
- package/src/components/LpWindow.vue +373 -0
- package/src/components/LpWorkspaceSwitcher.vue +116 -0
- package/src/components/PickerField.vue +2 -2
- package/src/components/SliderRail.vue +10 -0
- package/src/components/address.ts +3 -1
- package/src/components/appShell.ts +74 -0
- package/src/components/calendar.ts +12 -5
- package/src/components/chart.ts +27 -3
- package/src/components/chartWindow.ts +198 -0
- package/src/components/color.ts +2 -1
- package/src/components/commandPalette.ts +66 -5
- package/src/components/controlSize.ts +6 -0
- package/src/components/dropdown.ts +3 -0
- package/src/components/exportData.ts +33 -18
- package/src/components/fileTree.ts +215 -0
- package/src/components/identicon.ts +4 -2
- package/src/components/logTools.ts +298 -0
- package/src/components/meter.ts +2 -1
- package/src/components/pipeline.ts +6 -0
- package/src/components/relativeTime.ts +2 -1
- package/src/components/reveal.ts +3 -1
- package/src/components/select.ts +14 -0
- package/src/components/sidebar.ts +1 -0
- package/src/components/tableFeatures.ts +149 -0
- package/src/components/topologyGraph.ts +655 -0
- package/src/components/tour.ts +5 -3
- package/src/components/videoBackdrop.ts +7 -6
- package/src/composables/clamp.ts +2 -0
- package/src/composables/devWarn.ts +19 -0
- package/src/composables/easing.ts +37 -12
- package/src/composables/overlayHistory.ts +24 -0
- package/src/composables/pointerDrag.ts +54 -0
- package/src/composables/propCheck.ts +90 -0
- package/src/composables/realm.ts +25 -0
- package/src/composables/scroll.ts +4 -2
- package/src/composables/scrollMemory.ts +56 -14
- package/src/composables/spatialNav.ts +2 -1
- package/src/composables/textEntry.ts +33 -0
- package/src/composables/useAsyncTask.ts +6 -0
- package/src/composables/useChartSync.ts +52 -0
- package/src/composables/useCloseGuard.ts +22 -10
- package/src/composables/useCommands.ts +123 -0
- package/src/composables/useField.ts +41 -2
- package/src/composables/useFitScale.ts +4 -1
- package/src/composables/useFormDraft.ts +38 -14
- package/src/composables/useHintSystem.ts +2 -2
- package/src/composables/useHotkeys.ts +19 -48
- package/src/composables/useInView.ts +2 -1
- package/src/composables/useInputFilter.ts +8 -5
- package/src/composables/useInputMask.ts +8 -3
- package/src/composables/useLinkedView.ts +222 -0
- package/src/composables/useOptimisticToggle.ts +7 -1
- package/src/composables/useOverlayHistory.ts +20 -0
- package/src/composables/usePaintSelect.ts +20 -14
- package/src/composables/usePaletteCommands.ts +13 -0
- package/src/composables/usePersisted.ts +10 -0
- package/src/composables/usePillTransition.ts +9 -6
- package/src/composables/useResizeObserver.ts +2 -1
- package/src/composables/useReveal.ts +2 -1
- package/src/composables/useRovingFocus.ts +11 -14
- package/src/composables/useScramble.ts +12 -1
- package/src/composables/useShift.ts +8 -6
- package/src/composables/useTilt.ts +2 -1
- package/src/composables/useTween.ts +10 -5
- package/src/composables/useView.ts +17 -3
- package/src/composables/useZoomPan.ts +2 -5
- package/src/composables/windowing.ts +190 -0
- package/src/icons.ts +27 -6
- package/src/index.ts +41 -4
- package/src/kit-icons.ts +1 -1
- package/src/layout/tree.ts +31 -16
- package/src/layout/useLayout.ts +6 -0
- package/src/layout/useWorkspaces.ts +234 -0
- package/src/nuxt.ts +9 -1
- package/src/runtime/propCheck.plugin.ts +10 -0
- package/src/theme/studio.ts +7 -5
- package/src/theme/useTheme.ts +89 -15
- package/src/tokens/tokens.css +8 -1
- package/dist/assets/LpTabs-CJ0rYQbx.css +0 -18
- package/dist/chunks/LpAppShell-Dgejipzz.js +0 -319
- package/dist/chunks/LpFileTree-CooHinsC.js +0 -425
- package/dist/chunks/LpThemeProvider-8MG6yqU9.js +0 -640
- package/dist/chunks/LpTopologyCanvas-B1gIbS0n.js +0 -298
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock, createElementVNode, Transition, renderSlot, mergeProps, normalizeStyle, TransitionGroup, unref,
|
|
1
|
+
import { defineComponent, computed, useAttrs, ref, shallowRef, watch, onMounted, onBeforeUnmount, useId, h, openBlock, createElementBlock, normalizeClass, createVNode, withCtx, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock, createElementVNode, Transition, renderSlot, mergeProps, normalizeStyle, withModifiers, TransitionGroup, unref, nextTick } from "vue";
|
|
2
2
|
import { usePaletteScope, suppressPaletteDiscovery, usePaletteCommands } from "../composables/usePaletteCommands.js";
|
|
3
3
|
import { menuPaletteCommands } from "./commandPalette.js";
|
|
4
|
-
import { _ as _sfc_main$1 } from "../chunks/LpDataList-
|
|
5
|
-
import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-
|
|
6
|
-
import { _ as _sfc_main$8 } from "../chunks/LpContextMenu
|
|
7
|
-
import { _ as _sfc_main$
|
|
8
|
-
import { _ as _sfc_main$
|
|
9
|
-
import { _ as _sfc_main$
|
|
4
|
+
import { _ as _sfc_main$1 } from "../chunks/LpDataList-DgBeM01y.js";
|
|
5
|
+
import { _ as _sfc_main$9 } from "../chunks/LpCheckbox-D6RuDW4X.js";
|
|
6
|
+
import { _ as _sfc_main$8 } from "../chunks/LpContextMenu--eMGIql6.js";
|
|
7
|
+
import { _ as _sfc_main$e } from "../chunks/LpEditable-DVT0Rh8F.js";
|
|
8
|
+
import { _ as _sfc_main$d } from "../chunks/LpEmptyState-DurPF001.js";
|
|
9
|
+
import { _ as _sfc_main$5 } from "../chunks/LpBadge-D5QQdDQ_.js";
|
|
10
|
+
import { _ as _sfc_main$3 } from "../chunks/LpIcon-C6JpQ5td.js";
|
|
10
11
|
import { _ as _sfc_main$c } from "../chunks/LpSkeleton-BB6XIV-w.js";
|
|
11
|
-
import { _ as _sfc_main$
|
|
12
|
-
import { _ as _sfc_main$a } from "../chunks/LpPopover-
|
|
13
|
-
import { _ as _sfc_main$7 } from "../chunks/LpScrollArea-
|
|
12
|
+
import { _ as _sfc_main$f } from "../chunks/LpPagination-snQ020xQ.js";
|
|
13
|
+
import { _ as _sfc_main$a } from "../chunks/LpPopover-BQSuxtai.js";
|
|
14
|
+
import { _ as _sfc_main$7 } from "../chunks/LpScrollArea-ay4Xo_hg.js";
|
|
14
15
|
import { _ as _sfc_main$6 } from "../chunks/LpRollingText-B54Pje7P.js";
|
|
15
|
-
import { _ as _sfc_main$4 } from "../chunks/LpShift-
|
|
16
|
-
import { _ as _sfc_main$b } from "../chunks/LpTableFilter-
|
|
16
|
+
import { _ as _sfc_main$4 } from "../chunks/LpShift-DAgS_d2x.js";
|
|
17
|
+
import { _ as _sfc_main$b } from "../chunks/LpTableFilter-DgARTsA1.js";
|
|
17
18
|
import { useKitStorage } from "../composables/usePersisted.js";
|
|
18
19
|
import { useAsyncTask } from "../composables/useAsyncTask.js";
|
|
19
20
|
import { useTableFacets } from "./tableFacets.js";
|
|
@@ -22,13 +23,16 @@ import { usePaintSelect } from "../composables/usePaintSelect.js";
|
|
|
22
23
|
import { useRovingFocus } from "../composables/useRovingFocus.js";
|
|
23
24
|
import { useLabels } from "../composables/useLpConfig.js";
|
|
24
25
|
import { useResizeObserver } from "../composables/useResizeObserver.js";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
26
|
+
import { orderPinned, pinOffsets, groupRows, rowWindow, presetHidden, sortByKeys, nextSorts, clampColumnWidth } from "./tableFeatures.js";
|
|
27
|
+
import { devWarn } from "../composables/devWarn.js";
|
|
28
|
+
import { startPointerDrag } from "../composables/pointerDrag.js";
|
|
29
|
+
import { isHTMLElement, nodeWindow } from "../composables/realm.js";
|
|
30
|
+
import { _ as _sfc_main$2 } from "../chunks/LpButton-DSHioIfD.js";
|
|
27
31
|
import { toCsv, downloadFile, fileStem } from "./exportData.js";
|
|
28
32
|
import { toHiddenSets, sameHidden, summarizeShown, parseTableState, mergeRestored, serializeTableState, fromHiddenSets } from "./tableFilter.js";
|
|
29
33
|
import { resolveRowMenu } from "./tableRowMenu.js";
|
|
30
34
|
import { _ as _export_sfc } from "../chunks/_plugin-vue_export-helper-1tPrXgE0.js";
|
|
31
|
-
import '../assets/LpTable-
|
|
35
|
+
import '../assets/LpTable-CCk0ZHo7.css';const _hoisted_1 = {
|
|
32
36
|
key: 0,
|
|
33
37
|
class: "flex justify-end"
|
|
34
38
|
};
|
|
@@ -52,22 +56,47 @@ const _hoisted_8 = {
|
|
|
52
56
|
class: "flex items-center gap-2"
|
|
53
57
|
};
|
|
54
58
|
const _hoisted_9 = { class: "hidden sm:inline" };
|
|
55
|
-
const _hoisted_10 =
|
|
56
|
-
const _hoisted_11 =
|
|
57
|
-
const _hoisted_12 = ["
|
|
58
|
-
const _hoisted_13 = ["
|
|
59
|
-
const _hoisted_14 = ["
|
|
59
|
+
const _hoisted_10 = ["aria-rowcount"];
|
|
60
|
+
const _hoisted_11 = { class: "border-b border-line bg-surface-soft" };
|
|
61
|
+
const _hoisted_12 = ["inert"];
|
|
62
|
+
const _hoisted_13 = ["data-lp-col", "aria-sort"];
|
|
63
|
+
const _hoisted_14 = ["onClick"];
|
|
60
64
|
const _hoisted_15 = {
|
|
65
|
+
key: 1,
|
|
66
|
+
class: "tabular-nums text-brand"
|
|
67
|
+
};
|
|
68
|
+
const _hoisted_16 = ["aria-label", "data-lp-filter"];
|
|
69
|
+
const _hoisted_17 = ["aria-label", "aria-valuenow", "data-lp-resize", "onPointerdown", "onDblclick", "onKeydown"];
|
|
70
|
+
const _hoisted_18 = {
|
|
61
71
|
key: 0,
|
|
62
72
|
class: "sr-only"
|
|
63
73
|
};
|
|
64
|
-
const
|
|
74
|
+
const _hoisted_19 = {
|
|
65
75
|
key: "lp-table-empty",
|
|
66
76
|
class: "lp-row-empty"
|
|
67
77
|
};
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
78
|
+
const _hoisted_20 = ["colspan"];
|
|
79
|
+
const _hoisted_21 = {
|
|
80
|
+
key: "lp-virtual-before",
|
|
81
|
+
"aria-hidden": "true"
|
|
82
|
+
};
|
|
83
|
+
const _hoisted_22 = ["colspan"];
|
|
84
|
+
const _hoisted_23 = ["colspan"];
|
|
85
|
+
const _hoisted_24 = ["aria-expanded", "aria-label", "onClick"];
|
|
86
|
+
const _hoisted_25 = {
|
|
87
|
+
key: 1,
|
|
88
|
+
class: "border-b border-line/60 last:border-0",
|
|
89
|
+
"data-lp-row-detail": ""
|
|
90
|
+
};
|
|
91
|
+
const _hoisted_26 = ["colspan"];
|
|
92
|
+
const _hoisted_27 = ["onContextmenu", "aria-rowindex", "data-paint-key", "data-lp-context-row", "onClick", "onPointerdown"];
|
|
93
|
+
const _hoisted_28 = ["aria-expanded", "aria-label", "onClick"];
|
|
94
|
+
const _hoisted_29 = ["onPointerdown"];
|
|
95
|
+
const _hoisted_30 = {
|
|
96
|
+
key: "lp-virtual-after",
|
|
97
|
+
"aria-hidden": "true"
|
|
98
|
+
};
|
|
99
|
+
const _hoisted_31 = ["colspan"];
|
|
71
100
|
const __default__ = { inheritAttrs: false };
|
|
72
101
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
73
102
|
...__default__,
|
|
@@ -105,9 +134,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
105
134
|
density: { default: "comfortable" },
|
|
106
135
|
summary: { type: Boolean, default: false },
|
|
107
136
|
persist: {},
|
|
108
|
-
allMatching: { type: Boolean, default: false }
|
|
137
|
+
allMatching: { type: Boolean, default: false },
|
|
138
|
+
selectionToken: { type: Boolean },
|
|
139
|
+
multiSort: { type: Boolean },
|
|
140
|
+
sorts: { default: void 0 },
|
|
141
|
+
resizableColumns: { type: Boolean },
|
|
142
|
+
columnWidths: { default: void 0 },
|
|
143
|
+
columnPresets: {},
|
|
144
|
+
columnPreset: { default: void 0 },
|
|
145
|
+
groupBy: { type: [String, Function], default: void 0 },
|
|
146
|
+
groupLabel: {},
|
|
147
|
+
collapsedGroups: { default: void 0 },
|
|
148
|
+
expandable: { type: [Boolean, Function] },
|
|
149
|
+
expanded: { default: void 0 },
|
|
150
|
+
virtualRowHeight: { default: void 0 },
|
|
151
|
+
virtualOverscan: { default: 6 }
|
|
109
152
|
},
|
|
110
|
-
emits: ["update:selected", "update:sort", "update:filters", "resetFilters", "update:allMatching", "rowClick"],
|
|
153
|
+
emits: ["update:selected", "update:sort", "update:filters", "resetFilters", "update:allMatching", "update:selectionToken", "update:sorts", "update:columnWidths", "update:columnPreset", "update:collapsedGroups", "update:expanded", "cellEdit", "rowClick"],
|
|
111
154
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
112
155
|
const props = __props;
|
|
113
156
|
const labelSet = useLabels(
|
|
@@ -145,7 +188,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
145
188
|
clearSelection: "Clear selection",
|
|
146
189
|
pageSelected: "All {count} on this page are selected.",
|
|
147
190
|
selectAllMatching: "Select all {total}",
|
|
148
|
-
allMatchingSelected: "All {total} are selected."
|
|
191
|
+
allMatchingSelected: "All {total} are selected.",
|
|
192
|
+
columnPresets: "Column presets",
|
|
193
|
+
resizeColumn: "Resize {column}",
|
|
194
|
+
expandRow: "Expand row",
|
|
195
|
+
collapseRow: "Collapse row",
|
|
196
|
+
groupCount: "{label} ({count})",
|
|
197
|
+
expandGroup: "Expand {label}",
|
|
198
|
+
collapseGroup: "Collapse {label}"
|
|
149
199
|
},
|
|
150
200
|
() => props.labels
|
|
151
201
|
);
|
|
@@ -184,10 +234,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
184
234
|
}
|
|
185
235
|
function openRowMenu(event) {
|
|
186
236
|
const button = event.currentTarget;
|
|
187
|
-
if (!(button
|
|
237
|
+
if (!isHTMLElement(button)) return;
|
|
188
238
|
const rect = button.getBoundingClientRect();
|
|
239
|
+
const win = nodeWindow(button);
|
|
189
240
|
button.dispatchEvent(
|
|
190
|
-
new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX: rect.left, clientY: rect.bottom })
|
|
241
|
+
new win.MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX: rect.left, clientY: rect.bottom })
|
|
191
242
|
);
|
|
192
243
|
}
|
|
193
244
|
const rowMenuFor = computed(
|
|
@@ -206,7 +257,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
206
257
|
return [...row, { ...table[0], separatorBefore: true }, ...table.slice(1)];
|
|
207
258
|
});
|
|
208
259
|
const ownSort = ref(null);
|
|
209
|
-
const
|
|
260
|
+
const ownSorts = ref([]);
|
|
261
|
+
const activeSort = computed(() => {
|
|
262
|
+
if (props.multiSort) return (props.sorts ?? ownSorts.value)[0] ?? null;
|
|
263
|
+
return props.sort !== void 0 ? props.sort : ownSort.value;
|
|
264
|
+
});
|
|
265
|
+
const sortList = computed(() => {
|
|
266
|
+
if (props.multiSort) return props.sorts ?? ownSorts.value;
|
|
267
|
+
return activeSort.value ? [activeSort.value] : [];
|
|
268
|
+
});
|
|
269
|
+
const sortOf = (col) => sortList.value.find((sort) => sort.key === col.key);
|
|
210
270
|
const loaded = shallowRef([]);
|
|
211
271
|
const total = ref(0);
|
|
212
272
|
const facets = ref({});
|
|
@@ -216,6 +276,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
216
276
|
const busy = computed(() => props.loading || task.pending.value);
|
|
217
277
|
const sourceRows = computed(() => props.load ? loaded.value : props.rows);
|
|
218
278
|
const sourceIndex = computed(() => new Map(sourceRows.value.map((row, i) => [row, i])));
|
|
279
|
+
let warnedRowKey = false;
|
|
280
|
+
watch(sourceRows, () => {
|
|
281
|
+
if (warnedRowKey || props.rowKey || !props.selected.length) return;
|
|
282
|
+
warnedRowKey = true;
|
|
283
|
+
devWarn("LpTable: rows were replaced while some are selected, and without `rowKey` the selection now points at positions, not rows. Set `rowKey`.");
|
|
284
|
+
});
|
|
219
285
|
const frameEl = ref(null);
|
|
220
286
|
const floor = ref(0);
|
|
221
287
|
async function holdHeight() {
|
|
@@ -237,12 +303,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
237
303
|
emit("update:filters", fromHiddenSets(next));
|
|
238
304
|
}
|
|
239
305
|
const animating = ref(false);
|
|
306
|
+
const MOTION_WINDOW_MS = 600;
|
|
240
307
|
let motionTimer;
|
|
241
308
|
function withMotion(change) {
|
|
242
309
|
if (!props.load) {
|
|
243
310
|
animating.value = true;
|
|
244
311
|
if (motionTimer) clearTimeout(motionTimer);
|
|
245
|
-
motionTimer = setTimeout(() => animating.value = false,
|
|
312
|
+
motionTimer = setTimeout(() => animating.value = false, MOTION_WINDOW_MS);
|
|
246
313
|
}
|
|
247
314
|
change();
|
|
248
315
|
}
|
|
@@ -259,6 +326,89 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
259
326
|
(c) => !hiddenColumns.value.has(c.key) && !(c.hideBelow && tableWidth.value < c.hideBelow)
|
|
260
327
|
)
|
|
261
328
|
);
|
|
329
|
+
const shownColumns = computed(() => orderPinned(visibleColumns.value));
|
|
330
|
+
const RESIZE_STEP_PX = 16;
|
|
331
|
+
const UNSET_COLUMN_PX = 120;
|
|
332
|
+
const TICK_COLUMN_WIDTH = "3.25rem";
|
|
333
|
+
const EXPAND_COLUMN_WIDTH = "2.5rem";
|
|
334
|
+
const ownWidths = ref({});
|
|
335
|
+
const widths = computed(() => props.columnWidths ?? ownWidths.value);
|
|
336
|
+
const fixedLayout = computed(() => !!props.resizableColumns && Object.keys(widths.value).length > 0);
|
|
337
|
+
const tableStyle = computed(() => {
|
|
338
|
+
if (!fixedLayout.value) return void 0;
|
|
339
|
+
const sum = shownColumns.value.reduce((room, col) => room + (widths.value[col.key] ?? UNSET_COLUMN_PX), 0);
|
|
340
|
+
return { minWidth: `${sum}px` };
|
|
341
|
+
});
|
|
342
|
+
function writeWidths(next) {
|
|
343
|
+
ownWidths.value = next;
|
|
344
|
+
emit("update:columnWidths", next);
|
|
345
|
+
}
|
|
346
|
+
const canResize = (col) => !!props.resizableColumns && col.resizable !== false && !!col.label;
|
|
347
|
+
const measuredCol = (col) => props.resizableColumns || col.pin ? col.key : void 0;
|
|
348
|
+
function headerWidths() {
|
|
349
|
+
const measured = {};
|
|
350
|
+
for (const cell of frameEl.value?.querySelectorAll("th[data-lp-col]") ?? []) {
|
|
351
|
+
measured[cell.dataset.lpCol] = cell.offsetWidth;
|
|
352
|
+
}
|
|
353
|
+
return measured;
|
|
354
|
+
}
|
|
355
|
+
function setWidth(col, width) {
|
|
356
|
+
writeWidths({ ...widths.value, [col.key]: clampColumnWidth(width, col.minWidth, col.maxWidth) });
|
|
357
|
+
}
|
|
358
|
+
function clearWidth(col) {
|
|
359
|
+
const { [col.key]: _gone, ...rest } = widths.value;
|
|
360
|
+
writeWidths(rest);
|
|
361
|
+
}
|
|
362
|
+
function startResize(event, col) {
|
|
363
|
+
const handle = event.currentTarget;
|
|
364
|
+
if (!isHTMLElement(handle) || event.button !== 0) return;
|
|
365
|
+
event.stopPropagation();
|
|
366
|
+
const measured = headerWidths();
|
|
367
|
+
if (!fixedLayout.value) writeWidths(measured);
|
|
368
|
+
const from = measured[col.key] ?? handle.parentElement?.offsetWidth ?? 0;
|
|
369
|
+
const startX = event.clientX;
|
|
370
|
+
startPointerDrag(event, { move: (e) => setWidth(col, from + e.clientX - startX), end: () => {
|
|
371
|
+
} });
|
|
372
|
+
}
|
|
373
|
+
function onResizeKey(event, col) {
|
|
374
|
+
const step = event.key === "ArrowRight" ? RESIZE_STEP_PX : event.key === "ArrowLeft" ? -RESIZE_STEP_PX : 0;
|
|
375
|
+
if (!step) return;
|
|
376
|
+
event.preventDefault();
|
|
377
|
+
event.stopPropagation();
|
|
378
|
+
const measured = headerWidths();
|
|
379
|
+
if (!fixedLayout.value) writeWidths(measured);
|
|
380
|
+
setWidth(col, (widths.value[col.key] ?? measured[col.key] ?? UNSET_COLUMN_PX) + step);
|
|
381
|
+
}
|
|
382
|
+
const pinWidths = ref({});
|
|
383
|
+
const pinOffset = computed(() => pinOffsets(shownColumns.value, pinWidths.value));
|
|
384
|
+
function measurePins() {
|
|
385
|
+
if (shownColumns.value.some((col) => col.pin)) pinWidths.value = headerWidths();
|
|
386
|
+
}
|
|
387
|
+
watch([shownColumns, widths, tableWidth], measurePins, { flush: "post" });
|
|
388
|
+
onMounted(measurePins);
|
|
389
|
+
const PIN_HEAD = "sticky z-[11] bg-surface-soft";
|
|
390
|
+
const PIN_CELL = "sticky z-[1] bg-surface";
|
|
391
|
+
const pinStyle = (col) => col.pin ? { [col.pin]: `${pinOffset.value[col.key] ?? 0}px` } : void 0;
|
|
392
|
+
function headStyle(col) {
|
|
393
|
+
const width = props.resizableColumns ? widths.value[col.key] : void 0;
|
|
394
|
+
const size = width != null ? `${width}px` : col.width;
|
|
395
|
+
if (!size && !col.pin) return void 0;
|
|
396
|
+
return { ...size ? { width: size } : {}, ...pinStyle(col) };
|
|
397
|
+
}
|
|
398
|
+
const ownPreset = ref(null);
|
|
399
|
+
const activePreset = computed(() => props.columnPreset !== void 0 ? props.columnPreset : ownPreset.value);
|
|
400
|
+
function showPreset(id) {
|
|
401
|
+
const preset = props.columnPresets?.find((p) => p.id === id);
|
|
402
|
+
if (!preset) return;
|
|
403
|
+
hiddenColumns.value = presetHidden(preset, props.columns);
|
|
404
|
+
if (preset.widths && props.resizableColumns) writeWidths({ ...widths.value, ...preset.widths });
|
|
405
|
+
}
|
|
406
|
+
function choosePreset(id) {
|
|
407
|
+
ownPreset.value = id;
|
|
408
|
+
emit("update:columnPreset", id);
|
|
409
|
+
showPreset(id);
|
|
410
|
+
}
|
|
411
|
+
watch(() => props.columnPreset, showPreset, { immediate: true });
|
|
262
412
|
const facetColumns = computed(() => props.columns.filter((col) => col.filterable).map((col) => col.key));
|
|
263
413
|
const localFacets = useTableFacets({
|
|
264
414
|
rows: () => props.load ? [] : props.rows,
|
|
@@ -322,6 +472,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
322
472
|
if (next.has(key)) next.delete(key);
|
|
323
473
|
else next.add(key);
|
|
324
474
|
hiddenColumns.value = next;
|
|
475
|
+
if (activePreset.value != null) {
|
|
476
|
+
ownPreset.value = null;
|
|
477
|
+
emit("update:columnPreset", null);
|
|
478
|
+
}
|
|
325
479
|
}
|
|
326
480
|
const filteredRows = computed(() => {
|
|
327
481
|
if (props.load) return sourceRows.value;
|
|
@@ -332,48 +486,47 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
332
486
|
);
|
|
333
487
|
});
|
|
334
488
|
function sortRows(rows) {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
const col = props.columns.find((c) => c.key === s.key);
|
|
338
|
-
if (!col?.sortable) return rows;
|
|
339
|
-
const factor = s.dir === "asc" ? 1 : -1;
|
|
340
|
-
const own = col.compare;
|
|
341
|
-
const value = col.sortValue ?? ((row) => row[s.key]);
|
|
342
|
-
return [...rows].sort((a, b) => (own ? own(a, b) : compareValues(value(a), value(b))) * factor);
|
|
489
|
+
if (!sortList.value.length || props.load) return rows;
|
|
490
|
+
return sortByKeys(rows, sortList.value, props.columns);
|
|
343
491
|
}
|
|
344
492
|
const displayRows = computed(() => sortRows(filteredRows.value));
|
|
345
|
-
function
|
|
346
|
-
if (!col.sortable) return;
|
|
347
|
-
const s = activeSort.value;
|
|
348
|
-
let next;
|
|
349
|
-
if (!s || s.key !== col.key) next = { key: col.key, dir: "asc" };
|
|
350
|
-
else if (s.dir === "asc") next = { key: col.key, dir: "desc" };
|
|
351
|
-
else next = null;
|
|
493
|
+
function writeSorts(next) {
|
|
352
494
|
withMotion(() => {
|
|
353
|
-
|
|
354
|
-
|
|
495
|
+
ownSorts.value = next;
|
|
496
|
+
ownSort.value = next[0] ?? null;
|
|
497
|
+
if (props.multiSort) emit("update:sorts", next);
|
|
498
|
+
emit("update:sort", next[0] ?? null);
|
|
355
499
|
});
|
|
356
500
|
}
|
|
501
|
+
function toggleSort(col, event) {
|
|
502
|
+
if (!col.sortable) return;
|
|
503
|
+
writeSorts(nextSorts(sortList.value, col.key, !!(props.multiSort && event?.shiftKey)));
|
|
504
|
+
}
|
|
357
505
|
function sortIcon(col) {
|
|
358
|
-
const s =
|
|
359
|
-
if (s
|
|
506
|
+
const s = sortOf(col);
|
|
507
|
+
if (!s) return "lucide:chevrons-up-down";
|
|
360
508
|
return s.dir === "asc" ? "lucide:arrow-up" : "lucide:arrow-down";
|
|
361
509
|
}
|
|
510
|
+
function sortPosition(col) {
|
|
511
|
+
if (sortList.value.length < 2) return void 0;
|
|
512
|
+
const at = sortList.value.findIndex((sort) => sort.key === col.key);
|
|
513
|
+
return at < 0 ? void 0 : at + 1;
|
|
514
|
+
}
|
|
515
|
+
const MENU_CLOSE_LIMIT_MS = 600;
|
|
516
|
+
const FOCUS_RETURN_MS = 30;
|
|
362
517
|
function openFilter(key) {
|
|
363
518
|
const open = () => frameEl.value?.querySelector(`[data-lp-filter="${CSS.escape(key)}"]`)?.click();
|
|
364
519
|
const started = performance.now();
|
|
520
|
+
const closing = [...(frameEl.value?.ownerDocument ?? document).querySelectorAll("[data-reka-menu-content]")];
|
|
365
521
|
const wait = () => {
|
|
366
|
-
if (!
|
|
522
|
+
if (!closing.some((menu) => menu.isConnected) || performance.now() - started > MENU_CLOSE_LIMIT_MS) setTimeout(open, FOCUS_RETURN_MS);
|
|
367
523
|
else requestAnimationFrame(wait);
|
|
368
524
|
};
|
|
369
525
|
requestAnimationFrame(wait);
|
|
370
526
|
}
|
|
371
527
|
function headerMenu(col) {
|
|
372
528
|
const s = activeSort.value;
|
|
373
|
-
const set = (next) => () =>
|
|
374
|
-
ownSort.value = next;
|
|
375
|
-
emit("update:sort", next);
|
|
376
|
-
});
|
|
529
|
+
const set = (next) => () => writeSorts(next ? [next] : []);
|
|
377
530
|
const items = [];
|
|
378
531
|
if (col.sortable) {
|
|
379
532
|
items.push(
|
|
@@ -420,8 +573,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
420
573
|
const offered = props.columns.filter((c) => !c.alwaysVisible && c.label);
|
|
421
574
|
const exportItem = props.exportable ? [{ label: text.value.exportCsv, icon: "lucide:download", onSelect: () => exportCsv() }] : [];
|
|
422
575
|
if (!offered.length) return exportItem;
|
|
576
|
+
const presets = props.columnPresets?.length ? [{
|
|
577
|
+
label: text.value.columnPresets,
|
|
578
|
+
icon: "lucide:layout-template",
|
|
579
|
+
children: props.columnPresets.map((preset) => ({
|
|
580
|
+
label: preset.label,
|
|
581
|
+
checked: activePreset.value === preset.id,
|
|
582
|
+
onSelect: () => choosePreset(preset.id)
|
|
583
|
+
}))
|
|
584
|
+
}] : [];
|
|
423
585
|
return [
|
|
424
586
|
...exportItem,
|
|
587
|
+
...presets,
|
|
425
588
|
{
|
|
426
589
|
label: text.value.columns,
|
|
427
590
|
icon: "lucide:columns-3",
|
|
@@ -443,6 +606,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
443
606
|
Object.entries(hiddenValues.value).filter(([, set]) => set.size).map(([key, set]) => [key, [...set]])
|
|
444
607
|
);
|
|
445
608
|
const query = { page: page.value, pageSize: props.pageSize, sort: activeSort.value, hidden };
|
|
609
|
+
if (props.multiSort) query.sorts = sortList.value;
|
|
446
610
|
task.run((signal) => load(query, signal), {
|
|
447
611
|
delay,
|
|
448
612
|
apply: (result) => {
|
|
@@ -462,7 +626,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
462
626
|
}
|
|
463
627
|
});
|
|
464
628
|
}
|
|
465
|
-
watch([
|
|
629
|
+
watch([sortList, hiddenValues, () => props.pageSize], () => {
|
|
466
630
|
if (!props.load) return;
|
|
467
631
|
if (page.value !== 1) page.value = 1;
|
|
468
632
|
else fetchPage(props.debounce);
|
|
@@ -477,6 +641,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
477
641
|
if (state) {
|
|
478
642
|
if (state.sort !== void 0) {
|
|
479
643
|
ownSort.value = state.sort;
|
|
644
|
+
ownSorts.value = state.sort ? [state.sort] : [];
|
|
480
645
|
emit("update:sort", state.sort);
|
|
481
646
|
}
|
|
482
647
|
if (state.hidden) writeHidden(mergeRestored(hiddenValues.value, state.hidden));
|
|
@@ -510,20 +675,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
510
675
|
}));
|
|
511
676
|
const csv = toCsv(rows, columns, options);
|
|
512
677
|
if (options.download !== false) {
|
|
513
|
-
downloadFile(`${fileStem(options.filename ?? props.exportFilename, "table")}.csv`, csv, "text/csv;charset=utf-8");
|
|
678
|
+
downloadFile(`${fileStem(options.filename ?? props.exportFilename, "table")}.csv`, csv, "text/csv;charset=utf-8", tableEl.value?.ownerDocument);
|
|
514
679
|
}
|
|
515
680
|
return csv;
|
|
516
681
|
}
|
|
517
682
|
__expose({ reload: () => fetchPage(), exportCsv });
|
|
518
683
|
const selectedSet = computed(() => new Set(props.selected));
|
|
684
|
+
const excluded = ref(/* @__PURE__ */ new Set());
|
|
685
|
+
const tokenActive = computed(() => !!props.selectionToken && !!props.load && props.allMatching);
|
|
686
|
+
const isSelected = (key) => tokenActive.value ? !excluded.value.has(key) : selectedSet.value.has(key);
|
|
519
687
|
const allKeys = computed(() => filteredRows.value.map((r, i) => keyFor(r, i)));
|
|
520
688
|
const allChecked = computed(
|
|
521
|
-
() => allKeys.value.length > 0 && allKeys.value.every(
|
|
689
|
+
() => allKeys.value.length > 0 && allKeys.value.every(isSelected)
|
|
522
690
|
);
|
|
523
691
|
const someChecked = computed(
|
|
524
|
-
() => !allChecked.value && allKeys.value.some(
|
|
692
|
+
() => !allChecked.value && allKeys.value.some(isSelected)
|
|
525
693
|
);
|
|
526
694
|
function toggleAll(checked) {
|
|
695
|
+
if (tokenActive.value) {
|
|
696
|
+
if (checked) excluded.value = /* @__PURE__ */ new Set();
|
|
697
|
+
else clearSelection();
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
527
700
|
const next = new Set(selectedSet.value);
|
|
528
701
|
for (const key of allKeys.value) {
|
|
529
702
|
if (checked) next.add(key);
|
|
@@ -532,6 +705,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
532
705
|
emit("update:selected", [...next]);
|
|
533
706
|
}
|
|
534
707
|
function toggleRow(key, checked) {
|
|
708
|
+
if (tokenActive.value) {
|
|
709
|
+
const out = new Set(excluded.value);
|
|
710
|
+
if (checked) out.delete(key);
|
|
711
|
+
else out.add(key);
|
|
712
|
+
if (out.size >= total.value) clearSelection();
|
|
713
|
+
else excluded.value = out;
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
535
716
|
const next = new Set(selectedSet.value);
|
|
536
717
|
if (checked) next.add(key);
|
|
537
718
|
else next.delete(key);
|
|
@@ -542,7 +723,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
542
723
|
);
|
|
543
724
|
const paint = usePaintSelect({
|
|
544
725
|
root: frameEl,
|
|
545
|
-
enabled: () => !!props.selectable,
|
|
726
|
+
enabled: () => !!props.selectable && !tokenActive.value,
|
|
546
727
|
selection: () => props.selected,
|
|
547
728
|
set: (keys) => emit("update:selected", keys),
|
|
548
729
|
resolve: (raw) => keyByText.value.get(raw),
|
|
@@ -556,7 +737,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
556
737
|
function clearSelection() {
|
|
557
738
|
emit("update:selected", []);
|
|
558
739
|
if (props.allMatching) emit("update:allMatching", false);
|
|
740
|
+
excluded.value = /* @__PURE__ */ new Set();
|
|
559
741
|
}
|
|
742
|
+
watch([tokenActive, sortList, excluded, total], () => {
|
|
743
|
+
if (!tokenActive.value) {
|
|
744
|
+
if (excluded.value.size) excluded.value = /* @__PURE__ */ new Set();
|
|
745
|
+
emit("update:selectionToken", null);
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
emit("update:selectionToken", {
|
|
749
|
+
sorts: sortList.value,
|
|
750
|
+
hidden: Object.fromEntries(
|
|
751
|
+
Object.entries(hiddenValues.value).filter(([, set]) => set.size).map(([key, set]) => [key, [...set]])
|
|
752
|
+
),
|
|
753
|
+
excluded: [...excluded.value],
|
|
754
|
+
total: total.value
|
|
755
|
+
});
|
|
756
|
+
});
|
|
757
|
+
watch(hiddenValues, () => {
|
|
758
|
+
if (tokenActive.value) clearSelection();
|
|
759
|
+
});
|
|
560
760
|
const OWN_CLICKS = "a,button,input,select,textarea,label,[role=button],[role=checkbox],[contenteditable=true]";
|
|
561
761
|
function onRowPointerDown(event, key) {
|
|
562
762
|
if (!holdMode.value) return;
|
|
@@ -564,7 +764,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
564
764
|
paint.onPointerDown(event, key, { hold: 420 });
|
|
565
765
|
}
|
|
566
766
|
function onRowClick(row, key) {
|
|
567
|
-
if (holdMode.value && props.selected.length) toggleRow(key, !
|
|
767
|
+
if (holdMode.value && props.selected.length) toggleRow(key, !isSelected(key));
|
|
568
768
|
else emit("rowClick", row);
|
|
569
769
|
}
|
|
570
770
|
useHotkeys(
|
|
@@ -582,10 +782,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
582
782
|
() => pageKeys.value.length > 0 && pageKeys.value.every((k) => selectedSet.value.has(k))
|
|
583
783
|
);
|
|
584
784
|
watch(pageAllSelected, (all) => {
|
|
585
|
-
if (!all && props.allMatching) emit("update:allMatching", false);
|
|
785
|
+
if (!all && props.allMatching && !props.selectionToken) emit("update:allMatching", false);
|
|
586
786
|
});
|
|
587
787
|
const statusText = computed(() => {
|
|
588
788
|
if (!(props.selectable && props.selected.length)) return countText.value;
|
|
789
|
+
if (tokenActive.value && excluded.value.size) {
|
|
790
|
+
return text.value.selectedCount.replace("{count}", String(total.value - excluded.value.size));
|
|
791
|
+
}
|
|
589
792
|
return props.allMatching ? text.value.allMatchingSelected.replace("{total}", String(total.value)) : text.value.selectedCount.replace("{count}", String(props.selected.length));
|
|
590
793
|
});
|
|
591
794
|
const countText = computed(() => {
|
|
@@ -610,12 +813,87 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
610
813
|
function skeletonWidth(row, col) {
|
|
611
814
|
return `${SKELETON_WIDTHS[(row * 3 + col * 2) % SKELETON_WIDTHS.length]}%`;
|
|
612
815
|
}
|
|
613
|
-
const
|
|
816
|
+
const VIEWPORT = "[data-reka-scroll-area-viewport]";
|
|
817
|
+
const expansionOn = computed(() => !!props.expandable && !props.virtualRowHeight);
|
|
818
|
+
const ownExpanded = ref([]);
|
|
819
|
+
const expandedKeys = computed(() => new Set(props.expanded ?? ownExpanded.value));
|
|
820
|
+
const canExpand = (row) => typeof props.expandable === "function" ? props.expandable(row) : !!props.expandable;
|
|
821
|
+
function toggleExpanded(key) {
|
|
822
|
+
const next = new Set(expandedKeys.value);
|
|
823
|
+
if (!next.delete(key)) next.add(key);
|
|
824
|
+
ownExpanded.value = [...next];
|
|
825
|
+
emit("update:expanded", ownExpanded.value);
|
|
826
|
+
}
|
|
827
|
+
const ownCollapsed = ref([]);
|
|
828
|
+
const collapsedSet = computed(() => new Set(props.collapsedGroups ?? ownCollapsed.value));
|
|
829
|
+
function toggleGroup(id) {
|
|
830
|
+
const next = new Set(collapsedSet.value);
|
|
831
|
+
if (!next.delete(id)) next.add(id);
|
|
832
|
+
ownCollapsed.value = [...next];
|
|
833
|
+
emit("update:collapsedGroups", ownCollapsed.value);
|
|
834
|
+
}
|
|
835
|
+
function groupValue(row) {
|
|
836
|
+
return typeof props.groupBy === "function" ? props.groupBy(row) : row[props.groupBy];
|
|
837
|
+
}
|
|
838
|
+
const allEntries = computed(() => {
|
|
839
|
+
const rows = displayRows.value;
|
|
840
|
+
const indexes = props.groupBy !== void 0 ? new Map(rows.map((row, i) => [row, i])) : null;
|
|
841
|
+
const entries = [];
|
|
842
|
+
const pushRow = (row, index) => {
|
|
843
|
+
const key = keyFor(row, index);
|
|
844
|
+
entries.push({ kind: "row", id: String(key), row, index });
|
|
845
|
+
if (expansionOn.value && expandedKeys.value.has(key) && canExpand(row)) {
|
|
846
|
+
entries.push({ kind: "detail", id: `lp-detail:${key}`, row, index });
|
|
847
|
+
}
|
|
848
|
+
};
|
|
849
|
+
if (!indexes) {
|
|
850
|
+
rows.forEach((row, index) => pushRow(row, index));
|
|
851
|
+
return entries;
|
|
852
|
+
}
|
|
853
|
+
for (const group of groupRows(rows, groupValue)) {
|
|
854
|
+
const collapsed = collapsedSet.value.has(group.id);
|
|
855
|
+
const name = props.groupLabel?.(group.value, group.rows) ?? group.id;
|
|
856
|
+
const label = text.value.groupCount.replace("{label}", name).replace("{count}", String(group.rows.length));
|
|
857
|
+
entries.push({ kind: "group", id: `lp-group:${group.id}`, group: group.id, value: group.value, rows: group.rows, label, collapsed });
|
|
858
|
+
if (!collapsed) for (const row of group.rows) pushRow(row, indexes.get(row) ?? 0);
|
|
859
|
+
}
|
|
860
|
+
return entries;
|
|
861
|
+
});
|
|
862
|
+
const viewportEl = shallowRef(null);
|
|
863
|
+
const scrollTop = ref(0);
|
|
864
|
+
const viewportHeight = ref(0);
|
|
865
|
+
const onViewportScroll = () => scrollTop.value = viewportEl.value?.scrollTop ?? 0;
|
|
866
|
+
onMounted(() => {
|
|
867
|
+
if (props.virtualRowHeight) viewportEl.value = frameEl.value?.querySelector(VIEWPORT) ?? null;
|
|
868
|
+
});
|
|
869
|
+
watch(viewportEl, (el, _, onCleanup) => {
|
|
870
|
+
if (!el) return;
|
|
871
|
+
el.addEventListener("scroll", onViewportScroll, { passive: true });
|
|
872
|
+
onCleanup(() => el.removeEventListener("scroll", onViewportScroll));
|
|
873
|
+
});
|
|
874
|
+
useResizeObserver(viewportEl, (_, el) => viewportHeight.value = el.clientHeight, { immediate: true });
|
|
875
|
+
const rowWindowed = computed(
|
|
876
|
+
() => props.virtualRowHeight ? rowWindow(scrollTop.value, viewportHeight.value, props.virtualRowHeight, allEntries.value.length, props.virtualOverscan) : null
|
|
877
|
+
);
|
|
878
|
+
const viewEntries = computed(
|
|
879
|
+
() => rowWindowed.value ? allEntries.value.slice(rowWindowed.value.start, rowWindowed.value.end) : allEntries.value
|
|
880
|
+
);
|
|
881
|
+
const rowOffset = (entry) => (rowWindowed.value?.start ?? 0) + viewEntries.value.indexOf(entry) + 2;
|
|
882
|
+
const rowStyle = computed(() => props.virtualRowHeight ? { height: `${props.virtualRowHeight}px` } : void 0);
|
|
883
|
+
function isEditable(col, row) {
|
|
884
|
+
return typeof col.editable === "function" ? col.editable(row) : !!col.editable;
|
|
885
|
+
}
|
|
886
|
+
function saveCell(col, row, value) {
|
|
887
|
+
const parsed = col.parseEdit ? col.parseEdit(value, row) : value;
|
|
888
|
+
emit("cellEdit", { row, key: col.key, value: parsed, previous: row[col.key] });
|
|
889
|
+
}
|
|
890
|
+
const colSpan = computed(
|
|
891
|
+
() => visibleColumns.value.length + (props.selectable ? 1 : 0) + (expansionOn.value ? 1 : 0)
|
|
892
|
+
);
|
|
614
893
|
const rovingItems = computed(
|
|
615
|
-
() =>
|
|
616
|
-
id: String(
|
|
617
|
-
|
|
618
|
-
}))
|
|
894
|
+
() => viewEntries.value.flatMap(
|
|
895
|
+
(entry) => entry.kind === "row" ? [{ id: entry.id, label: String(entry.row[props.columns[0]?.key ?? ""] ?? "") }] : []
|
|
896
|
+
)
|
|
619
897
|
);
|
|
620
898
|
const rowByKey = computed(() => {
|
|
621
899
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -636,7 +914,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
636
914
|
const row = rowByKey.value.get(key);
|
|
637
915
|
if (row) {
|
|
638
916
|
const rowKey = keyFor(row, displayRows.value.indexOf(row));
|
|
639
|
-
toggleRow(rowKey, !
|
|
917
|
+
toggleRow(rowKey, !isSelected(rowKey));
|
|
640
918
|
}
|
|
641
919
|
return;
|
|
642
920
|
}
|
|
@@ -827,17 +1105,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
827
1105
|
createElementVNode("table", {
|
|
828
1106
|
ref_key: "tableEl",
|
|
829
1107
|
ref: tableEl,
|
|
830
|
-
class: "w-full border-collapse text-sm"
|
|
1108
|
+
class: normalizeClass(["w-full border-collapse text-sm", fixedLayout.value ? "table-fixed" : ""]),
|
|
1109
|
+
style: normalizeStyle(tableStyle.value),
|
|
1110
|
+
"aria-rowcount": __props.virtualRowHeight ? allEntries.value.length + 1 : void 0
|
|
831
1111
|
}, [
|
|
832
1112
|
createElementVNode("thead", {
|
|
833
1113
|
ref_key: "headEl",
|
|
834
1114
|
ref: headEl,
|
|
835
1115
|
class: normalizeClass(__props.stickyHeader ? "sticky top-0 z-10 bg-surface-soft" : "")
|
|
836
1116
|
}, [
|
|
837
|
-
createElementVNode("tr",
|
|
838
|
-
|
|
1117
|
+
createElementVNode("tr", _hoisted_11, [
|
|
1118
|
+
expansionOn.value ? (openBlock(), createElementBlock("th", {
|
|
839
1119
|
key: 0,
|
|
840
|
-
class: normalizeClass(["w-px p-0", cellY.value])
|
|
1120
|
+
class: normalizeClass(["w-px p-0", cellY.value]),
|
|
1121
|
+
style: normalizeStyle(fixedLayout.value ? { width: EXPAND_COLUMN_WIDTH } : void 0)
|
|
1122
|
+
}, null, 6)) : createCommentVNode("", true),
|
|
1123
|
+
__props.selectable ? (openBlock(), createElementBlock("th", {
|
|
1124
|
+
key: 1,
|
|
1125
|
+
class: normalizeClass(["w-px p-0", cellY.value]),
|
|
1126
|
+
style: normalizeStyle(fixedLayout.value ? { width: ticksShown.value ? TICK_COLUMN_WIDTH : "0" } : void 0)
|
|
841
1127
|
}, [
|
|
842
1128
|
createElementVNode("div", {
|
|
843
1129
|
class: normalizeClass(["lp-tick lp-tick-open", ticksShown.value ? "" : "lp-tick-hidden"]),
|
|
@@ -848,14 +1134,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
848
1134
|
indeterminate: someChecked.value,
|
|
849
1135
|
"onUpdate:modelValue": toggleAll
|
|
850
1136
|
}, null, 8, ["model-value", "indeterminate"])
|
|
851
|
-
], 10,
|
|
852
|
-
],
|
|
853
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(
|
|
1137
|
+
], 10, _hoisted_12)
|
|
1138
|
+
], 6)) : createCommentVNode("", true),
|
|
1139
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(shownColumns.value, (col) => {
|
|
854
1140
|
return openBlock(), createElementBlock("th", {
|
|
855
1141
|
key: col.key,
|
|
856
|
-
style: normalizeStyle(col
|
|
857
|
-
class: normalizeClass(["px-4 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted", [alignClass(col.align), cellY.value]]),
|
|
858
|
-
"
|
|
1142
|
+
style: normalizeStyle(headStyle(col)),
|
|
1143
|
+
class: normalizeClass(["px-4 text-[11px] font-semibold uppercase tracking-[0.08em] text-muted", [alignClass(col.align), cellY.value, col.pin ? PIN_HEAD : "", canResize(col) && !col.pin ? "relative" : ""]]),
|
|
1144
|
+
"data-lp-col": measuredCol(col),
|
|
1145
|
+
"aria-sort": sortOf(col) ? sortOf(col).dir === "asc" ? "ascending" : "descending" : void 0
|
|
859
1146
|
}, [
|
|
860
1147
|
col.sortable || col.filterable ? (openBlock(), createBlock(_sfc_main$8, {
|
|
861
1148
|
key: 0,
|
|
@@ -866,9 +1153,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
866
1153
|
type: "button",
|
|
867
1154
|
class: normalizeClass(["group/sort -mx-1 inline-flex items-center gap-1 rounded-small px-1 outline-none transition-colors duration-[var(--duration-fast)] hover:text-ink focus-visible:ring-2 focus-visible:ring-ring", [
|
|
868
1155
|
col.align === "right" ? "flex-row-reverse" : "",
|
|
869
|
-
|
|
1156
|
+
sortOf(col) ? "text-ink" : ""
|
|
870
1157
|
]]),
|
|
871
|
-
onClick: ($event) => toggleSort(col)
|
|
1158
|
+
onClick: ($event) => toggleSort(col, $event)
|
|
872
1159
|
}, [
|
|
873
1160
|
createTextVNode(toDisplayString(col.label) + " ", 1),
|
|
874
1161
|
col.sortable ? (openBlock(), createBlock(_sfc_main$3, {
|
|
@@ -877,10 +1164,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
877
1164
|
size: 13,
|
|
878
1165
|
class: normalizeClass([
|
|
879
1166
|
"shrink-0 transition-[transform,opacity] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)]",
|
|
880
|
-
|
|
1167
|
+
sortOf(col) ? "opacity-100" : "opacity-40 group-hover/sort:opacity-70"
|
|
881
1168
|
])
|
|
882
|
-
}, null, 8, ["name", "class"])) : createCommentVNode("", true)
|
|
883
|
-
|
|
1169
|
+
}, null, 8, ["name", "class"])) : createCommentVNode("", true),
|
|
1170
|
+
sortPosition(col) ? (openBlock(), createElementBlock("span", _hoisted_15, toDisplayString(sortPosition(col)), 1)) : createCommentVNode("", true)
|
|
1171
|
+
], 10, _hoisted_14)
|
|
884
1172
|
]),
|
|
885
1173
|
_: 2
|
|
886
1174
|
}, 1032, ["items"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
@@ -903,7 +1191,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
903
1191
|
name: hiddenValues.value[col.key]?.size ? "lucide:filter-x" : "lucide:filter",
|
|
904
1192
|
size: 12
|
|
905
1193
|
}, null, 8, ["name"])
|
|
906
|
-
], 10,
|
|
1194
|
+
], 10, _hoisted_16)
|
|
907
1195
|
]),
|
|
908
1196
|
default: withCtx(() => [
|
|
909
1197
|
createVNode(_sfc_main$b, {
|
|
@@ -914,15 +1202,30 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
914
1202
|
}, null, 8, ["options", "hidden", "labels", "onUpdate:hidden"])
|
|
915
1203
|
]),
|
|
916
1204
|
_: 2
|
|
917
|
-
}, 1032, ["aria-label"])) : createCommentVNode("", true)
|
|
918
|
-
|
|
1205
|
+
}, 1032, ["aria-label"])) : createCommentVNode("", true),
|
|
1206
|
+
canResize(col) ? (openBlock(), createElementBlock("span", {
|
|
1207
|
+
key: 3,
|
|
1208
|
+
role: "separator",
|
|
1209
|
+
"aria-orientation": "vertical",
|
|
1210
|
+
tabindex: "0",
|
|
1211
|
+
"aria-label": text.value.resizeColumn.replace("{column}", col.label),
|
|
1212
|
+
"aria-valuenow": widths.value[col.key],
|
|
1213
|
+
class: "absolute inset-y-0 right-0 w-1.5 cursor-col-resize touch-none outline-none transition-colors duration-fast hover:bg-brand focus-visible:bg-brand",
|
|
1214
|
+
"data-lp-resize": col.key,
|
|
1215
|
+
onPointerdown: ($event) => startResize($event, col),
|
|
1216
|
+
onClick: _cache[2] || (_cache[2] = withModifiers(() => {
|
|
1217
|
+
}, ["stop"])),
|
|
1218
|
+
onDblclick: withModifiers(($event) => clearWidth(col), ["stop"]),
|
|
1219
|
+
onKeydown: ($event) => onResizeKey($event, col)
|
|
1220
|
+
}, null, 40, _hoisted_17)) : createCommentVNode("", true)
|
|
1221
|
+
], 14, _hoisted_13);
|
|
919
1222
|
}), 128))
|
|
920
1223
|
])
|
|
921
1224
|
], 2),
|
|
922
1225
|
createVNode(TransitionGroup, {
|
|
923
1226
|
tag: "tbody",
|
|
924
1227
|
name: "lp-row",
|
|
925
|
-
css: animating.value,
|
|
1228
|
+
css: animating.value && !__props.virtualRowHeight,
|
|
926
1229
|
class: normalizeClass(busy.value && displayRows.value.length ? "opacity-60 transition-opacity" : "transition-opacity"),
|
|
927
1230
|
"aria-busy": busy.value || void 0,
|
|
928
1231
|
ref: (el) => unref(roving).setContainer(el?.$el ?? null)
|
|
@@ -933,11 +1236,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
933
1236
|
key: `lp-table-skeleton-${n}`,
|
|
934
1237
|
class: "lp-row-empty border-b border-line/60 last:border-0"
|
|
935
1238
|
}, [
|
|
936
|
-
|
|
1239
|
+
expansionOn.value ? (openBlock(), createElementBlock("td", {
|
|
937
1240
|
key: 0,
|
|
938
1241
|
class: normalizeClass(["w-px p-0", cellY.value])
|
|
939
1242
|
}, null, 2)) : createCommentVNode("", true),
|
|
940
|
-
(openBlock(
|
|
1243
|
+
__props.selectable ? (openBlock(), createElementBlock("td", {
|
|
1244
|
+
key: 1,
|
|
1245
|
+
class: normalizeClass(["w-px p-0", cellY.value])
|
|
1246
|
+
}, null, 2)) : createCommentVNode("", true),
|
|
1247
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(shownColumns.value, (col, ci) => {
|
|
941
1248
|
return openBlock(), createElementBlock("td", {
|
|
942
1249
|
key: col.key,
|
|
943
1250
|
class: normalizeClass(["px-4", [alignClass(col.align), cellY.value]])
|
|
@@ -946,11 +1253,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
946
1253
|
class: "inline-block h-3 align-middle",
|
|
947
1254
|
style: normalizeStyle({ width: skeletonWidth(n, ci) })
|
|
948
1255
|
}, null, 8, ["style"]),
|
|
949
|
-
n === 1 && ci === 0 ? (openBlock(), createElementBlock("span",
|
|
1256
|
+
n === 1 && ci === 0 ? (openBlock(), createElementBlock("span", _hoisted_18, toDisplayString(text.value.loading), 1)) : createCommentVNode("", true)
|
|
950
1257
|
], 2);
|
|
951
1258
|
}), 128))
|
|
952
1259
|
]);
|
|
953
|
-
}), 128)) : displayRows.value.length === 0 ? (openBlock(), createElementBlock("tr",
|
|
1260
|
+
}), 128)) : displayRows.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_19, [
|
|
954
1261
|
createElementVNode("td", {
|
|
955
1262
|
colspan: colSpan.value,
|
|
956
1263
|
class: "p-0"
|
|
@@ -975,66 +1282,171 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
975
1282
|
]),
|
|
976
1283
|
_: 1
|
|
977
1284
|
}, 8, ["icon", "title"])
|
|
978
|
-
], 8,
|
|
1285
|
+
], 8, _hoisted_20)
|
|
979
1286
|
])) : createCommentVNode("", true),
|
|
980
|
-
(openBlock(
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
},
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
__props.selectable ? (openBlock(), createElementBlock("td", {
|
|
1287
|
+
rowWindowed.value?.before ? (openBlock(), createElementBlock("tr", _hoisted_21, [
|
|
1288
|
+
createElementVNode("td", {
|
|
1289
|
+
colspan: colSpan.value,
|
|
1290
|
+
class: "p-0",
|
|
1291
|
+
style: normalizeStyle({ height: `${rowWindowed.value.before}px` })
|
|
1292
|
+
}, null, 12, _hoisted_22)
|
|
1293
|
+
])) : createCommentVNode("", true),
|
|
1294
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(viewEntries.value, (entry) => {
|
|
1295
|
+
return openBlock(), createElementBlock(Fragment, {
|
|
1296
|
+
key: entry.id
|
|
1297
|
+
}, [
|
|
1298
|
+
entry.kind === "group" ? (openBlock(), createElementBlock("tr", {
|
|
993
1299
|
key: 0,
|
|
994
|
-
class:
|
|
995
|
-
|
|
996
|
-
}, ["stop"])),
|
|
997
|
-
onPointerdown: withModifiers(($event) => unref(paint).onPointerDown($event, keyFor(row, index)), ["stop"])
|
|
1300
|
+
class: "border-b border-line/60 bg-surface-soft/60",
|
|
1301
|
+
style: normalizeStyle(rowStyle.value)
|
|
998
1302
|
}, [
|
|
999
|
-
createElementVNode("
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
createVNode(_sfc_main$9, {
|
|
1003
|
-
"model-value": selectedSet.value.has(keyFor(row, index)),
|
|
1004
|
-
"onUpdate:modelValue": (v) => toggleRow(keyFor(row, index), v)
|
|
1005
|
-
}, null, 8, ["model-value", "onUpdate:modelValue"])
|
|
1006
|
-
], 2)
|
|
1007
|
-
], 42, _hoisted_19)) : createCommentVNode("", true),
|
|
1008
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (col, ci) => {
|
|
1009
|
-
return openBlock(), createElementBlock("td", {
|
|
1010
|
-
key: col.key,
|
|
1011
|
-
class: normalizeClass(["px-4 text-ink", [alignClass(col.align), cellY.value, col.nowrap ? "whitespace-nowrap" : ""]])
|
|
1303
|
+
createElementVNode("td", {
|
|
1304
|
+
colspan: colSpan.value,
|
|
1305
|
+
class: normalizeClass(["px-4 text-xs font-medium text-muted", cellY.value])
|
|
1012
1306
|
}, [
|
|
1013
|
-
renderSlot(_ctx.$slots,
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1307
|
+
renderSlot(_ctx.$slots, "group", {
|
|
1308
|
+
value: entry.value,
|
|
1309
|
+
rows: entry.rows,
|
|
1310
|
+
label: entry.label,
|
|
1311
|
+
collapsed: entry.collapsed,
|
|
1312
|
+
toggle: () => toggleGroup(entry.group)
|
|
1017
1313
|
}, () => [
|
|
1018
|
-
|
|
1314
|
+
createElementVNode("button", {
|
|
1315
|
+
type: "button",
|
|
1316
|
+
class: "inline-flex items-center gap-1 rounded-small outline-none transition-colors duration-fast hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
1317
|
+
"aria-expanded": !entry.collapsed,
|
|
1318
|
+
"aria-label": (entry.collapsed ? text.value.expandGroup : text.value.collapseGroup).replace("{label}", entry.label),
|
|
1319
|
+
onClick: ($event) => toggleGroup(entry.group)
|
|
1320
|
+
}, [
|
|
1321
|
+
createVNode(_sfc_main$3, {
|
|
1322
|
+
name: "lucide:chevron-right",
|
|
1323
|
+
size: 14,
|
|
1324
|
+
class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", entry.collapsed ? "" : "rotate-90"])
|
|
1325
|
+
}, null, 8, ["class"]),
|
|
1326
|
+
createTextVNode(" " + toDisplayString(entry.label), 1)
|
|
1327
|
+
], 8, _hoisted_24)
|
|
1019
1328
|
], true)
|
|
1020
|
-
],
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1329
|
+
], 10, _hoisted_23)
|
|
1330
|
+
], 4)) : entry.kind === "detail" ? (openBlock(), createElementBlock("tr", _hoisted_25, [
|
|
1331
|
+
createElementVNode("td", {
|
|
1332
|
+
colspan: colSpan.value,
|
|
1333
|
+
class: "px-4 py-3"
|
|
1334
|
+
}, [
|
|
1335
|
+
renderSlot(_ctx.$slots, "expanded", {
|
|
1336
|
+
row: entry.row,
|
|
1337
|
+
close: () => toggleExpanded(keyFor(entry.row, entry.index))
|
|
1338
|
+
}, void 0, true)
|
|
1339
|
+
], 8, _hoisted_26)
|
|
1340
|
+
])) : (openBlock(), createElementBlock("tr", mergeProps({
|
|
1341
|
+
key: 2,
|
|
1342
|
+
onContextmenu: ($event) => onRowContextMenu(entry.row),
|
|
1343
|
+
class: ["group border-b border-line/60 outline-none transition-colors last:border-0 hover:bg-surface-soft/60 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring data-[active]:bg-surface-soft/40", isSelected(keyFor(entry.row, entry.index)) ? "bg-brand-soft/40" : ""],
|
|
1344
|
+
style: rowStyle.value,
|
|
1345
|
+
"aria-rowindex": __props.virtualRowHeight ? rowOffset(entry) : void 0
|
|
1346
|
+
}, { ref_for: true }, unref(roving).itemProps(String(keyFor(entry.row, entry.index))), {
|
|
1347
|
+
"data-paint-key": __props.selectable ? String(keyFor(entry.row, entry.index)) : void 0,
|
|
1348
|
+
"data-lp-context-row": __props.rowMenu ? "" : void 0,
|
|
1349
|
+
onClick: ($event) => onRowClick(entry.row, keyFor(entry.row, entry.index)),
|
|
1350
|
+
onPointerdown: ($event) => onRowPointerDown($event, keyFor(entry.row, entry.index)),
|
|
1351
|
+
onKeydown: onRowKeydown
|
|
1352
|
+
}), [
|
|
1353
|
+
expansionOn.value ? (openBlock(), createElementBlock("td", {
|
|
1354
|
+
key: 0,
|
|
1355
|
+
class: normalizeClass(["w-px p-0 text-center", cellY.value]),
|
|
1356
|
+
onClick: _cache[3] || (_cache[3] = withModifiers(() => {
|
|
1357
|
+
}, ["stop"])),
|
|
1358
|
+
onKeydown: _cache[4] || (_cache[4] = withModifiers(() => {
|
|
1359
|
+
}, ["stop"]))
|
|
1360
|
+
}, [
|
|
1361
|
+
canExpand(entry.row) ? (openBlock(), createElementBlock("button", {
|
|
1362
|
+
key: 0,
|
|
1363
|
+
type: "button",
|
|
1364
|
+
class: "inline-grid size-6 place-items-center rounded-small text-muted outline-none transition-colors duration-fast hover:text-ink focus-visible:ring-2 focus-visible:ring-ring",
|
|
1365
|
+
"aria-expanded": expandedKeys.value.has(keyFor(entry.row, entry.index)),
|
|
1366
|
+
"aria-label": expandedKeys.value.has(keyFor(entry.row, entry.index)) ? text.value.collapseRow : text.value.expandRow,
|
|
1367
|
+
onClick: ($event) => toggleExpanded(keyFor(entry.row, entry.index))
|
|
1368
|
+
}, [
|
|
1369
|
+
createVNode(_sfc_main$3, {
|
|
1370
|
+
name: "lucide:chevron-right",
|
|
1371
|
+
size: 14,
|
|
1372
|
+
class: normalizeClass(["transition-transform duration-fast motion-reduce:transition-none", expandedKeys.value.has(keyFor(entry.row, entry.index)) ? "rotate-90" : ""])
|
|
1373
|
+
}, null, 8, ["class"])
|
|
1374
|
+
], 8, _hoisted_28)) : createCommentVNode("", true)
|
|
1375
|
+
], 34)) : createCommentVNode("", true),
|
|
1376
|
+
__props.selectable ? (openBlock(), createElementBlock("td", {
|
|
1377
|
+
key: 1,
|
|
1378
|
+
class: normalizeClass(["w-px cursor-pointer p-0 select-none", cellY.value]),
|
|
1379
|
+
onClick: _cache[5] || (_cache[5] = withModifiers(() => {
|
|
1380
|
+
}, ["stop"])),
|
|
1381
|
+
onPointerdown: withModifiers(($event) => unref(paint).onPointerDown($event, keyFor(entry.row, entry.index)), ["stop"])
|
|
1382
|
+
}, [
|
|
1383
|
+
createElementVNode("div", {
|
|
1384
|
+
class: normalizeClass(["lp-tick lp-tick-open", ticksShown.value ? "" : "lp-tick-cue"])
|
|
1385
|
+
}, [
|
|
1386
|
+
createVNode(_sfc_main$9, {
|
|
1387
|
+
"model-value": isSelected(keyFor(entry.row, entry.index)),
|
|
1388
|
+
"onUpdate:modelValue": (v) => toggleRow(keyFor(entry.row, entry.index), v)
|
|
1389
|
+
}, null, 8, ["model-value", "onUpdate:modelValue"])
|
|
1390
|
+
], 2)
|
|
1391
|
+
], 42, _hoisted_29)) : createCommentVNode("", true),
|
|
1392
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(shownColumns.value, (col) => {
|
|
1393
|
+
return openBlock(), createElementBlock("td", {
|
|
1394
|
+
key: col.key,
|
|
1395
|
+
class: normalizeClass(["px-4 text-ink", [alignClass(col.align), cellY.value, col.nowrap ? "whitespace-nowrap" : "", col.pin ? PIN_CELL : ""]]),
|
|
1396
|
+
style: normalizeStyle(pinStyle(col))
|
|
1397
|
+
}, [
|
|
1398
|
+
renderSlot(_ctx.$slots, `cell-${col.key}`, {
|
|
1399
|
+
row: entry.row,
|
|
1400
|
+
value: entry.row[col.key],
|
|
1401
|
+
openMenu: openRowMenu
|
|
1402
|
+
}, () => [
|
|
1403
|
+
isEditable(col, entry.row) ? (openBlock(), createElementBlock("span", {
|
|
1404
|
+
key: 0,
|
|
1405
|
+
class: "inline-block",
|
|
1406
|
+
onClick: _cache[6] || (_cache[6] = withModifiers(() => {
|
|
1407
|
+
}, ["stop"])),
|
|
1408
|
+
onPointerdown: _cache[7] || (_cache[7] = withModifiers(() => {
|
|
1409
|
+
}, ["stop"])),
|
|
1410
|
+
onKeydown: _cache[8] || (_cache[8] = withModifiers(() => {
|
|
1411
|
+
}, ["stop"]))
|
|
1412
|
+
}, [
|
|
1413
|
+
createVNode(_sfc_main$e, {
|
|
1414
|
+
"model-value": String(entry.row[col.key] ?? ""),
|
|
1415
|
+
label: col.label,
|
|
1416
|
+
size: "sm",
|
|
1417
|
+
validate: (value) => col.validateEdit?.(value, entry.row),
|
|
1418
|
+
save: (value) => saveCell(col, entry.row, value)
|
|
1419
|
+
}, null, 8, ["model-value", "label", "validate", "save"])
|
|
1420
|
+
], 32)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
1421
|
+
createTextVNode(toDisplayString(entry.row[col.key]), 1)
|
|
1422
|
+
], 64))
|
|
1423
|
+
], true)
|
|
1424
|
+
], 6);
|
|
1425
|
+
}), 128))
|
|
1426
|
+
], 16, _hoisted_27))
|
|
1427
|
+
], 64);
|
|
1428
|
+
}), 128)),
|
|
1429
|
+
rowWindowed.value?.after ? (openBlock(), createElementBlock("tr", _hoisted_30, [
|
|
1430
|
+
createElementVNode("td", {
|
|
1431
|
+
colspan: colSpan.value,
|
|
1432
|
+
class: "p-0",
|
|
1433
|
+
style: normalizeStyle({ height: `${rowWindowed.value.after}px` })
|
|
1434
|
+
}, null, 12, _hoisted_31)
|
|
1435
|
+
])) : createCommentVNode("", true)
|
|
1024
1436
|
]),
|
|
1025
1437
|
_: 3
|
|
1026
1438
|
}, 8, ["css", "class", "aria-busy"])
|
|
1027
|
-
],
|
|
1439
|
+
], 14, _hoisted_10)
|
|
1028
1440
|
]),
|
|
1029
1441
|
_: 3
|
|
1030
1442
|
}, 8, ["items", "no-hint", "title", "subtitle", "title-icon", "title-image"])
|
|
1031
1443
|
]),
|
|
1032
1444
|
_: 3
|
|
1033
1445
|
}, 16, ["style", "bar-inset-top"]),
|
|
1034
|
-
__props.load && total.value > __props.pageSize ? (openBlock(), createBlock(_sfc_main$
|
|
1446
|
+
__props.load && total.value > __props.pageSize ? (openBlock(), createBlock(_sfc_main$f, {
|
|
1035
1447
|
key: 1,
|
|
1036
1448
|
page: page.value,
|
|
1037
|
-
"onUpdate:page": _cache[
|
|
1449
|
+
"onUpdate:page": _cache[9] || (_cache[9] = ($event) => page.value = $event),
|
|
1038
1450
|
total: total.value,
|
|
1039
1451
|
"page-size": __props.pageSize,
|
|
1040
1452
|
disabled: busy.value
|
|
@@ -1043,7 +1455,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1043
1455
|
};
|
|
1044
1456
|
}
|
|
1045
1457
|
});
|
|
1046
|
-
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
1458
|
+
const LpTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-48ad51fc"]]);
|
|
1047
1459
|
export {
|
|
1048
1460
|
LpTable as default
|
|
1049
1461
|
};
|