@feugene/granularity 0.12.0 → 0.13.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/dist/GrBadge.css +1 -1
- package/dist/GrFormFile.css +1 -1
- package/dist/GrToaster.css +1 -1
- package/dist/GrTree.css +1 -1
- package/dist/chunks/{config-ClhKPJvg.js → config-23WtUiAL.js} +1 -1
- package/dist/chunks/config-23WtUiAL.js.map +1 -0
- package/dist/chunks/config-8Pcutu1j.js.map +1 -0
- package/dist/chunks/{config-1uSYl98Y2.js → config-B0i5r8kH.js} +1 -1
- package/dist/chunks/config-B0i5r8kH.js.map +1 -0
- package/dist/chunks/{config-BOlr7qw7.js → config-B5Rknzkd.js} +33 -39
- package/dist/chunks/config-B5Rknzkd.js.map +1 -0
- package/dist/chunks/config-B7W9VlZ7.js +5 -0
- package/dist/chunks/config-B7W9VlZ7.js.map +1 -0
- package/dist/chunks/config-BDSHekVC.js +84 -0
- package/dist/chunks/config-BDSHekVC.js.map +1 -0
- package/dist/chunks/config-BLHqZhy-.js.map +1 -0
- package/dist/chunks/{config-eYLZYOUS2.js → config-BMKNHFMD2.js} +15 -15
- package/dist/chunks/config-BMKNHFMD2.js.map +1 -0
- package/dist/chunks/config-BUHuGBik2.js.map +1 -0
- package/dist/chunks/config-BX1JTrkV.js.map +1 -0
- package/dist/chunks/config-BXtAmU3s.js.map +1 -0
- package/dist/chunks/config-BZFUM3Ky.js +75 -0
- package/dist/chunks/config-BZFUM3Ky.js.map +1 -0
- package/dist/chunks/{config-DUcu1D682.js → config-BmNT0Fmx.js} +2 -2
- package/dist/chunks/config-BmNT0Fmx.js.map +1 -0
- package/dist/chunks/{config-C49QUoJL.js → config-BvVq2gbd.js} +1 -1
- package/dist/chunks/{config-C49QUoJL.js.map → config-BvVq2gbd.js.map} +1 -1
- package/dist/chunks/{config-CrG1XiE72.js → config-C4hJxXDa.js} +5 -5
- package/dist/chunks/config-C4hJxXDa.js.map +1 -0
- package/dist/chunks/config-CB4RVt9M.js +66 -0
- package/dist/chunks/config-CB4RVt9M.js.map +1 -0
- package/dist/chunks/config-CGHLoBlH2.js.map +1 -0
- package/dist/chunks/config-COE_vZ-l.js +52 -0
- package/dist/chunks/config-COE_vZ-l.js.map +1 -0
- package/dist/chunks/{config-CziwTDDL.js → config-CPdmr7tC.js} +1 -1
- package/dist/chunks/{config-CziwTDDL.js.map → config-CPdmr7tC.js.map} +1 -1
- package/dist/chunks/{config-BIRO0vDJ.js → config-DPDFYzIa.js} +2 -2
- package/dist/chunks/config-DPDFYzIa.js.map +1 -0
- package/dist/chunks/{config-DnvPqu4g2.js → config-DRKXJ9PW2.js} +1 -1
- package/dist/chunks/{config-DnvPqu4g2.js.map → config-DRKXJ9PW2.js.map} +1 -1
- package/dist/chunks/config-DToHb81g.js +45 -0
- package/dist/chunks/config-DToHb81g.js.map +1 -0
- package/dist/chunks/{config-jBp9wVv-.js → config-D_myOZbA.js} +1 -1
- package/dist/chunks/{config-jBp9wVv-.js.map → config-D_myOZbA.js.map} +1 -1
- package/dist/chunks/{config-D_R56_gT.js → config-Dg_6FTvJ.js} +1 -1
- package/dist/chunks/config-Dg_6FTvJ.js.map +1 -0
- package/dist/chunks/config-Dqy0rPPO2.js.map +1 -0
- package/dist/chunks/config-Droqn55j.js +8 -0
- package/dist/chunks/config-Droqn55j.js.map +1 -0
- package/dist/chunks/config-JpHA4Xx0.js.map +1 -0
- package/dist/chunks/{config-C4snOIXg.js → config-KXuionN3.js} +1 -1
- package/dist/chunks/{config-C4snOIXg.js.map → config-KXuionN3.js.map} +1 -1
- package/dist/chunks/{config-DezDih8_.js → config-LqDC_rvp.js} +2 -2
- package/dist/chunks/config-LqDC_rvp.js.map +1 -0
- package/dist/chunks/config-QaIc_gRa2.js.map +1 -0
- package/dist/chunks/config-U4m9PSql2.js.map +1 -0
- package/dist/chunks/{config-B7IIWGt_2.js → config-XmTv4pnI.js} +2 -2
- package/dist/chunks/config-XmTv4pnI.js.map +1 -0
- package/dist/chunks/config-eXB87DOi.js.map +1 -0
- package/dist/chunks/{config-C7NpDrfO.js → config-gZWR75Bh2.js} +1 -1
- package/dist/chunks/config-gZWR75Bh2.js.map +1 -0
- package/dist/chunks/config-ipvU0lzP.js.map +1 -0
- package/dist/chunks/config-xR4XVmcy2.js.map +1 -0
- package/dist/chunks/context-Bfrgsluh.js +9 -0
- package/dist/chunks/context-Bfrgsluh.js.map +1 -0
- package/dist/chunks/context-DfWYCBB-.js +129 -0
- package/dist/chunks/context-DfWYCBB-.js.map +1 -0
- package/dist/chunks/{en-CfkDa4GX.js → en-Cr6EkG8c.js} +46 -4
- package/dist/chunks/en-Cr6EkG8c.js.map +1 -0
- package/dist/chunks/{es-CgaLnFYx.js → es-DuYb1Qju.js} +3 -3
- package/dist/chunks/{es-CgaLnFYx.js.map → es-DuYb1Qju.js.map} +1 -1
- package/dist/chunks/{es-FkgECuCm.js → es-i08e9Sdo.js} +46 -4
- package/dist/chunks/es-i08e9Sdo.js.map +1 -0
- package/dist/chunks/{grBadgeStyles-DrycBuKT.js → grBadgeStyles-D3dFjr_N.js} +12 -12
- package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +1 -0
- package/dist/chunks/{grButtonStyles-C7Yga_Q1.js → grButtonStyles-DRBgDmOp.js} +28 -28
- package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +1 -0
- package/dist/chunks/{grDropdownStyles-B_-DKytw.js → grDropdownStyles-HBPkghVr.js} +2 -2
- package/dist/chunks/{grDropdownStyles-B_-DKytw.js.map → grDropdownStyles-HBPkghVr.js.map} +1 -1
- package/dist/chunks/{grModalStyles-DWd3i05Q.js → grModalStyles-D8-shx9A.js} +1 -1
- package/dist/chunks/grModalStyles-D8-shx9A.js.map +1 -0
- package/dist/chunks/{grSelectStyles-CLK5hRd3.js → grSelectStyles-CwMUQrBZ.js} +12 -12
- package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +1 -0
- package/dist/chunks/{grStyle-Blc9otAx.js → grStyle-CdvxTXPH.js} +2 -2
- package/dist/chunks/grStyle-CdvxTXPH.js.map +1 -0
- package/dist/chunks/{granularityI18n-DoV7Ca2m.js → granularityI18n-SH0I--GW.js} +1 -1
- package/dist/chunks/{granularityI18n-DoV7Ca2m.js.map → granularityI18n-SH0I--GW.js.map} +1 -1
- package/dist/chunks/{ru-Bl8CxpEa.js → ru-B5XOOYZt.js} +46 -4
- package/dist/chunks/ru-B5XOOYZt.js.map +1 -0
- package/dist/chunks/{safelist-Do2RtzLB.js → safelist-BvO8HPnE.js} +1 -1
- package/dist/chunks/{safelist-Do2RtzLB.js.map → safelist-BvO8HPnE.js.map} +1 -1
- package/dist/chunks/shared-D-v9lit0.js +188 -0
- package/dist/chunks/shared-D-v9lit0.js.map +1 -0
- package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +251 -0
- package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +1 -0
- package/dist/components/GrAlert/index.js +2 -2
- package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +499 -0
- package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +1 -0
- package/dist/components/GrAutocomplete/index.js +3 -0
- package/dist/components/GrAvatar/chunks/{GrAvatar-96CpTCq5.js → GrAvatar-CTOUVBF7.js} +1 -1
- package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +1 -0
- package/dist/components/GrAvatar/index.js +1 -1
- package/dist/components/GrBadge/chunks/{GrBadge-B77XlaqE.js → GrBadge-D1jefy4S.js} +12 -8
- package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +1 -0
- package/dist/components/GrBadge/index.js +2 -2
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CcktMOdg.js → GrBadgeWrap-DWDxHdiQ.js} +1 -1
- package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +1 -0
- package/dist/components/GrBadgeWrap/index.js +1 -1
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-usuMgG8_.js → GrBottomNav-vSE4LXmk.js} +2 -2
- package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +1 -0
- package/dist/components/GrBottomNav/index.js +1 -1
- package/dist/components/GrButton/chunks/{GrButton-BlffdeJr.js → GrButton-DCi4CUpo.js} +18 -14
- package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +1 -0
- package/dist/components/GrButton/index.js +4 -4
- package/dist/components/GrCard/chunks/{GrCard-DUNMkuHW.js → GrCard-CxCjyHMb.js} +1 -1
- package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +1 -0
- package/dist/components/GrCard/index.js +1 -1
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-DJhzZZdO.js → GrCheckbox-BbIDRXtl.js} +5 -5
- package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +1 -0
- package/dist/components/GrCheckbox/index.js +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-CPPLh_xU.js → GrCollapse-DApXztn8.js} +6 -6
- package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +1 -0
- package/dist/components/GrCollapse/index.js +2 -2
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +410 -0
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +1 -0
- package/dist/components/GrCommandPalette/index.js +3 -0
- package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +57 -0
- package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +1 -0
- package/dist/components/GrConfigProvider/index.js +4 -0
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-D8CkOtqv.js → GrConfirmDialog-e4120mWw.js} +5 -5
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +1 -0
- package/dist/components/GrConfirmDialog/index.js +2 -2
- package/dist/components/GrDataTable/chunks/{GrDataTable-Ds5OeGat.js → GrDataTable-C1CzxV0p.js} +127 -25
- package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +1 -0
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-Ctucxju9.js → GrDialog-BPMvDHOz.js} +5 -5
- package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +1 -0
- package/dist/components/GrDialog/index.js +1 -1
- package/dist/components/GrDialogService/chunks/{GrDialogService-CU1Fbonc.js → GrDialogService-CYXCTGm3.js} +36 -11
- package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +1 -0
- package/dist/components/GrDialogService/index.js +2 -2
- package/dist/components/GrDivider/chunks/{GrDivider-5bcE-BB4.js → GrDivider-BdENZ1w0.js} +5 -5
- package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +1 -0
- package/dist/components/GrDivider/index.js +1 -1
- package/dist/components/GrDrawer/chunks/{GrDrawer-SLGKCY2A.js → GrDrawer-KevdZ5BB.js} +5 -5
- package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +1 -0
- package/dist/components/GrDrawer/index.js +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js → GrDropdown-BKoy8hm-.js} +1 -1
- package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js.map → GrDropdown-BKoy8hm-.js.map} +1 -1
- package/dist/components/GrDropdown/index.js +2 -2
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu--g9Vofcq.js → GrDropdownMenu-zCatXzmt.js} +11 -11
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +1 -0
- package/dist/components/GrDropdownMenu/index.js +1 -1
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-CA3BiTV7.js → GrEmptyState-CNb0BzjG.js} +3 -3
- package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +1 -0
- package/dist/components/GrEmptyState/index.js +1 -1
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-DvWPpiJS.js → GrFileUpload-CnLgUGDF.js} +12 -12
- package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +1 -1
- package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +234 -0
- package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +1 -0
- package/dist/components/GrForm/index.js +4 -0
- package/dist/components/GrFormField/chunks/{GrFormField-DnfMHx_U.js → GrFormField-CXCDBd99.js} +41 -14
- package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +1 -0
- package/dist/components/GrFormField/index.js +1 -1
- package/dist/components/GrFormFile/chunks/{GrFormFile-CXcqqdvV.js → GrFormFile-CqacSbUl.js} +9 -9
- package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +1 -0
- package/dist/components/GrFormFile/index.js +1 -1
- package/dist/components/GrFormSection/chunks/{GrFormSection-Ce21jcgo.js → GrFormSection-C3w9DQJf.js} +1 -1
- package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +1 -0
- package/dist/components/GrFormSection/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js → GrImageViewer-DDLJkvIU.js} +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js.map → GrImageViewer-DDLJkvIU.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInput/chunks/{GrInput-B8dd3JaA.js → GrInput-C1VBL0dg.js} +18 -15
- package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +1 -0
- package/dist/components/GrInput/index.js +2 -2
- package/dist/components/GrInputTag/chunks/{GrInputTag-zMgFqp2g.js → GrInputTag-BMk9jm42.js} +6 -6
- package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +1 -0
- package/dist/components/GrInputTag/index.js +2 -2
- package/dist/components/GrKbd/chunks/{GrKbd-BEoYxWhE.js → GrKbd-DTspwtoN.js} +1 -1
- package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +1 -0
- package/dist/components/GrKbd/index.js +1 -1
- package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js → GrLink-BP0YrnL9.js} +1 -1
- package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js.map → GrLink-BP0YrnL9.js.map} +1 -1
- package/dist/components/GrLink/index.js +2 -2
- package/dist/components/GrList/chunks/{GrList-Dx772Ns4.js → GrList-5RA-tZzE.js} +3 -3
- package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +1 -0
- package/dist/components/GrList/index.js +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading--X_7rdbb.js → GrLoading-fRDtVfi7.js} +3 -3
- package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +1 -0
- package/dist/components/GrLoading/index.js +2 -2
- package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js → GrModal-BTu1-5eY.js} +1 -1
- package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js.map → GrModal-BTu1-5eY.js.map} +1 -1
- package/dist/components/GrModal/index.js +3 -3
- package/dist/components/GrNavbar/chunks/{GrNavbar-DW3MiIIf.js → GrNavbar-keKT_mIM.js} +3 -3
- package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +1 -0
- package/dist/components/GrNavbar/index.js +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-DxCEvL7V.js → GrNumberInput-l9ZOHG9D.js} +19 -17
- package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +1 -0
- package/dist/components/GrNumberInput/index.js +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-mlyfLjQY.js → GrPagination-C5Y69CuK.js} +59 -16
- package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +1 -0
- package/dist/components/GrPagination/index.js +2 -2
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-CC3z-Zqp.js → GrProgressBar-Dqg4Fj9S.js} +2 -2
- package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +1 -0
- package/dist/components/GrProgressBar/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-C-_BMNuY.js → GrPromptDialog-DNUjRVB9.js} +7 -7
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +1 -0
- package/dist/components/GrPromptDialog/index.js +2 -2
- package/dist/components/GrRadio/chunks/{GrRadio-Dr-pvs_9.js → GrRadio-DlhxPGqf.js} +5 -7
- package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +1 -0
- package/dist/components/GrRadio/index.js +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-nOdvfV_g.js → GrRadioGroup-BXt9iw4q.js} +7 -5
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +1 -0
- package/dist/components/GrRadioGroup/index.js +2 -2
- package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +241 -0
- package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +1 -0
- package/dist/components/GrRating/index.js +3 -0
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js → GrResponseErrorBanner-2CvM7Z08.js} +2 -2
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js.map → GrResponseErrorBanner-2CvM7Z08.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js → GrResponseErrorBanner-C8NGx8pE.js} +3 -3
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js.map → GrResponseErrorBanner-C8NGx8pE.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/index.js +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-C1y0UXpQ.js → GrSegmented-CTd3n4PA.js} +14 -11
- package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +1 -0
- package/dist/components/GrSegmented/index.js +2 -2
- package/dist/components/GrSelect/chunks/{GrSelect-BVCmitqa.js → GrSelect-Dn3FgJ3Z.js} +161 -75
- package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +1 -0
- package/dist/components/GrSelect/index.js +2 -2
- package/dist/components/GrSidebar/chunks/{GrSidebar-DkWozzwA.js → GrSidebar-cvnzBfj3.js} +7 -7
- package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +1 -0
- package/dist/components/GrSidebar/index.js +2 -2
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-DsN-_CDZ.js → GrSkeleton-BucA5F4J.js} +1 -1
- package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +1 -0
- package/dist/components/GrSkeleton/index.js +2 -2
- package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +286 -0
- package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +1 -0
- package/dist/components/GrSlider/index.js +3 -0
- package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +128 -0
- package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +1 -0
- package/dist/components/GrStatistic/index.js +3 -0
- package/dist/components/GrSwitch/chunks/{GrSwitch-DAioyccZ.js → GrSwitch-CJdRvS0s.js} +16 -7
- package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +1 -0
- package/dist/components/GrSwitch/index.js +2 -2
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js → GrTabPanels-DeEMgb_y.js} +1 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js.map → GrTabPanels-DeEMgb_y.js.map} +1 -1
- package/dist/components/GrTabPanels/index.js +2 -2
- package/dist/components/GrTable/chunks/{GrTable-Db3hRnKA.js → GrTable-sNvsA8wa.js} +24 -11
- package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +1 -0
- package/dist/components/GrTable/index.js +2 -2
- package/dist/components/GrTabs/chunks/{GrTabs-DsLwWoRz.js → GrTabs-BqTak0SR.js} +3 -3
- package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +1 -0
- package/dist/components/GrTabs/index.js +2 -2
- package/dist/components/GrTextarea/chunks/{GrTextarea-CKukGlNl.js → GrTextarea-DIYBAPpP.js} +2 -2
- package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +1 -0
- package/dist/components/GrTextarea/index.js +2 -2
- package/dist/components/GrToaster/chunks/{GrToaster-L2cu6cSR.js → GrToaster-BVHjIHcM.js} +51 -10
- package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +1 -0
- package/dist/components/GrToaster/index.js +1 -1
- package/dist/components/GrTooltip/chunks/{GrTooltip-BeyZ8ssR.js → GrTooltip-BMKH2lIx.js} +3 -3
- package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +1 -0
- package/dist/components/GrTooltip/index.js +1 -1
- package/dist/components/GrTree/chunks/{GrTree-B2_yW6g1.js → GrTree-_12ChXRQ.js} +3 -3
- package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +1 -0
- package/dist/components/GrTree/index.js +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-0aM62xyu.js → GrTreeSelect-CdaLG7Xq.js} +10 -10
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +1 -0
- package/dist/components/GrTreeSelect/index.js +2 -2
- package/dist/composables/useToast.js +3 -1
- package/dist/composables/useToast.js.map +1 -1
- package/dist/directives/loading.js +1 -1
- package/dist/granular-provider-node.js +6 -6
- package/dist/granular-provider-node.js.map +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/i18n/all.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.js +111 -93
- package/dist/index.js.map +1 -1
- package/dist/styles/base.css +2 -2
- package/dist/styles/index.css +6 -3
- package/dist/styles/preflight.css +3 -3
- package/dist/styles/themes/dark.css +52 -40
- package/dist/styles/themes/light.css +70 -45
- package/dist/styles/tokens.css +20 -20
- package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +26 -14
- package/dist/types/src/components/GrAlert/defaults.d.ts +17 -0
- package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +55 -0
- package/dist/types/src/components/GrAlert/index.d.ts +4 -1
- package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +153 -0
- package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -0
- package/dist/types/src/components/GrAutocomplete/defaults.d.ts +15 -0
- package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +27 -0
- package/dist/types/src/components/GrAutocomplete/index.d.ts +6 -0
- package/dist/types/src/components/GrAutocomplete/safelist.d.ts +1 -0
- package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +1 -1
- package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +7 -7
- package/dist/types/src/components/GrBadge/defaults.d.ts +15 -0
- package/dist/types/src/components/GrBadge/index.d.ts +1 -0
- package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +1 -1
- package/dist/types/src/components/GrButton/GrButton.vue.d.ts +12 -12
- package/dist/types/src/components/GrButton/defaults.d.ts +25 -0
- package/dist/types/src/components/GrButton/grButtonStyles.d.ts +2 -2
- package/dist/types/src/components/GrButton/index.d.ts +1 -0
- package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +4 -4
- package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +2 -2
- package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
- package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +128 -0
- package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -0
- package/dist/types/src/components/GrCommandPalette/filtering.d.ts +35 -0
- package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +20 -0
- package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +23 -0
- package/dist/types/src/components/GrCommandPalette/index.d.ts +6 -0
- package/dist/types/src/components/GrCommandPalette/safelist.d.ts +1 -0
- package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +59 -0
- package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -0
- package/dist/types/src/components/GrConfigProvider/context.d.ts +131 -0
- package/dist/types/src/components/GrConfigProvider/index.d.ts +5 -0
- package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +2 -2
- package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +20 -0
- package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +1 -1
- package/dist/types/src/components/GrDialogService/store.d.ts +18 -0
- package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
- package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +1 -1
- package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +1 -1
- package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
- package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +3 -3
- package/dist/types/src/components/GrForm/GrForm.vue.d.ts +93 -0
- package/dist/types/src/components/GrForm/config.d.ts +1 -0
- package/dist/types/src/components/GrForm/context.d.ts +27 -0
- package/dist/types/src/components/GrForm/index.d.ts +6 -0
- package/dist/types/src/components/GrForm/validation.d.ts +52 -0
- package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +11 -1
- package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +4 -4
- package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +3 -3
- package/dist/types/src/components/GrInput/GrInput.vue.d.ts +12 -12
- package/dist/types/src/components/GrInput/defaults.d.ts +18 -0
- package/dist/types/src/components/GrInput/grInputStyles.d.ts +1 -1
- package/dist/types/src/components/GrInput/index.d.ts +1 -0
- package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
- package/dist/types/src/components/GrLink/GrLink.vue.d.ts +3 -3
- package/dist/types/src/components/GrLink/grLinkStyles.d.ts +3 -3
- package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
- package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +10 -10
- package/dist/types/src/components/GrNumberInput/defaults.d.ts +14 -0
- package/dist/types/src/components/GrNumberInput/index.d.ts +1 -0
- package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +18 -0
- package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +4 -4
- package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +5 -5
- package/dist/types/src/components/GrRadio/defaults.d.ts +14 -0
- package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +3 -3
- package/dist/types/src/components/GrRadio/index.d.ts +1 -0
- package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +4 -4
- package/dist/types/src/components/GrRadioGroup/defaults.d.ts +14 -0
- package/dist/types/src/components/GrRadioGroup/index.d.ts +1 -0
- package/dist/types/src/components/GrRating/GrRating.vue.d.ts +124 -0
- package/dist/types/src/components/GrRating/config.d.ts +1 -0
- package/dist/types/src/components/GrRating/defaults.d.ts +14 -0
- package/dist/types/src/components/GrRating/grRatingStyles.d.ts +21 -0
- package/dist/types/src/components/GrRating/index.d.ts +6 -0
- package/dist/types/src/components/GrRating/safelist.d.ts +1 -0
- package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +1 -1
- package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +7 -7
- package/dist/types/src/components/GrSegmented/defaults.d.ts +15 -0
- package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +1 -1
- package/dist/types/src/components/GrSegmented/index.d.ts +1 -0
- package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +57 -17
- package/dist/types/src/components/GrSelect/defaults.d.ts +17 -0
- package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +3 -3
- package/dist/types/src/components/GrSelect/index.d.ts +1 -0
- package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +2 -2
- package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
- package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +88 -0
- package/dist/types/src/components/GrSlider/config.d.ts +1 -0
- package/dist/types/src/components/GrSlider/defaults.d.ts +14 -0
- package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +36 -0
- package/dist/types/src/components/GrSlider/index.d.ts +6 -0
- package/dist/types/src/components/GrSlider/safelist.d.ts +1 -0
- package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +116 -0
- package/dist/types/src/components/GrStatistic/config.d.ts +1 -0
- package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +16 -0
- package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +24 -0
- package/dist/types/src/components/GrStatistic/index.d.ts +6 -0
- package/dist/types/src/components/GrStatistic/safelist.d.ts +1 -0
- package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +4 -4
- package/dist/types/src/components/GrSwitch/defaults.d.ts +14 -0
- package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
- package/dist/types/src/components/GrSwitch/index.d.ts +1 -0
- package/dist/types/src/components/GrTable/GrTable.vue.d.ts +16 -0
- package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +5 -5
- package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +19 -2
- package/dist/types/src/components/GrToaster/index.d.ts +1 -1
- package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +1 -1
- package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +1 -1
- package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
- package/dist/types/src/composables/useToast.d.ts +24 -0
- package/dist/types/src/granular-provider/shared.d.ts +7 -0
- package/dist/types/src/i18n/messages/en.d.ts +74 -0
- package/dist/types/src/i18n/messages/es.d.ts +74 -0
- package/dist/types/src/i18n/messages/ru.d.ts +74 -0
- package/dist/types/src/index.d.ts +7 -0
- package/dist/web-types.json +1308 -271
- package/package.json +29 -1
- package/dist/chunks/config-1uSYl98Y2.js.map +0 -1
- package/dist/chunks/config-8Pcutu1j2.js.map +0 -1
- package/dist/chunks/config-B7IIWGt_2.js.map +0 -1
- package/dist/chunks/config-BIRO0vDJ.js.map +0 -1
- package/dist/chunks/config-BLHqZhy-2.js.map +0 -1
- package/dist/chunks/config-BOlr7qw7.js.map +0 -1
- package/dist/chunks/config-BUHuGBik.js.map +0 -1
- package/dist/chunks/config-BX1JTrkV2.js.map +0 -1
- package/dist/chunks/config-BXtAmU3s2.js.map +0 -1
- package/dist/chunks/config-C7NpDrfO.js.map +0 -1
- package/dist/chunks/config-CGHLoBlH.js.map +0 -1
- package/dist/chunks/config-ClhKPJvg.js.map +0 -1
- package/dist/chunks/config-Cpi9Mh2J.js.map +0 -1
- package/dist/chunks/config-CrG1XiE72.js.map +0 -1
- package/dist/chunks/config-DUcu1D682.js.map +0 -1
- package/dist/chunks/config-D_R56_gT.js.map +0 -1
- package/dist/chunks/config-DezDih8_.js.map +0 -1
- package/dist/chunks/config-JpHA4Xx02.js.map +0 -1
- package/dist/chunks/config-QaIc_gRa.js.map +0 -1
- package/dist/chunks/config-U4m9PSql.js.map +0 -1
- package/dist/chunks/config-eXB87DOi2.js.map +0 -1
- package/dist/chunks/config-eYLZYOUS2.js.map +0 -1
- package/dist/chunks/config-ipvU0lzP2.js.map +0 -1
- package/dist/chunks/config-xR4XVmcy.js.map +0 -1
- package/dist/chunks/en-CfkDa4GX.js.map +0 -1
- package/dist/chunks/es-FkgECuCm.js.map +0 -1
- package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +0 -1
- package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +0 -1
- package/dist/chunks/grModalStyles-DWd3i05Q.js.map +0 -1
- package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +0 -1
- package/dist/chunks/grStyle-Blc9otAx.js.map +0 -1
- package/dist/chunks/ru-Bl8CxpEa.js.map +0 -1
- package/dist/chunks/shared-B6Ay2081.js +0 -174
- package/dist/chunks/shared-B6Ay2081.js.map +0 -1
- package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js +0 -163
- package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +0 -1
- package/dist/components/GrAvatar/chunks/GrAvatar-96CpTCq5.js.map +0 -1
- package/dist/components/GrBadge/chunks/GrBadge-B77XlaqE.js.map +0 -1
- package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CcktMOdg.js.map +0 -1
- package/dist/components/GrBottomNav/chunks/GrBottomNav-usuMgG8_.js.map +0 -1
- package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +0 -1
- package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +0 -1
- package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +0 -1
- package/dist/components/GrCollapse/chunks/GrCollapse-CPPLh_xU.js.map +0 -1
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-Ds5OeGat.js.map +0 -1
- package/dist/components/GrDialog/chunks/GrDialog-Ctucxju9.js.map +0 -1
- package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js.map +0 -1
- package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js.map +0 -1
- package/dist/components/GrDrawer/chunks/GrDrawer-SLGKCY2A.js.map +0 -1
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu--g9Vofcq.js.map +0 -1
- package/dist/components/GrEmptyState/chunks/GrEmptyState-CA3BiTV7.js.map +0 -1
- package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +0 -1
- package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js.map +0 -1
- package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +0 -1
- package/dist/components/GrFormSection/chunks/GrFormSection-Ce21jcgo.js.map +0 -1
- package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js.map +0 -1
- package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +0 -1
- package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js.map +0 -1
- package/dist/components/GrList/chunks/GrList-Dx772Ns4.js.map +0 -1
- package/dist/components/GrLoading/chunks/GrLoading--X_7rdbb.js.map +0 -1
- package/dist/components/GrNavbar/chunks/GrNavbar-DW3MiIIf.js.map +0 -1
- package/dist/components/GrNumberInput/chunks/GrNumberInput-DxCEvL7V.js.map +0 -1
- package/dist/components/GrPagination/chunks/GrPagination-mlyfLjQY.js.map +0 -1
- package/dist/components/GrProgressBar/chunks/GrProgressBar-CC3z-Zqp.js.map +0 -1
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js.map +0 -1
- package/dist/components/GrRadio/chunks/GrRadio-Dr-pvs_9.js.map +0 -1
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-nOdvfV_g.js.map +0 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-C1y0UXpQ.js.map +0 -1
- package/dist/components/GrSelect/chunks/GrSelect-BVCmitqa.js.map +0 -1
- package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +0 -1
- package/dist/components/GrSkeleton/chunks/GrSkeleton-DsN-_CDZ.js.map +0 -1
- package/dist/components/GrSwitch/chunks/GrSwitch-DAioyccZ.js.map +0 -1
- package/dist/components/GrTable/chunks/GrTable-Db3hRnKA.js.map +0 -1
- package/dist/components/GrTabs/chunks/GrTabs-DsLwWoRz.js.map +0 -1
- package/dist/components/GrTextarea/chunks/GrTextarea-CKukGlNl.js.map +0 -1
- package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js.map +0 -1
- package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js.map +0 -1
- package/dist/components/GrTree/chunks/GrTree-B2_yW6g1.js.map +0 -1
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-0aM62xyu.js.map +0 -1
- package/dist/chunks/{config-8Pcutu1j2.js → config-8Pcutu1j.js} +0 -0
- package/dist/chunks/{config-BLHqZhy-2.js → config-BLHqZhy-.js} +0 -0
- package/dist/chunks/{config-BUHuGBik.js → config-BUHuGBik2.js} +0 -0
- package/dist/chunks/{config-BX1JTrkV2.js → config-BX1JTrkV.js} +0 -0
- package/dist/chunks/{config-BXtAmU3s2.js → config-BXtAmU3s.js} +0 -0
- package/dist/chunks/{config-CGHLoBlH.js → config-CGHLoBlH2.js} +0 -0
- package/dist/chunks/{config-Cpi9Mh2J.js → config-Dqy0rPPO2.js} +1 -1
- /package/dist/chunks/{config-JpHA4Xx02.js → config-JpHA4Xx0.js} +0 -0
- /package/dist/chunks/{config-QaIc_gRa.js → config-QaIc_gRa2.js} +0 -0
- /package/dist/chunks/{config-U4m9PSql.js → config-U4m9PSql2.js} +0 -0
- /package/dist/chunks/{config-eXB87DOi2.js → config-eXB87DOi.js} +0 -0
- /package/dist/chunks/{config-ipvU0lzP2.js → config-ipvU0lzP.js} +0 -0
- /package/dist/chunks/{config-xR4XVmcy.js → config-xR4XVmcy2.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrConfirmDialog-e4120mWw.js","names":[],"sources":["../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue","../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--gr-muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--gr-muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DA,MAAM,QAAQ;EAuBd,MAAM,OAAO;EAOb,MAAM,EAAE,MAAM,2BAA2B;EACzC,MAAM,gBAAgB,eAAe,MAAM,SAAS,EAAE,2BAA2B,SAAS,CAAC;EAC3F,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,mBAAmB,OAAO,CAAC;EAC3F,MAAM,sBAAsB,eAAe,MAAM,eAAe,EAAE,qBAAqB,SAAS,CAAC;EACjG,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,oBAAoB,QAAQ,CAAC;EAE7F,MAAM,OAAO,SAAS;GACpB,WAAW,MAAM;GACjB,MAAM,UAAmB,KAAK,qBAAqB,KAAK;EAC1D,CAAC;EAED,SAAS,WAAiB;GACxB,KAAK,QAAQ;GACb,KAAK,qBAAqB,KAAK;EACjC;EAEA,SAAS,YAAkB;GACzB,KAAK,SAAS;GACd,IAAI,MAAM,gBACR,KAAK,qBAAqB,KAAK;EACnC;;uBAIE,YA6CW,kBAAA;gBA5CA,KAAA;sEAAI,QAAA;IACZ,OAAO,cAAA;IACP,MAAM,QAAA;IACN,qBAAmB,QAAA;IACnB,gBAAc,QAAA;IACd,eAAa,QAAA;IACb,qBAAmB,QAAA;IACnB,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,eAAa,QAAA;IACb,eAAa,mBAAA;;IAcH,QAAM,cAkBR,CAjBP,WAiBO,KAAA,QAAA,UAAA,CAAA,SAAA,CAhBL,mBAeM,OAfN,YAeM,CAdJ,YAEW,kBAAA;KAFD,eAAY;KAAoB,SAAQ;KAAW,MAAM,QAAA;KAAa,SAAO;;4BAC7D,CAAA,gBAAA,gBAArB,mBAAA,KAAkB,GAAA,CAAA,CAAA,CAAA;;qBAEvB,YAUW,kBAAA;KATT,eAAY;KACX,SAAS,QAAA;KACT,MAAM,QAAA;KACN,MAAM,QAAA;KACN,SAAS,QAAA;KACT,UAAU,QAAA;KACV,SAAO;;4BAEiB,CAAA,gBAAA,gBAAtB,oBAAA,KAAmB,GAAA,CAAA,CAAA,CAAA;;;;;;;;;2BAjBxB,CAVN,mBAUM,OAVN,YAUM,CATJ,WAIO,KAAA,QAAA,WAAA,CAAA,SAAA,CAHM,QAAA,eAAA,UAAA,GAAX,mBAEM,OAFN,YAEM,gBADD,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,GAIlB,WAEO,KAAA,QAAA,SAAA,EAFa,OAAO,QAAA,MAAK,SAEzB,CADwB,QAAA,SAAA,UAAA,GAA7B,YAA0E,+BAAA;;KAArC,OAAO,QAAA;KAAQ,eAAa"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-
|
|
2
|
-
import { t as grConfirmDialogConfig } from "../../chunks/config-
|
|
1
|
+
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-e4120mWw.js";
|
|
2
|
+
import { t as grConfirmDialogConfig } from "../../chunks/config-BXtAmU3s.js";
|
|
3
3
|
export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
|
package/dist/components/GrDataTable/chunks/{GrDataTable-Ds5OeGat.js → GrDataTable-C1CzxV0p.js}
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
|
|
1
2
|
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
|
|
2
|
-
import { t as GrTable_default } from "../../GrTable/chunks/GrTable-
|
|
3
|
+
import { t as GrTable_default } from "../../GrTable/chunks/GrTable-sNvsA8wa.js";
|
|
3
4
|
import { t as arrow_up_default } from "../../../chunks/arrow-up-C_G4jg8M.js";
|
|
4
5
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, markRaw, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
5
6
|
//#region ~icons/lucide/arrow-down
|
|
@@ -25,19 +26,49 @@ var arrow_down_default = markRaw({
|
|
|
25
26
|
//#endregion
|
|
26
27
|
//#region src/components/GrDataTable/GrDataTable.vue?vue&type=script&setup=true&lang.ts
|
|
27
28
|
var _hoisted_1 = { "data-gr-datatable-header": "" };
|
|
28
|
-
var _hoisted_2 =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
var _hoisted_2 = {
|
|
30
|
+
key: 0,
|
|
31
|
+
class: "w-10 px-4 py-3 text-left",
|
|
32
|
+
scope: "col"
|
|
33
|
+
};
|
|
34
|
+
var _hoisted_3 = [
|
|
35
|
+
"checked",
|
|
36
|
+
"indeterminate",
|
|
37
|
+
"aria-label",
|
|
38
|
+
"disabled"
|
|
39
|
+
];
|
|
40
|
+
var _hoisted_4 = ["aria-sort"];
|
|
41
|
+
var _hoisted_5 = { class: "inline-flex items-center gap-2" };
|
|
42
|
+
var _hoisted_6 = ["aria-label", "onClick"];
|
|
43
|
+
var _hoisted_7 = { class: "inline-flex" };
|
|
44
|
+
var _hoisted_8 = {
|
|
33
45
|
key: 1,
|
|
34
|
-
class: "text-[var(--muted-fg)]"
|
|
46
|
+
class: "text-[var(--gr-muted-fg)]"
|
|
35
47
|
};
|
|
36
|
-
var
|
|
48
|
+
var _hoisted_9 = {
|
|
37
49
|
key: 0,
|
|
50
|
+
"data-gr-datatable-loading": ""
|
|
51
|
+
};
|
|
52
|
+
var _hoisted_10 = ["colspan"];
|
|
53
|
+
var _hoisted_11 = {
|
|
54
|
+
class: "inline-flex items-center gap-2",
|
|
55
|
+
role: "status"
|
|
56
|
+
};
|
|
57
|
+
var _hoisted_12 = {
|
|
58
|
+
key: 1,
|
|
38
59
|
"data-gr-datatable-empty": ""
|
|
39
60
|
};
|
|
40
|
-
var
|
|
61
|
+
var _hoisted_13 = ["colspan"];
|
|
62
|
+
var _hoisted_14 = ["data-selected"];
|
|
63
|
+
var _hoisted_15 = {
|
|
64
|
+
key: 0,
|
|
65
|
+
class: "w-10 px-4 py-3 text-left"
|
|
66
|
+
};
|
|
67
|
+
var _hoisted_16 = [
|
|
68
|
+
"checked",
|
|
69
|
+
"aria-label",
|
|
70
|
+
"onChange"
|
|
71
|
+
];
|
|
41
72
|
//#endregion
|
|
42
73
|
//#region src/components/GrDataTable/GrDataTable.vue
|
|
43
74
|
var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
@@ -57,20 +88,38 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
57
88
|
type: Boolean,
|
|
58
89
|
default: false
|
|
59
90
|
},
|
|
91
|
+
selectable: {
|
|
92
|
+
type: Boolean,
|
|
93
|
+
default: false
|
|
94
|
+
},
|
|
95
|
+
selected: { default: void 0 },
|
|
96
|
+
loading: {
|
|
97
|
+
type: Boolean,
|
|
98
|
+
default: false
|
|
99
|
+
},
|
|
100
|
+
loadingText: { default: void 0 },
|
|
60
101
|
density: { default: "regular" },
|
|
61
102
|
caption: { default: void 0 },
|
|
62
103
|
ariaLabel: { default: void 0 },
|
|
63
104
|
ariaLabelledby: { default: void 0 },
|
|
64
|
-
regionLabel: { default: void 0 }
|
|
105
|
+
regionLabel: { default: void 0 },
|
|
106
|
+
stickyHeader: {
|
|
107
|
+
type: Boolean,
|
|
108
|
+
default: false
|
|
109
|
+
},
|
|
110
|
+
maxHeight: { default: void 0 }
|
|
65
111
|
},
|
|
66
112
|
emits: [
|
|
67
113
|
"update:sortKey",
|
|
68
114
|
"update:sortDir",
|
|
69
|
-
"sort-change"
|
|
115
|
+
"sort-change",
|
|
116
|
+
"update:selected"
|
|
70
117
|
],
|
|
71
118
|
setup(__props, { emit: __emit }) {
|
|
72
119
|
const props = __props;
|
|
73
120
|
const emit = __emit;
|
|
121
|
+
const { t } = useGranularityTranslations();
|
|
122
|
+
const resolvedLoadingText = computed(() => props.loadingText ?? t("gr.dataTable.loading", "Loading…"));
|
|
74
123
|
const internalSortKey = ref(props.initialSortKey ?? "");
|
|
75
124
|
const internalSortDir = ref(props.initialSortDir);
|
|
76
125
|
const isSortKeyControlled = computed(() => props.sortKey !== void 0);
|
|
@@ -137,27 +186,66 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
137
186
|
caption: props.caption,
|
|
138
187
|
ariaLabel: props.ariaLabel,
|
|
139
188
|
ariaLabelledby: props.ariaLabelledby,
|
|
140
|
-
regionLabel: props.regionLabel
|
|
189
|
+
regionLabel: props.regionLabel,
|
|
190
|
+
stickyHeader: props.stickyHeader,
|
|
191
|
+
maxHeight: props.maxHeight
|
|
141
192
|
}));
|
|
142
193
|
const isEmpty = computed(() => sortedRows.value.length === 0);
|
|
194
|
+
const totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0));
|
|
143
195
|
function cellValue(row, key) {
|
|
144
196
|
return row[key];
|
|
145
197
|
}
|
|
198
|
+
const selectedKeys = computed(() => new Set(props.selected ?? []));
|
|
199
|
+
function isRowSelected(row) {
|
|
200
|
+
return selectedKeys.value.has(rowKeyValue(row));
|
|
201
|
+
}
|
|
202
|
+
const allSelected = computed(() => sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected));
|
|
203
|
+
const someSelected = computed(() => sortedRows.value.some(isRowSelected) && !allSelected.value);
|
|
204
|
+
function emitSelected(next) {
|
|
205
|
+
emit("update:selected", [...next]);
|
|
206
|
+
}
|
|
207
|
+
function toggleRow(row) {
|
|
208
|
+
const key = rowKeyValue(row);
|
|
209
|
+
const next = new Set(selectedKeys.value);
|
|
210
|
+
if (next.has(key)) next.delete(key);
|
|
211
|
+
else next.add(key);
|
|
212
|
+
emitSelected(next);
|
|
213
|
+
}
|
|
214
|
+
function toggleAll() {
|
|
215
|
+
if (allSelected.value) {
|
|
216
|
+
const next = new Set(selectedKeys.value);
|
|
217
|
+
for (const row of sortedRows.value) next.delete(rowKeyValue(row));
|
|
218
|
+
emitSelected(next);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const next = new Set(selectedKeys.value);
|
|
222
|
+
for (const row of sortedRows.value) next.add(rowKeyValue(row));
|
|
223
|
+
emitSelected(next);
|
|
224
|
+
}
|
|
146
225
|
return (_ctx, _cache) => {
|
|
147
226
|
return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-gr-datatable": "" }), createSlots({
|
|
148
|
-
head: withCtx(() => [createElementVNode("tr", _hoisted_1, [(openBlock(
|
|
227
|
+
head: withCtx(() => [createElementVNode("tr", _hoisted_1, [__props.selectable ? (openBlock(), createElementBlock("th", _hoisted_2, [createElementVNode("input", {
|
|
228
|
+
type: "checkbox",
|
|
229
|
+
"data-gr-datatable-select-all": "",
|
|
230
|
+
class: "h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle",
|
|
231
|
+
checked: allSelected.value,
|
|
232
|
+
indeterminate: someSelected.value,
|
|
233
|
+
"aria-label": unref(t)("gr.dataTable.selectAll", "Select all rows"),
|
|
234
|
+
disabled: __props.loading || isEmpty.value,
|
|
235
|
+
onChange: toggleAll
|
|
236
|
+
}, null, 40, _hoisted_3)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
149
237
|
return openBlock(), createElementBlock("th", {
|
|
150
238
|
key: col.key,
|
|
151
239
|
class: normalizeClass(["font-700 text-xs px-4 py-3", cellAlign(col)]),
|
|
152
240
|
"aria-sort": ariaSortFor(col),
|
|
153
241
|
scope: "col"
|
|
154
|
-
}, [createElementVNode("div",
|
|
242
|
+
}, [createElementVNode("div", _hoisted_5, [col.sortable ? (openBlock(), createElementBlock("button", {
|
|
155
243
|
key: 0,
|
|
156
244
|
type: "button",
|
|
157
|
-
class: "inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded",
|
|
245
|
+
class: "inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded",
|
|
158
246
|
"aria-label": sortButtonLabel(col),
|
|
159
247
|
onClick: ($event) => toggleSort(col)
|
|
160
|
-
}, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span",
|
|
248
|
+
}, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_7, [currentSortKey.value === col.key && currentSortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
|
|
161
249
|
key: 0,
|
|
162
250
|
size: "sm",
|
|
163
251
|
"aria-hidden": "true"
|
|
@@ -171,22 +259,36 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
|
171
259
|
}, {
|
|
172
260
|
default: withCtx(() => [createVNode(unref(arrow_down_default))]),
|
|
173
261
|
_: 1
|
|
174
|
-
})) : createCommentVNode("", true)])], 8,
|
|
262
|
+
})) : createCommentVNode("", true)])], 8, _hoisted_6)) : (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(col.label), 1))])], 10, _hoisted_4);
|
|
175
263
|
}), 128))])]),
|
|
176
|
-
default: withCtx(() => [
|
|
177
|
-
colspan:
|
|
178
|
-
class: "px-4 py-6 text-center text-[var(--muted-fg)]"
|
|
179
|
-
}, [
|
|
264
|
+
default: withCtx(() => [__props.loading ? (openBlock(), createElementBlock("tr", _hoisted_9, [createElementVNode("td", {
|
|
265
|
+
colspan: totalColumns.value,
|
|
266
|
+
class: "px-4 py-6 text-center text-[var(--gr-muted-fg)]"
|
|
267
|
+
}, [createElementVNode("span", _hoisted_11, [_cache[0] || (_cache[0] = createElementVNode("span", {
|
|
268
|
+
class: "i-lucide-loader-circle block h-4 w-4 animate-spin",
|
|
269
|
+
"aria-hidden": "true"
|
|
270
|
+
}, null, -1)), createElementVNode("span", null, toDisplayString(resolvedLoadingText.value), 1)])], 8, _hoisted_10)])) : isEmpty.value ? (openBlock(), createElementBlock("tr", _hoisted_12, [createElementVNode("td", {
|
|
271
|
+
colspan: totalColumns.value,
|
|
272
|
+
class: "px-4 py-6 text-center text-[var(--gr-muted-fg)]"
|
|
273
|
+
}, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref(t)("gr.dataTable.empty", "No data")), 1)])], 8, _hoisted_13)])) : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(sortedRows.value, (row) => {
|
|
180
274
|
return openBlock(), createElementBlock("tr", {
|
|
181
275
|
key: rowKeyValue(row),
|
|
182
|
-
class: "border-t border-[var(--brd)]",
|
|
183
|
-
"data-gr-datatable-row": ""
|
|
184
|
-
|
|
276
|
+
class: normalizeClass(["border-t border-[var(--gr-brd)]", isRowSelected(row) ? "bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]" : ""]),
|
|
277
|
+
"data-gr-datatable-row": "",
|
|
278
|
+
"data-selected": __props.selectable && isRowSelected(row) ? "true" : void 0
|
|
279
|
+
}, [__props.selectable ? (openBlock(), createElementBlock("td", _hoisted_15, [createElementVNode("input", {
|
|
280
|
+
type: "checkbox",
|
|
281
|
+
"data-gr-datatable-select-row": "",
|
|
282
|
+
class: "h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle",
|
|
283
|
+
checked: isRowSelected(row),
|
|
284
|
+
"aria-label": unref(t)("gr.dataTable.selectRow", "Select row"),
|
|
285
|
+
onChange: ($event) => toggleRow(row)
|
|
286
|
+
}, null, 40, _hoisted_16)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
185
287
|
return openBlock(), createElementBlock("td", {
|
|
186
288
|
key: col.key,
|
|
187
289
|
class: normalizeClass(["px-4 py-3", cellAlign(col)])
|
|
188
290
|
}, [renderSlot(_ctx.$slots, `cell-${col.key}`, { row }, () => [createElementVNode("span", null, toDisplayString(cellValue(row, col.key)), 1)])], 2);
|
|
189
|
-
}), 128))]);
|
|
291
|
+
}), 128))], 10, _hoisted_14);
|
|
190
292
|
}), 128))]),
|
|
191
293
|
_: 2
|
|
192
294
|
}, [_ctx.$slots.caption ? {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDataTable-C1CzxV0p.js","names":["$slots"],"sources":["../../../../src/components/GrDataTable/GrDataTable.vue","../../../../src/components/GrDataTable/GrDataTable.vue"],"sourcesContent":["\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n selectable: false,\n selected: undefined,\n loading: false,\n loadingText: undefined,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n (e: 'update:selected', value: Array<string | number>): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\n// ————— Выбор строк.\nconst selectedKeys = computed<Set<string | number>>(() => new Set(props.selected ?? []))\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\nconst allSelected = computed(() =>\n sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n sortedRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-if=\"selectable\"\n class=\"w-10 px-4 py-3 text-left\"\n scope=\"col\"\n >\n <input\n type=\"checkbox\"\n data-gr-datatable-select-all\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"allSelected\"\n :indeterminate=\"someSelected\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n :disabled=\"loading || isEmpty\"\n @change=\"toggleAll\"\n >\n </th>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <span class=\"inline-flex items-center gap-2\" role=\"status\">\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.dataTable.empty', 'No data') }}\n </slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"isRowSelected(row) ? 'bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]' : ''\"\n data-gr-datatable-row\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n >\n <td v-if=\"selectable\" class=\"w-10 px-4 py-3 text-left\">\n <input\n type=\"checkbox\"\n data-gr-datatable-select-row\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"isRowSelected(row)\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @change=\"toggleRow(row)\"\n >\n </td>\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n selectable: false,\n selected: undefined,\n loading: false,\n loadingText: undefined,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n (e: 'update:selected', value: Array<string | number>): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\n// ————— Выбор строк.\nconst selectedKeys = computed<Set<string | number>>(() => new Set(props.selected ?? []))\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\nconst allSelected = computed(() =>\n sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n sortedRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-if=\"selectable\"\n class=\"w-10 px-4 py-3 text-left\"\n scope=\"col\"\n >\n <input\n type=\"checkbox\"\n data-gr-datatable-select-all\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"allSelected\"\n :indeterminate=\"someSelected\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n :disabled=\"loading || isEmpty\"\n @change=\"toggleAll\"\n >\n </th>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <span class=\"inline-flex items-center gap-2\" role=\"status\">\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.dataTable.empty', 'No data') }}\n </slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"isRowSelected(row) ? 'bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]' : ''\"\n data-gr-datatable-row\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n >\n <td v-if=\"selectable\" class=\"w-10 px-4 py-3 text-left\">\n <input\n type=\"checkbox\"\n data-gr-datatable-select-row\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"isRowSelected(row)\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @change=\"toggleRow(row)\"\n >\n </td>\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrDataTable_default } from "./chunks/GrDataTable-
|
|
2
|
-
import { t as grDataTableConfig } from "../../chunks/config-
|
|
1
|
+
import { t as GrDataTable_default } from "./chunks/GrDataTable-C1CzxV0p.js";
|
|
2
|
+
import { t as grDataTableConfig } from "../../chunks/config-U4m9PSql2.js";
|
|
3
3
|
export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as x_default } from "../../../chunks/x-2KXnqxiD.js";
|
|
2
|
-
import {
|
|
3
|
-
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-
|
|
2
|
+
import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
|
|
3
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
|
|
4
4
|
import { o as Ve } from "../../../chunks/useScrollLock-K7kaP2Ud.js";
|
|
5
|
-
import { t as GrModal_default } from "../../GrModal/chunks/GrModal-
|
|
5
|
+
import { t as GrModal_default } from "../../GrModal/chunks/GrModal-BTu1-5eY.js";
|
|
6
6
|
import { a as resolveGrDialogTitle, i as resolveGrDialogSectionConfig, n as DEFAULT_GR_DIALOG_FOOTER_CONFIG, r as DEFAULT_GR_DIALOG_HEADER_CONFIG, t as DEFAULT_GR_DIALOG_BODY_CONFIG } from "../../../chunks/dialogShared-CxW62PQE.js";
|
|
7
7
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, toDisplayString, unref, useAttrs, useSlots, withCtx } from "vue";
|
|
8
8
|
//#endregion
|
|
@@ -16,7 +16,7 @@ var GrDialogFooter_default = /* @__PURE__ */ defineComponent({
|
|
|
16
16
|
const rootClass = computed(() => [
|
|
17
17
|
resolvedConfig.value.paddingX,
|
|
18
18
|
resolvedConfig.value.paddingY,
|
|
19
|
-
resolvedConfig.value.bordered ? "border-t border-[var(--brd)]" : ""
|
|
19
|
+
resolvedConfig.value.bordered ? "border-t border-[var(--gr-brd)]" : ""
|
|
20
20
|
]);
|
|
21
21
|
return (_ctx, _cache) => {
|
|
22
22
|
return openBlock(), createElementBlock("div", {
|
|
@@ -86,7 +86,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
|
|
|
86
86
|
const rootClass = computed(() => [
|
|
87
87
|
resolvedConfig.value.paddingX,
|
|
88
88
|
resolvedConfig.value.paddingY,
|
|
89
|
-
resolvedConfig.value.bordered ? "border-b border-[var(--brd)]" : "",
|
|
89
|
+
resolvedConfig.value.bordered ? "border-b border-[var(--gr-brd)]" : "",
|
|
90
90
|
"flex items-center justify-between gap-4"
|
|
91
91
|
]);
|
|
92
92
|
const showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDialog-BPMvDHOz.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(--gr-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(--gr-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(--gr-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(--gr-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
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-
|
|
2
|
+
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./chunks/GrDialog-BPMvDHOz.js";
|
|
3
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 };
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
1
|
+
import { n as GR_CONFIG_KEY, s as useGrConfig } from "../../../chunks/context-DfWYCBB-.js";
|
|
2
|
+
import { t as GRANULARITY_I18N_KEY } from "../../../chunks/adapter-CAOxmn2G.js";
|
|
3
|
+
import { t as resolveGranularityI18n } from "../../../chunks/granularityI18n-SH0I--GW.js";
|
|
4
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
|
|
5
|
+
import { n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as responseErrorParserPresets } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js";
|
|
6
|
+
import { t as GrConfirmDialog_default } from "../../GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js";
|
|
7
|
+
import { t as GrPromptDialog_default } from "../../GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js";
|
|
8
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, markRaw, mergeProps, nextTick, onBeforeUnmount, openBlock, provide, reactive, ref, render, shallowRef, toDisplayString, watch, withCtx } from "vue";
|
|
6
9
|
//#region src/components/GrDialogService/store.ts
|
|
7
10
|
/**
|
|
8
11
|
* Модульный синглтон очереди диалогов: единый источник правды для всех
|
|
@@ -33,6 +36,20 @@ var GrDialogServiceHost_default = /* @__PURE__ */ defineComponent({
|
|
|
33
36
|
* сервера через цепочку парсеров `GrResponseErrorBanner`.
|
|
34
37
|
*/
|
|
35
38
|
const active = computed(() => dialogQueue[0] ?? null);
|
|
39
|
+
const EMPTY_DEFAULTS = Object.freeze({});
|
|
40
|
+
provide(GR_CONFIG_KEY, {
|
|
41
|
+
size: computed(() => active.value?.config?.size.value),
|
|
42
|
+
componentDefaults: computed(() => active.value?.config?.componentDefaults.value ?? EMPTY_DEFAULTS)
|
|
43
|
+
});
|
|
44
|
+
const hostI18n = resolveGranularityI18n();
|
|
45
|
+
provide(GRANULARITY_I18N_KEY, {
|
|
46
|
+
t: (key, params) => {
|
|
47
|
+
return (active.value?.i18n ?? hostI18n)?.t(key, params) ?? key;
|
|
48
|
+
},
|
|
49
|
+
get locale() {
|
|
50
|
+
return (active.value?.i18n ?? hostI18n)?.locale;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
36
53
|
const open = ref(false);
|
|
37
54
|
const loading = ref(false);
|
|
38
55
|
const currentError = shallowRef(null);
|
|
@@ -324,9 +341,10 @@ function teardownDialogService() {
|
|
|
324
341
|
container = null;
|
|
325
342
|
}
|
|
326
343
|
mounted = false;
|
|
344
|
+
cachedAppContext = null;
|
|
327
345
|
dialogQueue.splice(0, dialogQueue.length);
|
|
328
346
|
}
|
|
329
|
-
function enqueue(kind, message, options, onConfirm) {
|
|
347
|
+
function enqueue(kind, message, options, onConfirm, captured) {
|
|
330
348
|
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
349
|
ensureMounted(options.appContext ?? cachedAppContext);
|
|
332
350
|
const id = makeDialogId();
|
|
@@ -343,7 +361,9 @@ function enqueue(kind, message, options, onConfirm) {
|
|
|
343
361
|
message
|
|
344
362
|
},
|
|
345
363
|
onConfirm,
|
|
346
|
-
resolve: resolveFn
|
|
364
|
+
resolve: resolveFn,
|
|
365
|
+
config: captured.config,
|
|
366
|
+
i18n: captured.i18n
|
|
347
367
|
};
|
|
348
368
|
dialogQueue.push(request);
|
|
349
369
|
const close = () => {
|
|
@@ -388,20 +408,25 @@ function mergeErrorDefaults(defaults, options) {
|
|
|
388
408
|
function useDialogService(defaults = {}) {
|
|
389
409
|
const instance = getCurrentInstance();
|
|
390
410
|
if (instance?.appContext && !cachedAppContext) cachedAppContext = instance.appContext;
|
|
411
|
+
const capturedI18n = instance ? resolveGranularityI18n() : null;
|
|
412
|
+
const captured = {
|
|
413
|
+
config: instance ? markRaw(useGrConfig()) : null,
|
|
414
|
+
i18n: capturedI18n ? markRaw(capturedI18n) : null
|
|
415
|
+
};
|
|
391
416
|
function confirm(message, options = {}) {
|
|
392
|
-
const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
417
|
+
const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
|
|
393
418
|
return withClose(promise.then((r) => r.action === "confirm"), close);
|
|
394
419
|
}
|
|
395
420
|
function alert(message, options = {}) {
|
|
396
|
-
const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
421
|
+
const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
|
|
397
422
|
return withClose(promise.then(() => void 0), close);
|
|
398
423
|
}
|
|
399
424
|
function prompt(message, options = {}) {
|
|
400
|
-
const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
425
|
+
const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
|
|
401
426
|
return withClose(promise.then((r) => r.action === "confirm" ? r.value ?? "" : null), close);
|
|
402
427
|
}
|
|
403
428
|
function open(kind, message, options = {}) {
|
|
404
|
-
const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
429
|
+
const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
|
|
405
430
|
return withClose(promise, close);
|
|
406
431
|
}
|
|
407
432
|
function closeAll() {
|