@feugene/granularity 0.10.0 → 0.12.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 +44 -45
- package/dist/GrButtonGroup.css +1 -1
- package/dist/GrFormFile.css +1 -1
- package/dist/GrIcon.css +1 -1
- package/dist/GrLoading.css +1 -1
- package/dist/GrSkeleton.css +1 -1
- package/dist/GrToaster.css +1 -0
- package/dist/GrTree.css +1 -1
- package/dist/chunks/{adapter-BqqjEZGU.js.map → adapter-CAOxmn2G.js.map} +1 -1
- package/dist/chunks/arrow-up-C_G4jg8M.js.map +1 -0
- package/dist/chunks/{classTokens-BPeBXNzu.js.map → classTokens-BzazaERD.js.map} +1 -1
- package/dist/chunks/{config-A-iei0Ux.js → config-1uSYl98Y2.js} +5 -5
- package/dist/chunks/config-1uSYl98Y2.js.map +1 -0
- package/dist/chunks/{config-DZrlovR42.js.map → config-8Pcutu1j2.js.map} +1 -1
- package/dist/chunks/{config-VJuoznpH.js.map → config-B0qIpo8m.js.map} +1 -1
- package/dist/chunks/{config-C8MM2Dg0.js → config-B7IIWGt_2.js} +3 -3
- package/dist/chunks/config-B7IIWGt_2.js.map +1 -0
- package/dist/chunks/{config-DbghHyY_.js.map → config-BEegFP74.js.map} +1 -1
- package/dist/chunks/{config-D_Pafsjq2.js → config-BIRO0vDJ.js} +6 -6
- package/dist/chunks/config-BIRO0vDJ.js.map +1 -0
- package/dist/chunks/{config-BeBsN0c12.js.map → config-BLHqZhy-2.js.map} +1 -1
- package/dist/chunks/{config-BV4vBzdm.js.map → config-BNu8lFQB.js.map} +1 -1
- package/dist/chunks/config-BOlr7qw7.js +106 -0
- package/dist/chunks/config-BOlr7qw7.js.map +1 -0
- package/dist/chunks/{config-DhQc1TRY.js.map → config-BUHuGBik.js.map} +1 -1
- package/dist/chunks/{config-CPSdAjUi.js.map → config-BWGGp7uV.js.map} +1 -1
- package/dist/chunks/config-BWiPnygb.js +5 -0
- package/dist/chunks/config-BWiPnygb.js.map +1 -0
- package/dist/chunks/config-BX1JTrkV2.js +14 -0
- package/dist/chunks/config-BX1JTrkV2.js.map +1 -0
- package/dist/chunks/config-BXtAmU3s2.js.map +1 -0
- package/dist/chunks/{config-CzgNEHKi.js.map → config-Bah4oHwL.js.map} +1 -1
- package/dist/chunks/{config-C_egzT_K.js → config-C49QUoJL.js} +3 -3
- package/dist/chunks/{config-C_egzT_K.js.map → config-C49QUoJL.js.map} +1 -1
- package/dist/chunks/{config-3I3vqDW4.js → config-C4snOIXg.js} +1 -1
- package/dist/chunks/{config-3I3vqDW4.js.map → config-C4snOIXg.js.map} +1 -1
- package/dist/chunks/{config-DvDNney3.js → config-C7NpDrfO.js} +5 -5
- package/dist/chunks/{config-DvDNney3.js.map → config-C7NpDrfO.js.map} +1 -1
- package/dist/chunks/{config-lMDE_8A5.js.map → config-C86UzUYf.js.map} +1 -1
- package/dist/chunks/{config-BgBWt9-A.js.map → config-C9AcVDkv.js.map} +1 -1
- package/dist/chunks/config-CGHLoBlH.js.map +1 -0
- package/dist/chunks/{config-ChQxl75m.js.map → config-CThzliFi.js.map} +1 -1
- package/dist/chunks/{config-DDwBSoc_.js.map → config-Cb2PAlSD.js.map} +1 -1
- package/dist/chunks/{config-XspHtPsU.js → config-ClhKPJvg.js} +5 -5
- package/dist/chunks/{config-XspHtPsU.js.map → config-ClhKPJvg.js.map} +1 -1
- package/dist/chunks/{config-58Mj2rGH.js → config-Cpi9Mh2J.js} +3 -3
- package/dist/chunks/{config-58Mj2rGH.js.map → config-Cpi9Mh2J.js.map} +1 -1
- package/dist/chunks/{config-nrOj9p6I.js → config-CrG1XiE72.js} +4 -4
- package/dist/chunks/config-CrG1XiE72.js.map +1 -0
- package/dist/chunks/{config-DRpkoSvq.js → config-CziwTDDL.js} +3 -3
- package/dist/chunks/{config-DRpkoSvq.js.map → config-CziwTDDL.js.map} +1 -1
- package/dist/chunks/{config-C5-ujXCI.js.map → config-D7GZO-Dx.js.map} +1 -1
- package/dist/chunks/{config-CUwF4E4R.js.map → config-DBmdgoVf.js.map} +1 -1
- package/dist/chunks/{config-C9MblwGq.js.map → config-DICOd-2X.js.map} +1 -1
- package/dist/chunks/{config-C6zT56Jc2.js → config-DUcu1D682.js} +3 -3
- package/dist/chunks/{config-C6zT56Jc2.js.map → config-DUcu1D682.js.map} +1 -1
- package/dist/chunks/{config-8f8624RN.js → config-D_R56_gT.js} +5 -5
- package/dist/chunks/{config-8f8624RN.js.map → config-D_R56_gT.js.map} +1 -1
- package/dist/chunks/{config-RjfJFv1Y.js → config-DezDih8_.js} +4 -4
- package/dist/chunks/config-DezDih8_.js.map +1 -0
- package/dist/chunks/config-Dlm49Jp5.js +5 -0
- package/dist/chunks/config-Dlm49Jp5.js.map +1 -0
- package/dist/chunks/{config-B0uUCaJW.js → config-DnvPqu4g2.js} +3 -3
- package/dist/chunks/config-DnvPqu4g2.js.map +1 -0
- package/dist/chunks/config-DpqOnJiz.js.map +1 -0
- package/dist/chunks/{config-V3LF-b_F.js.map → config-Dxuwwepq.js.map} +1 -1
- package/dist/chunks/{config-Doa_gU40.js.map → config-HZto2PVy.js.map} +1 -1
- package/dist/chunks/{config-Dl5aZ5VR.js.map → config-JOtB4mzs.js.map} +1 -1
- package/dist/chunks/config-JpHA4Xx02.js.map +1 -0
- package/dist/chunks/{config-DkeLkzxj2.js → config-LGrZIdaZ.js} +1 -1
- package/dist/chunks/config-LGrZIdaZ.js.map +1 -0
- package/dist/chunks/{config-B3dn-gdC.js.map → config-PFg39mYo.js.map} +1 -1
- package/dist/chunks/{config-CU_CBd0k.js → config-QYGvEBu5.js} +2 -2
- package/dist/chunks/{config-CU_CBd0k.js.map → config-QYGvEBu5.js.map} +1 -1
- package/dist/chunks/{config-Bh4NWWsQ.js.map → config-QaIc_gRa.js.map} +1 -1
- package/dist/chunks/{config-vcDVCYXo.js.map → config-U4m9PSql.js.map} +1 -1
- package/dist/chunks/{config-C_q_4FrU.js.map → config-ZiXWIRBX.js.map} +1 -1
- package/dist/chunks/config-eXB87DOi2.js +9 -0
- package/dist/chunks/config-eXB87DOi2.js.map +1 -0
- package/dist/chunks/{config-hSlCXHoG.js → config-eYLZYOUS2.js} +63 -63
- package/dist/chunks/config-eYLZYOUS2.js.map +1 -0
- package/dist/chunks/{config-DDUPnue12.js.map → config-ipvU0lzP2.js.map} +1 -1
- package/dist/chunks/{config-B61cX08u.js → config-jBp9wVv-.js} +4 -4
- package/dist/chunks/{config-B61cX08u.js.map → config-jBp9wVv-.js.map} +1 -1
- package/dist/chunks/{config-D5ek7VSi.js.map → config-xR4XVmcy.js.map} +1 -1
- package/dist/chunks/context-DdNIxa1w.js +9 -0
- package/dist/chunks/context-DdNIxa1w.js.map +1 -0
- package/dist/chunks/{dialogShared-BtXUk6Zc.js.map → dialogShared-CxW62PQE.js.map} +1 -1
- package/dist/chunks/en-CfkDa4GX.js +144 -0
- package/dist/chunks/en-CfkDa4GX.js.map +1 -0
- package/dist/chunks/{es-CISK11Nv.js → es-CgaLnFYx.js} +3 -3
- package/dist/chunks/{es-CISK11Nv.js.map → es-CgaLnFYx.js.map} +1 -1
- package/dist/chunks/es-FkgECuCm.js +144 -0
- package/dist/chunks/es-FkgECuCm.js.map +1 -0
- package/dist/chunks/{fileValidation-c_iBg74s.js → fileValidation-C3WFaWU2.js} +2 -1
- package/dist/chunks/{fileValidation-c_iBg74s.js.map → fileValidation-C3WFaWU2.js.map} +1 -1
- package/dist/chunks/{grBadgeStyles-Cq0hH2Ls.js → grBadgeStyles-DrycBuKT.js} +13 -13
- package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +1 -0
- package/dist/chunks/grButtonStyles-C7Yga_Q1.js +191 -0
- package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +1 -0
- package/dist/chunks/{grDropdownStyles-Bqx9hOzU.js → grDropdownStyles-B_-DKytw.js} +2 -2
- package/dist/chunks/{grDropdownStyles-Bqx9hOzU.js.map → grDropdownStyles-B_-DKytw.js.map} +1 -1
- package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js.map → grLoadingStyles-R5sreH__.js.map} +1 -1
- package/dist/chunks/grModalEscStack-BXk-9mv7.js +43 -0
- package/dist/chunks/grModalEscStack-BXk-9mv7.js.map +1 -0
- package/dist/chunks/{grModalStyles-FgaKqx50.js → grModalStyles-DWd3i05Q.js} +6 -6
- package/dist/chunks/{grModalStyles-FgaKqx50.js.map → grModalStyles-DWd3i05Q.js.map} +1 -1
- package/dist/chunks/{grSelectStyles-AjWWl007.js → grSelectStyles-CLK5hRd3.js} +3 -3
- package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +1 -0
- package/dist/chunks/{grStyle-D-gPHdyW.js → grStyle-Blc9otAx.js} +6 -6
- package/dist/chunks/grStyle-Blc9otAx.js.map +1 -0
- package/dist/chunks/{granularityI18n-D_7jowK2.js → granularityI18n-DoV7Ca2m.js} +1 -1
- package/dist/chunks/{granularityI18n-D_7jowK2.js.map → granularityI18n-DoV7Ca2m.js.map} +1 -1
- package/dist/chunks/info-Be2OccTu.js.map +1 -0
- package/dist/chunks/loader-circle-CfVLz7lb.js.map +1 -0
- package/dist/chunks/ru-Bl8CxpEa.js +144 -0
- package/dist/chunks/ru-Bl8CxpEa.js.map +1 -0
- package/dist/chunks/{safelist-_UVzJrgE2.js → safelist-CkF4v7DC.js} +3 -3
- package/dist/chunks/safelist-CkF4v7DC.js.map +1 -0
- package/dist/chunks/{safelist-DccvJqCE.js → safelist-Do2RtzLB.js} +3 -3
- package/dist/chunks/{safelist-DccvJqCE.js.map → safelist-Do2RtzLB.js.map} +1 -1
- package/dist/chunks/shared-B6Ay2081.js +174 -0
- package/dist/chunks/shared-B6Ay2081.js.map +1 -0
- package/dist/chunks/useAddonMeasurement-DM0akF4C.js +65 -0
- package/dist/chunks/useAddonMeasurement-DM0akF4C.js.map +1 -0
- package/dist/chunks/useEscapeToClose-C2t_S1gh.js +27 -0
- package/dist/chunks/useEscapeToClose-C2t_S1gh.js.map +1 -0
- package/dist/chunks/{useFloating-CLtbU7eD.js → useFloating-DtM6TyE4.js} +19 -4
- package/dist/chunks/{useFloating-CLtbU7eD.js.map → useFloating-DtM6TyE4.js.map} +1 -1
- package/dist/chunks/{transition-mJ3PZCHH.js → useScrollLock-K7kaP2Ud.js} +78 -13
- package/dist/chunks/useScrollLock-K7kaP2Ud.js.map +1 -0
- package/dist/chunks/x-2KXnqxiD.js.map +1 -0
- package/dist/chunks/x-circle-BCBURwyX.js.map +1 -0
- package/dist/components/GrAlert/chunks/{GrAlert-HyCjYJeL.js → GrAlert-DPJSU_fG.js} +40 -37
- package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +1 -0
- package/dist/components/GrAlert/index.js +2 -2
- package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js → GrAvatar-96CpTCq5.js} +2 -2
- package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js.map → GrAvatar-96CpTCq5.js.map} +1 -1
- package/dist/components/GrAvatar/index.js +2 -2
- package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js → GrBadge-B77XlaqE.js} +3 -3
- package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js.map → GrBadge-B77XlaqE.js.map} +1 -1
- package/dist/components/GrBadge/index.js +2 -2
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js → GrBadgeWrap-CcktMOdg.js} +2 -2
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js.map → GrBadgeWrap-CcktMOdg.js.map} +1 -1
- package/dist/components/GrBadgeWrap/index.js +2 -2
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js.map → GrBottomNav-usuMgG8_.js.map} +1 -1
- package/dist/components/GrBottomNav/index.js +2 -2
- package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js +124 -0
- package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +1 -0
- package/dist/components/GrButton/index.js +4 -4
- package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CPOH6V-P.js → GrButtonGroup-Bs9dEKfA.js} +1 -1
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js.map +1 -0
- package/dist/components/GrButtonGroup/index.js +2 -2
- package/dist/components/GrCard/chunks/{GrCard-6yk1RRAQ.js → GrCard-DUNMkuHW.js} +3 -3
- package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +1 -0
- package/dist/components/GrCard/index.js +2 -2
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-Bt3d7ckE.js → GrCheckbox-DJhzZZdO.js} +66 -18
- package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +1 -0
- package/dist/components/GrCheckbox/index.js +2 -2
- package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js → GrCollapse-CPPLh_xU.js} +12 -12
- package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js.map → GrCollapse-CPPLh_xU.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +2 -2
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-Bi2KLumL.js → GrConfirmDialog-D8CkOtqv.js} +20 -14
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js.map +1 -0
- package/dist/components/GrConfirmDialog/index.js +2 -2
- package/dist/components/GrDataTable/chunks/{GrDataTable-ClcYiyc8.js → GrDataTable-Ds5OeGat.js} +49 -23
- package/dist/components/GrDataTable/chunks/GrDataTable-Ds5OeGat.js.map +1 -0
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-CxK4Lj4F.js → GrDialog-Ctucxju9.js} +14 -12
- package/dist/components/GrDialog/chunks/GrDialog-Ctucxju9.js.map +1 -0
- package/dist/components/GrDialog/index.js +3 -3
- package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js +425 -0
- package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js.map +1 -0
- package/dist/components/GrDialogService/index.js +3 -0
- package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js +54 -0
- package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js.map +1 -0
- package/dist/components/GrDivider/index.js +3 -0
- package/dist/components/GrDrawer/chunks/{GrDrawer-BW3wtI7h.js → GrDrawer-SLGKCY2A.js} +54 -26
- package/dist/components/GrDrawer/chunks/GrDrawer-SLGKCY2A.js.map +1 -0
- package/dist/components/GrDrawer/index.js +2 -2
- package/dist/components/GrDropdown/chunks/GrDropdown-BnDMYP8v.js +181 -0
- package/dist/components/GrDropdown/chunks/GrDropdown-BnDMYP8v.js.map +1 -0
- package/dist/components/GrDropdown/index.js +2 -2
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CJom_-c2.js → GrDropdownMenu--g9Vofcq.js} +10 -10
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CJom_-c2.js.map → GrDropdownMenu--g9Vofcq.js.map} +1 -1
- package/dist/components/GrDropdownMenu/index.js +2 -2
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-yOuZW7-t.js → GrEmptyState-CA3BiTV7.js} +3 -3
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-yOuZW7-t.js.map → GrEmptyState-CA3BiTV7.js.map} +1 -1
- package/dist/components/GrEmptyState/index.js +2 -2
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-CBKK3dgC.js → GrFileUpload-DvWPpiJS.js} +26 -23
- package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +3 -3
- package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js +73 -0
- package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js.map +1 -0
- package/dist/components/GrFormField/index.js +4 -3
- package/dist/components/GrFormFile/chunks/{GrFormFile-CkR6cYqf.js → GrFormFile-CXcqqdvV.js} +38 -31
- package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +1 -0
- package/dist/components/GrFormFile/index.js +2 -2
- package/dist/components/GrFormSection/chunks/{GrFormSection-dbyzqxYk.js → GrFormSection-Ce21jcgo.js} +1 -1
- package/dist/components/GrFormSection/chunks/{GrFormSection-dbyzqxYk.js.map → GrFormSection-Ce21jcgo.js.map} +1 -1
- package/dist/components/GrFormSection/index.js +2 -2
- package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js → GrIcon-D9AWQLk2.js} +3 -3
- package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js.map → GrIcon-D9AWQLk2.js.map} +1 -1
- package/dist/components/GrIcon/index.js +2 -2
- package/dist/components/GrImageViewer/chunks/GrImageViewer-Dla9IBkd.js +650 -0
- package/dist/components/GrImageViewer/chunks/GrImageViewer-Dla9IBkd.js.map +1 -0
- package/dist/components/GrImageViewer/index.js +2 -2
- package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js +334 -0
- package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js.map +1 -0
- package/dist/components/GrInput/index.js +2 -2
- package/dist/components/GrInputTag/chunks/{GrInputTag-g-KdUI_Z.js → GrInputTag-zMgFqp2g.js} +27 -24
- package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +1 -0
- package/dist/components/GrInputTag/index.js +2 -2
- package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js +22 -0
- package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js.map +1 -0
- package/dist/components/GrKbd/index.js +3 -0
- package/dist/components/GrLink/chunks/{GrLink-KSTmk9Yq.js → GrLink-CYUe-Q8k.js} +14 -7
- package/dist/components/GrLink/chunks/GrLink-CYUe-Q8k.js.map +1 -0
- package/dist/components/GrLink/index.js +2 -2
- package/dist/components/GrList/chunks/{GrList-CUW2sRm_.js → GrList-Dx772Ns4.js} +1 -1
- package/dist/components/GrList/chunks/{GrList-CUW2sRm_.js.map → GrList-Dx772Ns4.js.map} +1 -1
- package/dist/components/GrList/index.js +2 -2
- package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js → GrLoading--X_7rdbb.js} +7 -7
- package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js.map → GrLoading--X_7rdbb.js.map} +1 -1
- package/dist/components/GrLoading/index.js +2 -2
- package/dist/components/GrModal/chunks/{GrModal-CSOL3fHQ.js → GrModal-C0GZrHN3.js} +9 -62
- package/dist/components/GrModal/chunks/GrModal-C0GZrHN3.js.map +1 -0
- package/dist/components/GrModal/index.js +3 -3
- package/dist/components/GrNavbar/chunks/{GrNavbar-CHxwtFIR.js → GrNavbar-DW3MiIIf.js} +6 -6
- package/dist/components/GrNavbar/chunks/{GrNavbar-CHxwtFIR.js.map → GrNavbar-DW3MiIIf.js.map} +1 -1
- package/dist/components/GrNavbar/index.js +2 -2
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-ClPBwkxx.js → GrNumberInput-DxCEvL7V.js} +144 -72
- package/dist/components/GrNumberInput/chunks/GrNumberInput-DxCEvL7V.js.map +1 -0
- package/dist/components/GrNumberInput/index.js +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-D2GS0ShQ.js → GrPagination-mlyfLjQY.js} +76 -25
- package/dist/components/GrPagination/chunks/GrPagination-mlyfLjQY.js.map +1 -0
- package/dist/components/GrPagination/index.js +2 -2
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-BBSFpVEq.js → GrProgressBar-CC3z-Zqp.js} +3 -3
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-BBSFpVEq.js.map → GrProgressBar-CC3z-Zqp.js.map} +1 -1
- package/dist/components/GrProgressBar/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-D_TFqKsF.js → GrPromptDialog-C-_BMNuY.js} +31 -23
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js.map +1 -0
- package/dist/components/GrPromptDialog/index.js +2 -2
- package/dist/components/GrRadio/chunks/{GrRadio-CSbTnrom.js → GrRadio-Dr-pvs_9.js} +6 -6
- package/dist/components/GrRadio/chunks/{GrRadio-CSbTnrom.js.map → GrRadio-Dr-pvs_9.js.map} +1 -1
- package/dist/components/GrRadio/index.js +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-DsrnTygR.js → GrRadioGroup-nOdvfV_g.js} +3 -3
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-DsrnTygR.js.map → GrRadioGroup-nOdvfV_g.js.map} +1 -1
- package/dist/components/GrRadioGroup/index.js +2 -2
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-K1uZ1mYD.js → GrResponseErrorBanner-BWJNe2gr.js} +21 -18
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BWJNe2gr.js.map +1 -0
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-bM8FC_Bw.js → GrResponseErrorBanner-Cdu9ekK9.js} +5 -5
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-bM8FC_Bw.js.map → GrResponseErrorBanner-Cdu9ekK9.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/index.js +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-DpZGs4VX.js → GrSegmented-C1y0UXpQ.js} +5 -5
- package/dist/components/GrSegmented/chunks/{GrSegmented-DpZGs4VX.js.map → GrSegmented-C1y0UXpQ.js.map} +1 -1
- package/dist/components/GrSegmented/index.js +2 -2
- package/dist/components/GrSelect/chunks/{GrSelect-DSz7jvUb.js → GrSelect-BVCmitqa.js} +227 -87
- package/dist/components/GrSelect/chunks/GrSelect-BVCmitqa.js.map +1 -0
- package/dist/components/GrSelect/index.js +2 -2
- package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js +238 -0
- package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +1 -0
- package/dist/components/GrSidebar/index.js +3 -3
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-B05K0QKh.js → GrSkeleton-DsN-_CDZ.js} +1 -1
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-B05K0QKh.js.map → GrSkeleton-DsN-_CDZ.js.map} +1 -1
- package/dist/components/GrSkeleton/index.js +2 -2
- package/dist/components/GrSwitch/chunks/{GrSwitch-CSRtcN5-.js → GrSwitch-DAioyccZ.js} +10 -10
- package/dist/components/GrSwitch/chunks/{GrSwitch-CSRtcN5-.js.map → GrSwitch-DAioyccZ.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +2 -2
- package/dist/components/GrTabPanels/chunks/GrTabPanels-DbKybwe-.js +68 -0
- package/dist/components/GrTabPanels/chunks/GrTabPanels-DbKybwe-.js.map +1 -0
- package/dist/components/GrTabPanels/index.js +3 -0
- package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js → GrTable-Db3hRnKA.js} +3 -3
- package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js.map → GrTable-Db3hRnKA.js.map} +1 -1
- package/dist/components/GrTable/index.js +2 -2
- package/dist/components/GrTabs/chunks/{GrTabs-BfeVNMFJ.js → GrTabs-DsLwWoRz.js} +9 -4
- package/dist/components/GrTabs/chunks/GrTabs-DsLwWoRz.js.map +1 -0
- package/dist/components/GrTabs/index.js +2 -2
- package/dist/components/GrTextarea/chunks/{GrTextarea-CBBzpF2S.js → GrTextarea-CKukGlNl.js} +17 -7
- package/dist/components/GrTextarea/chunks/GrTextarea-CKukGlNl.js.map +1 -0
- package/dist/components/GrTextarea/index.js +2 -2
- package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js +189 -0
- package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js.map +1 -0
- package/dist/components/GrToaster/index.js +2 -2
- package/dist/components/GrTooltip/chunks/{GrTooltip-BC-40SA5.js → GrTooltip-BeyZ8ssR.js} +10 -10
- package/dist/components/GrTooltip/chunks/{GrTooltip-BC-40SA5.js.map → GrTooltip-BeyZ8ssR.js.map} +1 -1
- package/dist/components/GrTooltip/index.js +2 -2
- package/dist/components/GrTree/chunks/{GrTree-uZr5SyQI.js → GrTree-B2_yW6g1.js} +145 -41
- package/dist/components/GrTree/chunks/GrTree-B2_yW6g1.js.map +1 -0
- package/dist/components/GrTree/index.js +2 -2
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-CytivcCa.js → GrTreeSelect-0aM62xyu.js} +16 -16
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-CytivcCa.js.map → GrTreeSelect-0aM62xyu.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +2 -2
- package/dist/composables/useTheme.js +48 -8
- package/dist/composables/useTheme.js.map +1 -1
- package/dist/composables/useToast.js +88 -26
- package/dist/composables/useToast.js.map +1 -1
- package/dist/directives/autofocus.js.map +1 -1
- package/dist/directives/autosize.js.map +1 -1
- package/dist/directives/clickOutside.js.map +1 -1
- package/dist/directives/dropzone.js +6 -5
- package/dist/directives/dropzone.js.map +1 -1
- package/dist/directives/hotkey.js +24 -7
- package/dist/directives/hotkey.js.map +1 -1
- package/dist/directives/loading.js +2 -2
- package/dist/directives/loading.js.map +1 -1
- package/dist/fileValidation/index.js +1 -1
- package/dist/granular-provider-node.js +7 -7
- package/dist/granular-provider-node.js.map +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/granular-provider.js.map +1 -1
- package/dist/i18n/all.js +1 -1
- package/dist/i18n/all.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/index.js +116 -534
- package/dist/index.js.map +1 -1
- package/dist/styles/base.css +54 -0
- package/dist/styles/index.css +15 -0
- package/dist/styles/preflight.css +33 -0
- package/dist/styles/themes/dark.css +107 -0
- package/dist/styles/themes/light.css +98 -0
- package/dist/styles/tokens.css +135 -0
- package/dist/types/src/components/GrButton/GrButton.vue.d.ts +25 -2
- package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +7 -2
- package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +8 -8
- package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +29 -5
- package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +2 -2
- package/dist/types/src/components/GrDialog/GrDialogHeader.vue.d.ts +2 -2
- package/dist/types/src/components/GrDivider/GrDivider.vue.d.ts +58 -0
- package/dist/types/src/components/GrDivider/config.d.ts +1 -0
- package/dist/types/src/components/GrDivider/index.d.ts +4 -0
- package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +6 -6
- package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +7 -0
- package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +6 -0
- package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +4 -4
- package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +15 -2
- package/dist/types/src/components/GrFormField/context.d.ts +20 -0
- package/dist/types/src/components/GrFormField/index.d.ts +1 -0
- package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +11 -11
- package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +22 -18
- package/dist/types/src/components/GrImageViewer/composables/useViewerKeyboard.d.ts +20 -0
- package/dist/types/src/components/GrImageViewer/composables/useWheelGesture.d.ts +16 -0
- package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +50 -0
- package/dist/types/src/components/GrInput/GrInput.vue.d.ts +55 -2
- package/dist/types/src/components/GrInput/grInputStyles.d.ts +3 -3
- package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +2 -2
- package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +46 -0
- package/dist/types/src/components/GrKbd/config.d.ts +1 -0
- package/dist/types/src/components/GrKbd/index.d.ts +4 -0
- package/dist/types/src/components/GrLink/GrLink.vue.d.ts +12 -6
- package/dist/types/src/components/GrLink/grLinkStyles.d.ts +31 -3
- package/dist/types/src/components/GrLink/index.d.ts +1 -1
- package/dist/types/src/components/GrLoading/GrLoading.vue.d.ts +1 -1
- package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
- package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +33 -4
- package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +13 -1
- package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +12 -12
- package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +1 -1
- package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +5 -5
- package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +3 -3
- package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +2 -1
- package/dist/types/src/components/GrSidebar/GrSidebar.vue.d.ts +33 -10
- package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +64 -0
- package/dist/types/src/components/GrSidebar/index.d.ts +1 -0
- package/dist/types/src/components/GrSidebar/sidebarContext.d.ts +9 -0
- package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +1 -1
- package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
- package/dist/types/src/components/GrTabPanels/GrTabPanel.vue.d.ts +46 -0
- package/dist/types/src/components/GrTabPanels/GrTabPanels.vue.d.ts +51 -0
- package/dist/types/src/components/GrTabPanels/config.d.ts +5 -0
- package/dist/types/src/components/GrTabPanels/context.d.ts +9 -0
- package/dist/types/src/components/GrTabPanels/index.d.ts +6 -0
- package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +6 -0
- package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +9 -4
- package/dist/types/src/components/GrTree/GrTree.vue.d.ts +1 -1
- package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +2 -0
- package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +2 -2
- package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
- package/dist/types/src/components/GrTreeSelect/grTreeSelectTypes.d.ts +1 -1
- package/dist/types/src/composables/internal/useAddonMeasurement.d.ts +18 -0
- package/dist/types/src/composables/internal/useEscapeToClose.d.ts +11 -0
- package/dist/types/src/composables/internal/useScrollLock.d.ts +24 -0
- package/dist/types/src/composables/useTheme.d.ts +5 -2
- package/dist/types/src/composables/useToast.d.ts +33 -1
- package/dist/types/src/directives/hotkey.d.ts +14 -0
- package/dist/types/src/granular-provider/shared.d.ts +4 -3
- package/dist/types/src/i18n/messages/en.d.ts +130 -0
- package/dist/types/src/i18n/messages/es.d.ts +130 -0
- package/dist/types/src/i18n/messages/ru.d.ts +130 -0
- package/dist/types/src/index.d.ts +5 -2
- package/dist/vue/index.js.map +1 -1
- package/dist/web-types.json +4922 -0
- package/package.json +38 -20
- package/dist/chunks/arrow-up-DZdIrpaF.js.map +0 -1
- package/dist/chunks/config-A-iei0Ux.js.map +0 -1
- package/dist/chunks/config-B0uUCaJW.js.map +0 -1
- package/dist/chunks/config-BLa1TEGm2.js.map +0 -1
- package/dist/chunks/config-BduXEXjt.js.map +0 -1
- package/dist/chunks/config-BuoIngj32.js.map +0 -1
- package/dist/chunks/config-C8MM2Dg0.js.map +0 -1
- package/dist/chunks/config-CWTfyPNI.js.map +0 -1
- package/dist/chunks/config-D_Pafsjq2.js.map +0 -1
- package/dist/chunks/config-DkeLkzxj2.js.map +0 -1
- package/dist/chunks/config-NkbzVFZo.js +0 -59
- package/dist/chunks/config-NkbzVFZo.js.map +0 -1
- package/dist/chunks/config-RjfJFv1Y.js.map +0 -1
- package/dist/chunks/config-hSlCXHoG.js.map +0 -1
- package/dist/chunks/config-nrOj9p6I.js.map +0 -1
- package/dist/chunks/en-B_fSdoTi.js +0 -72
- package/dist/chunks/en-B_fSdoTi.js.map +0 -1
- package/dist/chunks/es-DKP6fLir.js +0 -72
- package/dist/chunks/es-DKP6fLir.js.map +0 -1
- package/dist/chunks/grBadgeStyles-Cq0hH2Ls.js.map +0 -1
- package/dist/chunks/grButtonStyles-DKuXUemw.js +0 -191
- package/dist/chunks/grButtonStyles-DKuXUemw.js.map +0 -1
- package/dist/chunks/grSelectStyles-AjWWl007.js.map +0 -1
- package/dist/chunks/grStyle-D-gPHdyW.js.map +0 -1
- package/dist/chunks/info-C0bHmdZq.js.map +0 -1
- package/dist/chunks/loader-circle-BUntgosj.js.map +0 -1
- package/dist/chunks/ru-S6VlnurJ.js +0 -72
- package/dist/chunks/ru-S6VlnurJ.js.map +0 -1
- package/dist/chunks/safelist-_UVzJrgE2.js.map +0 -1
- package/dist/chunks/shared-DpjTvFno.js +0 -169
- package/dist/chunks/shared-DpjTvFno.js.map +0 -1
- package/dist/chunks/transition-mJ3PZCHH.js.map +0 -1
- package/dist/chunks/x-Pa6C2hwi.js.map +0 -1
- package/dist/chunks/x-circle-DQSlBLmX.js.map +0 -1
- package/dist/components/GrAlert/chunks/GrAlert-HyCjYJeL.js.map +0 -1
- package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js +0 -83
- package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js.map +0 -1
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CPOH6V-P.js.map +0 -1
- package/dist/components/GrCard/chunks/GrCard-6yk1RRAQ.js.map +0 -1
- package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js.map +0 -1
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-Bi2KLumL.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-ClcYiyc8.js.map +0 -1
- package/dist/components/GrDialog/chunks/GrDialog-CxK4Lj4F.js.map +0 -1
- package/dist/components/GrDrawer/chunks/GrDrawer-BW3wtI7h.js.map +0 -1
- package/dist/components/GrDropdown/chunks/GrDropdown-BGKeEfZ1.js +0 -105
- package/dist/components/GrDropdown/chunks/GrDropdown-BGKeEfZ1.js.map +0 -1
- package/dist/components/GrFileUpload/chunks/GrFileUpload-CBKK3dgC.js.map +0 -1
- package/dist/components/GrFormField/chunks/GrFormField-U7c_aDPJ.js +0 -35
- package/dist/components/GrFormField/chunks/GrFormField-U7c_aDPJ.js.map +0 -1
- package/dist/components/GrFormFile/chunks/GrFormFile-CkR6cYqf.js.map +0 -1
- package/dist/components/GrImageViewer/chunks/GrImageViewer-BG40DsHa.js +0 -550
- package/dist/components/GrImageViewer/chunks/GrImageViewer-BG40DsHa.js.map +0 -1
- package/dist/components/GrInput/chunks/GrInput-gwFQ1sk4.js +0 -211
- package/dist/components/GrInput/chunks/GrInput-gwFQ1sk4.js.map +0 -1
- package/dist/components/GrInputTag/chunks/GrInputTag-g-KdUI_Z.js.map +0 -1
- package/dist/components/GrLink/chunks/GrLink-KSTmk9Yq.js.map +0 -1
- package/dist/components/GrModal/chunks/GrModal-CSOL3fHQ.js.map +0 -1
- package/dist/components/GrNumberInput/chunks/GrNumberInput-ClPBwkxx.js.map +0 -1
- package/dist/components/GrPagination/chunks/GrPagination-D2GS0ShQ.js.map +0 -1
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-D_TFqKsF.js.map +0 -1
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-K1uZ1mYD.js.map +0 -1
- package/dist/components/GrSelect/chunks/GrSelect-DSz7jvUb.js.map +0 -1
- package/dist/components/GrSidebar/chunks/GrSidebar-BW8LRMZ-.js +0 -44
- package/dist/components/GrSidebar/chunks/GrSidebar-BW8LRMZ-.js.map +0 -1
- package/dist/components/GrTabs/chunks/GrTabs-BfeVNMFJ.js.map +0 -1
- package/dist/components/GrTextarea/chunks/GrTextarea-CBBzpF2S.js.map +0 -1
- package/dist/components/GrToaster/chunks/GrToaster-C6_iHk2J.js +0 -172
- package/dist/components/GrToaster/chunks/GrToaster-C6_iHk2J.js.map +0 -1
- package/dist/components/GrTree/chunks/GrTree-uZr5SyQI.js.map +0 -1
- /package/dist/chunks/{_plugin-vue_export-helper-DQR7Sy7Q.js → _plugin-vue_export-helper-BOaGB7Aw.js} +0 -0
- /package/dist/chunks/{adapter-BqqjEZGU.js → adapter-CAOxmn2G.js} +0 -0
- /package/dist/chunks/{arrow-up-DZdIrpaF.js → arrow-up-C_G4jg8M.js} +0 -0
- /package/dist/chunks/{classTokens-BPeBXNzu.js → classTokens-BzazaERD.js} +0 -0
- /package/dist/chunks/{config-DZrlovR42.js → config-8Pcutu1j2.js} +0 -0
- /package/dist/chunks/{config-VJuoznpH.js → config-B0qIpo8m.js} +0 -0
- /package/dist/chunks/{config-DbghHyY_.js → config-BEegFP74.js} +0 -0
- /package/dist/chunks/{config-BeBsN0c12.js → config-BLHqZhy-2.js} +0 -0
- /package/dist/chunks/{config-BV4vBzdm.js → config-BNu8lFQB.js} +0 -0
- /package/dist/chunks/{config-DhQc1TRY.js → config-BUHuGBik.js} +0 -0
- /package/dist/chunks/{config-CPSdAjUi.js → config-BWGGp7uV.js} +0 -0
- /package/dist/chunks/{config-BduXEXjt.js → config-BXtAmU3s2.js} +0 -0
- /package/dist/chunks/{config-CzgNEHKi.js → config-Bah4oHwL.js} +0 -0
- /package/dist/chunks/{config-lMDE_8A5.js → config-C86UzUYf.js} +0 -0
- /package/dist/chunks/{config-BgBWt9-A.js → config-C9AcVDkv.js} +0 -0
- /package/dist/chunks/{config-BuoIngj32.js → config-CGHLoBlH.js} +0 -0
- /package/dist/chunks/{config-ChQxl75m.js → config-CThzliFi.js} +0 -0
- /package/dist/chunks/{config-DDwBSoc_.js → config-Cb2PAlSD.js} +0 -0
- /package/dist/chunks/{config-C5-ujXCI.js → config-D7GZO-Dx.js} +0 -0
- /package/dist/chunks/{config-CUwF4E4R.js → config-DBmdgoVf.js} +0 -0
- /package/dist/chunks/{config-C9MblwGq.js → config-DICOd-2X.js} +0 -0
- /package/dist/chunks/{config-BLa1TEGm2.js → config-DpqOnJiz.js} +0 -0
- /package/dist/chunks/{config-V3LF-b_F.js → config-Dxuwwepq.js} +0 -0
- /package/dist/chunks/{config-Doa_gU40.js → config-HZto2PVy.js} +0 -0
- /package/dist/chunks/{config-Dl5aZ5VR.js → config-JOtB4mzs.js} +0 -0
- /package/dist/chunks/{config-CWTfyPNI.js → config-JpHA4Xx02.js} +0 -0
- /package/dist/chunks/{config-B3dn-gdC.js → config-PFg39mYo.js} +0 -0
- /package/dist/chunks/{config-Bh4NWWsQ.js → config-QaIc_gRa.js} +0 -0
- /package/dist/chunks/{config-vcDVCYXo.js → config-U4m9PSql.js} +0 -0
- /package/dist/chunks/{config-C_q_4FrU.js → config-ZiXWIRBX.js} +0 -0
- /package/dist/chunks/{config-DDUPnue12.js → config-ipvU0lzP2.js} +0 -0
- /package/dist/chunks/{config-D5ek7VSi.js → config-xR4XVmcy.js} +0 -0
- /package/dist/chunks/{dialogShared-BtXUk6Zc.js → dialogShared-CxW62PQE.js} +0 -0
- /package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js → grLoadingStyles-R5sreH__.js} +0 -0
- /package/dist/chunks/{info-C0bHmdZq.js → info-Be2OccTu.js} +0 -0
- /package/dist/chunks/{loader-circle-BUntgosj.js → loader-circle-CfVLz7lb.js} +0 -0
- /package/dist/chunks/{x-Pa6C2hwi.js → x-2KXnqxiD.js} +0 -0
- /package/dist/chunks/{x-circle-DQSlBLmX.js → x-circle-BCBURwyX.js} +0 -0
- /package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js → GrBottomNav-usuMgG8_.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as GrCard_default } from "../../GrCard/chunks/GrCard-
|
|
2
|
-
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-
|
|
1
|
+
import { t as GrCard_default } from "../../GrCard/chunks/GrCard-DUNMkuHW.js";
|
|
2
|
+
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
|
|
3
3
|
import { computed, createBlock, createElementBlock, createElementVNode, createVNode, defineComponent, getCurrentInstance, inject, markRaw, normalizeClass, openBlock, provide, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
4
4
|
//#region src/components/GrCollapse/grCollapseContext.ts
|
|
5
5
|
var GR_COLLAPSE_CONTEXT = Symbol("GR_COLLAPSE_CONTEXT");
|
|
@@ -29,11 +29,11 @@ var GrCollapse_default = /* @__PURE__ */ defineComponent({
|
|
|
29
29
|
const activeSet = computed(() => {
|
|
30
30
|
const value = props.modelValue;
|
|
31
31
|
if (props.accordion) {
|
|
32
|
-
if (typeof value === "string" || typeof value === "number") return new Set([value]);
|
|
32
|
+
if (typeof value === "string" || typeof value === "number") return /* @__PURE__ */ new Set([value]);
|
|
33
33
|
return /* @__PURE__ */ new Set();
|
|
34
34
|
}
|
|
35
35
|
if (Array.isArray(value)) return new Set(value);
|
|
36
|
-
if (typeof value === "string" || typeof value === "number") return new Set([value]);
|
|
36
|
+
if (typeof value === "string" || typeof value === "number") return /* @__PURE__ */ new Set([value]);
|
|
37
37
|
return /* @__PURE__ */ new Set();
|
|
38
38
|
});
|
|
39
39
|
function setModelValue(next) {
|
|
@@ -56,7 +56,7 @@ var GrCollapse_default = /* @__PURE__ */ defineComponent({
|
|
|
56
56
|
toggle
|
|
57
57
|
});
|
|
58
58
|
return (_ctx, _cache) => {
|
|
59
|
-
return openBlock(), createBlock(unref(GrCard_default), { "data-
|
|
59
|
+
return openBlock(), createBlock(unref(GrCard_default), { "data-gr-collapse": "" }, {
|
|
60
60
|
default: withCtx(() => [createElementVNode("div", { class: normalizeClass(__props.divided ? "divide-y divide-[var(--brd)]" : "") }, [renderSlot(_ctx.$slots, "default")], 2)]),
|
|
61
61
|
_: 3
|
|
62
62
|
});
|
|
@@ -87,7 +87,7 @@ var chevron_down_default = markRaw({
|
|
|
87
87
|
//#endregion
|
|
88
88
|
//#region src/components/GrCollapse/GrCollapseItem.vue?vue&type=script&setup=true&lang.ts
|
|
89
89
|
var _hoisted_1 = {
|
|
90
|
-
"data-
|
|
90
|
+
"data-gr-collapse-item": "",
|
|
91
91
|
class: "text-[var(--fg)]"
|
|
92
92
|
};
|
|
93
93
|
var _hoisted_2 = { class: "m-0" };
|
|
@@ -120,17 +120,17 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
|
|
|
120
120
|
});
|
|
121
121
|
const resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled);
|
|
122
122
|
const expanded = computed(() => collapseContext.isActive(resolvedName.value));
|
|
123
|
-
const headerId = `
|
|
124
|
-
const panelId = `
|
|
123
|
+
const headerId = `gr-collapse-header-${uid}`;
|
|
124
|
+
const panelId = `gr-collapse-panel-${uid}`;
|
|
125
125
|
const triggerEl = ref(null);
|
|
126
126
|
function onToggle() {
|
|
127
127
|
if (resolvedDisabled.value) return;
|
|
128
128
|
collapseContext.toggle(resolvedName.value);
|
|
129
129
|
}
|
|
130
130
|
function getAllTriggers() {
|
|
131
|
-
const root = triggerEl.value?.closest("[data-
|
|
131
|
+
const root = triggerEl.value?.closest("[data-gr-collapse]");
|
|
132
132
|
if (!root) return [];
|
|
133
|
-
return Array.prototype.slice.call(root.querySelectorAll("[data-
|
|
133
|
+
return Array.prototype.slice.call(root.querySelectorAll("[data-gr-collapse-trigger]"));
|
|
134
134
|
}
|
|
135
135
|
function focusRelative(direction) {
|
|
136
136
|
const current = triggerEl.value;
|
|
@@ -176,7 +176,7 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
|
|
|
176
176
|
id: headerId,
|
|
177
177
|
ref_key: "triggerEl",
|
|
178
178
|
ref: triggerEl,
|
|
179
|
-
"data-
|
|
179
|
+
"data-gr-collapse-trigger": "",
|
|
180
180
|
type: "button",
|
|
181
181
|
"aria-expanded": expanded.value ? "true" : "false",
|
|
182
182
|
"aria-controls": panelId,
|
|
@@ -187,7 +187,7 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
|
|
|
187
187
|
}, [createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_5, toDisplayString(__props.title), 1)])]), createVNode(unref(GrIcon_default), {
|
|
188
188
|
size: "sm",
|
|
189
189
|
"aria-hidden": "true",
|
|
190
|
-
"data-
|
|
190
|
+
"data-gr-collapse-chevron": "",
|
|
191
191
|
class: normalizeClass(["shrink-0 transition-transform duration-150 text-[var(--muted-fg)]", expanded.value ? "rotate-180" : ""])
|
|
192
192
|
}, {
|
|
193
193
|
default: withCtx(() => [createVNode(unref(chevron_down_default))]),
|
package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js.map → GrCollapse-CPPLh_xU.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrCollapse-CU94BTAR.js","names":[],"sources":["../../../../src/components/GrCollapse/grCollapseContext.ts","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GrCollapse-CPPLh_xU.js","names":[],"sources":["../../../../src/components/GrCollapse/grCollapseContext.ts","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-gr-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-gr-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-gr-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-gr-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-gr-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-gr-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-
|
|
2
|
-
import { t as grCollapseConfig } from "../../chunks/config-
|
|
1
|
+
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-CPPLh_xU.js";
|
|
2
|
+
import { t as grCollapseConfig } from "../../chunks/config-xR4XVmcy.js";
|
|
3
3
|
export { GR_COLLAPSE_CONTEXT, GrCollapse_default as GrCollapse, GrCollapse_default as default, GrCollapseItem_default as GrCollapseItem, grCollapseConfig };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as
|
|
1
|
+
import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
|
|
2
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
|
|
3
|
+
import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-Ctucxju9.js";
|
|
4
|
+
import { t as GrResponseErrorBanner_default } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-Cdu9ekK9.js";
|
|
4
5
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderSlot, toDisplayString, withCtx } from "vue";
|
|
5
6
|
//#region src/components/GrConfirmDialog/GrConfirmDialog.vue?vue&type=script&setup=true&lang.ts
|
|
6
7
|
var _hoisted_1 = { class: "grid gap-4" };
|
|
@@ -15,7 +16,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
15
16
|
__name: "GrConfirmDialog",
|
|
16
17
|
props: {
|
|
17
18
|
modelValue: { type: Boolean },
|
|
18
|
-
title: { default:
|
|
19
|
+
title: { default: void 0 },
|
|
19
20
|
description: { default: void 0 },
|
|
20
21
|
closeOnBackdrop: {
|
|
21
22
|
type: Boolean,
|
|
@@ -37,10 +38,10 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
37
38
|
headerConfig: { default: void 0 },
|
|
38
39
|
footerConfig: { default: void 0 },
|
|
39
40
|
bodyConfig: { default: void 0 },
|
|
40
|
-
closeLabel: { default:
|
|
41
|
+
closeLabel: { default: void 0 },
|
|
41
42
|
buttonSize: { default: void 0 },
|
|
42
|
-
confirmText: { default:
|
|
43
|
-
cancelText: { default:
|
|
43
|
+
confirmText: { default: void 0 },
|
|
44
|
+
cancelText: { default: void 0 },
|
|
44
45
|
confirmVariant: { default: "primary" },
|
|
45
46
|
confirmTone: { default: "primary" },
|
|
46
47
|
error: { default: null },
|
|
@@ -64,7 +65,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
64
65
|
],
|
|
65
66
|
setup(__props, { emit: __emit }) {
|
|
66
67
|
/**
|
|
67
|
-
* GrConfirmDialog —
|
|
68
|
+
* GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.
|
|
68
69
|
*
|
|
69
70
|
* Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:
|
|
70
71
|
* `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,
|
|
@@ -75,6 +76,11 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
75
76
|
*/
|
|
76
77
|
const props = __props;
|
|
77
78
|
const emit = __emit;
|
|
79
|
+
const { t } = useGranularityTranslations();
|
|
80
|
+
const resolvedTitle = computed(() => props.title ?? t("gr.dialog.confirm.title", "Confirm"));
|
|
81
|
+
const resolvedCloseLabel = computed(() => props.closeLabel ?? t("gr.common.close", "Close"));
|
|
82
|
+
const resolvedConfirmText = computed(() => props.confirmText ?? t("gr.common.confirm", "Confirm"));
|
|
83
|
+
const resolvedCancelText = computed(() => props.cancelText ?? t("gr.common.cancel", "Cancel"));
|
|
78
84
|
const open = computed({
|
|
79
85
|
get: () => props.modelValue,
|
|
80
86
|
set: (value) => emit("update:modelValue", value)
|
|
@@ -91,7 +97,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
91
97
|
return openBlock(), createBlock(GrDialog_default, {
|
|
92
98
|
modelValue: open.value,
|
|
93
99
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => open.value = $event),
|
|
94
|
-
title:
|
|
100
|
+
title: resolvedTitle.value,
|
|
95
101
|
size: __props.size,
|
|
96
102
|
"close-on-backdrop": __props.closeOnBackdrop,
|
|
97
103
|
"close-on-esc": __props.closeOnEsc,
|
|
@@ -100,18 +106,18 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
100
106
|
"header-config": __props.headerConfig,
|
|
101
107
|
"footer-config": __props.footerConfig,
|
|
102
108
|
"body-config": __props.bodyConfig,
|
|
103
|
-
"close-label":
|
|
109
|
+
"close-label": resolvedCloseLabel.value
|
|
104
110
|
}, {
|
|
105
111
|
footer: withCtx(() => [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("div", _hoisted_3, [createVNode(GrButton_default, {
|
|
106
|
-
"data-testid": "
|
|
112
|
+
"data-testid": "gr-confirm-cancel",
|
|
107
113
|
variant: "outline",
|
|
108
114
|
size: __props.buttonSize,
|
|
109
115
|
onClick: onCancel
|
|
110
116
|
}, {
|
|
111
|
-
default: withCtx(() => [createTextVNode(toDisplayString(
|
|
117
|
+
default: withCtx(() => [createTextVNode(toDisplayString(resolvedCancelText.value), 1)]),
|
|
112
118
|
_: 1
|
|
113
119
|
}, 8, ["size"]), createVNode(GrButton_default, {
|
|
114
|
-
"data-testid": "
|
|
120
|
+
"data-testid": "gr-confirm-confirm",
|
|
115
121
|
variant: __props.confirmVariant,
|
|
116
122
|
tone: __props.confirmTone,
|
|
117
123
|
size: __props.buttonSize,
|
|
@@ -119,7 +125,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
119
125
|
disabled: __props.confirmDisabled,
|
|
120
126
|
onClick: onConfirm
|
|
121
127
|
}, {
|
|
122
|
-
default: withCtx(() => [createTextVNode(toDisplayString(
|
|
128
|
+
default: withCtx(() => [createTextVNode(toDisplayString(resolvedConfirmText.value), 1)]),
|
|
123
129
|
_: 1
|
|
124
130
|
}, 8, [
|
|
125
131
|
"variant",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrConfirmDialog-D8CkOtqv.js","names":[],"sources":["../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue","../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DA,MAAM,QAAQ;EAuBd,MAAM,OAAO;EAOb,MAAM,EAAE,MAAM,2BAA2B;EACzC,MAAM,gBAAgB,eAAe,MAAM,SAAS,EAAE,2BAA2B,SAAS,CAAC;EAC3F,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,mBAAmB,OAAO,CAAC;EAC3F,MAAM,sBAAsB,eAAe,MAAM,eAAe,EAAE,qBAAqB,SAAS,CAAC;EACjG,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,oBAAoB,QAAQ,CAAC;EAE7F,MAAM,OAAO,SAAS;GACpB,WAAW,MAAM;GACjB,MAAM,UAAmB,KAAK,qBAAqB,KAAK;EAC1D,CAAC;EAED,SAAS,WAAiB;GACxB,KAAK,QAAQ;GACb,KAAK,qBAAqB,KAAK;EACjC;EAEA,SAAS,YAAkB;GACzB,KAAK,SAAS;GACd,IAAI,MAAM,gBACR,KAAK,qBAAqB,KAAK;EACnC;;uBAIE,YA6CW,kBAAA;gBA5CA,KAAA;sEAAI,QAAA;IACZ,OAAO,cAAA;IACP,MAAM,QAAA;IACN,qBAAmB,QAAA;IACnB,gBAAc,QAAA;IACd,eAAa,QAAA;IACb,qBAAmB,QAAA;IACnB,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,eAAa,QAAA;IACb,eAAa,mBAAA;;IAcH,QAAM,cAkBR,CAjBP,WAiBO,KAAA,QAAA,UAAA,CAAA,SAAA,CAhBL,mBAeM,OAfN,YAeM,CAdJ,YAEW,kBAAA;KAFD,eAAY;KAAoB,SAAQ;KAAW,MAAM,QAAA;KAAa,SAAO;;4BAC7D,CAAA,gBAAA,gBAArB,mBAAA,KAAkB,GAAA,CAAA,CAAA,CAAA;;qBAEvB,YAUW,kBAAA;KATT,eAAY;KACX,SAAS,QAAA;KACT,MAAM,QAAA;KACN,MAAM,QAAA;KACN,SAAS,QAAA;KACT,UAAU,QAAA;KACV,SAAO;;4BAEiB,CAAA,gBAAA,gBAAtB,oBAAA,KAAmB,GAAA,CAAA,CAAA,CAAA;;;;;;;;;2BAjBxB,CAVN,mBAUM,OAVN,YAUM,CATJ,WAIO,KAAA,QAAA,WAAA,CAAA,SAAA,CAHM,QAAA,eAAA,UAAA,GAAX,mBAEM,OAFN,YAEM,gBADD,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,GAIlB,WAEO,KAAA,QAAA,SAAA,EAFa,OAAO,QAAA,MAAK,SAEzB,CADwB,QAAA,SAAA,UAAA,GAA7B,YAA0E,+BAAA;;KAArC,OAAO,QAAA;KAAQ,eAAa"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-
|
|
2
|
-
import { t as grConfirmDialogConfig } from "../../chunks/config-
|
|
1
|
+
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-D8CkOtqv.js";
|
|
2
|
+
import { t as grConfirmDialogConfig } from "../../chunks/config-BXtAmU3s2.js";
|
|
3
3
|
export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
|
package/dist/components/GrDataTable/chunks/{GrDataTable-ClcYiyc8.js → GrDataTable-Ds5OeGat.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-
|
|
2
|
-
import { t as GrTable_default } from "../../GrTable/chunks/GrTable-
|
|
3
|
-
import { t as arrow_up_default } from "../../../chunks/arrow-up-
|
|
1
|
+
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
|
|
2
|
+
import { t as GrTable_default } from "../../GrTable/chunks/GrTable-Db3hRnKA.js";
|
|
3
|
+
import { t as arrow_up_default } from "../../../chunks/arrow-up-C_G4jg8M.js";
|
|
4
4
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, markRaw, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
5
5
|
//#region ~icons/lucide/arrow-down
|
|
6
6
|
var _hoisted_1$1 = {
|
|
@@ -24,7 +24,7 @@ var arrow_down_default = markRaw({
|
|
|
24
24
|
});
|
|
25
25
|
//#endregion
|
|
26
26
|
//#region src/components/GrDataTable/GrDataTable.vue?vue&type=script&setup=true&lang.ts
|
|
27
|
-
var _hoisted_1 = { "data-
|
|
27
|
+
var _hoisted_1 = { "data-gr-datatable-header": "" };
|
|
28
28
|
var _hoisted_2 = ["aria-sort"];
|
|
29
29
|
var _hoisted_3 = { class: "inline-flex items-center gap-2" };
|
|
30
30
|
var _hoisted_4 = ["aria-label", "onClick"];
|
|
@@ -35,7 +35,7 @@ var _hoisted_6 = {
|
|
|
35
35
|
};
|
|
36
36
|
var _hoisted_7 = {
|
|
37
37
|
key: 0,
|
|
38
|
-
"data-
|
|
38
|
+
"data-gr-datatable-empty": ""
|
|
39
39
|
};
|
|
40
40
|
var _hoisted_8 = ["colspan"];
|
|
41
41
|
//#endregion
|
|
@@ -51,21 +51,48 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
51
51
|
},
|
|
52
52
|
initialSortKey: { default: void 0 },
|
|
53
53
|
initialSortDir: { default: "asc" },
|
|
54
|
+
sortKey: { default: void 0 },
|
|
55
|
+
sortDir: { default: void 0 },
|
|
56
|
+
externalSort: {
|
|
57
|
+
type: Boolean,
|
|
58
|
+
default: false
|
|
59
|
+
},
|
|
54
60
|
density: { default: "regular" },
|
|
55
61
|
caption: { default: void 0 },
|
|
56
62
|
ariaLabel: { default: void 0 },
|
|
57
63
|
ariaLabelledby: { default: void 0 },
|
|
58
64
|
regionLabel: { default: void 0 }
|
|
59
65
|
},
|
|
60
|
-
|
|
66
|
+
emits: [
|
|
67
|
+
"update:sortKey",
|
|
68
|
+
"update:sortDir",
|
|
69
|
+
"sort-change"
|
|
70
|
+
],
|
|
71
|
+
setup(__props, { emit: __emit }) {
|
|
61
72
|
const props = __props;
|
|
62
|
-
const
|
|
63
|
-
const
|
|
73
|
+
const emit = __emit;
|
|
74
|
+
const internalSortKey = ref(props.initialSortKey ?? "");
|
|
75
|
+
const internalSortDir = ref(props.initialSortDir);
|
|
76
|
+
const isSortKeyControlled = computed(() => props.sortKey !== void 0);
|
|
77
|
+
const isSortDirControlled = computed(() => props.sortDir !== void 0);
|
|
78
|
+
const currentSortKey = computed(() => props.sortKey ?? internalSortKey.value);
|
|
79
|
+
const currentSortDir = computed(() => props.sortDir ?? internalSortDir.value);
|
|
80
|
+
function applySort(key, dir) {
|
|
81
|
+
if (!isSortKeyControlled.value) internalSortKey.value = key;
|
|
82
|
+
if (!isSortDirControlled.value) internalSortDir.value = dir;
|
|
83
|
+
emit("update:sortKey", key);
|
|
84
|
+
emit("update:sortDir", dir);
|
|
85
|
+
emit("sort-change", {
|
|
86
|
+
key,
|
|
87
|
+
dir
|
|
88
|
+
});
|
|
89
|
+
}
|
|
64
90
|
const sortedRows = computed(() => {
|
|
65
91
|
const items = [...props.rows];
|
|
66
|
-
if (
|
|
67
|
-
const key =
|
|
68
|
-
|
|
92
|
+
if (props.externalSort) return items;
|
|
93
|
+
const key = currentSortKey.value;
|
|
94
|
+
if (!key) return items;
|
|
95
|
+
const dir = currentSortDir.value;
|
|
69
96
|
items.sort((a, b) => {
|
|
70
97
|
const av = a[key];
|
|
71
98
|
const bv = b[key];
|
|
@@ -78,12 +105,11 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
78
105
|
});
|
|
79
106
|
function toggleSort(col) {
|
|
80
107
|
if (!col.sortable) return;
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
sortDir.value = "asc";
|
|
108
|
+
if (currentSortKey.value !== col.key) {
|
|
109
|
+
applySort(col.key, "asc");
|
|
84
110
|
return;
|
|
85
111
|
}
|
|
86
|
-
|
|
112
|
+
applySort(col.key, currentSortDir.value === "asc" ? "desc" : "asc");
|
|
87
113
|
}
|
|
88
114
|
function cellAlign(col) {
|
|
89
115
|
if (col.align === "right") return "text-right";
|
|
@@ -99,12 +125,12 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
99
125
|
}
|
|
100
126
|
function ariaSortFor(col) {
|
|
101
127
|
if (!col.sortable) return void 0;
|
|
102
|
-
if (
|
|
103
|
-
return
|
|
128
|
+
if (currentSortKey.value !== col.key) return "none";
|
|
129
|
+
return currentSortDir.value === "asc" ? "ascending" : "descending";
|
|
104
130
|
}
|
|
105
131
|
function sortButtonLabel(col) {
|
|
106
|
-
if (
|
|
107
|
-
return
|
|
132
|
+
if (currentSortKey.value !== col.key) return `Sort by ${col.label}`;
|
|
133
|
+
return currentSortDir.value === "asc" ? `Sorted by ${col.label} ascending, activate to sort descending` : `Sorted by ${col.label} descending, activate to sort ascending`;
|
|
108
134
|
}
|
|
109
135
|
const tableProps = computed(() => ({
|
|
110
136
|
density: props.density,
|
|
@@ -118,7 +144,7 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
118
144
|
return row[key];
|
|
119
145
|
}
|
|
120
146
|
return (_ctx, _cache) => {
|
|
121
|
-
return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-
|
|
147
|
+
return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-gr-datatable": "" }), createSlots({
|
|
122
148
|
head: withCtx(() => [createElementVNode("tr", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
123
149
|
return openBlock(), createElementBlock("th", {
|
|
124
150
|
key: col.key,
|
|
@@ -131,14 +157,14 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
131
157
|
class: "inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded",
|
|
132
158
|
"aria-label": sortButtonLabel(col),
|
|
133
159
|
onClick: ($event) => toggleSort(col)
|
|
134
|
-
}, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [
|
|
160
|
+
}, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [currentSortKey.value === col.key && currentSortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
|
|
135
161
|
key: 0,
|
|
136
162
|
size: "sm",
|
|
137
163
|
"aria-hidden": "true"
|
|
138
164
|
}, {
|
|
139
165
|
default: withCtx(() => [createVNode(unref(arrow_up_default))]),
|
|
140
166
|
_: 1
|
|
141
|
-
})) :
|
|
167
|
+
})) : currentSortKey.value === col.key && currentSortDir.value === "desc" ? (openBlock(), createBlock(GrIcon_default, {
|
|
142
168
|
key: 1,
|
|
143
169
|
size: "sm",
|
|
144
170
|
"aria-hidden": "true"
|
|
@@ -154,7 +180,7 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
154
180
|
return openBlock(), createElementBlock("tr", {
|
|
155
181
|
key: rowKeyValue(row),
|
|
156
182
|
class: "border-t border-[var(--brd)]",
|
|
157
|
-
"data-
|
|
183
|
+
"data-gr-datatable-row": ""
|
|
158
184
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
159
185
|
return openBlock(), createElementBlock("td", {
|
|
160
186
|
key: col.key,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDataTable-Ds5OeGat.js","names":["$slots"],"sources":["../../../../src/components/GrDataTable/GrDataTable.vue","../../../../src/components/GrDataTable/GrDataTable.vue"],"sourcesContent":["\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n}>()\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\n</slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--brd)]\"\n data-gr-datatable-row\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n}>()\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\n</slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--brd)]\"\n data-gr-datatable-row\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrDataTable_default } from "./chunks/GrDataTable-
|
|
2
|
-
import { t as grDataTableConfig } from "../../chunks/config-
|
|
1
|
+
import { t as GrDataTable_default } from "./chunks/GrDataTable-Ds5OeGat.js";
|
|
2
|
+
import { t as grDataTableConfig } from "../../chunks/config-U4m9PSql.js";
|
|
3
3
|
export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { t as x_default } from "../../../chunks/x-
|
|
2
|
-
import { t as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { t as x_default } from "../../../chunks/x-2KXnqxiD.js";
|
|
2
|
+
import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
|
|
3
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
|
|
4
|
+
import { o as Ve } from "../../../chunks/useScrollLock-K7kaP2Ud.js";
|
|
5
|
+
import { t as GrModal_default } from "../../GrModal/chunks/GrModal-C0GZrHN3.js";
|
|
6
|
+
import { a as resolveGrDialogTitle, i as resolveGrDialogSectionConfig, n as DEFAULT_GR_DIALOG_FOOTER_CONFIG, r as DEFAULT_GR_DIALOG_HEADER_CONFIG, t as DEFAULT_GR_DIALOG_BODY_CONFIG } from "../../../chunks/dialogShared-CxW62PQE.js";
|
|
6
7
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, toDisplayString, unref, useAttrs, useSlots, withCtx } from "vue";
|
|
7
8
|
//#endregion
|
|
8
9
|
//#region src/components/GrDialog/GrDialogFooter.vue
|
|
@@ -19,7 +20,7 @@ var GrDialogFooter_default = /* @__PURE__ */ defineComponent({
|
|
|
19
20
|
]);
|
|
20
21
|
return (_ctx, _cache) => {
|
|
21
22
|
return openBlock(), createElementBlock("div", {
|
|
22
|
-
"data-
|
|
23
|
+
"data-gr-dialog-footer": "",
|
|
23
24
|
class: normalizeClass(rootClass.value)
|
|
24
25
|
}, [renderSlot(_ctx.$slots, "default")], 2);
|
|
25
26
|
};
|
|
@@ -32,11 +33,12 @@ var GrDialogCloseButton_default = /* @__PURE__ */ defineComponent({
|
|
|
32
33
|
__name: "GrDialogCloseButton",
|
|
33
34
|
emits: ["click"],
|
|
34
35
|
setup(__props) {
|
|
36
|
+
const { t } = useGranularityTranslations();
|
|
35
37
|
const attrs = useAttrs();
|
|
36
|
-
const ariaLabel = computed(() => attrs["aria-label"] ?? "Close");
|
|
38
|
+
const ariaLabel = computed(() => attrs["aria-label"] ?? t("gr.common.close", "Close"));
|
|
37
39
|
return (_ctx, _cache) => {
|
|
38
40
|
return openBlock(), createBlock(GrButton_default, mergeProps(unref(attrs), {
|
|
39
|
-
"data-
|
|
41
|
+
"data-gr-dialog-close": "",
|
|
40
42
|
variant: "ghost",
|
|
41
43
|
size: "sm",
|
|
42
44
|
square: "",
|
|
@@ -73,7 +75,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
|
|
|
73
75
|
default: true
|
|
74
76
|
},
|
|
75
77
|
config: { default: void 0 },
|
|
76
|
-
closeLabel: { default:
|
|
78
|
+
closeLabel: { default: void 0 }
|
|
77
79
|
},
|
|
78
80
|
emits: ["close"],
|
|
79
81
|
setup(__props) {
|
|
@@ -90,7 +92,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
|
|
|
90
92
|
const showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value);
|
|
91
93
|
return (_ctx, _cache) => {
|
|
92
94
|
return openBlock(), createElementBlock("div", {
|
|
93
|
-
"data-
|
|
95
|
+
"data-gr-dialog-header": "",
|
|
94
96
|
class: normalizeClass(rootClass.value)
|
|
95
97
|
}, [slots.default ? (openBlock(), createElementBlock("div", _hoisted_1$1, [renderSlot(_ctx.$slots, "default", { title: resolvedTitle.value })])) : showVisibleTitle.value ? (openBlock(), createBlock(unref(Ve), {
|
|
96
98
|
key: 1,
|
|
@@ -138,12 +140,12 @@ var GrDialog_default = /* @__PURE__ */ defineComponent({
|
|
|
138
140
|
headerConfig: { default: void 0 },
|
|
139
141
|
footerConfig: { default: void 0 },
|
|
140
142
|
bodyConfig: { default: void 0 },
|
|
141
|
-
closeLabel: { default:
|
|
143
|
+
closeLabel: { default: void 0 }
|
|
142
144
|
},
|
|
143
145
|
emits: ["update:modelValue"],
|
|
144
146
|
setup(__props, { emit: __emit }) {
|
|
145
147
|
/**
|
|
146
|
-
* GrDialog —
|
|
148
|
+
* GrDialog — GR-примитив диалога поверх `GrModal`.
|
|
147
149
|
*
|
|
148
150
|
* Архитектурно:
|
|
149
151
|
* - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;
|