@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDialog-Ctucxju9.js","names":["$emit","$emit"],"sources":["../../../../src/components/GrDialog/GrDialogFooter.vue","../../../../src/components/GrDialog/GrDialogFooter.vue","../../../../src/components/GrDialog/GrDialogCloseButton.vue","../../../../src/components/GrDialog/GrDialogCloseButton.vue","../../../../src/components/GrDialog/GrDialogHeader.vue","../../../../src/components/GrDialog/GrDialogHeader.vue","../../../../src/components/GrDialog/GrDialog.vue","../../../../src/components/GrDialog/GrDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport {\n DEFAULT_GR_DIALOG_FOOTER_CONFIG,\n resolveGrDialogSectionConfig,\n type GrDialogSectionConfig,\n} from './dialogShared'\n\nexport interface GrDialogFooterProps {\n config?: GrDialogSectionConfig\n}\n\nconst props = withDefaults(defineProps<GrDialogFooterProps>(), {\n config: undefined,\n})\n\nconst resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_FOOTER_CONFIG))\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-t border-[var(--brd)]' : '',\n])\n</script>\n\n<template>\n <div data-gr-dialog-footer :class=\"rootClass\">\n <slot />\n </div>\n</template>","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport {\n DEFAULT_GR_DIALOG_FOOTER_CONFIG,\n resolveGrDialogSectionConfig,\n type GrDialogSectionConfig,\n} from './dialogShared'\n\nexport interface GrDialogFooterProps {\n config?: GrDialogSectionConfig\n}\n\nconst props = withDefaults(defineProps<GrDialogFooterProps>(), {\n config: undefined,\n})\n\nconst resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_FOOTER_CONFIG))\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-t border-[var(--brd)]' : '',\n])\n</script>\n\n<template>\n <div data-gr-dialog-footer :class=\"rootClass\">\n <slot />\n </div>\n</template>","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport IconClose from '~icons/lucide/x'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst { t } = useGranularityTranslations()\n\n// A11y-лейбл: берём из атрибутов (родитель прокидывает `:aria-label=\"closeLabel\"`)\n// или используем i18n-дефолт. Не хардкодим английское \"Close\" — GR должен быть i18n-friendly.\nconst attrs = useAttrs()\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? t('gr.common.close', 'Close'))\n\ndefineEmits<{\n (e: 'click'): void\n}>()\n</script>\n\n<template>\n <GrButton\n v-bind=\"attrs\"\n data-gr-dialog-close\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"ariaLabel\"\n @click=\"$emit('click')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </GrButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport IconClose from '~icons/lucide/x'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst { t } = useGranularityTranslations()\n\n// A11y-лейбл: берём из атрибутов (родитель прокидывает `:aria-label=\"closeLabel\"`)\n// или используем i18n-дефолт. Не хардкодим английское \"Close\" — GR должен быть i18n-friendly.\nconst attrs = useAttrs()\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? t('gr.common.close', 'Close'))\n\ndefineEmits<{\n (e: 'click'): void\n}>()\n</script>\n\n<template>\n <GrButton\n v-bind=\"attrs\"\n data-gr-dialog-close\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"ariaLabel\"\n @click=\"$emit('click')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </GrButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { DialogTitle } from '@headlessui/vue'\n\nimport GrDialogCloseButton from './GrDialogCloseButton.vue'\nimport {\n DEFAULT_GR_DIALOG_HEADER_CONFIG,\n type GrDialogSectionConfig,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogHeaderProps {\n title?: string\n showCloseButton?: boolean\n config?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogHeaderProps>(), {\n title: undefined,\n showCloseButton: true,\n config: undefined,\n closeLabel: undefined,\n})\n\nconst slots = defineSlots<{\n default?: (props: { title?: string }) => any\n}>()\n\ndefineEmits<{\n (e: 'close'): void\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst resolvedConfig = computed(() =>\n resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_HEADER_CONFIG),\n)\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-b border-[var(--brd)]' : '',\n 'flex items-center justify-between gap-4',\n])\n\n// Видимый `DialogTitle` рендерим только когда нет пользовательского слота:\n// если слот `#header` задан, a11y-title отдаётся через `GrModal #title`\n// на уровне `GrDialog` (см. JSDoc у `GrDialog.vue`).\nconst showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value)\n</script>\n\n<template>\n <div data-gr-dialog-header :class=\"rootClass\">\n <template v-if=\"slots.default\">\n <div class=\"flex-1 min-w-0 flex items-center\">\n <slot :title=\"resolvedTitle\" />\n </div>\n </template>\n <DialogTitle\n v-else-if=\"showVisibleTitle\"\n as=\"div\"\n class=\"flex-1 min-w-0 text-[14px] font-700\"\n >\n {{ resolvedTitle }}\n </DialogTitle>\n <div v-else class=\"flex-1 min-w-0\" />\n <GrDialogCloseButton\n v-if=\"showCloseButton\"\n :aria-label=\"closeLabel\"\n @click=\"$emit('close')\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { DialogTitle } from '@headlessui/vue'\n\nimport GrDialogCloseButton from './GrDialogCloseButton.vue'\nimport {\n DEFAULT_GR_DIALOG_HEADER_CONFIG,\n type GrDialogSectionConfig,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogHeaderProps {\n title?: string\n showCloseButton?: boolean\n config?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogHeaderProps>(), {\n title: undefined,\n showCloseButton: true,\n config: undefined,\n closeLabel: undefined,\n})\n\nconst slots = defineSlots<{\n default?: (props: { title?: string }) => any\n}>()\n\ndefineEmits<{\n (e: 'close'): void\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst resolvedConfig = computed(() =>\n resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_HEADER_CONFIG),\n)\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-b border-[var(--brd)]' : '',\n 'flex items-center justify-between gap-4',\n])\n\n// Видимый `DialogTitle` рендерим только когда нет пользовательского слота:\n// если слот `#header` задан, a11y-title отдаётся через `GrModal #title`\n// на уровне `GrDialog` (см. JSDoc у `GrDialog.vue`).\nconst showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value)\n</script>\n\n<template>\n <div data-gr-dialog-header :class=\"rootClass\">\n <template v-if=\"slots.default\">\n <div class=\"flex-1 min-w-0 flex items-center\">\n <slot :title=\"resolvedTitle\" />\n </div>\n </template>\n <DialogTitle\n v-else-if=\"showVisibleTitle\"\n as=\"div\"\n class=\"flex-1 min-w-0 text-[14px] font-700\"\n >\n {{ resolvedTitle }}\n </DialogTitle>\n <div v-else class=\"flex-1 min-w-0\" />\n <GrDialogCloseButton\n v-if=\"showCloseButton\"\n :aria-label=\"closeLabel\"\n @click=\"$emit('close')\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialog — GR-примитив диалога поверх `GrModal`.\n *\n * Архитектурно:\n * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;\n * - заголовок/подвал/кнопка закрытия/паддинги секций — ответственность `GrDialog`.\n *\n * A11y: ровно один `DialogTitle` на открытое окно.\n * - Если хедер отображается без слота `#header` — видимый `DialogTitle` рендерит\n * `GrDialogHeader`.\n * - В остальных случаях (`!showHeader`, либо `showHeader` со слотом `#header`)\n * `GrDialog` отдаёт sr-only title в слот `#title` у `GrModal`, чтобы\n * HeadlessUI корректно проставил `aria-labelledby` на панель.\n */\nimport { computed } from 'vue'\n\nimport GrModal from '../GrModal/GrModal.vue'\nimport GrDialogFooter from './GrDialogFooter.vue'\nimport GrDialogHeader from './GrDialogHeader.vue'\nimport {\n DEFAULT_GR_DIALOG_BODY_CONFIG,\n type GrDialogSectionConfig,\n type GrDialogSize,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogProps {\n modelValue: boolean\n title?: 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}\n\nconst props = withDefaults(defineProps<GrDialogProps>(), {\n title: 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})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n header?: (props: { title?: string }) => any\n footer?: () => any\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst bodyClass = computed(() => {\n const cfg = resolveGrDialogSectionConfig(props.bodyConfig, DEFAULT_GR_DIALOG_BODY_CONFIG)\n return [cfg.paddingX, cfg.paddingY]\n})\n\n// Нужен ли sr-only title через `GrModal #title`:\n// - `!showHeader` — вообще нет заголовка в разметке;\n// - `showHeader && $slots.header` — кастомный хедер не обязан содержать DialogTitle.\n// В обоих случаях даём HeadlessUI a11y-title, не дублируя его визуально.\nconst useModalSrOnlyTitle = computed(\n () => !!resolvedTitle.value && (!props.showHeader || !!slots.header),\n)\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template v-if=\"useModalSrOnlyTitle\" #title>\n <span class=\"sr-only\">{{ resolvedTitle }}</span>\n </template>\n\n <div class=\"overflow-hidden rounded-[inherit]\">\n <GrDialogHeader\n v-if=\"showHeader\"\n :title=\"resolvedTitle\"\n :show-close-button=\"showCloseButton\"\n :config=\"headerConfig\"\n :close-label=\"closeLabel\"\n @close=\"close\"\n >\n <template v-if=\"slots.header\" #default=\"slotProps\">\n <slot name=\"header\" v-bind=\"slotProps\" />\n </template>\n </GrDialogHeader>\n\n <div :class=\"bodyClass\">\n <slot />\n </div>\n\n <GrDialogFooter v-if=\"slots.footer\" :config=\"footerConfig\">\n <slot name=\"footer\" />\n </GrDialogFooter>\n </div>\n </GrModal>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialog — GR-примитив диалога поверх `GrModal`.\n *\n * Архитектурно:\n * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;\n * - заголовок/подвал/кнопка закрытия/паддинги секций — ответственность `GrDialog`.\n *\n * A11y: ровно один `DialogTitle` на открытое окно.\n * - Если хедер отображается без слота `#header` — видимый `DialogTitle` рендерит\n * `GrDialogHeader`.\n * - В остальных случаях (`!showHeader`, либо `showHeader` со слотом `#header`)\n * `GrDialog` отдаёт sr-only title в слот `#title` у `GrModal`, чтобы\n * HeadlessUI корректно проставил `aria-labelledby` на панель.\n */\nimport { computed } from 'vue'\n\nimport GrModal from '../GrModal/GrModal.vue'\nimport GrDialogFooter from './GrDialogFooter.vue'\nimport GrDialogHeader from './GrDialogHeader.vue'\nimport {\n DEFAULT_GR_DIALOG_BODY_CONFIG,\n type GrDialogSectionConfig,\n type GrDialogSize,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogProps {\n modelValue: boolean\n title?: 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}\n\nconst props = withDefaults(defineProps<GrDialogProps>(), {\n title: 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})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n header?: (props: { title?: string }) => any\n footer?: () => any\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst bodyClass = computed(() => {\n const cfg = resolveGrDialogSectionConfig(props.bodyConfig, DEFAULT_GR_DIALOG_BODY_CONFIG)\n return [cfg.paddingX, cfg.paddingY]\n})\n\n// Нужен ли sr-only title через `GrModal #title`:\n// - `!showHeader` — вообще нет заголовка в разметке;\n// - `showHeader && $slots.header` — кастомный хедер не обязан содержать DialogTitle.\n// В обоих случаях даём HeadlessUI a11y-title, не дублируя его визуально.\nconst useModalSrOnlyTitle = computed(\n () => !!resolvedTitle.value && (!props.showHeader || !!slots.header),\n)\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template v-if=\"useModalSrOnlyTitle\" #title>\n <span class=\"sr-only\">{{ resolvedTitle }}</span>\n </template>\n\n <div class=\"overflow-hidden rounded-[inherit]\">\n <GrDialogHeader\n v-if=\"showHeader\"\n :title=\"resolvedTitle\"\n :show-close-button=\"showCloseButton\"\n :config=\"headerConfig\"\n :close-label=\"closeLabel\"\n @close=\"close\"\n >\n <template v-if=\"slots.header\" #default=\"slotProps\">\n <slot name=\"header\" v-bind=\"slotProps\" />\n </template>\n </GrDialogHeader>\n\n <div :class=\"bodyClass\">\n <slot />\n </div>\n\n <GrDialogFooter v-if=\"slots.footer\" :config=\"footerConfig\">\n <slot name=\"footer\" />\n </GrDialogFooter>\n </div>\n </GrModal>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
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-
|
|
2
|
-
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./chunks/GrDialog-
|
|
3
|
-
import { t as grDialogSafelist } from "../../chunks/safelist-
|
|
1
|
+
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";
|
|
2
|
+
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./chunks/GrDialog-Ctucxju9.js";
|
|
3
|
+
import { t as grDialogSafelist } from "../../chunks/safelist-CkF4v7DC.js";
|
|
4
4
|
export { DEFAULT_GR_DIALOG_BODY_CONFIG, DEFAULT_GR_DIALOG_FOOTER_CONFIG, DEFAULT_GR_DIALOG_HEADER_CONFIG, GrDialog_default as GrDialog, GrDialog_default as default, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, grDialogSafelist, resolveGrDialogSectionConfig, resolveGrDialogTitle };
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
|
|
2
|
+
import { n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as responseErrorParserPresets } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-Cdu9ekK9.js";
|
|
3
|
+
import { t as GrConfirmDialog_default } from "../../GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js";
|
|
4
|
+
import { t as GrPromptDialog_default } from "../../GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js";
|
|
5
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, nextTick, onBeforeUnmount, openBlock, reactive, ref, render, shallowRef, toDisplayString, watch, withCtx } from "vue";
|
|
6
|
+
//#region src/components/GrDialogService/store.ts
|
|
7
|
+
/**
|
|
8
|
+
* Модульный синглтон очереди диалогов: единый источник правды для всех
|
|
9
|
+
* вызовов сервиса. Хост-компонент рендерит только `queue[0]` — это
|
|
10
|
+
* сериализует диалоги (FIFO) и исключает конкуренцию за фокус-трап.
|
|
11
|
+
*/
|
|
12
|
+
var dialogQueue = reactive([]);
|
|
13
|
+
var counter = 0;
|
|
14
|
+
function makeDialogId() {
|
|
15
|
+
counter += 1;
|
|
16
|
+
return `gr-dialog-${Date.now()}-${counter}`;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/components/GrDialogService/GrDialogServiceHost.vue?vue&type=script&setup=true&lang.ts
|
|
20
|
+
var _hoisted_1 = { class: "flex items-center justify-end gap-3" };
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/components/GrDialogService/GrDialogServiceHost.vue
|
|
23
|
+
var GrDialogServiceHost_default = /* @__PURE__ */ defineComponent({
|
|
24
|
+
__name: "GrDialogServiceHost",
|
|
25
|
+
setup(__props) {
|
|
26
|
+
/**
|
|
27
|
+
* GrDialogServiceHost — внутренний компонент-оркестратор императивного
|
|
28
|
+
* `useDialogService`. Не предназначен для прямого использования в шаблонах.
|
|
29
|
+
*
|
|
30
|
+
* Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя
|
|
31
|
+
* декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием
|
|
32
|
+
* загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы
|
|
33
|
+
* сервера через цепочку парсеров `GrResponseErrorBanner`.
|
|
34
|
+
*/
|
|
35
|
+
const active = computed(() => dialogQueue[0] ?? null);
|
|
36
|
+
const open = ref(false);
|
|
37
|
+
const loading = ref(false);
|
|
38
|
+
const currentError = shallowRef(null);
|
|
39
|
+
const fieldError = ref(null);
|
|
40
|
+
const promptValue = ref("");
|
|
41
|
+
let controller = null;
|
|
42
|
+
let finishing = false;
|
|
43
|
+
let externalAbortCleanup = null;
|
|
44
|
+
function resetState() {
|
|
45
|
+
loading.value = false;
|
|
46
|
+
currentError.value = null;
|
|
47
|
+
fieldError.value = null;
|
|
48
|
+
finishing = false;
|
|
49
|
+
}
|
|
50
|
+
function buildClassifier(req) {
|
|
51
|
+
const opts = req.options;
|
|
52
|
+
return createResponseErrorClassifier({
|
|
53
|
+
parsers: typeof opts.errorParsers === "function" ? opts.errorParsers(responseErrorParserPresets) : opts.errorParsers ?? coreResponseErrorParsers,
|
|
54
|
+
texts: opts.errorTexts,
|
|
55
|
+
messageKey: opts.errorMessageKey
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
watch(() => active.value?.id, (id) => {
|
|
59
|
+
cleanupExternalAbort();
|
|
60
|
+
resetState();
|
|
61
|
+
const req = active.value;
|
|
62
|
+
if (!req || !id) {
|
|
63
|
+
open.value = false;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
promptValue.value = req.options && "value" in req.options ? req.options.value ?? "" : "";
|
|
67
|
+
controller = new AbortController();
|
|
68
|
+
const sig = req.options.signal;
|
|
69
|
+
if (sig) {
|
|
70
|
+
if (sig.aborted) {
|
|
71
|
+
finish("close");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const onAbort = () => finish("close");
|
|
75
|
+
sig.addEventListener("abort", onAbort);
|
|
76
|
+
externalAbortCleanup = () => sig.removeEventListener("abort", onAbort);
|
|
77
|
+
}
|
|
78
|
+
nextTick(() => {
|
|
79
|
+
open.value = true;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
function cleanupExternalAbort() {
|
|
83
|
+
externalAbortCleanup?.();
|
|
84
|
+
externalAbortCleanup = null;
|
|
85
|
+
}
|
|
86
|
+
function finish(action, value) {
|
|
87
|
+
const req = active.value;
|
|
88
|
+
if (!req || finishing) return;
|
|
89
|
+
finishing = true;
|
|
90
|
+
open.value = false;
|
|
91
|
+
controller?.abort();
|
|
92
|
+
controller = null;
|
|
93
|
+
cleanupExternalAbort();
|
|
94
|
+
req.resolve({
|
|
95
|
+
action,
|
|
96
|
+
value
|
|
97
|
+
});
|
|
98
|
+
nextTick(() => {
|
|
99
|
+
const index = dialogQueue.findIndex((item) => item.id === req.id);
|
|
100
|
+
if (index >= 0) dialogQueue.splice(index, 1);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function buildContext(req, value) {
|
|
104
|
+
let errorSet = false;
|
|
105
|
+
const setError = (message) => {
|
|
106
|
+
if (message == null) {
|
|
107
|
+
currentError.value = null;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
errorSet = true;
|
|
111
|
+
currentError.value = {
|
|
112
|
+
kind: "unknown",
|
|
113
|
+
message,
|
|
114
|
+
raw: message
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const setFieldError = (field, message) => {
|
|
118
|
+
if (message == null) {
|
|
119
|
+
fieldError.value = null;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
errorSet = true;
|
|
123
|
+
fieldError.value = message;
|
|
124
|
+
};
|
|
125
|
+
const clearErrors = () => {
|
|
126
|
+
currentError.value = null;
|
|
127
|
+
fieldError.value = null;
|
|
128
|
+
};
|
|
129
|
+
const setRawError = async (raw, meta) => {
|
|
130
|
+
const info = await buildClassifier(req)(raw, meta);
|
|
131
|
+
if (req.kind === "prompt" && info.fieldErrors?.length) {
|
|
132
|
+
const match = info.fieldErrors.find((f) => f.field === "value") ?? info.fieldErrors[0];
|
|
133
|
+
fieldError.value = match.messages.join(" ");
|
|
134
|
+
}
|
|
135
|
+
currentError.value = info;
|
|
136
|
+
errorSet = true;
|
|
137
|
+
return info;
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
value,
|
|
141
|
+
signal: controller.signal,
|
|
142
|
+
setError,
|
|
143
|
+
setRawError,
|
|
144
|
+
setFieldError,
|
|
145
|
+
clearErrors,
|
|
146
|
+
setLoading: (v) => {
|
|
147
|
+
loading.value = v;
|
|
148
|
+
},
|
|
149
|
+
close: (action = "close") => finish(action),
|
|
150
|
+
_errorSet: () => errorSet
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function handleConfirm() {
|
|
154
|
+
const req = active.value;
|
|
155
|
+
if (!req) return;
|
|
156
|
+
const value = req.kind === "prompt" ? promptValue.value : void 0;
|
|
157
|
+
if (!req.onConfirm) {
|
|
158
|
+
finish("confirm", value);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
currentError.value = null;
|
|
162
|
+
fieldError.value = null;
|
|
163
|
+
loading.value = true;
|
|
164
|
+
const ctx = buildContext(req, value);
|
|
165
|
+
try {
|
|
166
|
+
const result = await req.onConfirm(ctx);
|
|
167
|
+
loading.value = false;
|
|
168
|
+
if (finishing) return;
|
|
169
|
+
if (result === false) return;
|
|
170
|
+
if (currentError.value || fieldError.value || ctx._errorSet()) return;
|
|
171
|
+
finish("confirm", value);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
loading.value = false;
|
|
174
|
+
if (finishing) return;
|
|
175
|
+
if (!ctx._errorSet()) await ctx.setRawError(error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function handleCancel() {
|
|
179
|
+
finish("cancel");
|
|
180
|
+
}
|
|
181
|
+
function handleModelUpdate(value) {
|
|
182
|
+
if (!value) finish("close");
|
|
183
|
+
}
|
|
184
|
+
onBeforeUnmount(() => {
|
|
185
|
+
cleanupExternalAbort();
|
|
186
|
+
controller?.abort();
|
|
187
|
+
});
|
|
188
|
+
const sharedProps = computed(() => {
|
|
189
|
+
const o = active.value?.options ?? {};
|
|
190
|
+
return {
|
|
191
|
+
title: o.title,
|
|
192
|
+
size: o.size,
|
|
193
|
+
closeOnBackdrop: o.closeOnBackdrop,
|
|
194
|
+
closeOnEsc: o.closeOnEsc,
|
|
195
|
+
showHeader: o.showHeader,
|
|
196
|
+
showCloseButton: o.showCloseButton,
|
|
197
|
+
headerConfig: o.headerConfig,
|
|
198
|
+
footerConfig: o.footerConfig,
|
|
199
|
+
bodyConfig: o.bodyConfig,
|
|
200
|
+
closeLabel: o.closeLabel,
|
|
201
|
+
buttonSize: o.buttonSize,
|
|
202
|
+
confirmText: o.confirmText,
|
|
203
|
+
confirmVariant: o.confirmVariant,
|
|
204
|
+
confirmTone: o.confirmTone
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
return (_ctx, _cache) => {
|
|
208
|
+
return active.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [active.value.kind === "prompt" ? (openBlock(), createBlock(GrPromptDialog_default, mergeProps({ key: 0 }, sharedProps.value, {
|
|
209
|
+
value: promptValue.value,
|
|
210
|
+
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => promptValue.value = $event),
|
|
211
|
+
"model-value": open.value,
|
|
212
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
213
|
+
label: active.value.options.label,
|
|
214
|
+
placeholder: active.value.options.placeholder,
|
|
215
|
+
required: active.value.options.required ?? false,
|
|
216
|
+
"required-error-text": active.value.options.requiredErrorText,
|
|
217
|
+
"cancel-text": active.value.options.cancelText,
|
|
218
|
+
error: currentError.value,
|
|
219
|
+
"field-error": fieldError.value,
|
|
220
|
+
"confirm-loading": loading.value,
|
|
221
|
+
"close-on-confirm": false,
|
|
222
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
223
|
+
onConfirm: handleConfirm,
|
|
224
|
+
onCancel: handleCancel
|
|
225
|
+
}), null, 16, [
|
|
226
|
+
"value",
|
|
227
|
+
"model-value",
|
|
228
|
+
"description",
|
|
229
|
+
"label",
|
|
230
|
+
"placeholder",
|
|
231
|
+
"required",
|
|
232
|
+
"required-error-text",
|
|
233
|
+
"cancel-text",
|
|
234
|
+
"error",
|
|
235
|
+
"field-error",
|
|
236
|
+
"confirm-loading"
|
|
237
|
+
])) : active.value.kind === "alert" ? (openBlock(), createBlock(GrConfirmDialog_default, mergeProps({
|
|
238
|
+
key: 1,
|
|
239
|
+
"model-value": open.value
|
|
240
|
+
}, sharedProps.value, {
|
|
241
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
242
|
+
error: currentError.value,
|
|
243
|
+
"confirm-loading": loading.value,
|
|
244
|
+
"close-on-confirm": false,
|
|
245
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
246
|
+
onConfirm: handleConfirm
|
|
247
|
+
}), {
|
|
248
|
+
footer: withCtx(() => [createElementVNode("div", _hoisted_1, [createVNode(GrButton_default, {
|
|
249
|
+
"data-testid": "gr-alert-confirm",
|
|
250
|
+
variant: sharedProps.value.confirmVariant ?? "primary",
|
|
251
|
+
tone: sharedProps.value.confirmTone ?? "primary",
|
|
252
|
+
size: sharedProps.value.buttonSize,
|
|
253
|
+
loading: loading.value,
|
|
254
|
+
onClick: handleConfirm
|
|
255
|
+
}, {
|
|
256
|
+
default: withCtx(() => [createTextVNode(toDisplayString(sharedProps.value.confirmText ?? "OK"), 1)]),
|
|
257
|
+
_: 1
|
|
258
|
+
}, 8, [
|
|
259
|
+
"variant",
|
|
260
|
+
"tone",
|
|
261
|
+
"size",
|
|
262
|
+
"loading"
|
|
263
|
+
])])]),
|
|
264
|
+
_: 1
|
|
265
|
+
}, 16, [
|
|
266
|
+
"model-value",
|
|
267
|
+
"description",
|
|
268
|
+
"error",
|
|
269
|
+
"confirm-loading"
|
|
270
|
+
])) : (openBlock(), createBlock(GrConfirmDialog_default, mergeProps({
|
|
271
|
+
key: 2,
|
|
272
|
+
"model-value": open.value
|
|
273
|
+
}, sharedProps.value, {
|
|
274
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
275
|
+
"cancel-text": active.value.options.cancelText,
|
|
276
|
+
error: currentError.value,
|
|
277
|
+
"confirm-loading": loading.value,
|
|
278
|
+
"close-on-confirm": false,
|
|
279
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
280
|
+
onConfirm: handleConfirm,
|
|
281
|
+
onCancel: handleCancel
|
|
282
|
+
}), null, 16, [
|
|
283
|
+
"model-value",
|
|
284
|
+
"description",
|
|
285
|
+
"cancel-text",
|
|
286
|
+
"error",
|
|
287
|
+
"confirm-loading"
|
|
288
|
+
]))], 64)) : createCommentVNode("", true);
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
//#endregion
|
|
293
|
+
//#region src/components/GrDialogService/useDialogService.ts
|
|
294
|
+
/**
|
|
295
|
+
* `useDialogService` — императивный сервис диалогов (в духе Element Plus
|
|
296
|
+
* `ElMessageBox`). Позволяет вызывать `confirm`/`alert`/`prompt` из `<script>`
|
|
297
|
+
* или `.ts` без вставки компонента в шаблон.
|
|
298
|
+
*
|
|
299
|
+
* Поверх существующих `GrConfirmDialog`/`GrPromptDialog`: лениво монтирует
|
|
300
|
+
* единый хост (`GrDialogServiceHost`) в `document.body`, наследуя контекст
|
|
301
|
+
* приложения (i18n / тема / `granular-provider`). Диалоги сериализуются
|
|
302
|
+
* очередью FIFO.
|
|
303
|
+
*/
|
|
304
|
+
var mounted = false;
|
|
305
|
+
var container = null;
|
|
306
|
+
var cachedAppContext = null;
|
|
307
|
+
function ensureMounted(appContext) {
|
|
308
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
309
|
+
if (appContext) cachedAppContext = appContext;
|
|
310
|
+
if (mounted) return;
|
|
311
|
+
container = document.createElement("div");
|
|
312
|
+
container.setAttribute("data-gr-dialog-service-host", "");
|
|
313
|
+
document.body.appendChild(container);
|
|
314
|
+
const vnode = createVNode(GrDialogServiceHost_default);
|
|
315
|
+
vnode.appContext = cachedAppContext ?? null;
|
|
316
|
+
render(vnode, container);
|
|
317
|
+
mounted = true;
|
|
318
|
+
}
|
|
319
|
+
/** Тестовая/служебная очистка смонтированного хоста. */
|
|
320
|
+
function teardownDialogService() {
|
|
321
|
+
if (container) {
|
|
322
|
+
render(null, container);
|
|
323
|
+
container.remove();
|
|
324
|
+
container = null;
|
|
325
|
+
}
|
|
326
|
+
mounted = false;
|
|
327
|
+
dialogQueue.splice(0, dialogQueue.length);
|
|
328
|
+
}
|
|
329
|
+
function enqueue(kind, message, options, onConfirm) {
|
|
330
|
+
if (typeof window === "undefined" || typeof document === "undefined") throw new Error("[granularity] useDialogService is client-only and cannot be called during SSR (it mounts a host into document.body). Guard imperative dialog calls behind a client-side check.");
|
|
331
|
+
ensureMounted(options.appContext ?? cachedAppContext);
|
|
332
|
+
const id = makeDialogId();
|
|
333
|
+
let resolveFn;
|
|
334
|
+
const promise = new Promise((resolve) => {
|
|
335
|
+
resolveFn = resolve;
|
|
336
|
+
});
|
|
337
|
+
const request = {
|
|
338
|
+
id,
|
|
339
|
+
kind,
|
|
340
|
+
message,
|
|
341
|
+
options: {
|
|
342
|
+
...options,
|
|
343
|
+
message
|
|
344
|
+
},
|
|
345
|
+
onConfirm,
|
|
346
|
+
resolve: resolveFn
|
|
347
|
+
};
|
|
348
|
+
dialogQueue.push(request);
|
|
349
|
+
const close = () => {
|
|
350
|
+
const index = dialogQueue.findIndex((item) => item.id === id);
|
|
351
|
+
if (index < 0) return;
|
|
352
|
+
dialogQueue.splice(index, 1);
|
|
353
|
+
resolveFn({ action: "close" });
|
|
354
|
+
};
|
|
355
|
+
return {
|
|
356
|
+
promise,
|
|
357
|
+
close
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
function withClose(promise, close) {
|
|
361
|
+
const result = promise;
|
|
362
|
+
result.close = close;
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
function mergeErrorDefaults(defaults, options) {
|
|
366
|
+
return {
|
|
367
|
+
size: defaults.size,
|
|
368
|
+
confirmText: defaults.confirmText,
|
|
369
|
+
confirmVariant: defaults.confirmVariant,
|
|
370
|
+
confirmTone: defaults.confirmTone,
|
|
371
|
+
buttonSize: defaults.buttonSize,
|
|
372
|
+
closeOnBackdrop: defaults.closeOnBackdrop,
|
|
373
|
+
closeOnEsc: defaults.closeOnEsc,
|
|
374
|
+
errorParsers: defaults.errorParsers,
|
|
375
|
+
errorTexts: defaults.errorTexts,
|
|
376
|
+
errorMessageKey: defaults.errorMessageKey,
|
|
377
|
+
fieldLabels: defaults.fieldLabels,
|
|
378
|
+
...options
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Создаёт сервис диалогов. Опциональные `defaults` применяются ко всем
|
|
383
|
+
* вызовам (можно переопределить в каждом конкретном вызове).
|
|
384
|
+
*
|
|
385
|
+
* Контекст приложения кэшируется автоматически при первом вызове внутри
|
|
386
|
+
* `setup`. Для вызовов вне компонента используйте `setAppContext`.
|
|
387
|
+
*/
|
|
388
|
+
function useDialogService(defaults = {}) {
|
|
389
|
+
const instance = getCurrentInstance();
|
|
390
|
+
if (instance?.appContext && !cachedAppContext) cachedAppContext = instance.appContext;
|
|
391
|
+
function confirm(message, options = {}) {
|
|
392
|
+
const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
393
|
+
return withClose(promise.then((r) => r.action === "confirm"), close);
|
|
394
|
+
}
|
|
395
|
+
function alert(message, options = {}) {
|
|
396
|
+
const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
397
|
+
return withClose(promise.then(() => void 0), close);
|
|
398
|
+
}
|
|
399
|
+
function prompt(message, options = {}) {
|
|
400
|
+
const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
401
|
+
return withClose(promise.then((r) => r.action === "confirm" ? r.value ?? "" : null), close);
|
|
402
|
+
}
|
|
403
|
+
function open(kind, message, options = {}) {
|
|
404
|
+
const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
405
|
+
return withClose(promise, close);
|
|
406
|
+
}
|
|
407
|
+
function closeAll() {
|
|
408
|
+
while (dialogQueue.length > 0) dialogQueue.pop().resolve({ action: "close" });
|
|
409
|
+
}
|
|
410
|
+
function setAppContext(ctx) {
|
|
411
|
+
cachedAppContext = ctx;
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
confirm,
|
|
415
|
+
alert,
|
|
416
|
+
prompt,
|
|
417
|
+
open,
|
|
418
|
+
closeAll,
|
|
419
|
+
setAppContext
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
/** Готовый синглтон-сервис с дефолтными настройками. */
|
|
423
|
+
var dialogService = useDialogService();
|
|
424
|
+
//#endregion
|
|
425
|
+
export { GrDialogServiceHost_default as i, teardownDialogService as n, useDialogService as r, dialogService as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDialogService-CU1Fbonc.js","names":[],"sources":["../../../../src/components/GrDialogService/store.ts","../../../../src/components/GrDialogService/GrDialogServiceHost.vue","../../../../src/components/GrDialogService/GrDialogServiceHost.vue","../../../../src/components/GrDialogService/useDialogService.ts"],"sourcesContent":["import { reactive } from 'vue'\n\nimport type {\n DialogBaseOptions,\n DialogKind,\n DialogOnConfirm,\n DialogResult,\n} from './types'\n\n/**\n * Внутреннее описание одного запроса диалога в очереди. Создаётся методами\n * сервиса (`confirm`/`alert`/`prompt`/`open`) и потребляется хостом\n * (`GrDialogServiceHost`), который рендерит «голову» очереди (FIFO).\n */\nexport interface DialogRequest {\n id: string\n kind: DialogKind\n message: string\n options: DialogBaseOptions\n onConfirm?: DialogOnConfirm<any>\n /** Резолвит промис вызова детальным результатом `{ action, value }`. */\n resolve: (result: DialogResult<any>) => void\n}\n\n/**\n * Модульный синглтон очереди диалогов: единый источник правды для всех\n * вызовов сервиса. Хост-компонент рендерит только `queue[0]` — это\n * сериализует диалоги (FIFO) и исключает конкуренцию за фокус-трап.\n */\nexport const dialogQueue = reactive<DialogRequest[]>([])\n\nlet counter = 0\n\nexport function makeDialogId(): string {\n counter += 1\n return `gr-dialog-${Date.now()}-${counter}`\n}\n","<script setup lang=\"ts\">\n/**\n * GrDialogServiceHost — внутренний компонент-оркестратор императивного\n * `useDialogService`. Не предназначен для прямого использования в шаблонах.\n *\n * Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя\n * декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием\n * загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы\n * сервера через цепочку парсеров `GrResponseErrorBanner`.\n */\nimport { computed, nextTick, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrConfirmDialog from '../GrConfirmDialog/GrConfirmDialog.vue'\nimport GrPromptDialog from '../GrPromptDialog/GrPromptDialog.vue'\nimport {\n coreResponseErrorParsers,\n createResponseErrorClassifier,\n responseErrorParserPresets,\n} from '../GrResponseErrorBanner'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nimport { dialogQueue } from './store'\nimport type { DialogRequest } from './store'\nimport type { DialogCloseAction, DialogConfirmContext } from './types'\n\nconst active = computed<DialogRequest | null>(() => dialogQueue[0] ?? null)\n\nconst open = ref(false)\nconst loading = ref(false)\nconst currentError = shallowRef<ResponseErrorInfo | null>(null)\nconst fieldError = ref<string | null>(null)\nconst promptValue = ref('')\n\nlet controller: AbortController | null = null\nlet finishing = false\nlet externalAbortCleanup: (() => void) | null = null\n\nfunction resetState(): void {\n loading.value = false\n currentError.value = null\n fieldError.value = null\n finishing = false\n}\n\nfunction buildClassifier(req: DialogRequest) {\n const opts = req.options\n const parsers = typeof opts.errorParsers === 'function'\n ? opts.errorParsers(responseErrorParserPresets)\n : opts.errorParsers ?? coreResponseErrorParsers\n\n return createResponseErrorClassifier({\n parsers,\n texts: opts.errorTexts,\n messageKey: opts.errorMessageKey,\n })\n}\n\nwatch(\n () => active.value?.id,\n (id) => {\n cleanupExternalAbort()\n resetState()\n\n const req = active.value\n if (!req || !id) {\n open.value = false\n return\n }\n\n promptValue.value = req.options && 'value' in req.options\n ? ((req.options as { value?: string }).value ?? '')\n : ''\n\n controller = new AbortController()\n\n // Внешний AbortSignal закрывает диалог как `close`.\n const sig = req.options.signal\n if (sig) {\n if (sig.aborted) {\n finish('close')\n return\n }\n const onAbort = () => finish('close')\n sig.addEventListener('abort', onAbort)\n externalAbortCleanup = () => sig.removeEventListener('abort', onAbort)\n }\n\n void nextTick(() => {\n open.value = true\n })\n },\n)\n\nfunction cleanupExternalAbort(): void {\n externalAbortCleanup?.()\n externalAbortCleanup = null\n}\n\nfunction finish(action: DialogCloseAction, value?: unknown): void {\n const req = active.value\n if (!req || finishing) return\n finishing = true\n\n open.value = false\n controller?.abort()\n controller = null\n cleanupExternalAbort()\n\n req.resolve({ action, value })\n\n // Снимаем «голову» очереди на следующем тике — watch откроет следующий диалог.\n void nextTick(() => {\n const index = dialogQueue.findIndex(item => item.id === req.id)\n if (index >= 0) dialogQueue.splice(index, 1)\n })\n}\n\nfunction buildContext(req: DialogRequest, value: unknown): DialogConfirmContext<any> & { _errorSet: () => boolean } {\n let errorSet = false\n\n const setError = (message: string | null): void => {\n if (message == null) {\n currentError.value = null\n return\n }\n errorSet = true\n currentError.value = { kind: 'unknown', message, raw: message }\n }\n\n const setFieldError = (field: string, message: string | null): void => {\n if (message == null) {\n fieldError.value = null\n return\n }\n errorSet = true\n fieldError.value = message\n }\n\n const clearErrors = (): void => {\n currentError.value = null\n fieldError.value = null\n }\n\n const setRawError = async (raw: unknown, meta?: Record<string, unknown>): Promise<ResponseErrorInfo | null> => {\n const info = await buildClassifier(req)(raw, meta)\n if (req.kind === 'prompt' && info.fieldErrors?.length) {\n const match = info.fieldErrors.find(f => f.field === 'value') ?? info.fieldErrors[0]\n fieldError.value = match.messages.join(' ')\n }\n currentError.value = info\n errorSet = true\n return info\n }\n\n return {\n value,\n signal: controller!.signal,\n setError,\n setRawError,\n setFieldError,\n clearErrors,\n setLoading: (v: boolean) => { loading.value = v },\n close: (action: DialogCloseAction = 'close') => finish(action),\n _errorSet: () => errorSet,\n }\n}\n\nasync function handleConfirm(): Promise<void> {\n const req = active.value\n if (!req) return\n\n const value = req.kind === 'prompt' ? promptValue.value : undefined\n\n if (!req.onConfirm) {\n finish('confirm', value)\n return\n }\n\n currentError.value = null\n fieldError.value = null\n loading.value = true\n\n const ctx = buildContext(req, value)\n\n try {\n const result = await req.onConfirm(ctx)\n loading.value = false\n if (finishing) return // ctx.close уже завершил диалог\n if (result === false) return // оставить открытым без ошибки\n if (currentError.value || fieldError.value || ctx._errorSet()) return // есть ошибка — не закрывать\n finish('confirm', value)\n }\n catch (error) {\n loading.value = false\n if (finishing) return\n if (!ctx._errorSet()) await ctx.setRawError(error)\n // оставить диалог открытым с показанной ошибкой\n }\n}\n\nfunction handleCancel(): void {\n finish('cancel')\n}\n\nfunction handleModelUpdate(value: boolean): void {\n if (!value) finish('close')\n}\n\nonBeforeUnmount(() => {\n cleanupExternalAbort()\n controller?.abort()\n})\n\n// Прокидываемые в дочерний диалог общие пропы.\nconst sharedProps = computed(() => {\n const o = active.value?.options ?? {}\n return {\n title: o.title,\n size: o.size,\n closeOnBackdrop: o.closeOnBackdrop,\n closeOnEsc: o.closeOnEsc,\n showHeader: o.showHeader,\n showCloseButton: o.showCloseButton,\n headerConfig: o.headerConfig,\n footerConfig: o.footerConfig,\n bodyConfig: o.bodyConfig,\n closeLabel: o.closeLabel,\n buttonSize: o.buttonSize,\n confirmText: o.confirmText,\n confirmVariant: o.confirmVariant,\n confirmTone: o.confirmTone,\n }\n})\n</script>\n\n<template>\n <template v-if=\"active\">\n <!-- prompt -->\n <GrPromptDialog\n v-if=\"active.kind === 'prompt'\"\n v-bind=\"sharedProps\"\n v-model:value=\"promptValue\"\n :model-value=\"open\"\n :description=\"active.options.message ?? active.options.description\"\n :label=\"(active.options as any).label\"\n :placeholder=\"(active.options as any).placeholder\"\n :required=\"(active.options as any).required ?? false\"\n :required-error-text=\"(active.options as any).requiredErrorText\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :field-error=\"fieldError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n\n <!-- alert: confirm-диалог без кнопки Cancel -->\n <GrConfirmDialog\n v-else-if=\"active.kind === 'alert'\"\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n >\n <template #footer>\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton\n data-testid=\"gr-alert-confirm\"\n :variant=\"sharedProps.confirmVariant ?? 'primary'\"\n :tone=\"sharedProps.confirmTone ?? 'primary'\"\n :size=\"sharedProps.buttonSize\"\n :loading=\"loading\"\n @click=\"handleConfirm\"\n >\n {{ sharedProps.confirmText ?? 'OK' }}\n </GrButton>\n </div>\n </template>\n </GrConfirmDialog>\n\n <!-- confirm -->\n <GrConfirmDialog\n v-else\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n </template>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialogServiceHost — внутренний компонент-оркестратор императивного\n * `useDialogService`. Не предназначен для прямого использования в шаблонах.\n *\n * Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя\n * декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием\n * загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы\n * сервера через цепочку парсеров `GrResponseErrorBanner`.\n */\nimport { computed, nextTick, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrConfirmDialog from '../GrConfirmDialog/GrConfirmDialog.vue'\nimport GrPromptDialog from '../GrPromptDialog/GrPromptDialog.vue'\nimport {\n coreResponseErrorParsers,\n createResponseErrorClassifier,\n responseErrorParserPresets,\n} from '../GrResponseErrorBanner'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nimport { dialogQueue } from './store'\nimport type { DialogRequest } from './store'\nimport type { DialogCloseAction, DialogConfirmContext } from './types'\n\nconst active = computed<DialogRequest | null>(() => dialogQueue[0] ?? null)\n\nconst open = ref(false)\nconst loading = ref(false)\nconst currentError = shallowRef<ResponseErrorInfo | null>(null)\nconst fieldError = ref<string | null>(null)\nconst promptValue = ref('')\n\nlet controller: AbortController | null = null\nlet finishing = false\nlet externalAbortCleanup: (() => void) | null = null\n\nfunction resetState(): void {\n loading.value = false\n currentError.value = null\n fieldError.value = null\n finishing = false\n}\n\nfunction buildClassifier(req: DialogRequest) {\n const opts = req.options\n const parsers = typeof opts.errorParsers === 'function'\n ? opts.errorParsers(responseErrorParserPresets)\n : opts.errorParsers ?? coreResponseErrorParsers\n\n return createResponseErrorClassifier({\n parsers,\n texts: opts.errorTexts,\n messageKey: opts.errorMessageKey,\n })\n}\n\nwatch(\n () => active.value?.id,\n (id) => {\n cleanupExternalAbort()\n resetState()\n\n const req = active.value\n if (!req || !id) {\n open.value = false\n return\n }\n\n promptValue.value = req.options && 'value' in req.options\n ? ((req.options as { value?: string }).value ?? '')\n : ''\n\n controller = new AbortController()\n\n // Внешний AbortSignal закрывает диалог как `close`.\n const sig = req.options.signal\n if (sig) {\n if (sig.aborted) {\n finish('close')\n return\n }\n const onAbort = () => finish('close')\n sig.addEventListener('abort', onAbort)\n externalAbortCleanup = () => sig.removeEventListener('abort', onAbort)\n }\n\n void nextTick(() => {\n open.value = true\n })\n },\n)\n\nfunction cleanupExternalAbort(): void {\n externalAbortCleanup?.()\n externalAbortCleanup = null\n}\n\nfunction finish(action: DialogCloseAction, value?: unknown): void {\n const req = active.value\n if (!req || finishing) return\n finishing = true\n\n open.value = false\n controller?.abort()\n controller = null\n cleanupExternalAbort()\n\n req.resolve({ action, value })\n\n // Снимаем «голову» очереди на следующем тике — watch откроет следующий диалог.\n void nextTick(() => {\n const index = dialogQueue.findIndex(item => item.id === req.id)\n if (index >= 0) dialogQueue.splice(index, 1)\n })\n}\n\nfunction buildContext(req: DialogRequest, value: unknown): DialogConfirmContext<any> & { _errorSet: () => boolean } {\n let errorSet = false\n\n const setError = (message: string | null): void => {\n if (message == null) {\n currentError.value = null\n return\n }\n errorSet = true\n currentError.value = { kind: 'unknown', message, raw: message }\n }\n\n const setFieldError = (field: string, message: string | null): void => {\n if (message == null) {\n fieldError.value = null\n return\n }\n errorSet = true\n fieldError.value = message\n }\n\n const clearErrors = (): void => {\n currentError.value = null\n fieldError.value = null\n }\n\n const setRawError = async (raw: unknown, meta?: Record<string, unknown>): Promise<ResponseErrorInfo | null> => {\n const info = await buildClassifier(req)(raw, meta)\n if (req.kind === 'prompt' && info.fieldErrors?.length) {\n const match = info.fieldErrors.find(f => f.field === 'value') ?? info.fieldErrors[0]\n fieldError.value = match.messages.join(' ')\n }\n currentError.value = info\n errorSet = true\n return info\n }\n\n return {\n value,\n signal: controller!.signal,\n setError,\n setRawError,\n setFieldError,\n clearErrors,\n setLoading: (v: boolean) => { loading.value = v },\n close: (action: DialogCloseAction = 'close') => finish(action),\n _errorSet: () => errorSet,\n }\n}\n\nasync function handleConfirm(): Promise<void> {\n const req = active.value\n if (!req) return\n\n const value = req.kind === 'prompt' ? promptValue.value : undefined\n\n if (!req.onConfirm) {\n finish('confirm', value)\n return\n }\n\n currentError.value = null\n fieldError.value = null\n loading.value = true\n\n const ctx = buildContext(req, value)\n\n try {\n const result = await req.onConfirm(ctx)\n loading.value = false\n if (finishing) return // ctx.close уже завершил диалог\n if (result === false) return // оставить открытым без ошибки\n if (currentError.value || fieldError.value || ctx._errorSet()) return // есть ошибка — не закрывать\n finish('confirm', value)\n }\n catch (error) {\n loading.value = false\n if (finishing) return\n if (!ctx._errorSet()) await ctx.setRawError(error)\n // оставить диалог открытым с показанной ошибкой\n }\n}\n\nfunction handleCancel(): void {\n finish('cancel')\n}\n\nfunction handleModelUpdate(value: boolean): void {\n if (!value) finish('close')\n}\n\nonBeforeUnmount(() => {\n cleanupExternalAbort()\n controller?.abort()\n})\n\n// Прокидываемые в дочерний диалог общие пропы.\nconst sharedProps = computed(() => {\n const o = active.value?.options ?? {}\n return {\n title: o.title,\n size: o.size,\n closeOnBackdrop: o.closeOnBackdrop,\n closeOnEsc: o.closeOnEsc,\n showHeader: o.showHeader,\n showCloseButton: o.showCloseButton,\n headerConfig: o.headerConfig,\n footerConfig: o.footerConfig,\n bodyConfig: o.bodyConfig,\n closeLabel: o.closeLabel,\n buttonSize: o.buttonSize,\n confirmText: o.confirmText,\n confirmVariant: o.confirmVariant,\n confirmTone: o.confirmTone,\n }\n})\n</script>\n\n<template>\n <template v-if=\"active\">\n <!-- prompt -->\n <GrPromptDialog\n v-if=\"active.kind === 'prompt'\"\n v-bind=\"sharedProps\"\n v-model:value=\"promptValue\"\n :model-value=\"open\"\n :description=\"active.options.message ?? active.options.description\"\n :label=\"(active.options as any).label\"\n :placeholder=\"(active.options as any).placeholder\"\n :required=\"(active.options as any).required ?? false\"\n :required-error-text=\"(active.options as any).requiredErrorText\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :field-error=\"fieldError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n\n <!-- alert: confirm-диалог без кнопки Cancel -->\n <GrConfirmDialog\n v-else-if=\"active.kind === 'alert'\"\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n >\n <template #footer>\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton\n data-testid=\"gr-alert-confirm\"\n :variant=\"sharedProps.confirmVariant ?? 'primary'\"\n :tone=\"sharedProps.confirmTone ?? 'primary'\"\n :size=\"sharedProps.buttonSize\"\n :loading=\"loading\"\n @click=\"handleConfirm\"\n >\n {{ sharedProps.confirmText ?? 'OK' }}\n </GrButton>\n </div>\n </template>\n </GrConfirmDialog>\n\n <!-- confirm -->\n <GrConfirmDialog\n v-else\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n </template>\n</template>\n","import { createVNode, getCurrentInstance, render } from 'vue'\nimport type { AppContext } from 'vue'\n\nimport GrDialogServiceHost from './GrDialogServiceHost.vue'\nimport { dialogQueue, makeDialogId } from './store'\nimport type { DialogRequest } from './store'\nimport type {\n DialogAlertOptions,\n DialogBaseOptions,\n DialogConfirmOptions,\n DialogKind,\n DialogOnConfirm,\n DialogPromise,\n DialogPromptOptions,\n DialogResult,\n DialogService,\n DialogServiceDefaults,\n} from './types'\n\n/**\n * `useDialogService` — императивный сервис диалогов (в духе Element Plus\n * `ElMessageBox`). Позволяет вызывать `confirm`/`alert`/`prompt` из `<script>`\n * или `.ts` без вставки компонента в шаблон.\n *\n * Поверх существующих `GrConfirmDialog`/`GrPromptDialog`: лениво монтирует\n * единый хост (`GrDialogServiceHost`) в `document.body`, наследуя контекст\n * приложения (i18n / тема / `granular-provider`). Диалоги сериализуются\n * очередью FIFO.\n */\n\nlet mounted = false\nlet container: HTMLElement | null = null\nlet cachedAppContext: AppContext | null = null\n\nfunction ensureMounted(appContext?: AppContext | null): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') return\n\n if (appContext) cachedAppContext = appContext\n if (mounted) return\n\n container = document.createElement('div')\n container.setAttribute('data-gr-dialog-service-host', '')\n document.body.appendChild(container)\n\n const vnode = createVNode(GrDialogServiceHost)\n vnode.appContext = cachedAppContext ?? null\n render(vnode, container)\n mounted = true\n}\n\n/** Тестовая/служебная очистка смонтированного хоста. */\nexport function teardownDialogService(): void {\n if (container) {\n render(null, container)\n container.remove()\n container = null\n }\n mounted = false\n dialogQueue.splice(0, dialogQueue.length)\n}\n\nfunction enqueue(\n kind: DialogKind,\n message: string,\n options: DialogBaseOptions,\n onConfirm: DialogOnConfirm<any> | undefined,\n): { promise: Promise<DialogResult<any>>, close: () => void } {\n // Императивный сервис клиент-only: монтирует хост в `document.body`. В SSR\n // выполнять его нельзя — модульная очередь (`dialogQueue`) мутировалась бы на\n // сервере и текла между запросами. Явно запрещаем вместо тихого no-op.\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n throw new Error(\n '[granularity] useDialogService is client-only and cannot be called during SSR '\n + '(it mounts a host into document.body). Guard imperative dialog calls behind a client-side check.',\n )\n }\n\n ensureMounted(options.appContext ?? cachedAppContext)\n\n const id = makeDialogId()\n let resolveFn!: (result: DialogResult<any>) => void\n const promise = new Promise<DialogResult<any>>((resolve) => {\n resolveFn = resolve\n })\n\n const request: DialogRequest = {\n id,\n kind,\n message,\n options: { ...options, message },\n onConfirm,\n resolve: resolveFn,\n }\n\n dialogQueue.push(request)\n\n const close = (): void => {\n const index = dialogQueue.findIndex(item => item.id === id)\n if (index < 0) return\n dialogQueue.splice(index, 1)\n resolveFn({ action: 'close' })\n }\n\n return { promise, close }\n}\n\nfunction withClose<T>(promise: Promise<T>, close: () => void): DialogPromise<T> {\n const result = promise as DialogPromise<T>\n result.close = close\n return result\n}\n\nfunction mergeErrorDefaults(\n defaults: DialogServiceDefaults,\n options: DialogBaseOptions,\n): DialogBaseOptions {\n return {\n size: defaults.size,\n confirmText: defaults.confirmText,\n confirmVariant: defaults.confirmVariant,\n confirmTone: defaults.confirmTone,\n buttonSize: defaults.buttonSize,\n closeOnBackdrop: defaults.closeOnBackdrop,\n closeOnEsc: defaults.closeOnEsc,\n errorParsers: defaults.errorParsers,\n errorTexts: defaults.errorTexts,\n errorMessageKey: defaults.errorMessageKey,\n fieldLabels: defaults.fieldLabels,\n ...options,\n }\n}\n\n/**\n * Создаёт сервис диалогов. Опциональные `defaults` применяются ко всем\n * вызовам (можно переопределить в каждом конкретном вызове).\n *\n * Контекст приложения кэшируется автоматически при первом вызове внутри\n * `setup`. Для вызовов вне компонента используйте `setAppContext`.\n */\nexport function useDialogService(defaults: DialogServiceDefaults = {}): DialogService {\n // Авто-кэш appContext из текущего компонента (если вызвано в setup).\n const instance = getCurrentInstance()\n if (instance?.appContext && !cachedAppContext) {\n cachedAppContext = instance.appContext\n }\n\n function confirm(message: string, options: DialogConfirmOptions = {}): DialogPromise<boolean> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('confirm', message, merged, options.onConfirm)\n return withClose(promise.then(r => r.action === 'confirm'), close)\n }\n\n function alert(message: string, options: DialogAlertOptions = {}): DialogPromise<void> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('alert', message, merged, options.onConfirm)\n return withClose(promise.then(() => undefined), close)\n }\n\n function prompt(message: string, options: DialogPromptOptions = {}): DialogPromise<string | null> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('prompt', message, merged, options.onConfirm)\n return withClose(\n promise.then(r => (r.action === 'confirm' ? ((r.value as string) ?? '') : null)),\n close,\n )\n }\n\n function open<V = unknown>(\n kind: DialogKind,\n message: string,\n options: DialogBaseOptions = {},\n ): DialogPromise<DialogResult<V>> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue(kind, message, merged, (options as DialogConfirmOptions).onConfirm)\n return withClose(promise as Promise<DialogResult<V>>, close)\n }\n\n function closeAll(): void {\n while (dialogQueue.length > 0) {\n const request = dialogQueue.pop()!\n request.resolve({ action: 'close' })\n }\n }\n\n function setAppContext(ctx: AppContext | null): void {\n cachedAppContext = ctx\n }\n\n return { confirm, alert, prompt, open, closeAll, setAppContext }\n}\n\n/** Готовый синглтон-сервис с дефолтными настройками. */\nexport const dialogService: DialogService = useDialogService()\n"],"mappings":";;;;;;;;;;;AA6BA,IAAa,cAAc,SAA0B,CAAC,CAAC;AAEvD,IAAI,UAAU;AAEd,SAAgB,eAAuB;CACrC,WAAW;CACX,OAAO,aAAa,KAAK,IAAI,EAAE,GAAG;AACpC;;;;;;;;;;;;;;;;;;ECVA,MAAM,SAAS,eAAqC,YAAY,MAAM,IAAI;EAE1E,MAAM,OAAO,IAAI,KAAK;EACtB,MAAM,UAAU,IAAI,KAAK;EACzB,MAAM,eAAe,WAAqC,IAAI;EAC9D,MAAM,aAAa,IAAmB,IAAI;EAC1C,MAAM,cAAc,IAAI,EAAE;EAE1B,IAAI,aAAqC;EACzC,IAAI,YAAY;EAChB,IAAI,uBAA4C;EAEhD,SAAS,aAAmB;GAC1B,QAAQ,QAAQ;GAChB,aAAa,QAAQ;GACrB,WAAW,QAAQ;GACnB,YAAY;EACd;EAEA,SAAS,gBAAgB,KAAoB;GAC3C,MAAM,OAAO,IAAI;GAKjB,OAAO,8BAA8B;IACnC,SALc,OAAO,KAAK,iBAAiB,aACzC,KAAK,aAAa,0BAA0B,IAC5C,KAAK,gBAAgB;IAIvB,OAAO,KAAK;IACZ,YAAY,KAAK;GACnB,CAAC;EACH;EAEA,YACQ,OAAO,OAAO,KACnB,OAAO;GACN,qBAAqB;GACrB,WAAW;GAEX,MAAM,MAAM,OAAO;GACnB,IAAI,CAAC,OAAO,CAAC,IAAI;IACf,KAAK,QAAQ;IACb;GACF;GAEA,YAAY,QAAQ,IAAI,WAAW,WAAW,IAAI,UAC5C,IAAI,QAA+B,SAAS,KAC9C;GAEJ,aAAa,IAAI,gBAAgB;GAGjC,MAAM,MAAM,IAAI,QAAQ;GACxB,IAAI,KAAK;IACP,IAAI,IAAI,SAAS;KACf,OAAO,OAAO;KACd;IACF;IACA,MAAM,gBAAgB,OAAO,OAAO;IACpC,IAAI,iBAAiB,SAAS,OAAO;IACrC,6BAA6B,IAAI,oBAAoB,SAAS,OAAO;GACvE;GAEA,eAAoB;IAClB,KAAK,QAAQ;GACf,CAAC;EACH,CACF;EAEA,SAAS,uBAA6B;GACpC,uBAAuB;GACvB,uBAAuB;EACzB;EAEA,SAAS,OAAO,QAA2B,OAAuB;GAChE,MAAM,MAAM,OAAO;GACnB,IAAI,CAAC,OAAO,WAAW;GACvB,YAAY;GAEZ,KAAK,QAAQ;GACb,YAAY,MAAM;GAClB,aAAa;GACb,qBAAqB;GAErB,IAAI,QAAQ;IAAE;IAAQ;GAAM,CAAC;GAG7B,eAAoB;IAClB,MAAM,QAAQ,YAAY,WAAU,SAAQ,KAAK,OAAO,IAAI,EAAE;IAC9D,IAAI,SAAS,GAAG,YAAY,OAAO,OAAO,CAAC;GAC7C,CAAC;EACH;EAEA,SAAS,aAAa,KAAoB,OAA0E;GAClH,IAAI,WAAW;GAEf,MAAM,YAAY,YAAiC;IACjD,IAAI,WAAW,MAAM;KACnB,aAAa,QAAQ;KACrB;IACF;IACA,WAAW;IACX,aAAa,QAAQ;KAAE,MAAM;KAAW;KAAS,KAAK;IAAQ;GAChE;GAEA,MAAM,iBAAiB,OAAe,YAAiC;IACrE,IAAI,WAAW,MAAM;KACnB,WAAW,QAAQ;KACnB;IACF;IACA,WAAW;IACX,WAAW,QAAQ;GACrB;GAEA,MAAM,oBAA0B;IAC9B,aAAa,QAAQ;IACrB,WAAW,QAAQ;GACrB;GAEA,MAAM,cAAc,OAAO,KAAc,SAAsE;IAC7G,MAAM,OAAO,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,IAAI;IACjD,IAAI,IAAI,SAAS,YAAY,KAAK,aAAa,QAAQ;KACrD,MAAM,QAAQ,KAAK,YAAY,MAAK,MAAK,EAAE,UAAU,OAAO,KAAK,KAAK,YAAY;KAClF,WAAW,QAAQ,MAAM,SAAS,KAAK,GAAG;IAC5C;IACA,aAAa,QAAQ;IACrB,WAAW;IACX,OAAO;GACT;GAEA,OAAO;IACL;IACA,QAAQ,WAAY;IACpB;IACA;IACA;IACA;IACA,aAAa,MAAe;KAAE,QAAQ,QAAQ;IAAE;IAChD,QAAQ,SAA4B,YAAY,OAAO,MAAM;IAC7D,iBAAiB;GACnB;EACF;EAEA,eAAe,gBAA+B;GAC5C,MAAM,MAAM,OAAO;GACnB,IAAI,CAAC,KAAK;GAEV,MAAM,QAAQ,IAAI,SAAS,WAAW,YAAY,QAAQ,KAAA;GAE1D,IAAI,CAAC,IAAI,WAAW;IAClB,OAAO,WAAW,KAAK;IACvB;GACF;GAEA,aAAa,QAAQ;GACrB,WAAW,QAAQ;GACnB,QAAQ,QAAQ;GAEhB,MAAM,MAAM,aAAa,KAAK,KAAK;GAEnC,IAAI;IACF,MAAM,SAAS,MAAM,IAAI,UAAU,GAAG;IACtC,QAAQ,QAAQ;IAChB,IAAI,WAAW;IACf,IAAI,WAAW,OAAO;IACtB,IAAI,aAAa,SAAS,WAAW,SAAS,IAAI,UAAU,GAAG;IAC/D,OAAO,WAAW,KAAK;GACzB,SACO,OAAO;IACZ,QAAQ,QAAQ;IAChB,IAAI,WAAW;IACf,IAAI,CAAC,IAAI,UAAU,GAAG,MAAM,IAAI,YAAY,KAAK;GAEnD;EACF;EAEA,SAAS,eAAqB;GAC5B,OAAO,QAAQ;EACjB;EAEA,SAAS,kBAAkB,OAAsB;GAC/C,IAAI,CAAC,OAAO,OAAO,OAAO;EAC5B;EAEA,sBAAsB;GACpB,qBAAqB;GACrB,YAAY,MAAM;EACpB,CAAC;EAGD,MAAM,cAAc,eAAe;GACjC,MAAM,IAAI,OAAO,OAAO,WAAW,CAAC;GACpC,OAAO;IACL,OAAO,EAAE;IACT,MAAM,EAAE;IACR,iBAAiB,EAAE;IACnB,YAAY,EAAE;IACd,YAAY,EAAE;IACd,iBAAiB,EAAE;IACnB,cAAc,EAAE;IAChB,cAAc,EAAE;IAChB,YAAY,EAAE;IACd,YAAY,EAAE;IACd,YAAY,EAAE;IACd,aAAa,EAAE;IACf,gBAAgB,EAAE;IAClB,aAAa,EAAE;GACjB;EACF,CAAC;;UAIiB,OAAA,SAAA,UAAA,GAAhB,mBAgEW,UAAA,EAAA,KAAA,EAAA,GAAA,CA7DD,OAAA,MAAO,SAAI,YAAA,UAAA,GADnB,YAkBE,wBAlBF,WAkBE,EAAA,KAAA,EAAA,GAhBQ,YAAA,OAAW;IACX,OAAO,YAAA;wEAAW,QAAA;IACzB,eAAa,KAAA;IACb,aAAa,OAAA,MAAO,QAAQ,WAAW,OAAA,MAAO,QAAQ;IACtD,OAAQ,OAAA,MAAO,QAAgB;IAC/B,aAAc,OAAA,MAAO,QAAgB;IACrC,UAAW,OAAA,MAAO,QAAgB,YAAQ;IAC1C,uBAAsB,OAAA,MAAO,QAAgB;IAC7C,eAAc,OAAA,MAAO,QAAgB;IACrC,OAAO,aAAA;IACP,eAAa,WAAA;IACb,mBAAiB,QAAA;IACjB,oBAAkB;IAClB,uBAAoB;IACpB,WAAS;IACT,UAAQ;;;;;;;;;;;;;SAKE,OAAA,MAAO,SAAI,WAAA,UAAA,GADxB,YAyBkB,yBAzBlB,WAyBkB;;IAvBf,eAAa,KAAA;MACN,YAAA,OAAW;IAClB,aAAa,OAAA,MAAO,QAAQ,WAAW,OAAA,MAAO,QAAQ;IACtD,OAAO,aAAA;IACP,mBAAiB,QAAA;IACjB,oBAAkB;IAClB,uBAAoB;IACpB,WAAS;;IAEC,QAAM,cAYT,CAXN,mBAWM,OAXN,YAWM,CAVJ,YASW,kBAAA;KART,eAAY;KACX,SAAS,YAAA,MAAY,kBAAc;KACnC,MAAM,YAAA,MAAY,eAAW;KAC7B,MAAM,YAAA,MAAY;KAClB,SAAS,QAAA;KACT,SAAO;;4BAE6B,CAAA,gBAAA,gBAAlC,YAAA,MAAY,eAAW,IAAA,GAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;uBAOlC,YAYE,yBAZF,WAYE;;IAVC,eAAa,KAAA;MACN,YAAA,OAAW;IAClB,aAAa,OAAA,MAAO,QAAQ,WAAW,OAAA,MAAO,QAAQ;IACtD,eAAc,OAAA,MAAO,QAAgB;IACrC,OAAO,aAAA;IACP,mBAAiB,QAAA;IACjB,oBAAkB;IAClB,uBAAoB;IACpB,WAAS;IACT,UAAQ;;;;;;;;;;;;;;;;;;;;;;;AE7Qf,IAAI,UAAU;AACd,IAAI,YAAgC;AACpC,IAAI,mBAAsC;AAE1C,SAAS,cAAc,YAAsC;CAC3D,IAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;CAEtE,IAAI,YAAY,mBAAmB;CACnC,IAAI,SAAS;CAEb,YAAY,SAAS,cAAc,KAAK;CACxC,UAAU,aAAa,+BAA+B,EAAE;CACxD,SAAS,KAAK,YAAY,SAAS;CAEnC,MAAM,QAAQ,YAAY,2BAAmB;CAC7C,MAAM,aAAa,oBAAoB;CACvC,OAAO,OAAO,SAAS;CACvB,UAAU;AACZ;;AAGA,SAAgB,wBAA8B;CAC5C,IAAI,WAAW;EACb,OAAO,MAAM,SAAS;EACtB,UAAU,OAAO;EACjB,YAAY;CACd;CACA,UAAU;CACV,YAAY,OAAO,GAAG,YAAY,MAAM;AAC1C;AAEA,SAAS,QACP,MACA,SACA,SACA,WAC4D;CAI5D,IAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aACvD,MAAM,IAAI,MACR,gLAEF;CAGF,cAAc,QAAQ,cAAc,gBAAgB;CAEpD,MAAM,KAAK,aAAa;CACxB,IAAI;CACJ,MAAM,UAAU,IAAI,SAA4B,YAAY;EAC1D,YAAY;CACd,CAAC;CAED,MAAM,UAAyB;EAC7B;EACA;EACA;EACA,SAAS;GAAE,GAAG;GAAS;EAAQ;EAC/B;EACA,SAAS;CACX;CAEA,YAAY,KAAK,OAAO;CAExB,MAAM,cAAoB;EACxB,MAAM,QAAQ,YAAY,WAAU,SAAQ,KAAK,OAAO,EAAE;EAC1D,IAAI,QAAQ,GAAG;EACf,YAAY,OAAO,OAAO,CAAC;EAC3B,UAAU,EAAE,QAAQ,QAAQ,CAAC;CAC/B;CAEA,OAAO;EAAE;EAAS;CAAM;AAC1B;AAEA,SAAS,UAAa,SAAqB,OAAqC;CAC9E,MAAM,SAAS;CACf,OAAO,QAAQ;CACf,OAAO;AACT;AAEA,SAAS,mBACP,UACA,SACmB;CACnB,OAAO;EACL,MAAM,SAAS;EACf,aAAa,SAAS;EACtB,gBAAgB,SAAS;EACzB,aAAa,SAAS;EACtB,YAAY,SAAS;EACrB,iBAAiB,SAAS;EAC1B,YAAY,SAAS;EACrB,cAAc,SAAS;EACvB,YAAY,SAAS;EACrB,iBAAiB,SAAS;EAC1B,aAAa,SAAS;EACtB,GAAG;CACL;AACF;;;;;;;;AASA,SAAgB,iBAAiB,WAAkC,CAAC,GAAkB;CAEpF,MAAM,WAAW,mBAAmB;CACpC,IAAI,UAAU,cAAc,CAAC,kBAC3B,mBAAmB,SAAS;CAG9B,SAAS,QAAQ,SAAiB,UAAgC,CAAC,GAA2B;EAE5F,MAAM,EAAE,SAAS,UAAU,QAAQ,WAAW,SAD/B,mBAAmB,UAAU,OACW,GAAQ,QAAQ,SAAS;EAChF,OAAO,UAAU,QAAQ,MAAK,MAAK,EAAE,WAAW,SAAS,GAAG,KAAK;CACnE;CAEA,SAAS,MAAM,SAAiB,UAA8B,CAAC,GAAwB;EAErF,MAAM,EAAE,SAAS,UAAU,QAAQ,SAAS,SAD7B,mBAAmB,UAAU,OACS,GAAQ,QAAQ,SAAS;EAC9E,OAAO,UAAU,QAAQ,WAAW,KAAA,CAAS,GAAG,KAAK;CACvD;CAEA,SAAS,OAAO,SAAiB,UAA+B,CAAC,GAAiC;EAEhG,MAAM,EAAE,SAAS,UAAU,QAAQ,UAAU,SAD9B,mBAAmB,UAAU,OACU,GAAQ,QAAQ,SAAS;EAC/E,OAAO,UACL,QAAQ,MAAK,MAAM,EAAE,WAAW,YAAc,EAAE,SAAoB,KAAM,IAAK,GAC/E,KACF;CACF;CAEA,SAAS,KACP,MACA,SACA,UAA6B,CAAC,GACE;EAEhC,MAAM,EAAE,SAAS,UAAU,QAAQ,MAAM,SAD1B,mBAAmB,UAAU,OACM,GAAS,QAAiC,SAAS;EACrG,OAAO,UAAU,SAAqC,KAAK;CAC7D;CAEA,SAAS,WAAiB;EACxB,OAAO,YAAY,SAAS,GAE1B,YAD4B,IAC5B,CAAA,CAAQ,QAAQ,EAAE,QAAQ,QAAQ,CAAC;CAEvC;CAEA,SAAS,cAAc,KAA8B;EACnD,mBAAmB;CACrB;CAEA,OAAO;EAAE;EAAS;EAAO;EAAQ;EAAM;EAAU;CAAc;AACjE;;AAGA,IAAa,gBAA+B,iBAAiB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { i as GrDialogServiceHost_default, n as teardownDialogService, r as useDialogService, t as dialogService } from "./chunks/GrDialogService-CU1Fbonc.js";
|
|
2
|
+
import { t as grDialogServiceConfig } from "../../chunks/config-BX1JTrkV2.js";
|
|
3
|
+
export { GrDialogServiceHost_default as GrDialogServiceHost, dialogService, grDialogServiceConfig, teardownDialogService, useDialogService };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, openBlock, renderSlot, toDisplayString, useSlots } from "vue";
|
|
2
|
+
//#region src/components/GrDivider/GrDivider.vue?vue&type=script&setup=true&lang.ts
|
|
3
|
+
var _hoisted_1 = {
|
|
4
|
+
key: 0,
|
|
5
|
+
"data-gr-divider": "",
|
|
6
|
+
role: "separator",
|
|
7
|
+
"aria-orientation": "vertical",
|
|
8
|
+
class: "inline-block w-px self-stretch bg-[var(--brd)]"
|
|
9
|
+
};
|
|
10
|
+
var _hoisted_2 = {
|
|
11
|
+
key: 1,
|
|
12
|
+
"data-gr-divider": "",
|
|
13
|
+
role: "separator",
|
|
14
|
+
"aria-orientation": "horizontal",
|
|
15
|
+
class: "flex w-full items-center gap-3 text-xs text-[var(--muted-fg)]"
|
|
16
|
+
};
|
|
17
|
+
var _hoisted_3 = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "h-px flex-1 bg-[var(--brd)]"
|
|
20
|
+
};
|
|
21
|
+
var _hoisted_4 = { class: "shrink-0" };
|
|
22
|
+
var _hoisted_5 = {
|
|
23
|
+
key: 1,
|
|
24
|
+
class: "h-px flex-1 bg-[var(--brd)]"
|
|
25
|
+
};
|
|
26
|
+
var _hoisted_6 = {
|
|
27
|
+
key: 2,
|
|
28
|
+
"data-gr-divider": "",
|
|
29
|
+
class: "h-px w-full border-0 bg-[var(--brd)]"
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/components/GrDivider/GrDivider.vue
|
|
33
|
+
var GrDivider_default = /* @__PURE__ */ defineComponent({
|
|
34
|
+
__name: "GrDivider",
|
|
35
|
+
props: {
|
|
36
|
+
orientation: { default: "horizontal" },
|
|
37
|
+
label: { default: void 0 },
|
|
38
|
+
align: { default: "center" }
|
|
39
|
+
},
|
|
40
|
+
setup(__props) {
|
|
41
|
+
const props = __props;
|
|
42
|
+
const slots = useSlots();
|
|
43
|
+
const hasLabel = computed(() => props.orientation === "horizontal" && (Boolean(props.label) || Boolean(slots.default)));
|
|
44
|
+
return (_ctx, _cache) => {
|
|
45
|
+
return __props.orientation === "vertical" ? (openBlock(), createElementBlock("div", _hoisted_1)) : hasLabel.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
46
|
+
__props.align !== "start" ? (openBlock(), createElementBlock("span", _hoisted_3)) : createCommentVNode("", true),
|
|
47
|
+
createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)])]),
|
|
48
|
+
__props.align !== "end" ? (openBlock(), createElementBlock("span", _hoisted_5)) : createCommentVNode("", true)
|
|
49
|
+
])) : (openBlock(), createElementBlock("hr", _hoisted_6));
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
//#endregion
|
|
54
|
+
export { GrDivider_default as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDivider-5bcE-BB4.js","names":[],"sources":["../../../../src/components/GrDivider/GrDivider.vue","../../../../src/components/GrDivider/GrDivider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\n/**\n * GrDivider — разделитель контента.\n *\n * - `orientation=\"horizontal\"` (по умолчанию) — линия на всю ширину; с `label`\n * или default-слотом рисует текст по центру/краю между отрезками линии.\n * - `orientation=\"vertical\"` — тонкая вертикальная линия (для inline-разделения,\n * например в тулбарах).\n */\nexport type GrDividerOrientation = 'horizontal' | 'vertical'\nexport type GrDividerAlign = 'start' | 'center' | 'end'\n\nconst props = withDefaults(\n defineProps<{\n orientation?: GrDividerOrientation\n label?: string\n align?: GrDividerAlign\n }>(),\n {\n orientation: 'horizontal',\n label: undefined,\n align: 'center',\n },\n)\n\nconst slots = useSlots()\nconst hasLabel = computed(() =>\n props.orientation === 'horizontal' && (Boolean(props.label) || Boolean(slots.default)),\n)\n</script>\n\n<template>\n <div\n v-if=\"orientation === 'vertical'\"\n data-gr-divider\n role=\"separator\"\n aria-orientation=\"vertical\"\n class=\"inline-block w-px self-stretch bg-[var(--brd)]\"\n />\n\n <div\n v-else-if=\"hasLabel\"\n data-gr-divider\n role=\"separator\"\n aria-orientation=\"horizontal\"\n class=\"flex w-full items-center gap-3 text-xs text-[var(--muted-fg)]\"\n >\n <span v-if=\"align !== 'start'\" class=\"h-px flex-1 bg-[var(--brd)]\" />\n <span class=\"shrink-0\"><slot>{{ label }}</slot></span>\n <span v-if=\"align !== 'end'\" class=\"h-px flex-1 bg-[var(--brd)]\" />\n </div>\n\n <hr\n v-else\n data-gr-divider\n class=\"h-px w-full border-0 bg-[var(--brd)]\"\n >\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\n/**\n * GrDivider — разделитель контента.\n *\n * - `orientation=\"horizontal\"` (по умолчанию) — линия на всю ширину; с `label`\n * или default-слотом рисует текст по центру/краю между отрезками линии.\n * - `orientation=\"vertical\"` — тонкая вертикальная линия (для inline-разделения,\n * например в тулбарах).\n */\nexport type GrDividerOrientation = 'horizontal' | 'vertical'\nexport type GrDividerAlign = 'start' | 'center' | 'end'\n\nconst props = withDefaults(\n defineProps<{\n orientation?: GrDividerOrientation\n label?: string\n align?: GrDividerAlign\n }>(),\n {\n orientation: 'horizontal',\n label: undefined,\n align: 'center',\n },\n)\n\nconst slots = useSlots()\nconst hasLabel = computed(() =>\n props.orientation === 'horizontal' && (Boolean(props.label) || Boolean(slots.default)),\n)\n</script>\n\n<template>\n <div\n v-if=\"orientation === 'vertical'\"\n data-gr-divider\n role=\"separator\"\n aria-orientation=\"vertical\"\n class=\"inline-block w-px self-stretch bg-[var(--brd)]\"\n />\n\n <div\n v-else-if=\"hasLabel\"\n data-gr-divider\n role=\"separator\"\n aria-orientation=\"horizontal\"\n class=\"flex w-full items-center gap-3 text-xs text-[var(--muted-fg)]\"\n >\n <span v-if=\"align !== 'start'\" class=\"h-px flex-1 bg-[var(--brd)]\" />\n <span class=\"shrink-0\"><slot>{{ label }}</slot></span>\n <span v-if=\"align !== 'end'\" class=\"h-px flex-1 bg-[var(--brd)]\" />\n </div>\n\n <hr\n v-else\n data-gr-divider\n class=\"h-px w-full border-0 bg-[var(--brd)]\"\n >\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcA,MAAM,QAAQ;EAad,MAAM,QAAQ,SAAS;EACvB,MAAM,WAAW,eACf,MAAM,gBAAgB,iBAAiB,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,OAAO,EACtF;;UAKU,QAAA,gBAAW,cAAA,UAAA,GADnB,mBAME,OANF,UAME,KAGW,SAAA,SAAA,UAAA,GADb,mBAUM,OAVN,YAUM;IAHQ,QAAA,UAAK,WAAA,UAAA,GAAjB,mBAAqE,QAArE,UAAqE,KAAA,mBAAA,IAAA,IAAA;IACrE,mBAAsD,QAAtD,YAAsD,CAA/B,WAAwB,KAAA,QAAA,WAAA,CAAA,SAAA,CAAA,gBAAA,gBAAf,QAAA,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACzB,QAAA,UAAK,SAAA,UAAA,GAAjB,mBAAmE,QAAnE,UAAmE,KAAA,mBAAA,IAAA,IAAA;uBAGrE,mBAIC,MAJD,UAIC"}
|