@feugene/granularity 0.7.0 → 0.9.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 -0
- package/dist/chunks/{adapter-CRyH4YC8.js.map → adapter-BqqjEZGU.js.map} +1 -1
- package/dist/chunks/arrow-up-DZdIrpaF.js.map +1 -0
- package/dist/chunks/{config-Dkq0HeLe.js → config-3I3vqDW4.js} +1 -1
- package/dist/chunks/{config-Dkq0HeLe.js.map → config-3I3vqDW4.js.map} +1 -1
- package/dist/chunks/config-72sW9Bag2.js.map +1 -0
- package/dist/chunks/{config-B8rC_K97.js.map → config-B1kFmhpM.js.map} +1 -1
- package/dist/chunks/{config-BhvNm4Pp.js.map → config-B2YTEe_h.js.map} +1 -1
- package/dist/chunks/{config-BaMO9dQh.js → config-B61cX08u.js} +1 -1
- package/dist/chunks/{config-BaMO9dQh.js.map → config-B61cX08u.js.map} +1 -1
- package/dist/chunks/{config-C5TN9J2Z.js.map → config-BK6Odc3T.js.map} +1 -1
- package/dist/chunks/{config-C0rHS1-l.js.map → config-BOdu-O_B.js.map} +1 -1
- package/dist/chunks/{config-D27BL0H9.js.map → config-BU0olrvr.js.map} +1 -1
- package/dist/chunks/{config-XoANT5mU.js → config-BY81UKv0.js} +1 -1
- package/dist/chunks/{config-XoANT5mU.js.map → config-BY81UKv0.js.map} +1 -1
- package/dist/chunks/config-B_nSBc7W.js.map +1 -0
- package/dist/chunks/{config-DbqFk-IW.js.map → config-BbKroFtR.js.map} +1 -1
- package/dist/chunks/config-Bcf-8XlK2.js.map +1 -0
- package/dist/chunks/{config-C_AOYGBr.js.map → config-BduXEXjt.js.map} +1 -1
- package/dist/chunks/config-BeQuykDk2.js.map +1 -0
- package/dist/chunks/{config-C_-02Pu-.js.map → config-BgBWt9-A.js.map} +1 -1
- package/dist/chunks/{config-Dusr9jcE.js.map → config-BnWSHTEU.js.map} +1 -1
- package/dist/chunks/{config-C4AlNm912.js → config-Br_qI3Za.js} +1 -1
- package/dist/chunks/config-Br_qI3Za.js.map +1 -0
- package/dist/chunks/config-C6zT56Jc2.js.map +1 -0
- package/dist/chunks/{config-ZJVOVgqR.js → config-CFf7xaG1.js} +1 -1
- package/dist/chunks/{config-ZJVOVgqR.js.map → config-CFf7xaG1.js.map} +1 -1
- package/dist/chunks/{config-Cn8TG49a.js.map → config-CUwF4E4R.js.map} +1 -1
- package/dist/chunks/{config-wo-ncgTH.js.map → config-CdJpnjDj.js.map} +1 -1
- package/dist/chunks/config-CetsgpaZ2.js.map +1 -0
- package/dist/chunks/{config-D1DI3roo.js.map → config-Ci9nXGUV.js.map} +1 -1
- package/dist/chunks/{config-CjEplP6D.js.map → config-CpMYmvVT.js.map} +1 -1
- package/dist/chunks/{config-BXffa3ta.js → config-Cp_XHsze.js} +2 -2
- package/dist/chunks/{config-BXffa3ta.js.map → config-Cp_XHsze.js.map} +1 -1
- package/dist/chunks/{config-D98m8iyz.js.map → config-CvGdaXvH.js.map} +1 -1
- package/dist/chunks/{config-CtomKf-k.js.map → config-D4s_QWVP.js.map} +1 -1
- package/dist/chunks/{config-D32znLtV2.js.map → config-D6Oe3blW2.js.map} +1 -1
- package/dist/chunks/{config-CVnluhKO.js.map → config-DF_RlCIO.js.map} +1 -1
- package/dist/chunks/{config-C4qAA0Sb.js.map → config-DSBlHQVa.js.map} +1 -1
- package/dist/chunks/{config-Mp9DJ9Mq2.js.map → config-DaHI5bD_2.js.map} +1 -1
- package/dist/chunks/{config-3SftO0uG.js.map → config-Dcb7xK-C.js.map} +1 -1
- package/dist/chunks/config-DmjwIqx1.js.map +1 -0
- package/dist/chunks/{config-D6Af6WZw.js.map → config-DoBk_CzG.js.map} +1 -1
- package/dist/chunks/config-Dzd6BzIN2.js.map +1 -0
- package/dist/chunks/{config-Db4BEG8Y.js.map → config-O1_FTqD3.js.map} +1 -1
- package/dist/chunks/{config-C9AOlKah.js.map → config-V3LF-b_F.js.map} +1 -1
- package/dist/chunks/config-_3De4HFf.js.map +1 -0
- package/dist/chunks/{config-B44QVIge.js → config-d386uO3O.js} +1 -1
- package/dist/chunks/{config-B44QVIge.js.map → config-d386uO3O.js.map} +1 -1
- package/dist/chunks/{config-DudL02ag.js.map → config-iuMz79Mg.js.map} +1 -1
- package/dist/chunks/{config-DJWf0kWe.js.map → config-vcDVCYXo.js.map} +1 -1
- package/dist/chunks/{en-QNZhjmSJ.js.map → en-foQA8imU.js.map} +1 -1
- package/dist/chunks/{es-CKLPuE0h.js → es-Bx3Kuy6z.js} +3 -3
- package/dist/chunks/{es-CKLPuE0h.js.map → es-Bx3Kuy6z.js.map} +1 -1
- package/dist/chunks/{es-C1c5XsIK.js.map → es-DZFSojYL.js.map} +1 -1
- package/dist/chunks/{fileValidation-CwJA8Vmn.js.map → fileValidation-c_iBg74s.js.map} +1 -1
- package/dist/chunks/{grBadgeStyles-pqqbVgLk.js → grBadgeStyles-Cq0hH2Ls.js} +7 -5
- package/dist/chunks/grBadgeStyles-Cq0hH2Ls.js.map +1 -0
- package/dist/chunks/{grButtonStyles-BxZW2x0-.js.map → grButtonStyles-DKuXUemw.js.map} +1 -1
- package/dist/chunks/{grDropdownStyles-DMp7RrI9.js.map → grDropdownStyles-B41mVR1H.js.map} +1 -1
- package/dist/chunks/{grLoadingStyles-CrxZHFL0.js.map → grLoadingStyles-DmI-SJ3i.js.map} +1 -1
- package/dist/chunks/{grSelectStyles-DTAYNzxn.js.map → grSelectStyles-pUt19VGy.js.map} +1 -1
- package/dist/chunks/{grStyle-5EMYYctb.js.map → grStyle-CUaTmpyW.js.map} +1 -1
- package/dist/chunks/{granularityI18n-CXa_uN7f.js → granularityI18n-LcJ88Vce.js} +1 -1
- package/dist/chunks/{granularityI18n-CXa_uN7f.js.map → granularityI18n-LcJ88Vce.js.map} +1 -1
- package/dist/chunks/loader-circle-BUntgosj.js.map +1 -0
- package/dist/chunks/{ru-DcF7ciz0.js.map → ru-LhkPpPIl.js.map} +1 -1
- package/dist/chunks/{safelist-BY7z8fOl.js → safelist-DccvJqCE.js} +1 -1
- package/dist/chunks/{safelist-BY7z8fOl.js.map → safelist-DccvJqCE.js.map} +1 -1
- package/dist/chunks/safelist-_UVzJrgE2.js.map +1 -0
- package/dist/chunks/{shared-BkIIEolF.js → shared-D24hqkyM.js} +42 -42
- package/dist/chunks/{shared-BkIIEolF.js.map → shared-D24hqkyM.js.map} +1 -1
- package/dist/components/GrBadge/chunks/GrBadge-Cs_cVfuO.js +36 -0
- package/dist/components/GrBadge/chunks/GrBadge-Cs_cVfuO.js.map +1 -0
- package/dist/components/GrBadge/index.js +2 -2
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CxtamOZ-.js.map → GrBadgeWrap-BEnE9DyJ.js.map} +1 -1
- package/dist/components/GrBadgeWrap/index.js +2 -2
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-CsmQ7mTJ.js.map → GrBottomNav-XPHwd7UQ.js.map} +1 -1
- package/dist/components/GrBottomNav/index.js +2 -2
- package/dist/components/GrButton/chunks/{GrButton-BmGdp8-4.js → GrButton-CPDKonoB.js} +2 -2
- package/dist/components/GrButton/chunks/{GrButton-BmGdp8-4.js.map → GrButton-CPDKonoB.js.map} +1 -1
- package/dist/components/GrButton/index.js +4 -4
- package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CBj4tpms.js.map → GrButtonGroup-CPOH6V-P.js.map} +1 -1
- package/dist/components/GrButtonGroup/index.js +2 -2
- package/dist/components/GrCard/chunks/{GrCard-xtDcXBr7.js → GrCard-6yk1RRAQ.js} +1 -1
- package/dist/components/GrCard/chunks/{GrCard-xtDcXBr7.js.map → GrCard-6yk1RRAQ.js.map} +1 -1
- package/dist/components/GrCard/index.js +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-HU20VTVn.js → GrCollapse-CU94BTAR.js} +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-HU20VTVn.js.map → GrCollapse-CU94BTAR.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +1 -1
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-DjGOX9Hd.js → GrConfirmDialog-BGmyfDd2.js} +32 -9
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-BGmyfDd2.js.map +1 -0
- package/dist/components/GrConfirmDialog/index.js +2 -2
- package/dist/components/GrDataTable/chunks/{GrDataTable-QDOJWmdY.js → GrDataTable-ClcYiyc8.js} +2 -2
- package/dist/components/GrDataTable/chunks/{GrDataTable-QDOJWmdY.js.map → GrDataTable-ClcYiyc8.js.map} +1 -1
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-gObmaVEl.js → GrDialog-Ba3Ojcsq.js} +1 -1
- package/dist/components/GrDialog/chunks/{GrDialog-gObmaVEl.js.map → GrDialog-Ba3Ojcsq.js.map} +1 -1
- package/dist/components/GrDialog/index.js +2 -2
- package/dist/components/GrDrawer/chunks/{GrDrawer-BJL_gTxI.js → GrDrawer-BW3wtI7h.js} +2 -2
- package/dist/components/GrDrawer/chunks/{GrDrawer-BJL_gTxI.js.map → GrDrawer-BW3wtI7h.js.map} +1 -1
- package/dist/components/GrDrawer/index.js +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-BkACCXdp.js → GrDropdown-DOvHKnih.js} +1 -1
- package/dist/components/GrDropdown/chunks/{GrDropdown-BkACCXdp.js.map → GrDropdown-DOvHKnih.js.map} +1 -1
- package/dist/components/GrDropdown/index.js +2 -2
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-BEenXrJw.js → GrDropdownMenu-CLPwbiyG.js} +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-BEenXrJw.js.map → GrDropdownMenu-CLPwbiyG.js.map} +1 -1
- package/dist/components/GrDropdownMenu/index.js +2 -2
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-BLbMJFW-.js.map → GrEmptyState-Dj2V5GaX.js.map} +1 -1
- package/dist/components/GrEmptyState/index.js +2 -2
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-DYRERhI2.js → GrFileUpload-BEKNB1RM.js} +5 -5
- package/dist/components/GrFileUpload/chunks/GrFileUpload-BEKNB1RM.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +3 -3
- package/dist/components/GrFormField/chunks/{GrFormField-C1oWTT_0.js.map → GrFormField-U7c_aDPJ.js.map} +1 -1
- package/dist/components/GrFormField/index.js +2 -2
- package/dist/components/GrFormFile/chunks/{GrFormFile-deDPicM2.js → GrFormFile-CIleXnfr.js} +3 -3
- package/dist/components/GrFormFile/chunks/{GrFormFile-deDPicM2.js.map → GrFormFile-CIleXnfr.js.map} +1 -1
- package/dist/components/GrFormFile/index.js +2 -2
- package/dist/components/GrFormSection/chunks/{GrFormSection-CWBk2EUm.js.map → GrFormSection-DpGhY7MX.js.map} +1 -1
- package/dist/components/GrFormSection/index.js +2 -2
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-Cpj5zyZQ.js.map → GrImageViewer-Cn1X-sWS.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +2 -2
- package/dist/components/GrInput/chunks/{GrInput-CfO2RsM-.js.map → GrInput-gwFQ1sk4.js.map} +1 -1
- package/dist/components/GrInput/index.js +2 -2
- package/dist/components/GrInputTag/chunks/{GrInputTag-G_VYJPF9.js → GrInputTag-Dcj3F6rQ.js} +2 -2
- package/dist/components/GrInputTag/chunks/{GrInputTag-G_VYJPF9.js.map → GrInputTag-Dcj3F6rQ.js.map} +1 -1
- package/dist/components/GrInputTag/index.js +2 -2
- package/dist/components/GrLink/chunks/{GrLink-BLPigqij.js → GrLink-BMwn2iJ9.js} +1 -1
- package/dist/components/GrLink/chunks/{GrLink-BLPigqij.js.map → GrLink-BMwn2iJ9.js.map} +1 -1
- package/dist/components/GrLink/index.js +2 -2
- package/dist/components/GrList/chunks/{GrList-BPjQf-72.js → GrList-D8nM1FuV.js} +1 -1
- package/dist/components/GrList/chunks/{GrList-BPjQf-72.js.map → GrList-D8nM1FuV.js.map} +1 -1
- package/dist/components/GrList/index.js +2 -2
- package/dist/components/GrLoading/chunks/{GrLoading-C3QZKwE-.js → GrLoading-mfyfghxs.js} +2 -2
- package/dist/components/GrLoading/chunks/{GrLoading-C3QZKwE-.js.map → GrLoading-mfyfghxs.js.map} +1 -1
- package/dist/components/GrLoading/index.js +2 -2
- package/dist/components/GrModal/index.js +1 -1
- package/dist/components/GrNavbar/chunks/{GrNavbar-BoVuSZ-V.js → GrNavbar-BH7XiF9q.js} +2 -2
- package/dist/components/GrNavbar/chunks/{GrNavbar-BoVuSZ-V.js.map → GrNavbar-BH7XiF9q.js.map} +1 -1
- package/dist/components/GrNavbar/index.js +2 -2
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-ECtFCIKV.js → GrNumberInput-YIWhV85S.js} +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-ECtFCIKV.js.map → GrNumberInput-YIWhV85S.js.map} +1 -1
- package/dist/components/GrNumberInput/index.js +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-DW44c2-a.js → GrPagination-cD6rFO9W.js} +3 -3
- package/dist/components/GrPagination/chunks/{GrPagination-DW44c2-a.js.map → GrPagination-cD6rFO9W.js.map} +1 -1
- package/dist/components/GrPagination/index.js +2 -2
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-hQQK8cYh.js → GrProgressBar-C2HdYjp4.js} +1 -1
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-hQQK8cYh.js.map → GrProgressBar-C2HdYjp4.js.map} +1 -1
- package/dist/components/GrProgressBar/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-CUMW6_58.js → GrPromptDialog-Du1aLfcA.js} +55 -29
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-Du1aLfcA.js.map +1 -0
- package/dist/components/GrPromptDialog/index.js +2 -2
- package/dist/components/GrRadio/chunks/{GrRadio-B_t_ZNVl.js → GrRadio-IFU9Hiu2.js} +1 -1
- package/dist/components/GrRadio/chunks/{GrRadio-B_t_ZNVl.js.map → GrRadio-IFU9Hiu2.js.map} +1 -1
- package/dist/components/GrRadio/index.js +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CVlgpUBr.js → GrRadioGroup-C8IcJuuF.js} +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-CVlgpUBr.js.map → GrRadioGroup-C8IcJuuF.js.map} +1 -1
- package/dist/components/GrRadioGroup/index.js +2 -2
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BMvXREcv.js +221 -0
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BMvXREcv.js.map +1 -0
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CzdTh4gd.js +782 -0
- package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CzdTh4gd.js.map +1 -0
- package/dist/components/GrResponseErrorBanner/index.js +3 -0
- package/dist/components/GrSegmented/chunks/{GrSegmented-BPl1koHc.js → GrSegmented-BRmwBsEG.js} +1 -1
- package/dist/components/GrSegmented/chunks/{GrSegmented-BPl1koHc.js.map → GrSegmented-BRmwBsEG.js.map} +1 -1
- package/dist/components/GrSegmented/index.js +2 -2
- package/dist/components/GrSelect/chunks/{GrSelect-C3NAfTqL.js → GrSelect-W9lbAjRZ.js} +2 -2
- package/dist/components/GrSelect/chunks/{GrSelect-C3NAfTqL.js.map → GrSelect-W9lbAjRZ.js.map} +1 -1
- package/dist/components/GrSelect/index.js +2 -2
- package/dist/components/GrSidebar/chunks/{GrSidebar-DVucgcfV.js.map → GrSidebar-BpBtAGBs.js.map} +1 -1
- package/dist/components/GrSidebar/index.js +2 -2
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-CDTvCSoH.js.map → GrSkeleton-URyMkBqI.js.map} +1 -1
- package/dist/components/GrSkeleton/index.js +2 -2
- package/dist/components/GrSwitch/chunks/{GrSwitch-Bnamgqb2.js → GrSwitch-29h0QhMO.js} +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-Bnamgqb2.js.map → GrSwitch-29h0QhMO.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +2 -2
- package/dist/components/GrTable/chunks/{GrTable-CyQ9uw8A.js.map → GrTable-dTWUxzRm.js.map} +1 -1
- package/dist/components/GrTable/index.js +2 -2
- package/dist/components/GrTabs/chunks/{GrTabs-CiGmcmvm.js.map → GrTabs-D3ntDdtg.js.map} +1 -1
- package/dist/components/GrTabs/index.js +2 -2
- package/dist/components/GrTextarea/chunks/{GrTextarea-VBSc6A7D.js → GrTextarea-Cv6r2GuC.js} +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-VBSc6A7D.js.map → GrTextarea-Cv6r2GuC.js.map} +1 -1
- package/dist/components/GrTextarea/index.js +2 -2
- package/dist/components/GrToaster/chunks/{GrToaster-I1e-zCpf.js → GrToaster-DluJmR5D.js} +2 -2
- package/dist/components/GrToaster/chunks/{GrToaster-I1e-zCpf.js.map → GrToaster-DluJmR5D.js.map} +1 -1
- package/dist/components/GrToaster/index.js +2 -2
- package/dist/components/GrTooltip/chunks/{GrTooltip-CrV1gI_c.js.map → GrTooltip-B7I1AVIC.js.map} +1 -1
- package/dist/components/GrTooltip/index.js +2 -2
- package/dist/components/GrTree/chunks/{GrTree-Dlev9oBd.js → GrTree-B2SMU5Py.js} +1 -1
- package/dist/components/GrTree/chunks/{GrTree-Dlev9oBd.js.map → GrTree-B2SMU5Py.js.map} +1 -1
- package/dist/components/GrTree/index.js +2 -2
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DkAIksRW.js → GrTreeSelect-C1abr5uH.js} +4 -4
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DkAIksRW.js.map → GrTreeSelect-C1abr5uH.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +2 -2
- package/dist/directives/dropzone.js +1 -1
- package/dist/directives/loading.js +1 -1
- package/dist/fileValidation/index.js +1 -1
- package/dist/granular-provider-node.js +3 -3
- package/dist/granular-provider.js +1 -1
- package/dist/i18n/all.js +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/index.js +486 -1027
- package/dist/index.js.map +1 -1
- package/dist/types/src/components/GrBadge/grBadgeStyles.d.ts +1 -1
- package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +35 -2
- package/dist/types/src/components/GrDialogService/GrDialogServiceHost.vue.d.ts +3 -0
- package/dist/types/src/components/GrDialogService/config.d.ts +1 -0
- package/dist/types/src/components/GrDialogService/index.d.ts +4 -0
- package/dist/types/src/components/GrDialogService/store.d.ts +22 -0
- package/dist/types/src/components/GrDialogService/types.d.ts +141 -0
- package/dist/types/src/components/GrDialogService/useDialogService.d.ts +13 -0
- package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +3 -3
- package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +2 -2
- package/dist/types/src/components/GrInput/GrInput.vue.d.ts +3 -3
- package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +1 -1
- package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +4 -4
- package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +41 -2
- package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +1 -1
- package/dist/types/src/components/GrResponseErrorBanner/index.d.ts +2 -2
- package/dist/types/src/components/GrResponseErrorBanner/parsers/createResponseErrorClassifier.d.ts +27 -0
- package/dist/types/src/components/GrResponseErrorBanner/parsers/index.d.ts +2 -2
- package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +1 -1
- package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +2 -2
- package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/package.json +5 -1
- package/dist/chunks/arrow-up-DNXrMoAI.js.map +0 -1
- package/dist/chunks/config-C0b_3LJV.js.map +0 -1
- package/dist/chunks/config-C4AlNm912.js.map +0 -1
- package/dist/chunks/config-CxCAfXZ1.js.map +0 -1
- package/dist/chunks/config-DDEWvph-2.js.map +0 -1
- package/dist/chunks/config-DDLoUczC.js.map +0 -1
- package/dist/chunks/config-DQOSlWvp.js.map +0 -1
- package/dist/chunks/config-DnsISjD8.js.map +0 -1
- package/dist/chunks/config-DxqMXzNV2.js.map +0 -1
- package/dist/chunks/config-DxqpV-KM.js.map +0 -1
- package/dist/chunks/config-rxFL-6yF2.js.map +0 -1
- package/dist/chunks/grBadgeStyles-pqqbVgLk.js.map +0 -1
- package/dist/chunks/loader-circle-B2rWDk5u.js.map +0 -1
- package/dist/chunks/safelist-BF822K15.js.map +0 -1
- package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js +0 -32
- package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js.map +0 -1
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js.map +0 -1
- package/dist/components/GrFileUpload/chunks/GrFileUpload-DYRERhI2.js.map +0 -1
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-CUMW6_58.js.map +0 -1
- /package/dist/chunks/{_plugin-vue_export-helper-BG_EqiDU.js → _plugin-vue_export-helper-DQR7Sy7Q.js} +0 -0
- /package/dist/chunks/{adapter-CRyH4YC8.js → adapter-BqqjEZGU.js} +0 -0
- /package/dist/chunks/{arrow-up-DNXrMoAI.js → arrow-up-DZdIrpaF.js} +0 -0
- /package/dist/chunks/{config-C0b_3LJV.js → config-72sW9Bag2.js} +0 -0
- /package/dist/chunks/{config-B8rC_K97.js → config-B1kFmhpM.js} +0 -0
- /package/dist/chunks/{config-BhvNm4Pp.js → config-B2YTEe_h.js} +0 -0
- /package/dist/chunks/{config-C5TN9J2Z.js → config-BK6Odc3T.js} +0 -0
- /package/dist/chunks/{config-C0rHS1-l.js → config-BOdu-O_B.js} +0 -0
- /package/dist/chunks/{config-D27BL0H9.js → config-BU0olrvr.js} +0 -0
- /package/dist/chunks/{config-DxqMXzNV2.js → config-B_nSBc7W.js} +0 -0
- /package/dist/chunks/{config-DbqFk-IW.js → config-BbKroFtR.js} +0 -0
- /package/dist/chunks/{config-DQOSlWvp.js → config-Bcf-8XlK2.js} +0 -0
- /package/dist/chunks/{config-C_AOYGBr.js → config-BduXEXjt.js} +0 -0
- /package/dist/chunks/{config-DnsISjD8.js → config-BeQuykDk2.js} +0 -0
- /package/dist/chunks/{config-C_-02Pu-.js → config-BgBWt9-A.js} +0 -0
- /package/dist/chunks/{config-Dusr9jcE.js → config-BnWSHTEU.js} +0 -0
- /package/dist/chunks/{config-DxqpV-KM.js → config-C6zT56Jc2.js} +0 -0
- /package/dist/chunks/{config-Cn8TG49a.js → config-CUwF4E4R.js} +0 -0
- /package/dist/chunks/{config-wo-ncgTH.js → config-CdJpnjDj.js} +0 -0
- /package/dist/chunks/{config-CxCAfXZ1.js → config-CetsgpaZ2.js} +0 -0
- /package/dist/chunks/{config-D1DI3roo.js → config-Ci9nXGUV.js} +0 -0
- /package/dist/chunks/{config-CjEplP6D.js → config-CpMYmvVT.js} +0 -0
- /package/dist/chunks/{config-D98m8iyz.js → config-CvGdaXvH.js} +0 -0
- /package/dist/chunks/{config-CtomKf-k.js → config-D4s_QWVP.js} +0 -0
- /package/dist/chunks/{config-D32znLtV2.js → config-D6Oe3blW2.js} +0 -0
- /package/dist/chunks/{config-CVnluhKO.js → config-DF_RlCIO.js} +0 -0
- /package/dist/chunks/{config-C4qAA0Sb.js → config-DSBlHQVa.js} +0 -0
- /package/dist/chunks/{config-Mp9DJ9Mq2.js → config-DaHI5bD_2.js} +0 -0
- /package/dist/chunks/{config-3SftO0uG.js → config-Dcb7xK-C.js} +0 -0
- /package/dist/chunks/{config-DDEWvph-2.js → config-DmjwIqx1.js} +0 -0
- /package/dist/chunks/{config-D6Af6WZw.js → config-DoBk_CzG.js} +0 -0
- /package/dist/chunks/{config-DDLoUczC.js → config-Dzd6BzIN2.js} +0 -0
- /package/dist/chunks/{config-Db4BEG8Y.js → config-O1_FTqD3.js} +0 -0
- /package/dist/chunks/{config-C9AOlKah.js → config-V3LF-b_F.js} +0 -0
- /package/dist/chunks/{config-rxFL-6yF2.js → config-_3De4HFf.js} +0 -0
- /package/dist/chunks/{config-DudL02ag.js → config-iuMz79Mg.js} +0 -0
- /package/dist/chunks/{config-DJWf0kWe.js → config-vcDVCYXo.js} +0 -0
- /package/dist/chunks/{en-QNZhjmSJ.js → en-foQA8imU.js} +0 -0
- /package/dist/chunks/{es-C1c5XsIK.js → es-DZFSojYL.js} +0 -0
- /package/dist/chunks/{fileValidation-CwJA8Vmn.js → fileValidation-c_iBg74s.js} +0 -0
- /package/dist/chunks/{grButtonStyles-BxZW2x0-.js → grButtonStyles-DKuXUemw.js} +0 -0
- /package/dist/chunks/{grDropdownStyles-DMp7RrI9.js → grDropdownStyles-B41mVR1H.js} +0 -0
- /package/dist/chunks/{grLoadingStyles-CrxZHFL0.js → grLoadingStyles-DmI-SJ3i.js} +0 -0
- /package/dist/chunks/{grSelectStyles-DTAYNzxn.js → grSelectStyles-pUt19VGy.js} +0 -0
- /package/dist/chunks/{grStyle-5EMYYctb.js → grStyle-CUaTmpyW.js} +0 -0
- /package/dist/chunks/{loader-circle-B2rWDk5u.js → loader-circle-BUntgosj.js} +0 -0
- /package/dist/chunks/{ru-DcF7ciz0.js → ru-LhkPpPIl.js} +0 -0
- /package/dist/chunks/{safelist-BF822K15.js → safelist-_UVzJrgE2.js} +0 -0
- /package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CxtamOZ-.js → GrBadgeWrap-BEnE9DyJ.js} +0 -0
- /package/dist/components/GrBottomNav/chunks/{GrBottomNav-CsmQ7mTJ.js → GrBottomNav-XPHwd7UQ.js} +0 -0
- /package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CBj4tpms.js → GrButtonGroup-CPOH6V-P.js} +0 -0
- /package/dist/components/GrEmptyState/chunks/{GrEmptyState-BLbMJFW-.js → GrEmptyState-Dj2V5GaX.js} +0 -0
- /package/dist/components/GrFormField/chunks/{GrFormField-C1oWTT_0.js → GrFormField-U7c_aDPJ.js} +0 -0
- /package/dist/components/GrFormSection/chunks/{GrFormSection-CWBk2EUm.js → GrFormSection-DpGhY7MX.js} +0 -0
- /package/dist/components/GrImageViewer/chunks/{GrImageViewer-Cpj5zyZQ.js → GrImageViewer-Cn1X-sWS.js} +0 -0
- /package/dist/components/GrInput/chunks/{GrInput-CfO2RsM-.js → GrInput-gwFQ1sk4.js} +0 -0
- /package/dist/components/GrSidebar/chunks/{GrSidebar-DVucgcfV.js → GrSidebar-BpBtAGBs.js} +0 -0
- /package/dist/components/GrSkeleton/chunks/{GrSkeleton-CDTvCSoH.js → GrSkeleton-URyMkBqI.js} +0 -0
- /package/dist/components/GrTable/chunks/{GrTable-CyQ9uw8A.js → GrTable-dTWUxzRm.js} +0 -0
- /package/dist/components/GrTabs/chunks/{GrTabs-CiGmcmvm.js → GrTabs-D3ntDdtg.js} +0 -0
- /package/dist/components/GrTooltip/chunks/{GrTooltip-CrV1gI_c.js → GrTooltip-B7I1AVIC.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,1095 +1,554 @@
|
|
|
1
1
|
import { t as GrAlert_default } from "./components/GrAlert/chunks/GrAlert-HyCjYJeL.js";
|
|
2
2
|
import { t as grAlertConfig } from "./chunks/config-BV4vBzdm.js";
|
|
3
|
+
import "./components/GrAlert/index.js";
|
|
3
4
|
import { n as grAvatarSafelist, t as grAvatarConfig } from "./chunks/config-CU_CBd0k.js";
|
|
4
5
|
import { t as GrAvatar_default } from "./components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js";
|
|
5
|
-
import { t as GrBadge_default } from "./components/GrBadge/chunks/GrBadge-
|
|
6
|
-
import { n as grBadgeSafelist, t as grBadgeConfig } from "./chunks/config-
|
|
6
|
+
import { t as GrBadge_default } from "./components/GrBadge/chunks/GrBadge-Cs_cVfuO.js";
|
|
7
|
+
import { n as grBadgeSafelist, t as grBadgeConfig } from "./chunks/config-B61cX08u.js";
|
|
7
8
|
import "./components/GrBadge/index.js";
|
|
8
|
-
import { t as GrBadgeWrap_default } from "./components/GrBadgeWrap/chunks/GrBadgeWrap-
|
|
9
|
-
import { t as grBadgeWrapConfig } from "./chunks/config-
|
|
10
|
-
import { t as GrBottomNav_default } from "./components/GrBottomNav/chunks/GrBottomNav-
|
|
11
|
-
import { t as grBottomNavConfig } from "./chunks/config-
|
|
12
|
-
import { r as grButtonClass } from "./chunks/grButtonStyles-
|
|
13
|
-
import { t as GrButton_default } from "./components/GrButton/chunks/GrButton-
|
|
14
|
-
import { n as grButtonSafelist, t as grButtonClassTokens } from "./chunks/safelist-
|
|
15
|
-
import { t as grButtonConfig } from "./chunks/config-
|
|
16
|
-
import { t as GrButtonGroup_default } from "./components/GrButtonGroup/chunks/GrButtonGroup-
|
|
17
|
-
import { t as grButtonGroupConfig } from "./chunks/config-
|
|
9
|
+
import { t as GrBadgeWrap_default } from "./components/GrBadgeWrap/chunks/GrBadgeWrap-BEnE9DyJ.js";
|
|
10
|
+
import { t as grBadgeWrapConfig } from "./chunks/config-V3LF-b_F.js";
|
|
11
|
+
import { t as GrBottomNav_default } from "./components/GrBottomNav/chunks/GrBottomNav-XPHwd7UQ.js";
|
|
12
|
+
import { t as grBottomNavConfig } from "./chunks/config-BgBWt9-A.js";
|
|
13
|
+
import { r as grButtonClass } from "./chunks/grButtonStyles-DKuXUemw.js";
|
|
14
|
+
import { t as GrButton_default } from "./components/GrButton/chunks/GrButton-CPDKonoB.js";
|
|
15
|
+
import { n as grButtonSafelist, t as grButtonClassTokens } from "./chunks/safelist-DccvJqCE.js";
|
|
16
|
+
import { t as grButtonConfig } from "./chunks/config-3I3vqDW4.js";
|
|
17
|
+
import { t as GrButtonGroup_default } from "./components/GrButtonGroup/chunks/GrButtonGroup-CPOH6V-P.js";
|
|
18
|
+
import { t as grButtonGroupConfig } from "./chunks/config-CUwF4E4R.js";
|
|
18
19
|
import "./components/GrButtonGroup/index.js";
|
|
19
|
-
import { t as GrCard_default } from "./components/GrCard/chunks/GrCard-
|
|
20
|
+
import { t as GrCard_default } from "./components/GrCard/chunks/GrCard-6yk1RRAQ.js";
|
|
20
21
|
import { t as grCardConfig } from "./chunks/config-ChQxl75m.js";
|
|
21
22
|
import { t as GrCheckbox_default } from "./components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js";
|
|
22
23
|
import { t as grCheckboxConfig } from "./chunks/config-C9MblwGq.js";
|
|
23
|
-
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./components/GrCollapse/chunks/GrCollapse-
|
|
24
|
+
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./components/GrCollapse/chunks/GrCollapse-CU94BTAR.js";
|
|
24
25
|
import { t as GrIcon_default } from "./components/GrIcon/chunks/GrIcon-BV7RBU_0.js";
|
|
25
26
|
import { t as grIconConfig } from "./chunks/config-DbghHyY_.js";
|
|
26
27
|
import { t as grCollapseConfig } from "./chunks/config-D5ek7VSi.js";
|
|
27
28
|
import { t as getGrModalPanelClass } from "./chunks/grModalStyles-Dv2NXBKi.js";
|
|
28
29
|
import { t as GrModal_default } from "./components/GrModal/chunks/GrModal-gvfvlp7k.js";
|
|
29
30
|
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-BtXUk6Zc.js";
|
|
30
|
-
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./components/GrDialog/chunks/GrDialog-
|
|
31
|
-
import { t as
|
|
32
|
-
import { t as
|
|
33
|
-
import { t as
|
|
34
|
-
import { t as
|
|
35
|
-
import { t as
|
|
36
|
-
import { t as
|
|
31
|
+
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./components/GrDialog/chunks/GrDialog-Ba3Ojcsq.js";
|
|
32
|
+
import { _ as DEFAULT_AUTO_HIDE_KINDS, a as extendDefaultParsers, c as problemDetailsParser, d as networkErrorParser, f as laravelValidationParser, g as abortErrorParser, h as fileValidationParser, i as defaultResponseErrorParsers, l as plainMessageParser, m as httpStatusParser, n as coreResponseErrorParsers, o as resolveResponseErrorTitle, p as jsonApiErrorParser, r as createResponseErrorClassifier, s as responseErrorParserPresets, t as GrResponseErrorBanner_default, u as normalizeError, v as DEFAULT_RESPONSE_ERROR_TEXTS, y as DEFAULT_TONE_BY_KIND } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-CzdTh4gd.js";
|
|
33
|
+
import { t as GrConfirmDialog_default } from "./components/GrConfirmDialog/chunks/GrConfirmDialog-BGmyfDd2.js";
|
|
34
|
+
import { t as grConfirmDialogConfig } from "./chunks/config-BduXEXjt.js";
|
|
35
|
+
import { t as GrTable_default } from "./components/GrTable/chunks/GrTable-dTWUxzRm.js";
|
|
36
|
+
import { t as GrDataTable_default } from "./components/GrDataTable/chunks/GrDataTable-ClcYiyc8.js";
|
|
37
|
+
import { t as grDataTableConfig } from "./chunks/config-vcDVCYXo.js";
|
|
38
|
+
import { t as grDialogSafelist } from "./chunks/safelist-_UVzJrgE2.js";
|
|
37
39
|
import "./components/GrDialog/index.js";
|
|
38
|
-
import {
|
|
39
|
-
import { t as
|
|
40
|
+
import { t as GrFormField_default } from "./components/GrFormField/chunks/GrFormField-U7c_aDPJ.js";
|
|
41
|
+
import { t as GrInput_default } from "./components/GrInput/chunks/GrInput-gwFQ1sk4.js";
|
|
42
|
+
import { t as GrPromptDialog_default } from "./components/GrPromptDialog/chunks/GrPromptDialog-Du1aLfcA.js";
|
|
43
|
+
import { n as GrFormErrorBanner_default, r as GrUploadErrorBanner_default, t as useResponseError } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BMvXREcv.js";
|
|
44
|
+
import { n as grDrawerSafelist, t as grDrawerConfig } from "./chunks/config-C6zT56Jc2.js";
|
|
45
|
+
import { t as GrDrawer_default } from "./components/GrDrawer/chunks/GrDrawer-BW3wtI7h.js";
|
|
40
46
|
import { vAutofocus } from "./directives/autofocus.js";
|
|
41
47
|
import { vAutosize } from "./directives/autosize.js";
|
|
42
48
|
import { vClickOutside } from "./directives/clickOutside.js";
|
|
43
|
-
import { a as allowedExtensionsValidator, c as normalizeFiles, i as allowedMimeTypesValidator, l as runFileValidators, n as maxSizeMbValidator, o as acceptValidator, r as maxFileSizeBytesValidator, s as matchAccept, t as maxTotalSizeBytesValidator, u as FileValidationError } from "./chunks/fileValidation-
|
|
49
|
+
import { a as allowedExtensionsValidator, c as normalizeFiles, i as allowedMimeTypesValidator, l as runFileValidators, n as maxSizeMbValidator, o as acceptValidator, r as maxFileSizeBytesValidator, s as matchAccept, t as maxTotalSizeBytesValidator, u as FileValidationError } from "./chunks/fileValidation-c_iBg74s.js";
|
|
44
50
|
import { vDropzone } from "./directives/dropzone.js";
|
|
45
51
|
import { vHotkey } from "./directives/hotkey.js";
|
|
46
|
-
import { t as GrLoading_default } from "./components/GrLoading/chunks/GrLoading-
|
|
52
|
+
import { t as GrLoading_default } from "./components/GrLoading/chunks/GrLoading-mfyfghxs.js";
|
|
47
53
|
import { createLoading, vLoading } from "./directives/loading.js";
|
|
48
|
-
import { t as GrDropdown_default } from "./components/GrDropdown/chunks/GrDropdown-
|
|
49
|
-
import { n as grDropdownSafelist, t as grDropdownConfig } from "./chunks/config-
|
|
54
|
+
import { t as GrDropdown_default } from "./components/GrDropdown/chunks/GrDropdown-DOvHKnih.js";
|
|
55
|
+
import { n as grDropdownSafelist, t as grDropdownConfig } from "./chunks/config-Br_qI3Za.js";
|
|
50
56
|
import "./components/GrDropdown/index.js";
|
|
51
|
-
import { a as GrDropdownMenuColumns_default, c as GrDropdownMenuList_default, i as GrDropdownMenuDivider_default, n as GrDropdownMenuGroup_default, o as GrDropdownMenuColumn_default, r as GrDropdownMenuHeader_default, s as GrDropdownMenu_default, t as GrDropdownMenuItem_default } from "./components/GrDropdownMenu/chunks/GrDropdownMenu-
|
|
52
|
-
import { t as grDropdownMenuConfig } from "./chunks/config-
|
|
53
|
-
import { t as GrEmptyState_default } from "./components/GrEmptyState/chunks/GrEmptyState-
|
|
54
|
-
import { t as grEmptyStateConfig } from "./chunks/config-
|
|
55
|
-
import { t as GrProgressBar_default } from "./components/GrProgressBar/chunks/GrProgressBar-
|
|
56
|
-
import { i as GrUploadHttpError, n as GR_UPLOAD_STATE_IDLE, r as GrUploadAbortError, t as GrFileUpload_default } from "./components/GrFileUpload/chunks/GrFileUpload-
|
|
57
|
-
import { t as grFileUploadConfig } from "./chunks/config-
|
|
58
|
-
import { t as
|
|
59
|
-
import { t as grFormFieldConfig } from "./chunks/config-3SftO0uG.js";
|
|
57
|
+
import { a as GrDropdownMenuColumns_default, c as GrDropdownMenuList_default, i as GrDropdownMenuDivider_default, n as GrDropdownMenuGroup_default, o as GrDropdownMenuColumn_default, r as GrDropdownMenuHeader_default, s as GrDropdownMenu_default, t as GrDropdownMenuItem_default } from "./components/GrDropdownMenu/chunks/GrDropdownMenu-CLPwbiyG.js";
|
|
58
|
+
import { t as grDropdownMenuConfig } from "./chunks/config-DmjwIqx1.js";
|
|
59
|
+
import { t as GrEmptyState_default } from "./components/GrEmptyState/chunks/GrEmptyState-Dj2V5GaX.js";
|
|
60
|
+
import { t as grEmptyStateConfig } from "./chunks/config-O1_FTqD3.js";
|
|
61
|
+
import { t as GrProgressBar_default } from "./components/GrProgressBar/chunks/GrProgressBar-C2HdYjp4.js";
|
|
62
|
+
import { i as GrUploadHttpError, n as GR_UPLOAD_STATE_IDLE, r as GrUploadAbortError, t as GrFileUpload_default } from "./components/GrFileUpload/chunks/GrFileUpload-BEKNB1RM.js";
|
|
63
|
+
import { t as grFileUploadConfig } from "./chunks/config-DF_RlCIO.js";
|
|
64
|
+
import { t as grFormFieldConfig } from "./chunks/config-Dcb7xK-C.js";
|
|
60
65
|
import "./components/GrFormField/index.js";
|
|
61
|
-
import { t as GrFormFile_default } from "./components/GrFormFile/chunks/GrFormFile-
|
|
62
|
-
import { t as grFormFileConfig } from "./chunks/config-
|
|
63
|
-
import { t as GrFormSection_default } from "./components/GrFormSection/chunks/GrFormSection-
|
|
64
|
-
import { t as grFormSectionConfig } from "./chunks/config-
|
|
65
|
-
import { t as GrImageViewer_default } from "./components/GrImageViewer/chunks/GrImageViewer-
|
|
66
|
-
import { t as grImageViewerConfig } from "./chunks/config-
|
|
67
|
-
import { t as
|
|
68
|
-
import { n as grInputSafelist, t as grInputConfig } from "./chunks/config-CtomKf-k.js";
|
|
66
|
+
import { t as GrFormFile_default } from "./components/GrFormFile/chunks/GrFormFile-CIleXnfr.js";
|
|
67
|
+
import { t as grFormFileConfig } from "./chunks/config-BbKroFtR.js";
|
|
68
|
+
import { t as GrFormSection_default } from "./components/GrFormSection/chunks/GrFormSection-DpGhY7MX.js";
|
|
69
|
+
import { t as grFormSectionConfig } from "./chunks/config-DoBk_CzG.js";
|
|
70
|
+
import { t as GrImageViewer_default } from "./components/GrImageViewer/chunks/GrImageViewer-Cn1X-sWS.js";
|
|
71
|
+
import { t as grImageViewerConfig } from "./chunks/config-CvGdaXvH.js";
|
|
72
|
+
import { n as grInputSafelist, t as grInputConfig } from "./chunks/config-D4s_QWVP.js";
|
|
69
73
|
import "./components/GrInput/index.js";
|
|
70
|
-
import { n as grInputTagSafelist, t as grInputTagConfig } from "./chunks/config-
|
|
71
|
-
import { t as GrInputTag_default } from "./components/GrInputTag/chunks/GrInputTag-
|
|
72
|
-
import { n as grLinkSafelist, t as grLinkConfig } from "./chunks/config-
|
|
73
|
-
import { t as GrLink_default } from "./components/GrLink/chunks/GrLink-
|
|
74
|
-
import { n as GrList_default, t as GrListItem_default } from "./components/GrList/chunks/GrList-
|
|
75
|
-
import { t as grListConfig } from "./chunks/config-
|
|
76
|
-
import { n as grLoadingSafelist, t as grLoadingConfig } from "./chunks/config-
|
|
74
|
+
import { n as grInputTagSafelist, t as grInputTagConfig } from "./chunks/config-BnWSHTEU.js";
|
|
75
|
+
import { t as GrInputTag_default } from "./components/GrInputTag/chunks/GrInputTag-Dcj3F6rQ.js";
|
|
76
|
+
import { n as grLinkSafelist, t as grLinkConfig } from "./chunks/config-CpMYmvVT.js";
|
|
77
|
+
import { t as GrLink_default } from "./components/GrLink/chunks/GrLink-BMwn2iJ9.js";
|
|
78
|
+
import { n as GrList_default, t as GrListItem_default } from "./components/GrList/chunks/GrList-D8nM1FuV.js";
|
|
79
|
+
import { t as grListConfig } from "./chunks/config-DSBlHQVa.js";
|
|
80
|
+
import { n as grLoadingSafelist, t as grLoadingConfig } from "./chunks/config-d386uO3O.js";
|
|
77
81
|
import "./components/GrLoading/index.js";
|
|
78
|
-
import { n as grModalClassTokens, r as grModalSafelist, t as grModalConfig } from "./chunks/config-
|
|
82
|
+
import { n as grModalClassTokens, r as grModalSafelist, t as grModalConfig } from "./chunks/config-BK6Odc3T.js";
|
|
79
83
|
import "./components/GrModal/index.js";
|
|
80
|
-
import { t as GrNavbar_default } from "./components/GrNavbar/chunks/GrNavbar-
|
|
81
|
-
import { t as
|
|
82
|
-
import { t as
|
|
83
|
-
import {
|
|
84
|
-
import { t as
|
|
85
|
-
import { t as
|
|
86
|
-
import { t as
|
|
87
|
-
import { t as
|
|
88
|
-
import { n as grProgressBarSafelist, t as grProgressBarConfig } from "./chunks/config-ZJVOVgqR.js";
|
|
84
|
+
import { t as GrNavbar_default } from "./components/GrNavbar/chunks/GrNavbar-BH7XiF9q.js";
|
|
85
|
+
import { t as grNavbarConfig } from "./chunks/config-Ci9nXGUV.js";
|
|
86
|
+
import { n as grNumberInputSafelist, t as grNumberInputConfig } from "./chunks/config-CdJpnjDj.js";
|
|
87
|
+
import { t as GrNumberInput_default } from "./components/GrNumberInput/chunks/GrNumberInput-YIWhV85S.js";
|
|
88
|
+
import { t as GrSelect_default } from "./components/GrSelect/chunks/GrSelect-W9lbAjRZ.js";
|
|
89
|
+
import { t as GrPagination_default } from "./components/GrPagination/chunks/GrPagination-cD6rFO9W.js";
|
|
90
|
+
import { t as grPaginationConfig } from "./chunks/config-iuMz79Mg.js";
|
|
91
|
+
import { n as grProgressBarSafelist, t as grProgressBarConfig } from "./chunks/config-CFf7xaG1.js";
|
|
89
92
|
import "./components/GrProgressBar/index.js";
|
|
90
|
-
import { t as
|
|
91
|
-
import { t as
|
|
92
|
-
import { n as
|
|
93
|
-
import {
|
|
94
|
-
import { t as
|
|
95
|
-
import { t as
|
|
96
|
-
import {
|
|
97
|
-
import { t as
|
|
98
|
-
import { n as grSelectSafelist, t as grSelectConfig } from "./chunks/config-XoANT5mU.js";
|
|
93
|
+
import { t as grPromptDialogConfig } from "./chunks/config-B1kFmhpM.js";
|
|
94
|
+
import { n as grRadioSafelist, t as grRadioConfig } from "./chunks/config-Cp_XHsze.js";
|
|
95
|
+
import { n as GR_RADIO_GROUP_CONTEXT, t as GrRadio_default } from "./components/GrRadio/chunks/GrRadio-IFU9Hiu2.js";
|
|
96
|
+
import { t as GrRadioGroup_default } from "./components/GrRadioGroup/chunks/GrRadioGroup-C8IcJuuF.js";
|
|
97
|
+
import { t as grRadioGroupConfig } from "./chunks/config-BU0olrvr.js";
|
|
98
|
+
import { n as grSegmentedSafelist, t as grSegmentedConfig } from "./chunks/config-B2YTEe_h.js";
|
|
99
|
+
import { t as GrSegmented_default } from "./components/GrSegmented/chunks/GrSegmented-BRmwBsEG.js";
|
|
100
|
+
import { n as grSelectSafelist, t as grSelectConfig } from "./chunks/config-BY81UKv0.js";
|
|
99
101
|
import "./components/GrSelect/index.js";
|
|
100
|
-
import { t as GrSidebar_default } from "./components/GrSidebar/chunks/GrSidebar-
|
|
101
|
-
import { t as grSidebarConfig } from "./chunks/config-
|
|
102
|
-
import { t as GrSkeleton_default } from "./components/GrSkeleton/chunks/GrSkeleton-
|
|
103
|
-
import { t as grSkeletonConfig } from "./chunks/config-
|
|
104
|
-
import { n as grSwitchSafelist, t as grSwitchConfig } from "./chunks/config-
|
|
105
|
-
import { t as GrSwitch_default } from "./components/GrSwitch/chunks/GrSwitch-
|
|
106
|
-
import { t as grTableConfig } from "./chunks/config-
|
|
102
|
+
import { t as GrSidebar_default } from "./components/GrSidebar/chunks/GrSidebar-BpBtAGBs.js";
|
|
103
|
+
import { t as grSidebarConfig } from "./chunks/config-BeQuykDk2.js";
|
|
104
|
+
import { t as GrSkeleton_default } from "./components/GrSkeleton/chunks/GrSkeleton-URyMkBqI.js";
|
|
105
|
+
import { t as grSkeletonConfig } from "./chunks/config-DaHI5bD_2.js";
|
|
106
|
+
import { n as grSwitchSafelist, t as grSwitchConfig } from "./chunks/config-_3De4HFf.js";
|
|
107
|
+
import { t as GrSwitch_default } from "./components/GrSwitch/chunks/GrSwitch-29h0QhMO.js";
|
|
108
|
+
import { t as grTableConfig } from "./chunks/config-Bcf-8XlK2.js";
|
|
107
109
|
import "./components/GrTable/index.js";
|
|
108
|
-
import { t as GrTabs_default } from "./components/GrTabs/chunks/GrTabs-
|
|
109
|
-
import { t as grTabsConfig } from "./chunks/config-
|
|
110
|
-
import { n as grTextareaSafelist, t as grTextareaConfig } from "./chunks/config-
|
|
111
|
-
import { t as GrTextarea_default } from "./components/GrTextarea/chunks/GrTextarea-
|
|
110
|
+
import { t as GrTabs_default } from "./components/GrTabs/chunks/GrTabs-D3ntDdtg.js";
|
|
111
|
+
import { t as grTabsConfig } from "./chunks/config-Dzd6BzIN2.js";
|
|
112
|
+
import { n as grTextareaSafelist, t as grTextareaConfig } from "./chunks/config-B_nSBc7W.js";
|
|
113
|
+
import { t as GrTextarea_default } from "./components/GrTextarea/chunks/GrTextarea-Cv6r2GuC.js";
|
|
112
114
|
import { useToast } from "./composables/useToast.js";
|
|
113
|
-
import { n as grToasterSafelist, t as grToasterConfig } from "./chunks/config-
|
|
114
|
-
import { t as GrToaster_default } from "./components/GrToaster/chunks/GrToaster-
|
|
115
|
-
import { t as GrTooltip_default } from "./components/GrTooltip/chunks/GrTooltip-
|
|
116
|
-
import { t as grTooltipConfig } from "./chunks/config-
|
|
117
|
-
import { t as GrTree_default } from "./components/GrTree/chunks/GrTree-
|
|
118
|
-
import { n as grTreeSafelist, t as grTreeConfig } from "./chunks/config-
|
|
119
|
-
import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "./chunks/config-
|
|
120
|
-
import { t as GrTreeSelect_default } from "./components/GrTreeSelect/chunks/GrTreeSelect-
|
|
115
|
+
import { n as grToasterSafelist, t as grToasterConfig } from "./chunks/config-CetsgpaZ2.js";
|
|
116
|
+
import { t as GrToaster_default } from "./components/GrToaster/chunks/GrToaster-DluJmR5D.js";
|
|
117
|
+
import { t as GrTooltip_default } from "./components/GrTooltip/chunks/GrTooltip-B7I1AVIC.js";
|
|
118
|
+
import { t as grTooltipConfig } from "./chunks/config-BOdu-O_B.js";
|
|
119
|
+
import { t as GrTree_default } from "./components/GrTree/chunks/GrTree-B2SMU5Py.js";
|
|
120
|
+
import { n as grTreeSafelist, t as grTreeConfig } from "./chunks/config-D6Oe3blW2.js";
|
|
121
|
+
import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "./chunks/config-72sW9Bag2.js";
|
|
122
|
+
import { t as GrTreeSelect_default } from "./components/GrTreeSelect/chunks/GrTreeSelect-C1abr5uH.js";
|
|
121
123
|
import { initThemeEarly, useTheme } from "./composables/useTheme.js";
|
|
122
|
-
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref,
|
|
123
|
-
|
|
124
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, nextTick, onBeforeUnmount, openBlock, reactive, ref, render, shallowRef, toDisplayString, watch, withCtx } from "vue";
|
|
125
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
126
|
+
//#region src/components/GrDialogService/store.ts
|
|
124
127
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
128
|
+
* Модульный синглтон очереди диалогов: единый источник правды для всех
|
|
129
|
+
* вызовов сервиса. Хост-компонент рендерит только `queue[0]` — это
|
|
130
|
+
* сериализует диалоги (FIFO) и исключает конкуренцию за фокус-трап.
|
|
127
131
|
*/
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
validationTitle: "Check the data",
|
|
134
|
-
validationMessage: "The server returned a validation error. Fix the fields and try again.",
|
|
135
|
-
clientTitle: "Request error",
|
|
136
|
-
clientMessage: "The server rejected the request.",
|
|
137
|
-
serverTitle: "Server error",
|
|
138
|
-
serverMessage: "A server error occurred. Please try again.",
|
|
139
|
-
unknownTitle: "Something went wrong",
|
|
140
|
-
unknownMessage: "The operation could not be completed. Please try again.",
|
|
141
|
-
retryLabel: "Retry",
|
|
142
|
-
dismissLabel: "Dismiss"
|
|
143
|
-
};
|
|
144
|
-
/**
|
|
145
|
-
* Маппинг `kind` → `tone` по умолчанию. Применяется внутри баннера, если
|
|
146
|
-
* пользователь не передал `tone` или `toneByKind`. Цель — визуально отделить
|
|
147
|
-
* «исправь ввод» (warning) от «упало по сети/серверу» (danger).
|
|
148
|
-
*/
|
|
149
|
-
var DEFAULT_TONE_BY_KIND = {
|
|
150
|
-
network: "danger",
|
|
151
|
-
aborted: "info",
|
|
152
|
-
validation: "warning",
|
|
153
|
-
client: "warning",
|
|
154
|
-
server: "danger",
|
|
155
|
-
unknown: "danger"
|
|
156
|
-
};
|
|
157
|
-
/**
|
|
158
|
-
* `kind`'ы, которые по умолчанию не показываются (баннер скрыт).
|
|
159
|
-
* Семантика: отмена пользователем — не «ошибка», UI обычно тихо проглатывает.
|
|
160
|
-
* Пользователь может переопределить через `autoHideKinds: []`, чтобы показать info-плашку.
|
|
161
|
-
*/
|
|
162
|
-
var DEFAULT_AUTO_HIDE_KINDS = [];
|
|
163
|
-
//#endregion
|
|
164
|
-
//#region src/components/GrResponseErrorBanner/parsers/abortErrorParser.ts
|
|
165
|
-
/**
|
|
166
|
-
* Распознаёт отмену запроса клиентом.
|
|
167
|
-
*
|
|
168
|
-
* Триггеры:
|
|
169
|
-
* - `ctx.isAbort === true` (выставляется `normalizeError` для `AbortError`,
|
|
170
|
-
* axios `isCancel`/`ERR_CANCELED`, xhr `status === 0 && readyState === 4`).
|
|
171
|
-
*
|
|
172
|
-
* Возвращает `kind: 'aborted'` и `stop: true` — другие парсеры пропускаются,
|
|
173
|
-
* чтобы случайный `status === 0` не интерпретировался как сетевая ошибка.
|
|
174
|
-
*
|
|
175
|
-
* По умолчанию `aborted` показывается info-плашкой; чтобы скрыть совсем —
|
|
176
|
-
* добавьте `'aborted'` в `autoHideKinds`.
|
|
177
|
-
*/
|
|
178
|
-
var abortErrorParser = (ctx) => {
|
|
179
|
-
if (!ctx.isAbort) return null;
|
|
180
|
-
return {
|
|
181
|
-
kind: "aborted",
|
|
182
|
-
message: ctx.texts.abortedMessage,
|
|
183
|
-
stop: true
|
|
184
|
-
};
|
|
185
|
-
};
|
|
186
|
-
//#endregion
|
|
187
|
-
//#region src/components/GrResponseErrorBanner/parsers/fileValidationParser.ts
|
|
188
|
-
/**
|
|
189
|
-
* Распознаёт `FileValidationError` от `GrFileUpload` (или совместимый по форме
|
|
190
|
-
* объект). Не зависит от жёсткого импорта класса — определяет по `name`.
|
|
191
|
-
*
|
|
192
|
-
* Активируется, если `ctx.raw.name === 'FileValidationError'` и есть массив
|
|
193
|
-
* `issues`/`errors` с полями `{ file?, code?, message }`.
|
|
194
|
-
*
|
|
195
|
-
* Возвращает `kind: 'validation'` и `stop: true` — это локальная клиентская
|
|
196
|
-
* валидация, незачем дальше идти по HTTP-парсерам.
|
|
197
|
-
*/
|
|
198
|
-
var fileValidationParser = (ctx) => {
|
|
199
|
-
const raw = ctx.raw;
|
|
200
|
-
if (!raw || typeof raw !== "object") return null;
|
|
201
|
-
if (raw.name !== "FileValidationError") return null;
|
|
202
|
-
const list = raw.issues ?? raw.errors ?? [];
|
|
203
|
-
const details = [];
|
|
204
|
-
for (const it of list) {
|
|
205
|
-
if (!it || typeof it !== "object") continue;
|
|
206
|
-
const msg = typeof it.message === "string" ? it.message : "";
|
|
207
|
-
if (!msg) continue;
|
|
208
|
-
const fileName = it.file?.name;
|
|
209
|
-
details.push(fileName ? `${fileName}: ${msg}` : msg);
|
|
210
|
-
}
|
|
211
|
-
return {
|
|
212
|
-
kind: "validation",
|
|
213
|
-
message: raw.message || ctx.texts.validationMessage,
|
|
214
|
-
details: details.length ? details : void 0,
|
|
215
|
-
stop: true
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
//#endregion
|
|
219
|
-
//#region src/components/GrResponseErrorBanner/parsers/httpStatusParser.ts
|
|
220
|
-
/**
|
|
221
|
-
* Базовая классификация по HTTP-статусу.
|
|
222
|
-
*
|
|
223
|
-
* Правила:
|
|
224
|
-
* - `400` / `422` ⇒ `kind: 'validation'`,
|
|
225
|
-
* - остальные `4xx` ⇒ `kind: 'client'`,
|
|
226
|
-
* - `>= 500` ⇒ `kind: 'server'`.
|
|
227
|
-
*
|
|
228
|
-
* Не использует `stop` — даёт более специализированным парсерам
|
|
229
|
-
* (Laravel/JSON:API/RFC 7807) уточнить сообщение и `fieldErrors`.
|
|
230
|
-
*
|
|
231
|
-
* `message` берёт из `ctx.texts` как осмысленный фолбэк.
|
|
232
|
-
*/
|
|
233
|
-
var httpStatusParser = (ctx) => {
|
|
234
|
-
const status = ctx.status;
|
|
235
|
-
if (typeof status !== "number") return null;
|
|
236
|
-
if (status >= 500) return {
|
|
237
|
-
kind: "server",
|
|
238
|
-
status,
|
|
239
|
-
message: ctx.texts.serverMessage
|
|
240
|
-
};
|
|
241
|
-
if (status === 400 || status === 422) return {
|
|
242
|
-
kind: "validation",
|
|
243
|
-
status,
|
|
244
|
-
message: ctx.texts.validationMessage
|
|
245
|
-
};
|
|
246
|
-
if (status >= 400) return {
|
|
247
|
-
kind: "client",
|
|
248
|
-
status,
|
|
249
|
-
message: ctx.texts.clientMessage
|
|
250
|
-
};
|
|
251
|
-
return null;
|
|
252
|
-
};
|
|
253
|
-
//#endregion
|
|
254
|
-
//#region src/components/GrResponseErrorBanner/parsers/jsonApiErrorParser.ts
|
|
255
|
-
/**
|
|
256
|
-
* Парсер JSON:API-стиля:
|
|
257
|
-
*
|
|
258
|
-
* ```json
|
|
259
|
-
* { "errors": [
|
|
260
|
-
* { "status": "422", "title": "Invalid Attribute",
|
|
261
|
-
* "detail": "Email is required.",
|
|
262
|
-
* "source": { "pointer": "/data/attributes/email" } }
|
|
263
|
-
* ] }
|
|
264
|
-
* ```
|
|
265
|
-
*
|
|
266
|
-
* Активируется, когда `ctx.body.errors` — массив объектов с `title`/`detail`.
|
|
267
|
-
* Поле извлекается из последнего сегмента `source.pointer`. Все `detail`
|
|
268
|
-
* собираются в `details`, первый `title` — в `message`.
|
|
269
|
-
*/
|
|
270
|
-
var jsonApiErrorParser = (ctx) => {
|
|
271
|
-
const body = ctx.body;
|
|
272
|
-
if (!body || typeof body !== "object") return null;
|
|
273
|
-
const errors = body.errors;
|
|
274
|
-
if (!Array.isArray(errors) || errors.length === 0) return null;
|
|
275
|
-
const first = errors[0];
|
|
276
|
-
if (!first || typeof first !== "object") return null;
|
|
277
|
-
const has = (key) => key in first;
|
|
278
|
-
if (!has("title") && !has("detail") && !has("source")) return null;
|
|
279
|
-
const fieldErrorsMap = /* @__PURE__ */ new Map();
|
|
280
|
-
const details = [];
|
|
281
|
-
let message;
|
|
282
|
-
for (const e of errors) {
|
|
283
|
-
if (!e || typeof e !== "object") continue;
|
|
284
|
-
const eo = e;
|
|
285
|
-
const text = typeof eo.detail === "string" && eo.detail || typeof eo.title === "string" && eo.title || "";
|
|
286
|
-
if (!text) continue;
|
|
287
|
-
if (!message && typeof eo.title === "string") message = eo.title;
|
|
288
|
-
const pointer = typeof eo.source?.pointer === "string" ? eo.source.pointer : "";
|
|
289
|
-
const field = pointer ? pointer.split("/").filter(Boolean).pop() : void 0;
|
|
290
|
-
if (field) {
|
|
291
|
-
const list = fieldErrorsMap.get(field) ?? [];
|
|
292
|
-
list.push(text);
|
|
293
|
-
fieldErrorsMap.set(field, list);
|
|
294
|
-
}
|
|
295
|
-
details.push(text);
|
|
296
|
-
}
|
|
297
|
-
if (!details.length) return null;
|
|
298
|
-
const fieldErrors = Array.from(fieldErrorsMap, ([field, messages]) => ({
|
|
299
|
-
field,
|
|
300
|
-
messages
|
|
301
|
-
}));
|
|
302
|
-
const kind = fieldErrors.length ? "validation" : void 0;
|
|
303
|
-
return {
|
|
304
|
-
kind,
|
|
305
|
-
message: message || (kind === "validation" ? ctx.texts.validationMessage : ctx.texts.clientMessage),
|
|
306
|
-
details,
|
|
307
|
-
fieldErrors: fieldErrors.length ? fieldErrors : void 0
|
|
308
|
-
};
|
|
309
|
-
};
|
|
310
|
-
//#endregion
|
|
311
|
-
//#region src/components/GrResponseErrorBanner/parsers/laravelValidationParser.ts
|
|
312
|
-
/**
|
|
313
|
-
* Парсит Laravel-формат ответа об ошибке валидации:
|
|
314
|
-
*
|
|
315
|
-
* ```json
|
|
316
|
-
* { "message": "The given data was invalid.",
|
|
317
|
-
* "errors": { "file": ["The file is required."], "amount": ["..."] } }
|
|
318
|
-
* ```
|
|
319
|
-
*
|
|
320
|
-
* Активируется при наличии `ctx.body.errors` как plain-объекта (значения —
|
|
321
|
-
* массив строк или строка). Если есть `fieldErrors`, повышает `kind` до
|
|
322
|
-
* `validation` независимо от статуса (полезно, когда сервер прислал 200/4xx
|
|
323
|
-
* без 422). `message` берётся из `body.message` / `body.error`.
|
|
324
|
-
*/
|
|
325
|
-
var laravelValidationParser = (ctx) => {
|
|
326
|
-
const body = ctx.body;
|
|
327
|
-
if (!body || typeof body !== "object" || Array.isArray(body)) return null;
|
|
328
|
-
const data = body;
|
|
329
|
-
const errors = data.errors;
|
|
330
|
-
if (!errors || typeof errors !== "object" || Array.isArray(errors)) return null;
|
|
331
|
-
const fieldErrors = [];
|
|
332
|
-
for (const [field, raw] of Object.entries(errors)) {
|
|
333
|
-
const messages = Array.isArray(raw) ? raw.filter((m) => typeof m === "string") : typeof raw === "string" ? [raw] : [];
|
|
334
|
-
if (messages.length) fieldErrors.push({
|
|
335
|
-
field,
|
|
336
|
-
messages
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
if (!fieldErrors.length) return null;
|
|
340
|
-
return {
|
|
341
|
-
kind: "validation",
|
|
342
|
-
message: typeof data.message === "string" && data.message || typeof data.error === "string" && data.error || ctx.texts.validationMessage,
|
|
343
|
-
details: fieldErrors.flatMap((fe) => fe.messages),
|
|
344
|
-
fieldErrors
|
|
345
|
-
};
|
|
346
|
-
};
|
|
347
|
-
//#endregion
|
|
348
|
-
//#region src/components/GrResponseErrorBanner/parsers/networkErrorParser.ts
|
|
349
|
-
/**
|
|
350
|
-
* Распознаёт транспортные ошибки **без ответа сервера**: отсутствие интернета,
|
|
351
|
-
* DNS-фейл, CORS-preflight, fetch `TypeError('Failed to fetch')`,
|
|
352
|
-
* axios `ERR_NETWORK`/`ECONNABORTED`.
|
|
353
|
-
*
|
|
354
|
-
* Триггеры:
|
|
355
|
-
* - `ctx.isNetwork === true` (выставлено `normalizeError`),
|
|
356
|
-
* - либо нет ни `status`, ни `body`, ни признака отмены, но есть исходная
|
|
357
|
-
* ошибка с `code === 'ERR_NETWORK'` / `message ~ /network|fetch/i/`.
|
|
358
|
-
*
|
|
359
|
-
* Возвращает `kind: 'network'` и `stop: true`.
|
|
360
|
-
*/
|
|
361
|
-
var networkErrorParser = (ctx) => {
|
|
362
|
-
if (ctx.isAbort) return null;
|
|
363
|
-
if (ctx.isNetwork) return {
|
|
364
|
-
kind: "network",
|
|
365
|
-
message: ctx.texts.networkMessage,
|
|
366
|
-
stop: true
|
|
367
|
-
};
|
|
368
|
-
if (typeof ctx.status !== "number" && ctx.body == null && ctx.raw && typeof ctx.raw === "object") {
|
|
369
|
-
const r = ctx.raw;
|
|
370
|
-
if (r.code === "ERR_NETWORK" || typeof r.message === "string" && /network|failed to fetch/i.test(r.message)) return {
|
|
371
|
-
kind: "network",
|
|
372
|
-
message: ctx.texts.networkMessage,
|
|
373
|
-
stop: true
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
return null;
|
|
377
|
-
};
|
|
378
|
-
//#endregion
|
|
379
|
-
//#region src/components/GrResponseErrorBanner/parsers/normalizeError.ts
|
|
380
|
-
/**
|
|
381
|
-
* Универсально приводит «сырой» вход к {@link NormalizedRawError}.
|
|
382
|
-
*
|
|
383
|
-
* Поддерживаемые источники:
|
|
384
|
-
* - **axios** — `AxiosError` с `response.status`/`response.data`/`response.headers`,
|
|
385
|
-
* либо `request` без `response` + `code === 'ERR_NETWORK'`, либо `code === 'ERR_CANCELED'`.
|
|
386
|
-
* - **fetch `Response`** — объект `Response` с `ok=false`. Тело читается через
|
|
387
|
-
* `clone().json()` (с фолбэком на `.text()`); поэтому функция асинхронная.
|
|
388
|
-
* - **fetch `TypeError`** — `TypeError('Failed to fetch')` ⇒ `isNetwork=true`.
|
|
389
|
-
* - **`{ response: Response, body: unknown }`** — если потребитель уже прочитал тело сам.
|
|
390
|
-
* - **`XMLHttpRequest`** / `{ status, responseText, response }` — пара полей.
|
|
391
|
-
* - **`AbortError` / `DOMException`** ⇒ `isAbort=true`.
|
|
392
|
-
* - **`Error`/строка/произвольный объект** — кладётся в `body`/`raw` как есть.
|
|
393
|
-
*
|
|
394
|
-
* Цель — отделить «откуда пришла ошибка» от «как её классифицировать»: парсеры
|
|
395
|
-
* работают только с нормализованным `ResponseErrorContext`, не зная о транспорте.
|
|
396
|
-
*/
|
|
397
|
-
async function normalizeError(raw) {
|
|
398
|
-
if (isPlainNormalized(raw)) return {
|
|
399
|
-
...raw,
|
|
400
|
-
raw
|
|
401
|
-
};
|
|
402
|
-
if (isResponseEnvelope(raw)) {
|
|
403
|
-
const res = raw.response;
|
|
404
|
-
return {
|
|
405
|
-
raw,
|
|
406
|
-
status: res.status,
|
|
407
|
-
body: raw.body,
|
|
408
|
-
headers: readHeaders(res)
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
if (isFetchResponse(raw)) {
|
|
412
|
-
const body = await readFetchBody(raw);
|
|
413
|
-
return {
|
|
414
|
-
raw,
|
|
415
|
-
status: raw.status,
|
|
416
|
-
body,
|
|
417
|
-
headers: readHeaders(raw)
|
|
418
|
-
};
|
|
419
|
-
}
|
|
420
|
-
if (isXhr(raw)) {
|
|
421
|
-
const body = parseMaybeJson(raw.responseText) ?? raw.response;
|
|
422
|
-
return {
|
|
423
|
-
raw,
|
|
424
|
-
status: typeof raw.status === "number" ? raw.status : void 0,
|
|
425
|
-
body,
|
|
426
|
-
isAbort: raw.status === 0 && raw.readyState === 4
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
if (isAxiosLike(raw)) {
|
|
430
|
-
const e = raw;
|
|
431
|
-
const status = e.response?.status;
|
|
432
|
-
const code = e.code;
|
|
433
|
-
const isAbort = code === "ERR_CANCELED" || code === "CANCELED" || e.__CANCEL__ === true;
|
|
434
|
-
const isNetwork = !e.response && (code === "ERR_NETWORK" || code === "ECONNABORTED");
|
|
435
|
-
return {
|
|
436
|
-
raw,
|
|
437
|
-
status,
|
|
438
|
-
body: e.response?.data,
|
|
439
|
-
headers: normalizeHeaderRecord(e.response?.headers),
|
|
440
|
-
isAbort,
|
|
441
|
-
isNetwork
|
|
442
|
-
};
|
|
443
|
-
}
|
|
444
|
-
if (isAbortError(raw)) return {
|
|
445
|
-
raw,
|
|
446
|
-
isAbort: true
|
|
447
|
-
};
|
|
448
|
-
if (raw instanceof TypeError && /fetch|network/i.test(raw.message || "")) return {
|
|
449
|
-
raw,
|
|
450
|
-
isNetwork: true
|
|
451
|
-
};
|
|
452
|
-
if (raw instanceof Error) return {
|
|
453
|
-
raw,
|
|
454
|
-
body: { message: raw.message }
|
|
455
|
-
};
|
|
456
|
-
if (typeof raw === "string") return {
|
|
457
|
-
raw,
|
|
458
|
-
body: { message: raw }
|
|
459
|
-
};
|
|
460
|
-
if (raw && typeof raw === "object") return {
|
|
461
|
-
raw,
|
|
462
|
-
body: raw
|
|
463
|
-
};
|
|
464
|
-
return { raw };
|
|
465
|
-
}
|
|
466
|
-
function isPlainNormalized(v) {
|
|
467
|
-
if (!v || typeof v !== "object") return false;
|
|
468
|
-
const o = v;
|
|
469
|
-
return "raw" in o && ("status" in o || "body" in o || "isAbort" in o || "isNetwork" in o || "headers" in o);
|
|
470
|
-
}
|
|
471
|
-
function isResponseEnvelope(v) {
|
|
472
|
-
return !!v && typeof v === "object" && "response" in v && isFetchResponse(v.response);
|
|
473
|
-
}
|
|
474
|
-
function isFetchResponse(v) {
|
|
475
|
-
return typeof Response !== "undefined" && v instanceof Response;
|
|
476
|
-
}
|
|
477
|
-
function isXhr(v) {
|
|
478
|
-
return typeof XMLHttpRequest !== "undefined" && v instanceof XMLHttpRequest;
|
|
479
|
-
}
|
|
480
|
-
function isAxiosLike(v) {
|
|
481
|
-
if (!v || typeof v !== "object") return false;
|
|
482
|
-
const o = v;
|
|
483
|
-
return o.isAxiosError === true || "response" in o && typeof o.response === "object" && o.response !== null || "code" in o && typeof o.code === "string";
|
|
484
|
-
}
|
|
485
|
-
function isAbortError(v) {
|
|
486
|
-
if (!v || typeof v !== "object") return false;
|
|
487
|
-
const o = v;
|
|
488
|
-
return o.name === "AbortError" || o.name === "CanceledError" || o.code === "ERR_CANCELED";
|
|
489
|
-
}
|
|
490
|
-
async function readFetchBody(res) {
|
|
491
|
-
if (res.bodyUsed) return void 0;
|
|
492
|
-
try {
|
|
493
|
-
const text = await res.clone().text();
|
|
494
|
-
return parseMaybeJson(text) ?? text;
|
|
495
|
-
} catch {
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
function readHeaders(res) {
|
|
500
|
-
const out = {};
|
|
501
|
-
res.headers.forEach((value, key) => {
|
|
502
|
-
out[key.toLowerCase()] = value;
|
|
503
|
-
});
|
|
504
|
-
return out;
|
|
505
|
-
}
|
|
506
|
-
function normalizeHeaderRecord(h) {
|
|
507
|
-
if (!h || typeof h !== "object") return void 0;
|
|
508
|
-
const out = {};
|
|
509
|
-
for (const [k, v] of Object.entries(h)) if (typeof v === "string") out[k.toLowerCase()] = v;
|
|
510
|
-
return out;
|
|
511
|
-
}
|
|
512
|
-
function parseMaybeJson(text) {
|
|
513
|
-
if (typeof text !== "string" || !text) return void 0;
|
|
514
|
-
try {
|
|
515
|
-
return JSON.parse(text);
|
|
516
|
-
} catch {
|
|
517
|
-
return;
|
|
518
|
-
}
|
|
132
|
+
var dialogQueue = reactive([]);
|
|
133
|
+
var counter = 0;
|
|
134
|
+
function makeDialogId() {
|
|
135
|
+
counter += 1;
|
|
136
|
+
return `gr-dialog-${Date.now()}-${counter}`;
|
|
519
137
|
}
|
|
520
138
|
//#endregion
|
|
521
|
-
//#region src/components/
|
|
522
|
-
|
|
523
|
-
* Финальный фолбэк-парсер. Достаёт хоть какое-нибудь человекочитаемое
|
|
524
|
-
* сообщение, чтобы баннер не был пустым.
|
|
525
|
-
*
|
|
526
|
-
* Источники (по приоритету):
|
|
527
|
-
* 1. `ctx.body` — если строка ⇒ message,
|
|
528
|
-
* 2. `ctx.body[messageKey]` (default `'message'`),
|
|
529
|
-
* 3. `ctx.body.error` (строка),
|
|
530
|
-
* 4. `ctx.raw.message` (для голых `Error`).
|
|
531
|
-
*
|
|
532
|
-
* Не выставляет `kind` — оставляет на усмотрение классификатора.
|
|
533
|
-
* Использует ключ `messageKey` из `ctx.meta._messageKey`, если задан.
|
|
534
|
-
*/
|
|
535
|
-
var plainMessageParser = (ctx) => {
|
|
536
|
-
const messageKey = ctx.meta._messageKey || "message";
|
|
537
|
-
if (typeof ctx.body === "string" && ctx.body.trim()) return { message: ctx.body };
|
|
538
|
-
if (ctx.body && typeof ctx.body === "object") {
|
|
539
|
-
const data = ctx.body;
|
|
540
|
-
const fromKey = data[messageKey];
|
|
541
|
-
if (typeof fromKey === "string" && fromKey) return { message: fromKey };
|
|
542
|
-
if (typeof data.error === "string" && data.error) return { message: data.error };
|
|
543
|
-
}
|
|
544
|
-
if (ctx.raw instanceof Error && ctx.raw.message) return { message: ctx.raw.message };
|
|
545
|
-
return null;
|
|
546
|
-
};
|
|
547
|
-
//#endregion
|
|
548
|
-
//#region src/components/GrResponseErrorBanner/parsers/problemDetailsParser.ts
|
|
549
|
-
/**
|
|
550
|
-
* Парсер RFC 7807 «Problem Details for HTTP APIs»:
|
|
551
|
-
*
|
|
552
|
-
* ```json
|
|
553
|
-
* { "type": "https://example.com/probs/out-of-credit",
|
|
554
|
-
* "title": "You do not have enough credit.",
|
|
555
|
-
* "status": 403,
|
|
556
|
-
* "detail": "Your current balance is 30.",
|
|
557
|
-
* "errors": { "balance": ["..."] } }
|
|
558
|
-
* ```
|
|
559
|
-
*
|
|
560
|
-
* Активируется, если есть `body.type` + `body.title`, либо
|
|
561
|
-
* Content-Type заголовка `application/problem+json`. Берёт `title` как
|
|
562
|
-
* `message`, `detail` — в `details[0]`, status — в `status`.
|
|
563
|
-
*/
|
|
564
|
-
var problemDetailsParser = (ctx) => {
|
|
565
|
-
const body = ctx.body;
|
|
566
|
-
if (!body || typeof body !== "object" || Array.isArray(body)) return null;
|
|
567
|
-
const data = body;
|
|
568
|
-
const isProblemContentType = ctx.headers?.["content-type"]?.includes("application/problem+json");
|
|
569
|
-
const hasShape = typeof data.title === "string" && (typeof data.type === "string" || typeof data.status === "number");
|
|
570
|
-
if (!isProblemContentType && !hasShape) return null;
|
|
571
|
-
const message = typeof data.title === "string" ? data.title : ctx.texts.unknownMessage;
|
|
572
|
-
const details = [];
|
|
573
|
-
if (typeof data.detail === "string" && data.detail) details.push(data.detail);
|
|
574
|
-
const status = typeof data.status === "number" ? data.status : ctx.status;
|
|
575
|
-
return {
|
|
576
|
-
message,
|
|
577
|
-
details: details.length ? details : void 0,
|
|
578
|
-
status
|
|
579
|
-
};
|
|
580
|
-
};
|
|
139
|
+
//#region src/components/GrDialogService/GrDialogServiceHost.vue?vue&type=script&setup=true&lang.ts
|
|
140
|
+
var _hoisted_1 = { class: "flex items-center justify-end gap-3" };
|
|
581
141
|
//#endregion
|
|
582
|
-
//#region src/components/
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
*
|
|
587
|
-
* - Ранние специализированные парсеры могут поставить `stop` (abort/file).
|
|
588
|
-
* - HTTP-парсер даёт fallback-kind/message, чтобы остальное могло уточнить.
|
|
589
|
-
* - `plainMessage` всегда последний — добывает хоть какое-то сообщение.
|
|
590
|
-
*/
|
|
591
|
-
var defaultResponseErrorParsers = [
|
|
592
|
-
abortErrorParser,
|
|
593
|
-
networkErrorParser,
|
|
594
|
-
fileValidationParser,
|
|
595
|
-
laravelValidationParser,
|
|
596
|
-
problemDetailsParser,
|
|
597
|
-
jsonApiErrorParser,
|
|
598
|
-
httpStatusParser,
|
|
599
|
-
plainMessageParser
|
|
600
|
-
];
|
|
601
|
-
/** Добавляет пользовательские парсеры в начало дефолтной цепочки. */
|
|
602
|
-
function extendDefaultParsers(extra) {
|
|
603
|
-
return [...extra, ...defaultResponseErrorParsers];
|
|
604
|
-
}
|
|
605
|
-
/**
|
|
606
|
-
* Фабрика классификатора. Возвращает функцию `(raw, meta?) => Promise<ResponseErrorInfo>`,
|
|
607
|
-
* которая:
|
|
608
|
-
* 1. нормализует вход через `normalizeError`,
|
|
609
|
-
* 2. строит `ResponseErrorContext`,
|
|
610
|
-
* 3. прогоняет цепочку парсеров (с поддержкой `stop`),
|
|
611
|
-
* 4. собирает финальный `ResponseErrorInfo` с фолбэками из `texts`.
|
|
612
|
-
*/
|
|
613
|
-
function createResponseErrorClassifier(options = {}) {
|
|
614
|
-
const parsers = options.parsers ?? defaultResponseErrorParsers;
|
|
615
|
-
const texts = {
|
|
616
|
-
...DEFAULT_RESPONSE_ERROR_TEXTS,
|
|
617
|
-
...options.texts ?? {}
|
|
618
|
-
};
|
|
619
|
-
const messageKey = options.messageKey ?? "message";
|
|
620
|
-
return async function classify(raw, meta = {}) {
|
|
621
|
-
const ctx = {
|
|
622
|
-
...await normalizeError(raw),
|
|
623
|
-
meta: {
|
|
624
|
-
...meta,
|
|
625
|
-
_messageKey: messageKey
|
|
626
|
-
},
|
|
627
|
-
texts
|
|
628
|
-
};
|
|
629
|
-
let kind;
|
|
630
|
-
let status = ctx.status;
|
|
631
|
-
let message;
|
|
632
|
-
let details;
|
|
633
|
-
let fieldErrors;
|
|
634
|
-
for (const parser of parsers) {
|
|
635
|
-
const result = parser(ctx);
|
|
636
|
-
if (!result) continue;
|
|
637
|
-
if (result.kind) kind = result.kind;
|
|
638
|
-
if (typeof result.status === "number") status = result.status;
|
|
639
|
-
if (result.message) message = result.message;
|
|
640
|
-
if (result.details?.length) details = result.details;
|
|
641
|
-
if (result.fieldErrors?.length) fieldErrors = result.fieldErrors;
|
|
642
|
-
if (result.stop) break;
|
|
643
|
-
}
|
|
644
|
-
if (!kind) kind = "unknown";
|
|
645
|
-
if (!message) message = resolveDefaultMessage(kind, texts);
|
|
646
|
-
return {
|
|
647
|
-
kind,
|
|
648
|
-
status,
|
|
649
|
-
message,
|
|
650
|
-
details,
|
|
651
|
-
fieldErrors,
|
|
652
|
-
raw,
|
|
653
|
-
meta
|
|
654
|
-
};
|
|
655
|
-
};
|
|
656
|
-
}
|
|
657
|
-
function resolveDefaultMessage(kind, texts) {
|
|
658
|
-
switch (kind) {
|
|
659
|
-
case "network": return texts.networkMessage;
|
|
660
|
-
case "aborted": return texts.abortedMessage;
|
|
661
|
-
case "validation": return texts.validationMessage;
|
|
662
|
-
case "client": return texts.clientMessage;
|
|
663
|
-
case "server": return texts.serverMessage;
|
|
664
|
-
default: return texts.unknownMessage;
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
function resolveResponseErrorTitle(kind, texts) {
|
|
668
|
-
switch (kind) {
|
|
669
|
-
case "network": return texts.networkTitle;
|
|
670
|
-
case "aborted": return texts.abortedTitle;
|
|
671
|
-
case "validation": return texts.validationTitle;
|
|
672
|
-
case "client": return texts.clientTitle;
|
|
673
|
-
case "server": return texts.serverTitle;
|
|
674
|
-
default: return texts.unknownTitle;
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
//#endregion
|
|
678
|
-
//#region src/components/GrResponseErrorBanner/GrResponseErrorBanner.vue?vue&type=script&setup=true&lang.ts
|
|
679
|
-
var _hoisted_1 = { class: "flex flex-col gap-2" };
|
|
680
|
-
var _hoisted_2 = { class: "flex flex-wrap items-center gap-2" };
|
|
681
|
-
var _hoisted_3 = ["data-testid"];
|
|
682
|
-
var _hoisted_4 = ["data-testid"];
|
|
683
|
-
var _hoisted_5 = ["data-testid"];
|
|
684
|
-
var _hoisted_6 = {
|
|
685
|
-
key: 1,
|
|
686
|
-
class: "mt-1 flex flex-wrap items-center gap-2"
|
|
687
|
-
};
|
|
688
|
-
//#endregion
|
|
689
|
-
//#region src/components/GrResponseErrorBanner/GrResponseErrorBanner.vue
|
|
690
|
-
var GrResponseErrorBanner_default = /* @__PURE__ */ defineComponent({
|
|
691
|
-
__name: "GrResponseErrorBanner",
|
|
692
|
-
props: {
|
|
693
|
-
error: {},
|
|
694
|
-
texts: { default: () => ({}) },
|
|
695
|
-
tone: { default: void 0 },
|
|
696
|
-
toneByKind: { default: () => ({}) },
|
|
697
|
-
showDetails: {
|
|
698
|
-
type: Boolean,
|
|
699
|
-
default: true
|
|
700
|
-
},
|
|
701
|
-
showFieldLabels: {
|
|
702
|
-
type: Boolean,
|
|
703
|
-
default: true
|
|
704
|
-
},
|
|
705
|
-
fieldLabels: { default: () => ({}) },
|
|
706
|
-
dedupeDetails: {
|
|
707
|
-
type: Boolean,
|
|
708
|
-
default: true
|
|
709
|
-
},
|
|
710
|
-
canRetry: {
|
|
711
|
-
type: Boolean,
|
|
712
|
-
default: false
|
|
713
|
-
},
|
|
714
|
-
canDismiss: {
|
|
715
|
-
type: Boolean,
|
|
716
|
-
default: true
|
|
717
|
-
},
|
|
718
|
-
autoHideKinds: { default: () => DEFAULT_AUTO_HIDE_KINDS },
|
|
719
|
-
showStatus: {
|
|
720
|
-
type: Boolean,
|
|
721
|
-
default: true
|
|
722
|
-
},
|
|
723
|
-
testIdPrefix: { default: "response-error" }
|
|
724
|
-
},
|
|
725
|
-
emits: ["retry", "dismiss"],
|
|
726
|
-
setup(__props, { emit: __emit }) {
|
|
727
|
-
const props = __props;
|
|
728
|
-
const emit = __emit;
|
|
729
|
-
const { t } = useGranularityTranslations();
|
|
730
|
-
const i18nTexts = computed(() => {
|
|
731
|
-
const out = {};
|
|
732
|
-
for (const key of Object.keys(DEFAULT_RESPONSE_ERROR_TEXTS)) out[key] = t(`gr.responseError.${key}`, DEFAULT_RESPONSE_ERROR_TEXTS[key]);
|
|
733
|
-
return out;
|
|
734
|
-
});
|
|
735
|
-
const mergedTexts = computed(() => ({
|
|
736
|
-
...DEFAULT_RESPONSE_ERROR_TEXTS,
|
|
737
|
-
...i18nTexts.value,
|
|
738
|
-
...props.texts
|
|
739
|
-
}));
|
|
740
|
-
const mergedToneByKind = computed(() => ({
|
|
741
|
-
...DEFAULT_TONE_BY_KIND,
|
|
742
|
-
...props.toneByKind
|
|
743
|
-
}));
|
|
744
|
-
const isHidden = computed(() => {
|
|
745
|
-
if (!props.error) return true;
|
|
746
|
-
return props.autoHideKinds.includes(props.error.kind);
|
|
747
|
-
});
|
|
748
|
-
const tone = computed(() => {
|
|
749
|
-
if (props.tone) return props.tone;
|
|
750
|
-
if (!props.error) return "danger";
|
|
751
|
-
return mergedToneByKind.value[props.error.kind] ?? "danger";
|
|
752
|
-
});
|
|
753
|
-
const title = computed(() => {
|
|
754
|
-
if (!props.error) return "";
|
|
755
|
-
return resolveResponseErrorTitle(props.error.kind, mergedTexts.value);
|
|
756
|
-
});
|
|
142
|
+
//#region src/components/GrDialogService/GrDialogServiceHost.vue
|
|
143
|
+
var GrDialogServiceHost_default = /* @__PURE__ */ defineComponent({
|
|
144
|
+
__name: "GrDialogServiceHost",
|
|
145
|
+
setup(__props) {
|
|
757
146
|
/**
|
|
758
|
-
*
|
|
759
|
-
*
|
|
760
|
-
*
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
validation: "validationMessage",
|
|
766
|
-
client: "clientMessage",
|
|
767
|
-
server: "serverMessage",
|
|
768
|
-
unknown: "unknownMessage"
|
|
769
|
-
};
|
|
770
|
-
const DEFAULT_FALLBACK_MESSAGES = new Set([
|
|
771
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.networkMessage,
|
|
772
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.abortedMessage,
|
|
773
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.validationMessage,
|
|
774
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.clientMessage,
|
|
775
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.serverMessage,
|
|
776
|
-
DEFAULT_RESPONSE_ERROR_TEXTS.unknownMessage
|
|
777
|
-
]);
|
|
778
|
-
const message = computed(() => {
|
|
779
|
-
const raw = props.error?.message ?? "";
|
|
780
|
-
if (!props.error) return raw;
|
|
781
|
-
if (!raw || DEFAULT_FALLBACK_MESSAGES.has(raw)) return mergedTexts.value[KIND_MESSAGE_KEY[props.error.kind]];
|
|
782
|
-
return raw;
|
|
783
|
-
});
|
|
784
|
-
/**
|
|
785
|
-
* Сводный список «деталей» под основным `message`.
|
|
786
|
-
* Предпочитаем `fieldErrors` (поле → сообщения), затем — плоский `details`.
|
|
787
|
-
* Дедуплицируем и убираем повтор с `message`.
|
|
147
|
+
* GrDialogServiceHost — внутренний компонент-оркестратор императивного
|
|
148
|
+
* `useDialogService`. Не предназначен для прямого использования в шаблонах.
|
|
149
|
+
*
|
|
150
|
+
* Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя
|
|
151
|
+
* декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием
|
|
152
|
+
* загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы
|
|
153
|
+
* сервера через цепочку парсеров `GrResponseErrorBanner`.
|
|
788
154
|
*/
|
|
789
|
-
const
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
155
|
+
const active = computed(() => dialogQueue[0] ?? null);
|
|
156
|
+
const open = ref(false);
|
|
157
|
+
const loading = ref(false);
|
|
158
|
+
const currentError = shallowRef(null);
|
|
159
|
+
const fieldError = ref(null);
|
|
160
|
+
const promptValue = ref("");
|
|
161
|
+
let controller = null;
|
|
162
|
+
let finishing = false;
|
|
163
|
+
let externalAbortCleanup = null;
|
|
164
|
+
function resetState() {
|
|
165
|
+
loading.value = false;
|
|
166
|
+
currentError.value = null;
|
|
167
|
+
fieldError.value = null;
|
|
168
|
+
finishing = false;
|
|
169
|
+
}
|
|
170
|
+
function buildClassifier(req) {
|
|
171
|
+
const opts = req.options;
|
|
172
|
+
return createResponseErrorClassifier({
|
|
173
|
+
parsers: typeof opts.errorParsers === "function" ? opts.errorParsers(responseErrorParserPresets) : opts.errorParsers ?? coreResponseErrorParsers,
|
|
174
|
+
texts: opts.errorTexts,
|
|
175
|
+
messageKey: opts.errorMessageKey
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
watch(() => active.value?.id, (id) => {
|
|
179
|
+
cleanupExternalAbort();
|
|
180
|
+
resetState();
|
|
181
|
+
const req = active.value;
|
|
182
|
+
if (!req || !id) {
|
|
183
|
+
open.value = false;
|
|
184
|
+
return;
|
|
795
185
|
}
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
result.push({
|
|
804
|
-
field: fe.field,
|
|
805
|
-
text
|
|
806
|
-
});
|
|
186
|
+
promptValue.value = req.options && "value" in req.options ? req.options.value ?? "" : "";
|
|
187
|
+
controller = new AbortController();
|
|
188
|
+
const sig = req.options.signal;
|
|
189
|
+
if (sig) {
|
|
190
|
+
if (sig.aborted) {
|
|
191
|
+
finish("close");
|
|
192
|
+
return;
|
|
807
193
|
}
|
|
808
|
-
|
|
194
|
+
const onAbort = () => finish("close");
|
|
195
|
+
sig.addEventListener("abort", onAbort);
|
|
196
|
+
externalAbortCleanup = () => sig.removeEventListener("abort", onAbort);
|
|
809
197
|
}
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
if (!text || seen.has(text)) continue;
|
|
814
|
-
seen.add(text);
|
|
815
|
-
result.push({ text });
|
|
816
|
-
}
|
|
817
|
-
return result;
|
|
198
|
+
nextTick(() => {
|
|
199
|
+
open.value = true;
|
|
200
|
+
});
|
|
818
201
|
});
|
|
819
|
-
function
|
|
820
|
-
|
|
821
|
-
|
|
202
|
+
function cleanupExternalAbort() {
|
|
203
|
+
externalAbortCleanup?.();
|
|
204
|
+
externalAbortCleanup = null;
|
|
822
205
|
}
|
|
823
|
-
function
|
|
824
|
-
|
|
206
|
+
function finish(action, value) {
|
|
207
|
+
const req = active.value;
|
|
208
|
+
if (!req || finishing) return;
|
|
209
|
+
finishing = true;
|
|
210
|
+
open.value = false;
|
|
211
|
+
controller?.abort();
|
|
212
|
+
controller = null;
|
|
213
|
+
cleanupExternalAbort();
|
|
214
|
+
req.resolve({
|
|
215
|
+
action,
|
|
216
|
+
value
|
|
217
|
+
});
|
|
218
|
+
nextTick(() => {
|
|
219
|
+
const index = dialogQueue.findIndex((item) => item.id === req.id);
|
|
220
|
+
if (index >= 0) dialogQueue.splice(index, 1);
|
|
221
|
+
});
|
|
825
222
|
}
|
|
826
|
-
function
|
|
827
|
-
|
|
223
|
+
function buildContext(req, value) {
|
|
224
|
+
let errorSet = false;
|
|
225
|
+
const setError = (message) => {
|
|
226
|
+
if (message == null) {
|
|
227
|
+
currentError.value = null;
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
errorSet = true;
|
|
231
|
+
currentError.value = {
|
|
232
|
+
kind: "unknown",
|
|
233
|
+
message,
|
|
234
|
+
raw: message
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
const setFieldError = (field, message) => {
|
|
238
|
+
if (message == null) {
|
|
239
|
+
fieldError.value = null;
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
errorSet = true;
|
|
243
|
+
fieldError.value = message;
|
|
244
|
+
};
|
|
245
|
+
const clearErrors = () => {
|
|
246
|
+
currentError.value = null;
|
|
247
|
+
fieldError.value = null;
|
|
248
|
+
};
|
|
249
|
+
const setRawError = async (raw, meta) => {
|
|
250
|
+
const info = await buildClassifier(req)(raw, meta);
|
|
251
|
+
if (req.kind === "prompt" && info.fieldErrors?.length) fieldError.value = (info.fieldErrors.find((f) => f.field === "value") ?? info.fieldErrors[0]).messages.join(" ");
|
|
252
|
+
currentError.value = info;
|
|
253
|
+
errorSet = true;
|
|
254
|
+
return info;
|
|
255
|
+
};
|
|
256
|
+
return {
|
|
257
|
+
value,
|
|
258
|
+
signal: controller.signal,
|
|
259
|
+
setError,
|
|
260
|
+
setRawError,
|
|
261
|
+
setFieldError,
|
|
262
|
+
clearErrors,
|
|
263
|
+
setLoading: (v) => {
|
|
264
|
+
loading.value = v;
|
|
265
|
+
},
|
|
266
|
+
close: (action = "close") => finish(action),
|
|
267
|
+
_errorSet: () => errorSet
|
|
268
|
+
};
|
|
828
269
|
}
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
onClick: onRetry
|
|
860
|
-
}, {
|
|
861
|
-
default: withCtx(() => [createTextVNode(toDisplayString(mergedTexts.value.retryLabel), 1)]),
|
|
862
|
-
_: 1
|
|
863
|
-
}, 8, ["data-testid"])])) : createCommentVNode("", true)
|
|
864
|
-
])]),
|
|
865
|
-
_: 1
|
|
866
|
-
}, 8, [
|
|
867
|
-
"tone",
|
|
868
|
-
"title",
|
|
869
|
-
"closable",
|
|
870
|
-
"data-testid",
|
|
871
|
-
"data-kind"
|
|
872
|
-
])) : createCommentVNode("", true);
|
|
873
|
-
};
|
|
874
|
-
}
|
|
875
|
-
});
|
|
876
|
-
//#endregion
|
|
877
|
-
//#region src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue
|
|
878
|
-
var GrUploadErrorBanner_default = /* @__PURE__ */ defineComponent({
|
|
879
|
-
__name: "GrUploadErrorBanner",
|
|
880
|
-
props: {
|
|
881
|
-
error: {},
|
|
882
|
-
files: { default: () => [] },
|
|
883
|
-
texts: { default: () => ({}) },
|
|
884
|
-
tone: { default: void 0 },
|
|
885
|
-
toneByKind: { default: () => ({}) },
|
|
886
|
-
canRetry: {
|
|
887
|
-
type: Boolean,
|
|
888
|
-
default: true
|
|
889
|
-
},
|
|
890
|
-
canDismiss: {
|
|
891
|
-
type: Boolean,
|
|
892
|
-
default: true
|
|
893
|
-
},
|
|
894
|
-
autoHideKinds: { default: () => [] },
|
|
895
|
-
testIdPrefix: { default: "upload-error" }
|
|
896
|
-
},
|
|
897
|
-
emits: ["retry", "dismiss"],
|
|
898
|
-
setup(__props, { emit: __emit }) {
|
|
899
|
-
/**
|
|
900
|
-
* Тонкая обёртка над `GrResponseErrorBanner` с предсетами для сценария
|
|
901
|
-
* «загрузка файлов»:
|
|
902
|
-
*
|
|
903
|
-
* - Включена кнопка «Повторить» по умолчанию (`canRetry=true`).
|
|
904
|
-
* - Тексты сдвинуты под загрузку файлов.
|
|
905
|
-
* - Опциональный prop `files` пробрасывает контекст наружу через `retry`.
|
|
906
|
-
*
|
|
907
|
-
* Парсеры/нормализация — те же, что у базового баннера. Если нужны кастомные
|
|
908
|
-
* парсеры — используйте напрямую `GrResponseErrorBanner` + `useResponseError`.
|
|
909
|
-
*/
|
|
910
|
-
const props = __props;
|
|
911
|
-
const emit = __emit;
|
|
912
|
-
const UPLOAD_TEXTS = {
|
|
913
|
-
networkTitle: "Failed to upload files",
|
|
914
|
-
networkMessage: "Check your connection and try again.",
|
|
915
|
-
validationTitle: "Files did not pass validation",
|
|
916
|
-
validationMessage: "Some of the files do not meet the requirements.",
|
|
917
|
-
serverTitle: "Upload error on the server",
|
|
918
|
-
serverMessage: "The server could not process the upload. Please try again."
|
|
919
|
-
};
|
|
920
|
-
const mergedTexts = computed(() => ({
|
|
921
|
-
...UPLOAD_TEXTS,
|
|
922
|
-
...props.texts
|
|
923
|
-
}));
|
|
924
|
-
function onRetry(info) {
|
|
925
|
-
emit("retry", {
|
|
926
|
-
error: info,
|
|
927
|
-
files: props.files
|
|
928
|
-
});
|
|
270
|
+
async function handleConfirm() {
|
|
271
|
+
const req = active.value;
|
|
272
|
+
if (!req) return;
|
|
273
|
+
const value = req.kind === "prompt" ? promptValue.value : void 0;
|
|
274
|
+
if (!req.onConfirm) {
|
|
275
|
+
finish("confirm", value);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
currentError.value = null;
|
|
279
|
+
fieldError.value = null;
|
|
280
|
+
loading.value = true;
|
|
281
|
+
const ctx = buildContext(req, value);
|
|
282
|
+
try {
|
|
283
|
+
const result = await req.onConfirm(ctx);
|
|
284
|
+
loading.value = false;
|
|
285
|
+
if (finishing) return;
|
|
286
|
+
if (result === false) return;
|
|
287
|
+
if (currentError.value || fieldError.value || ctx._errorSet()) return;
|
|
288
|
+
finish("confirm", value);
|
|
289
|
+
} catch (error) {
|
|
290
|
+
loading.value = false;
|
|
291
|
+
if (finishing) return;
|
|
292
|
+
if (!ctx._errorSet()) await ctx.setRawError(error);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function handleCancel() {
|
|
296
|
+
finish("cancel");
|
|
297
|
+
}
|
|
298
|
+
function handleModelUpdate(value) {
|
|
299
|
+
if (!value) finish("close");
|
|
929
300
|
}
|
|
301
|
+
onBeforeUnmount(() => {
|
|
302
|
+
cleanupExternalAbort();
|
|
303
|
+
controller?.abort();
|
|
304
|
+
});
|
|
305
|
+
const sharedProps = computed(() => {
|
|
306
|
+
const o = active.value?.options ?? {};
|
|
307
|
+
return {
|
|
308
|
+
title: o.title,
|
|
309
|
+
size: o.size,
|
|
310
|
+
closeOnBackdrop: o.closeOnBackdrop,
|
|
311
|
+
closeOnEsc: o.closeOnEsc,
|
|
312
|
+
showHeader: o.showHeader,
|
|
313
|
+
showCloseButton: o.showCloseButton,
|
|
314
|
+
headerConfig: o.headerConfig,
|
|
315
|
+
footerConfig: o.footerConfig,
|
|
316
|
+
bodyConfig: o.bodyConfig,
|
|
317
|
+
closeLabel: o.closeLabel,
|
|
318
|
+
buttonSize: o.buttonSize,
|
|
319
|
+
confirmText: o.confirmText,
|
|
320
|
+
confirmVariant: o.confirmVariant,
|
|
321
|
+
confirmTone: o.confirmTone
|
|
322
|
+
};
|
|
323
|
+
});
|
|
930
324
|
return (_ctx, _cache) => {
|
|
931
|
-
return openBlock(), createBlock(
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
"
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
325
|
+
return active.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [active.value.kind === "prompt" ? (openBlock(), createBlock(GrPromptDialog_default, mergeProps({ key: 0 }, sharedProps.value, {
|
|
326
|
+
value: promptValue.value,
|
|
327
|
+
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => promptValue.value = $event),
|
|
328
|
+
"model-value": open.value,
|
|
329
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
330
|
+
label: active.value.options.label,
|
|
331
|
+
placeholder: active.value.options.placeholder,
|
|
332
|
+
required: active.value.options.required ?? false,
|
|
333
|
+
"required-error-text": active.value.options.requiredErrorText,
|
|
334
|
+
"cancel-text": active.value.options.cancelText,
|
|
335
|
+
error: currentError.value,
|
|
336
|
+
"field-error": fieldError.value,
|
|
337
|
+
"confirm-loading": loading.value,
|
|
338
|
+
"close-on-confirm": false,
|
|
339
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
340
|
+
onConfirm: handleConfirm,
|
|
341
|
+
onCancel: handleCancel
|
|
342
|
+
}), null, 16, [
|
|
343
|
+
"value",
|
|
344
|
+
"model-value",
|
|
345
|
+
"description",
|
|
346
|
+
"label",
|
|
347
|
+
"placeholder",
|
|
348
|
+
"required",
|
|
349
|
+
"required-error-text",
|
|
350
|
+
"cancel-text",
|
|
943
351
|
"error",
|
|
944
|
-
"
|
|
945
|
-
"
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
"
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
clientTitle: "Failed to save",
|
|
996
|
-
serverTitle: "Save error",
|
|
997
|
-
serverMessage: "Could not save the data. Please try again later."
|
|
998
|
-
};
|
|
999
|
-
const mergedTexts = computed(() => ({
|
|
1000
|
-
...FORM_TEXTS,
|
|
1001
|
-
...props.texts
|
|
1002
|
-
}));
|
|
1003
|
-
return (_ctx, _cache) => {
|
|
1004
|
-
return openBlock(), createBlock(GrResponseErrorBanner_default, {
|
|
1005
|
-
error: props.error,
|
|
1006
|
-
texts: mergedTexts.value,
|
|
1007
|
-
tone: props.tone,
|
|
1008
|
-
"tone-by-kind": props.toneByKind,
|
|
1009
|
-
"field-labels": props.fieldLabels,
|
|
1010
|
-
"show-field-labels": "",
|
|
1011
|
-
"can-retry": props.canRetry,
|
|
1012
|
-
"can-dismiss": props.canDismiss,
|
|
1013
|
-
"auto-hide-kinds": props.autoHideKinds,
|
|
1014
|
-
"test-id-prefix": props.testIdPrefix,
|
|
1015
|
-
onRetry: _cache[0] || (_cache[0] = (info) => emit("retry", info)),
|
|
1016
|
-
onDismiss: _cache[1] || (_cache[1] = ($event) => emit("dismiss"))
|
|
1017
|
-
}, null, 8, [
|
|
352
|
+
"field-error",
|
|
353
|
+
"confirm-loading"
|
|
354
|
+
])) : active.value.kind === "alert" ? (openBlock(), createBlock(GrConfirmDialog_default, mergeProps({
|
|
355
|
+
key: 1,
|
|
356
|
+
"model-value": open.value
|
|
357
|
+
}, sharedProps.value, {
|
|
358
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
359
|
+
error: currentError.value,
|
|
360
|
+
"confirm-loading": loading.value,
|
|
361
|
+
"close-on-confirm": false,
|
|
362
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
363
|
+
onConfirm: handleConfirm
|
|
364
|
+
}), {
|
|
365
|
+
footer: withCtx(() => [createElementVNode("div", _hoisted_1, [createVNode(GrButton_default, {
|
|
366
|
+
"data-testid": "ds-alert-confirm",
|
|
367
|
+
variant: sharedProps.value.confirmVariant ?? "primary",
|
|
368
|
+
tone: sharedProps.value.confirmTone ?? "primary",
|
|
369
|
+
size: sharedProps.value.buttonSize,
|
|
370
|
+
loading: loading.value,
|
|
371
|
+
onClick: handleConfirm
|
|
372
|
+
}, {
|
|
373
|
+
default: withCtx(() => [createTextVNode(toDisplayString(sharedProps.value.confirmText ?? "OK"), 1)]),
|
|
374
|
+
_: 1
|
|
375
|
+
}, 8, [
|
|
376
|
+
"variant",
|
|
377
|
+
"tone",
|
|
378
|
+
"size",
|
|
379
|
+
"loading"
|
|
380
|
+
])])]),
|
|
381
|
+
_: 1
|
|
382
|
+
}, 16, [
|
|
383
|
+
"model-value",
|
|
384
|
+
"description",
|
|
385
|
+
"error",
|
|
386
|
+
"confirm-loading"
|
|
387
|
+
])) : (openBlock(), createBlock(GrConfirmDialog_default, mergeProps({
|
|
388
|
+
key: 2,
|
|
389
|
+
"model-value": open.value
|
|
390
|
+
}, sharedProps.value, {
|
|
391
|
+
description: active.value.options.message ?? active.value.options.description,
|
|
392
|
+
"cancel-text": active.value.options.cancelText,
|
|
393
|
+
error: currentError.value,
|
|
394
|
+
"confirm-loading": loading.value,
|
|
395
|
+
"close-on-confirm": false,
|
|
396
|
+
"onUpdate:modelValue": handleModelUpdate,
|
|
397
|
+
onConfirm: handleConfirm,
|
|
398
|
+
onCancel: handleCancel
|
|
399
|
+
}), null, 16, [
|
|
400
|
+
"model-value",
|
|
401
|
+
"description",
|
|
402
|
+
"cancel-text",
|
|
1018
403
|
"error",
|
|
1019
|
-
"
|
|
1020
|
-
|
|
1021
|
-
"tone-by-kind",
|
|
1022
|
-
"field-labels",
|
|
1023
|
-
"can-retry",
|
|
1024
|
-
"can-dismiss",
|
|
1025
|
-
"auto-hide-kinds",
|
|
1026
|
-
"test-id-prefix"
|
|
1027
|
-
]);
|
|
404
|
+
"confirm-loading"
|
|
405
|
+
]))], 64)) : createCommentVNode("", true);
|
|
1028
406
|
};
|
|
1029
407
|
}
|
|
1030
408
|
});
|
|
1031
409
|
//#endregion
|
|
1032
|
-
//#region src/components/
|
|
410
|
+
//#region src/components/GrDialogService/useDialogService.ts
|
|
1033
411
|
/**
|
|
1034
|
-
*
|
|
1035
|
-
* `
|
|
1036
|
-
*
|
|
412
|
+
* `useDialogService` — императивный сервис диалогов (в духе Element Plus
|
|
413
|
+
* `ElMessageBox`). Позволяет вызывать `confirm`/`alert`/`prompt` из `<script>`
|
|
414
|
+
* или `.ts` без вставки компонента в шаблон.
|
|
415
|
+
*
|
|
416
|
+
* Поверх существующих `GrConfirmDialog`/`GrPromptDialog`: лениво монтирует
|
|
417
|
+
* единый хост (`GrDialogServiceHost`) в `document.body`, наследуя контекст
|
|
418
|
+
* приложения (i18n / тема / `granular-provider`). Диалоги сериализуются
|
|
419
|
+
* очередью FIFO.
|
|
1037
420
|
*/
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
421
|
+
var mounted = false;
|
|
422
|
+
var container = null;
|
|
423
|
+
var cachedAppContext = null;
|
|
424
|
+
function ensureMounted(appContext) {
|
|
425
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
426
|
+
if (appContext) cachedAppContext = appContext;
|
|
427
|
+
if (mounted) return;
|
|
428
|
+
container = document.createElement("div");
|
|
429
|
+
container.setAttribute("data-gr-dialog-service-host", "");
|
|
430
|
+
document.body.appendChild(container);
|
|
431
|
+
const vnode = createVNode(GrDialogServiceHost_default);
|
|
432
|
+
vnode.appContext = cachedAppContext ?? null;
|
|
433
|
+
render(vnode, container);
|
|
434
|
+
mounted = true;
|
|
435
|
+
}
|
|
436
|
+
/** Тестовая/служебная очистка смонтированного хоста. */
|
|
437
|
+
function teardownDialogService() {
|
|
438
|
+
if (container) {
|
|
439
|
+
render(null, container);
|
|
440
|
+
container.remove();
|
|
441
|
+
container = null;
|
|
1047
442
|
}
|
|
1048
|
-
|
|
1049
|
-
|
|
443
|
+
mounted = false;
|
|
444
|
+
dialogQueue.splice(0, dialogQueue.length);
|
|
445
|
+
}
|
|
446
|
+
function enqueue(kind, message, options, onConfirm) {
|
|
447
|
+
ensureMounted(options.appContext ?? cachedAppContext);
|
|
448
|
+
const id = makeDialogId();
|
|
449
|
+
let resolveFn;
|
|
450
|
+
const promise = new Promise((resolve) => {
|
|
451
|
+
resolveFn = resolve;
|
|
452
|
+
});
|
|
453
|
+
const request = {
|
|
454
|
+
id,
|
|
455
|
+
kind,
|
|
456
|
+
message,
|
|
457
|
+
options: {
|
|
458
|
+
...options,
|
|
459
|
+
message
|
|
460
|
+
},
|
|
461
|
+
onConfirm,
|
|
462
|
+
resolve: resolveFn
|
|
463
|
+
};
|
|
464
|
+
dialogQueue.push(request);
|
|
465
|
+
const close = () => {
|
|
466
|
+
const index = dialogQueue.findIndex((item) => item.id === id);
|
|
467
|
+
if (index < 0) return;
|
|
468
|
+
dialogQueue.splice(index, 1);
|
|
469
|
+
resolveFn({ action: "close" });
|
|
470
|
+
};
|
|
471
|
+
return {
|
|
472
|
+
promise,
|
|
473
|
+
close
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
function withClose(promise, close) {
|
|
477
|
+
const result = promise;
|
|
478
|
+
result.close = close;
|
|
479
|
+
return result;
|
|
480
|
+
}
|
|
481
|
+
function mergeErrorDefaults(defaults, options) {
|
|
482
|
+
return {
|
|
483
|
+
size: defaults.size,
|
|
484
|
+
confirmText: defaults.confirmText,
|
|
485
|
+
confirmVariant: defaults.confirmVariant,
|
|
486
|
+
confirmTone: defaults.confirmTone,
|
|
487
|
+
buttonSize: defaults.buttonSize,
|
|
488
|
+
closeOnBackdrop: defaults.closeOnBackdrop,
|
|
489
|
+
closeOnEsc: defaults.closeOnEsc,
|
|
490
|
+
errorParsers: defaults.errorParsers,
|
|
491
|
+
errorTexts: defaults.errorTexts,
|
|
492
|
+
errorMessageKey: defaults.errorMessageKey,
|
|
493
|
+
fieldLabels: defaults.fieldLabels,
|
|
494
|
+
...options
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Создаёт сервис диалогов. Опциональные `defaults` применяются ко всем
|
|
499
|
+
* вызовам (можно переопределить в каждом конкретном вызове).
|
|
500
|
+
*
|
|
501
|
+
* Контекст приложения кэшируется автоматически при первом вызове внутри
|
|
502
|
+
* `setup`. Для вызовов вне компонента используйте `setAppContext`.
|
|
503
|
+
*/
|
|
504
|
+
function useDialogService(defaults = {}) {
|
|
505
|
+
const instance = getCurrentInstance();
|
|
506
|
+
if (instance?.appContext && !cachedAppContext) cachedAppContext = instance.appContext;
|
|
507
|
+
function confirm(message, options = {}) {
|
|
508
|
+
const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
509
|
+
return withClose(promise.then((r) => r.action === "confirm"), close);
|
|
1050
510
|
}
|
|
1051
|
-
|
|
1052
|
-
const
|
|
1053
|
-
|
|
1054
|
-
...extra ?? {}
|
|
1055
|
-
});
|
|
1056
|
-
options.onClassify?.(info);
|
|
1057
|
-
return info;
|
|
511
|
+
function alert(message, options = {}) {
|
|
512
|
+
const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
513
|
+
return withClose(promise.then(() => void 0), close);
|
|
1058
514
|
}
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
if (isAutoHidden(info.kind)) {
|
|
1063
|
-
currentError.value = null;
|
|
1064
|
-
return null;
|
|
1065
|
-
}
|
|
1066
|
-
currentError.value = info;
|
|
1067
|
-
return info;
|
|
515
|
+
function prompt(message, options = {}) {
|
|
516
|
+
const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
517
|
+
return withClose(promise.then((r) => r.action === "confirm" ? r.value ?? "" : null), close);
|
|
1068
518
|
}
|
|
1069
|
-
function
|
|
1070
|
-
|
|
519
|
+
function open(kind, message, options = {}) {
|
|
520
|
+
const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm);
|
|
521
|
+
return withClose(promise, close);
|
|
1071
522
|
}
|
|
1072
|
-
function
|
|
1073
|
-
|
|
523
|
+
function closeAll() {
|
|
524
|
+
while (dialogQueue.length > 0) dialogQueue.pop().resolve({ action: "close" });
|
|
1074
525
|
}
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
if (!info) return;
|
|
1078
|
-
await handler(info);
|
|
1079
|
-
currentError.value = null;
|
|
526
|
+
function setAppContext(ctx) {
|
|
527
|
+
cachedAppContext = ctx;
|
|
1080
528
|
}
|
|
1081
529
|
return {
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
dismiss,
|
|
1089
|
-
reset: dismiss,
|
|
1090
|
-
retry
|
|
530
|
+
confirm,
|
|
531
|
+
alert,
|
|
532
|
+
prompt,
|
|
533
|
+
open,
|
|
534
|
+
closeAll,
|
|
535
|
+
setAppContext
|
|
1091
536
|
};
|
|
1092
537
|
}
|
|
538
|
+
/** Готовый синглтон-сервис с дефолтными настройками. */
|
|
539
|
+
var dialogService = useDialogService();
|
|
540
|
+
//#endregion
|
|
541
|
+
//#region src/components/GrDialogService/config.ts
|
|
542
|
+
var grDialogServiceConfig = defineGranularComponent(import.meta.url, {
|
|
543
|
+
name: "GrDialogServiceHost",
|
|
544
|
+
dependencies: [
|
|
545
|
+
"GrButton",
|
|
546
|
+
"GrDialog",
|
|
547
|
+
"GrConfirmDialog",
|
|
548
|
+
"GrPromptDialog",
|
|
549
|
+
"GrResponseErrorBanner"
|
|
550
|
+
]
|
|
551
|
+
});
|
|
1093
552
|
//#endregion
|
|
1094
553
|
//#region src/components/shared/tones.ts
|
|
1095
554
|
/**
|
|
@@ -1111,4 +570,4 @@ var GR_TONES = [
|
|
|
1111
570
|
"azure"
|
|
1112
571
|
];
|
|
1113
572
|
//#endregion
|
|
1114
|
-
export { DEFAULT_AUTO_HIDE_KINDS, DEFAULT_GR_DIALOG_BODY_CONFIG, DEFAULT_GR_DIALOG_FOOTER_CONFIG, DEFAULT_GR_DIALOG_HEADER_CONFIG, DEFAULT_RESPONSE_ERROR_TEXTS, DEFAULT_TONE_BY_KIND, FileValidationError, GR_COLLAPSE_CONTEXT, GR_RADIO_GROUP_CONTEXT, GR_TONES, GR_UPLOAD_STATE_IDLE, GrAlert_default as GrAlert, GrAvatar_default as GrAvatar, GrBadge_default as GrBadge, GrBadgeWrap_default as GrBadgeWrap, GrBottomNav_default as GrBottomNav, GrButton_default as GrButton, GrButtonGroup_default as GrButtonGroup, GrCard_default as GrCard, GrCheckbox_default as GrCheckbox, GrCollapse_default as GrCollapse, GrCollapseItem_default as GrCollapseItem, GrConfirmDialog_default as GrConfirmDialog, GrDataTable_default as GrDataTable, GrDialog_default as GrDialog, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, GrDrawer_default as GrDrawer, GrDropdown_default as GrDropdown, GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, GrEmptyState_default as GrEmptyState, GrFileUpload_default as GrFileUpload, GrFormErrorBanner_default as GrFormErrorBanner, GrFormField_default as GrFormField, GrFormFile_default as GrFormFile, GrFormSection_default as GrFormSection, GrIcon_default as GrIcon, GrImageViewer_default as GrImageViewer, GrInput_default as GrInput, GrInputTag_default as GrInputTag, GrLink_default as GrLink, GrList_default as GrList, GrListItem_default as GrListItem, GrLoading_default as GrLoading, GrModal_default as GrModal, GrNavbar_default as GrNavbar, GrNumberInput_default as GrNumberInput, GrPagination_default as GrPagination, GrProgressBar_default as GrProgressBar, GrPromptDialog_default as GrPromptDialog, GrRadio_default as GrRadio, GrRadioGroup_default as GrRadioGroup, GrResponseErrorBanner_default as GrResponseErrorBanner, GrSegmented_default as GrSegmented, GrSelect_default as GrSelect, GrSidebar_default as GrSidebar, GrSkeleton_default as GrSkeleton, GrSwitch_default as GrSwitch, GrTable_default as GrTable, GrTabs_default as GrTabs, GrTextarea_default as GrTextarea, GrToaster_default as GrToaster, GrTooltip_default as GrTooltip, GrTree_default as GrTree, GrTreeSelect_default as GrTreeSelect, GrUploadAbortError, GrUploadErrorBanner_default as GrUploadErrorBanner, GrUploadHttpError, abortErrorParser, acceptValidator, allowedExtensionsValidator, allowedMimeTypesValidator, createLoading, createResponseErrorClassifier, defaultResponseErrorParsers, extendDefaultParsers, fileValidationParser, getGrModalPanelClass, grAlertConfig, grAvatarConfig, grAvatarSafelist, grBadgeConfig, grBadgeSafelist, grBadgeWrapConfig, grBottomNavConfig, grButtonClass, grButtonClassTokens, grButtonConfig, grButtonGroupConfig, grButtonSafelist, grCardConfig, grCheckboxConfig, grCollapseConfig, grConfirmDialogConfig, grDataTableConfig, grDialogSafelist, grDrawerConfig, grDrawerSafelist, grDropdownConfig, grDropdownMenuConfig, grDropdownSafelist, grEmptyStateConfig, grFileUploadConfig, grFormFieldConfig, grFormFileConfig, grFormSectionConfig, grIconConfig, grImageViewerConfig, grInputConfig, grInputSafelist, grInputTagConfig, grInputTagSafelist, grLinkConfig, grLinkSafelist, grListConfig, grLoadingConfig, grLoadingSafelist, grModalClassTokens, grModalConfig, grModalSafelist, grNavbarConfig, grNumberInputConfig, grNumberInputSafelist, grPaginationConfig, grProgressBarConfig, grProgressBarSafelist, grPromptDialogConfig, grRadioConfig, grRadioGroupConfig, grRadioSafelist, grSegmentedConfig, grSegmentedSafelist, grSelectConfig, grSelectSafelist, grSidebarConfig, grSkeletonConfig, grSwitchConfig, grSwitchSafelist, grTableConfig, grTabsConfig, grTextareaConfig, grTextareaSafelist, grToasterConfig, grToasterSafelist, grTooltipConfig, grTreeConfig, grTreeSafelist, grTreeSelectConfig, grTreeSelectSafelist, httpStatusParser, initThemeEarly, jsonApiErrorParser, laravelValidationParser, matchAccept, maxFileSizeBytesValidator, maxSizeMbValidator, maxTotalSizeBytesValidator, networkErrorParser, normalizeError, normalizeFiles, plainMessageParser, problemDetailsParser, resolveGrDialogSectionConfig, resolveGrDialogTitle, resolveResponseErrorTitle, runFileValidators, useResponseError, useTheme, useToast, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };
|
|
573
|
+
export { DEFAULT_AUTO_HIDE_KINDS, DEFAULT_GR_DIALOG_BODY_CONFIG, DEFAULT_GR_DIALOG_FOOTER_CONFIG, DEFAULT_GR_DIALOG_HEADER_CONFIG, DEFAULT_RESPONSE_ERROR_TEXTS, DEFAULT_TONE_BY_KIND, FileValidationError, GR_COLLAPSE_CONTEXT, GR_RADIO_GROUP_CONTEXT, GR_TONES, GR_UPLOAD_STATE_IDLE, GrAlert_default as GrAlert, GrAvatar_default as GrAvatar, GrBadge_default as GrBadge, GrBadgeWrap_default as GrBadgeWrap, GrBottomNav_default as GrBottomNav, GrButton_default as GrButton, GrButtonGroup_default as GrButtonGroup, GrCard_default as GrCard, GrCheckbox_default as GrCheckbox, GrCollapse_default as GrCollapse, GrCollapseItem_default as GrCollapseItem, GrConfirmDialog_default as GrConfirmDialog, GrDataTable_default as GrDataTable, GrDialog_default as GrDialog, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, GrDialogServiceHost_default as GrDialogServiceHost, GrDrawer_default as GrDrawer, GrDropdown_default as GrDropdown, GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, GrEmptyState_default as GrEmptyState, GrFileUpload_default as GrFileUpload, GrFormErrorBanner_default as GrFormErrorBanner, GrFormField_default as GrFormField, GrFormFile_default as GrFormFile, GrFormSection_default as GrFormSection, GrIcon_default as GrIcon, GrImageViewer_default as GrImageViewer, GrInput_default as GrInput, GrInputTag_default as GrInputTag, GrLink_default as GrLink, GrList_default as GrList, GrListItem_default as GrListItem, GrLoading_default as GrLoading, GrModal_default as GrModal, GrNavbar_default as GrNavbar, GrNumberInput_default as GrNumberInput, GrPagination_default as GrPagination, GrProgressBar_default as GrProgressBar, GrPromptDialog_default as GrPromptDialog, GrRadio_default as GrRadio, GrRadioGroup_default as GrRadioGroup, GrResponseErrorBanner_default as GrResponseErrorBanner, GrSegmented_default as GrSegmented, GrSelect_default as GrSelect, GrSidebar_default as GrSidebar, GrSkeleton_default as GrSkeleton, GrSwitch_default as GrSwitch, GrTable_default as GrTable, GrTabs_default as GrTabs, GrTextarea_default as GrTextarea, GrToaster_default as GrToaster, GrTooltip_default as GrTooltip, GrTree_default as GrTree, GrTreeSelect_default as GrTreeSelect, GrUploadAbortError, GrUploadErrorBanner_default as GrUploadErrorBanner, GrUploadHttpError, abortErrorParser, acceptValidator, allowedExtensionsValidator, allowedMimeTypesValidator, coreResponseErrorParsers, createLoading, createResponseErrorClassifier, defaultResponseErrorParsers, dialogService, extendDefaultParsers, fileValidationParser, getGrModalPanelClass, grAlertConfig, grAvatarConfig, grAvatarSafelist, grBadgeConfig, grBadgeSafelist, grBadgeWrapConfig, grBottomNavConfig, grButtonClass, grButtonClassTokens, grButtonConfig, grButtonGroupConfig, grButtonSafelist, grCardConfig, grCheckboxConfig, grCollapseConfig, grConfirmDialogConfig, grDataTableConfig, grDialogSafelist, grDialogServiceConfig, grDrawerConfig, grDrawerSafelist, grDropdownConfig, grDropdownMenuConfig, grDropdownSafelist, grEmptyStateConfig, grFileUploadConfig, grFormFieldConfig, grFormFileConfig, grFormSectionConfig, grIconConfig, grImageViewerConfig, grInputConfig, grInputSafelist, grInputTagConfig, grInputTagSafelist, grLinkConfig, grLinkSafelist, grListConfig, grLoadingConfig, grLoadingSafelist, grModalClassTokens, grModalConfig, grModalSafelist, grNavbarConfig, grNumberInputConfig, grNumberInputSafelist, grPaginationConfig, grProgressBarConfig, grProgressBarSafelist, grPromptDialogConfig, grRadioConfig, grRadioGroupConfig, grRadioSafelist, grSegmentedConfig, grSegmentedSafelist, grSelectConfig, grSelectSafelist, grSidebarConfig, grSkeletonConfig, grSwitchConfig, grSwitchSafelist, grTableConfig, grTabsConfig, grTextareaConfig, grTextareaSafelist, grToasterConfig, grToasterSafelist, grTooltipConfig, grTreeConfig, grTreeSafelist, grTreeSelectConfig, grTreeSelectSafelist, httpStatusParser, initThemeEarly, jsonApiErrorParser, laravelValidationParser, matchAccept, maxFileSizeBytesValidator, maxSizeMbValidator, maxTotalSizeBytesValidator, networkErrorParser, normalizeError, normalizeFiles, plainMessageParser, problemDetailsParser, resolveGrDialogSectionConfig, resolveGrDialogTitle, resolveResponseErrorTitle, responseErrorParserPresets, runFileValidators, teardownDialogService, useDialogService, useResponseError, useTheme, useToast, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };
|