@feugene/granularity 0.4.0 → 0.4.1
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/chunks/_plugin-vue_export-helper-BG_EqiDU.js +8 -0
- package/dist/chunks/adapter-C7fKeUa4.js +6 -0
- package/dist/chunks/adapter-C7fKeUa4.js.map +1 -0
- package/dist/chunks/arrow-up-DNXrMoAI.js +25 -0
- package/dist/chunks/arrow-up-DNXrMoAI.js.map +1 -0
- package/dist/chunks/classTokens-BPeBXNzu.js +8 -0
- package/dist/chunks/classTokens-BPeBXNzu.js.map +1 -0
- package/dist/chunks/config-2wgwWaAB.js +10 -0
- package/dist/chunks/config-2wgwWaAB.js.map +1 -0
- package/dist/chunks/config-BKRmlivc.js +10 -0
- package/dist/chunks/config-BKRmlivc.js.map +1 -0
- package/dist/chunks/config-BRU5PR8_.js +10 -0
- package/dist/chunks/config-BRU5PR8_.js.map +1 -0
- package/dist/chunks/config-BUGfFjmC.js +16 -0
- package/dist/chunks/config-BUGfFjmC.js.map +1 -0
- package/dist/chunks/config-BXffa3ta.js +60 -0
- package/dist/chunks/config-BXffa3ta.js.map +1 -0
- package/dist/chunks/config-BaMO9dQh.js +22 -0
- package/dist/chunks/config-BaMO9dQh.js.map +1 -0
- package/dist/chunks/config-BbtK511H.js +11 -0
- package/dist/chunks/config-BbtK511H.js.map +1 -0
- package/dist/chunks/config-BcFOkUhh.js +15 -0
- package/dist/chunks/config-BcFOkUhh.js.map +1 -0
- package/dist/chunks/config-BcpRsZTe.js +10 -0
- package/dist/chunks/config-BcpRsZTe.js.map +1 -0
- package/dist/chunks/config-BhubOeci.js +15 -0
- package/dist/chunks/config-BhubOeci.js.map +1 -0
- package/dist/chunks/config-BhvNm4Pp.js +173 -0
- package/dist/chunks/config-BhvNm4Pp.js.map +1 -0
- package/dist/chunks/config-Bv2G0OU6.js +10 -0
- package/dist/chunks/config-Bv2G0OU6.js.map +1 -0
- package/dist/chunks/config-Bv5Dok4j.js +41 -0
- package/dist/chunks/config-Bv5Dok4j.js.map +1 -0
- package/dist/chunks/config-BzQ4S4Hb.js +11 -0
- package/dist/chunks/config-BzQ4S4Hb.js.map +1 -0
- package/dist/chunks/config-BzZGpWsj.js +11 -0
- package/dist/chunks/config-BzZGpWsj.js.map +1 -0
- package/dist/chunks/config-C0b_3LJV.js +42 -0
- package/dist/chunks/config-C0b_3LJV.js.map +1 -0
- package/dist/chunks/config-C2JKq8-2.js +60 -0
- package/dist/chunks/config-C2JKq8-2.js.map +1 -0
- package/dist/chunks/config-C6SBJxcH.js +10 -0
- package/dist/chunks/config-C6SBJxcH.js.map +1 -0
- package/dist/chunks/config-CJbjLC5X.js +55 -0
- package/dist/chunks/config-CJbjLC5X.js.map +1 -0
- package/dist/chunks/config-CJeyaUTp.js +40 -0
- package/dist/chunks/config-CJeyaUTp.js.map +1 -0
- package/dist/chunks/config-CMZE2fu0.js +11 -0
- package/dist/chunks/config-CMZE2fu0.js.map +1 -0
- package/dist/chunks/config-CU_CBd0k.js +24 -0
- package/dist/chunks/config-CU_CBd0k.js.map +1 -0
- package/dist/chunks/config-CYPU3ztl.js +26 -0
- package/dist/chunks/config-CYPU3ztl.js.map +1 -0
- package/dist/chunks/config-CcmeMlic.js +19 -0
- package/dist/chunks/config-CcmeMlic.js.map +1 -0
- package/dist/chunks/config-CdAx6ify2.js +11 -0
- package/dist/chunks/config-CdAx6ify2.js.map +1 -0
- package/dist/chunks/config-CxCAfXZ1.js +23 -0
- package/dist/chunks/config-CxCAfXZ1.js.map +1 -0
- package/dist/chunks/config-D1gSaT52.js +11 -0
- package/dist/chunks/config-D1gSaT52.js.map +1 -0
- package/dist/chunks/config-D7iuXJbl.js +11 -0
- package/dist/chunks/config-D7iuXJbl.js.map +1 -0
- package/dist/chunks/config-D7tRu8u3.js +11 -0
- package/dist/chunks/config-D7tRu8u3.js.map +1 -0
- package/dist/chunks/config-DBYCntwl.js +10 -0
- package/dist/chunks/config-DBYCntwl.js.map +1 -0
- package/dist/chunks/config-DFRYOcrP.js +11 -0
- package/dist/chunks/config-DFRYOcrP.js.map +1 -0
- package/dist/chunks/config-DW_RqmUp.js +10 -0
- package/dist/chunks/config-DW_RqmUp.js.map +1 -0
- package/dist/chunks/config-Dkq0HeLe.js +11 -0
- package/dist/chunks/config-Dkq0HeLe.js.map +1 -0
- package/dist/chunks/config-DlLE49_I.js +11 -0
- package/dist/chunks/config-DlLE49_I.js.map +1 -0
- package/dist/chunks/config-DvTUDLT1.js +46 -0
- package/dist/chunks/config-DvTUDLT1.js.map +1 -0
- package/dist/chunks/config-DwB5-qdP2.js +10 -0
- package/dist/chunks/config-DwB5-qdP2.js.map +1 -0
- package/dist/chunks/config-DxqMXzNV2.js +25 -0
- package/dist/chunks/config-DxqMXzNV2.js.map +1 -0
- package/dist/chunks/config-DxqpV-KM.js +47 -0
- package/dist/chunks/config-DxqpV-KM.js.map +1 -0
- package/dist/chunks/config-Dzz9P-GV2.js +11 -0
- package/dist/chunks/config-Dzz9P-GV2.js.map +1 -0
- package/dist/chunks/config-KGTIAFD92.js +10 -0
- package/dist/chunks/config-KGTIAFD92.js.map +1 -0
- package/dist/chunks/config-TyzU6gLf.js +10 -0
- package/dist/chunks/config-TyzU6gLf.js.map +1 -0
- package/dist/chunks/config-cn6knwud.js +37 -0
- package/dist/chunks/config-cn6knwud.js.map +1 -0
- package/dist/chunks/config-dD6Po-Cq.js +10 -0
- package/dist/chunks/config-dD6Po-Cq.js.map +1 -0
- package/dist/chunks/config-rFwazRKi.js +11 -0
- package/dist/chunks/config-rFwazRKi.js.map +1 -0
- package/dist/chunks/config-rQlbnEKn.js +10 -0
- package/dist/chunks/config-rQlbnEKn.js.map +1 -0
- package/dist/chunks/config-rxFL-6yF2.js +80 -0
- package/dist/chunks/config-rxFL-6yF2.js.map +1 -0
- package/dist/chunks/config-ug8O8epd.js +13 -0
- package/dist/chunks/config-ug8O8epd.js.map +1 -0
- package/dist/chunks/dialogShared-BtXUk6Zc.js +34 -0
- package/dist/chunks/dialogShared-BtXUk6Zc.js.map +1 -0
- package/dist/chunks/directives-Cuib0yOO.js +728 -0
- package/dist/chunks/directives-Cuib0yOO.js.map +1 -0
- package/dist/chunks/en-BMjJZttK.js +50 -0
- package/dist/chunks/en-BMjJZttK.js.map +1 -0
- package/dist/chunks/es-Cu_RlgIr.js +22 -0
- package/dist/chunks/es-Cu_RlgIr.js.map +1 -0
- package/dist/chunks/es-EYCf8G_1.js +50 -0
- package/dist/chunks/es-EYCf8G_1.js.map +1 -0
- package/dist/chunks/fileValidation-CgjTGoUx.js +221 -0
- package/dist/chunks/fileValidation-CgjTGoUx.js.map +1 -0
- package/dist/chunks/{grBadgeStyles-Bu4H8bFc.js → grBadgeStyles-pqqbVgLk.js} +20 -13
- package/dist/chunks/grBadgeStyles-pqqbVgLk.js.map +1 -0
- package/dist/chunks/{grButtonStyles-C5k0bN2e.js → grButtonStyles-BxZW2x0-.js} +62 -52
- package/dist/chunks/grButtonStyles-BxZW2x0-.js.map +1 -0
- package/dist/chunks/grDropdownStyles-DQfLh-bp.js +34 -0
- package/dist/chunks/grDropdownStyles-DQfLh-bp.js.map +1 -0
- package/dist/chunks/grLoadingStyles-CERsxyk9.js +19 -0
- package/dist/chunks/grLoadingStyles-CERsxyk9.js.map +1 -0
- package/dist/chunks/grModalStyles-Dv2NXBKi.js +49 -0
- package/dist/chunks/grModalStyles-Dv2NXBKi.js.map +1 -0
- package/dist/chunks/grSelectStyles-C1zNEkV7.js +52 -0
- package/dist/chunks/grSelectStyles-C1zNEkV7.js.map +1 -0
- package/dist/chunks/granularityI18n-BEWP9aJs.js +28 -0
- package/dist/chunks/granularityI18n-BEWP9aJs.js.map +1 -0
- package/dist/chunks/info-C0bHmdZq.js +28 -0
- package/dist/chunks/info-C0bHmdZq.js.map +1 -0
- package/dist/chunks/loader-circle-B2rWDk5u.js +25 -0
- package/dist/chunks/loader-circle-B2rWDk5u.js.map +1 -0
- package/dist/chunks/ru-DKswMSdd.js +50 -0
- package/dist/chunks/ru-DKswMSdd.js.map +1 -0
- package/dist/chunks/safelist-BF822K15.js +15 -0
- package/dist/chunks/safelist-BF822K15.js.map +1 -0
- package/dist/chunks/safelist-BY7z8fOl.js +26 -0
- package/dist/chunks/safelist-BY7z8fOl.js.map +1 -0
- package/dist/chunks/{shared-BqUqjuxn.js → shared-Bvjkhhm2.js} +151 -111
- package/dist/chunks/shared-Bvjkhhm2.js.map +1 -0
- package/dist/chunks/transition-mJ3PZCHH.js +1694 -0
- package/dist/chunks/transition-mJ3PZCHH.js.map +1 -0
- package/dist/chunks/x-Pa6C2hwi.js +25 -0
- package/dist/chunks/x-Pa6C2hwi.js.map +1 -0
- package/dist/chunks/x-circle-DQSlBLmX.js +69 -0
- package/dist/chunks/x-circle-DQSlBLmX.js.map +1 -0
- package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js +148 -0
- package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js.map +1 -0
- package/dist/components/GrAlert/index.js +3 -3
- package/dist/components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js +43 -0
- package/dist/components/GrAvatar/chunks/GrAvatar-BjnPKNAL.js.map +1 -0
- package/dist/components/GrAvatar/index.js +3 -3
- package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js +34 -0
- package/dist/components/GrBadge/chunks/GrBadge-wuIb4_2K.js.map +1 -0
- package/dist/components/GrBadge/index.js +3 -3
- package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CxtamOZ-.js +35 -0
- package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CxtamOZ-.js.map +1 -0
- package/dist/components/GrBadgeWrap/index.js +3 -3
- package/dist/components/GrBottomNav/chunks/GrBottomNav-CsmQ7mTJ.js +33 -0
- package/dist/components/GrBottomNav/chunks/GrBottomNav-CsmQ7mTJ.js.map +1 -0
- package/dist/components/GrBottomNav/index.js +3 -3
- package/dist/components/GrButton/chunks/GrButton-BmGdp8-4.js +85 -0
- package/dist/components/GrButton/chunks/GrButton-BmGdp8-4.js.map +1 -0
- package/dist/components/GrButton/index.js +5 -5
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CBj4tpms.js +23 -0
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CBj4tpms.js.map +1 -0
- package/dist/components/GrButtonGroup/index.js +3 -3
- package/dist/components/GrCard/chunks/GrCard-xtDcXBr7.js +13 -0
- package/dist/components/GrCard/chunks/GrCard-xtDcXBr7.js.map +1 -0
- package/dist/components/GrCard/index.js +3 -3
- package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js +136 -0
- package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js.map +1 -0
- package/dist/components/GrCheckbox/index.js +3 -3
- package/dist/components/GrCollapse/chunks/GrCollapse-HU20VTVn.js +207 -0
- package/dist/components/GrCollapse/chunks/GrCollapse-HU20VTVn.js.map +1 -0
- package/dist/components/GrCollapse/index.js +3 -3
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js +133 -0
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-DjGOX9Hd.js.map +1 -0
- package/dist/components/GrConfirmDialog/index.js +3 -3
- package/dist/components/GrDataTable/chunks/GrDataTable-QDOJWmdY.js +181 -0
- package/dist/components/GrDataTable/chunks/GrDataTable-QDOJWmdY.js.map +1 -0
- package/dist/components/GrDataTable/index.js +3 -3
- package/dist/components/GrDialog/chunks/GrDialog-gObmaVEl.js +223 -0
- package/dist/components/GrDialog/chunks/GrDialog-gObmaVEl.js.map +1 -0
- package/dist/components/GrDialog/index.js +4 -4
- package/dist/components/GrDrawer/chunks/GrDrawer-BJL_gTxI.js +158 -0
- package/dist/components/GrDrawer/chunks/GrDrawer-BJL_gTxI.js.map +1 -0
- package/dist/components/GrDrawer/index.js +3 -3
- package/dist/components/GrDropdown/chunks/GrDropdown-DVTU32T_.js +153 -0
- package/dist/components/GrDropdown/chunks/GrDropdown-DVTU32T_.js.map +1 -0
- package/dist/components/GrDropdown/index.js +3 -3
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-fePQRcgh.js +311 -0
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-fePQRcgh.js.map +1 -0
- package/dist/components/GrDropdownMenu/index.js +3 -3
- package/dist/components/GrEmptyState/chunks/GrEmptyState-Bs8d3tgb.js +64 -0
- package/dist/components/GrEmptyState/chunks/GrEmptyState-Bs8d3tgb.js.map +1 -0
- package/dist/components/GrEmptyState/index.js +3 -3
- package/dist/components/GrFileUpload/chunks/GrFileUpload-DVv8yXpl.js +370 -0
- package/dist/components/GrFileUpload/chunks/GrFileUpload-DVv8yXpl.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +4 -4
- package/dist/components/GrFormField/chunks/GrFormField-BzezYcS8.js +37 -0
- package/dist/components/GrFormField/chunks/GrFormField-BzezYcS8.js.map +1 -0
- package/dist/components/GrFormField/index.js +3 -3
- package/dist/components/GrFormFile/chunks/GrFormFile-DtZOypJW.js +315 -0
- package/dist/components/GrFormFile/chunks/GrFormFile-DtZOypJW.js.map +1 -0
- package/dist/components/GrFormFile/index.js +3 -3
- package/dist/components/GrFormSection/chunks/GrFormSection-BIPB1RIk.js +37 -0
- package/dist/components/GrFormSection/chunks/GrFormSection-BIPB1RIk.js.map +1 -0
- package/dist/components/GrFormSection/index.js +3 -3
- package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js +34 -0
- package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js.map +1 -0
- package/dist/components/GrIcon/index.js +3 -3
- package/dist/components/GrImageViewer/chunks/GrImageViewer-fn8ilJTA.js +399 -0
- package/dist/components/GrImageViewer/chunks/GrImageViewer-fn8ilJTA.js.map +1 -0
- package/dist/components/GrImageViewer/index.js +3 -3
- package/dist/components/GrInput/chunks/GrInput-DLLRrH1A.js +213 -0
- package/dist/components/GrInput/chunks/GrInput-DLLRrH1A.js.map +1 -0
- package/dist/components/GrInput/index.js +3 -3
- package/dist/components/GrInputTag/chunks/GrInputTag-CzrrBxgU.js +259 -0
- package/dist/components/GrInputTag/chunks/GrInputTag-CzrrBxgU.js.map +1 -0
- package/dist/components/GrInputTag/index.js +3 -3
- package/dist/components/GrLink/chunks/GrLink-Dhkid3Mp.js +82 -0
- package/dist/components/GrLink/chunks/GrLink-Dhkid3Mp.js.map +1 -0
- package/dist/components/GrLink/index.js +3 -3
- package/dist/components/GrList/chunks/GrList-CjgeVjhY.js +79 -0
- package/dist/components/GrList/chunks/GrList-CjgeVjhY.js.map +1 -0
- package/dist/components/GrList/index.js +3 -3
- package/dist/components/GrLoading/chunks/GrLoading-DihGX3ol.js +71 -0
- package/dist/components/GrLoading/chunks/GrLoading-DihGX3ol.js.map +1 -0
- package/dist/components/GrLoading/index.js +3 -3
- package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js +170 -0
- package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js.map +1 -0
- package/dist/components/GrModal/index.js +4 -4
- package/dist/components/GrNavbar/chunks/GrNavbar-CQOAfO6y.js +77 -0
- package/dist/components/GrNavbar/chunks/GrNavbar-CQOAfO6y.js.map +1 -0
- package/dist/components/GrNavbar/index.js +3 -3
- package/dist/components/GrNumberInput/chunks/GrNumberInput-CyHgUotG.js +399 -0
- package/dist/components/GrNumberInput/chunks/GrNumberInput-CyHgUotG.js.map +1 -0
- package/dist/components/GrNumberInput/index.js +3 -3
- package/dist/components/GrPagination/chunks/GrPagination-C5cxRJsF.js +116 -0
- package/dist/components/GrPagination/chunks/GrPagination-C5cxRJsF.js.map +1 -0
- package/dist/components/GrPagination/index.js +3 -3
- package/dist/components/GrProgressBar/chunks/GrProgressBar-C9wAAFxR.js +41 -0
- package/dist/components/GrProgressBar/chunks/GrProgressBar-C9wAAFxR.js.map +1 -0
- package/dist/components/GrProgressBar/index.js +3 -3
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-Cfq9bvL3.js +192 -0
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-Cfq9bvL3.js.map +1 -0
- package/dist/components/GrPromptDialog/index.js +3 -3
- package/dist/components/GrRadio/chunks/GrRadio-B_t_ZNVl.js +186 -0
- package/dist/components/GrRadio/chunks/GrRadio-B_t_ZNVl.js.map +1 -0
- package/dist/components/GrRadio/index.js +3 -3
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CVlgpUBr.js +82 -0
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CVlgpUBr.js.map +1 -0
- package/dist/components/GrRadioGroup/index.js +3 -3
- package/dist/components/GrSegmented/chunks/GrSegmented-BPl1koHc.js +325 -0
- package/dist/components/GrSegmented/chunks/GrSegmented-BPl1koHc.js.map +1 -0
- package/dist/components/GrSegmented/index.js +3 -3
- package/dist/components/GrSelect/chunks/GrSelect-aVqUL-1F.js +445 -0
- package/dist/components/GrSelect/chunks/GrSelect-aVqUL-1F.js.map +1 -0
- package/dist/components/GrSelect/index.js +3 -3
- package/dist/components/GrSidebar/chunks/GrSidebar-DVucgcfV.js +46 -0
- package/dist/components/GrSidebar/chunks/GrSidebar-DVucgcfV.js.map +1 -0
- package/dist/components/GrSidebar/index.js +3 -3
- package/dist/components/GrSkeleton/chunks/GrSkeleton-CDTvCSoH.js +35 -0
- package/dist/components/GrSkeleton/chunks/GrSkeleton-CDTvCSoH.js.map +1 -0
- package/dist/components/GrSkeleton/index.js +3 -3
- package/dist/components/GrSwitch/chunks/GrSwitch-Bnamgqb2.js +81 -0
- package/dist/components/GrSwitch/chunks/GrSwitch-Bnamgqb2.js.map +1 -0
- package/dist/components/GrSwitch/index.js +3 -3
- package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js +59 -0
- package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js.map +1 -0
- package/dist/components/GrTable/index.js +3 -3
- package/dist/components/GrTabs/chunks/GrTabs-CiGmcmvm.js +120 -0
- package/dist/components/GrTabs/chunks/GrTabs-CiGmcmvm.js.map +1 -0
- package/dist/components/GrTabs/index.js +3 -3
- package/dist/components/GrTextarea/chunks/GrTextarea-VBSc6A7D.js +73 -0
- package/dist/components/GrTextarea/chunks/GrTextarea-VBSc6A7D.js.map +1 -0
- package/dist/components/GrTextarea/index.js +3 -3
- package/dist/components/GrToaster/chunks/GrToaster-I1e-zCpf.js +173 -0
- package/dist/components/GrToaster/chunks/GrToaster-I1e-zCpf.js.map +1 -0
- package/dist/components/GrToaster/index.js +3 -3
- package/dist/components/GrTooltip/chunks/GrTooltip-CrV1gI_c.js +57 -0
- package/dist/components/GrTooltip/chunks/GrTooltip-CrV1gI_c.js.map +1 -0
- package/dist/components/GrTooltip/index.js +3 -3
- package/dist/components/GrTree/chunks/GrTree-Dlev9oBd.js +736 -0
- package/dist/components/GrTree/chunks/GrTree-Dlev9oBd.js.map +1 -0
- package/dist/components/GrTree/index.js +3 -3
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DN6XFjOD.js +456 -0
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DN6XFjOD.js.map +1 -0
- package/dist/components/GrTreeSelect/index.js +3 -3
- package/dist/composables/useTheme.js +41 -30
- package/dist/composables/useTheme.js.map +1 -0
- package/dist/composables/useToast.js +43 -34
- package/dist/composables/useToast.js.map +1 -0
- package/dist/directives/index.js +2 -2
- package/dist/fileValidation/index.js +2 -2
- package/dist/granular-provider-node.js +25 -14
- package/dist/granular-provider-node.js.map +1 -0
- package/dist/granular-provider.js +5 -3
- package/dist/granular-provider.js.map +1 -0
- package/dist/i18n/all.js +8 -6
- package/dist/i18n/all.js.map +1 -0
- package/dist/i18n/index.js +3 -3
- package/dist/index.js +105 -105
- package/dist/vue/index.js +66 -26
- package/dist/vue/index.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunks/_plugin-vue_export-helper-CHO2XVys.js +0 -8
- package/dist/chunks/adapter-D5uYoOZj.js +0 -4
- package/dist/chunks/arrow-up-Dv3dC3hu.js +0 -23
- package/dist/chunks/classTokens-CT1tqF2j.js +0 -6
- package/dist/chunks/config-B5JCvHys.js +0 -13
- package/dist/chunks/config-BDXa5Sna2.js +0 -9
- package/dist/chunks/config-BG5_FuZ-.js +0 -34
- package/dist/chunks/config-BMYKG1oB.js +0 -10
- package/dist/chunks/config-BQREEXFD.js +0 -8
- package/dist/chunks/config-BUZtbeTr.js +0 -40
- package/dist/chunks/config-BVXycfiO.js +0 -9
- package/dist/chunks/config-BZW-RL6E.js +0 -14
- package/dist/chunks/config-BhbfV-Is.js +0 -48
- package/dist/chunks/config-BmYFupZh.js +0 -8
- package/dist/chunks/config-BsZc_QQ-2.js +0 -20
- package/dist/chunks/config-C1Sn7mn-.js +0 -27
- package/dist/chunks/config-C4_REX-3.js +0 -9
- package/dist/chunks/config-CBFllZZ4.js +0 -9
- package/dist/chunks/config-CDyD_fCt.js +0 -8
- package/dist/chunks/config-CJeG727i.js +0 -149
- package/dist/chunks/config-CLawBqde.js +0 -21
- package/dist/chunks/config-CMz46RPG.js +0 -8
- package/dist/chunks/config-CO-7HRZd2.js +0 -8
- package/dist/chunks/config-CS7E7LME.js +0 -9
- package/dist/chunks/config-CVy124Xj.js +0 -8
- package/dist/chunks/config-CcixQGaN.js +0 -47
- package/dist/chunks/config-CiVXZxyQ.js +0 -9
- package/dist/chunks/config-CoMQmunP.js +0 -8
- package/dist/chunks/config-Cq6ufYtp.js +0 -9
- package/dist/chunks/config-D8CIEWcb.js +0 -8
- package/dist/chunks/config-D8hKc39m.js +0 -18
- package/dist/chunks/config-D9MxGwCJ.js +0 -8
- package/dist/chunks/config-DBXTZE36.js +0 -15
- package/dist/chunks/config-DK9C8O7L.js +0 -9
- package/dist/chunks/config-DTegOmx2.js +0 -8
- package/dist/chunks/config-DYI8XADo.js +0 -47
- package/dist/chunks/config-DlidGf7P.js +0 -8
- package/dist/chunks/config-DtNe7EIX.js +0 -35
- package/dist/chunks/config-EdWeK_ge.js +0 -17
- package/dist/chunks/config-FGAkxHFh.js +0 -8
- package/dist/chunks/config-M76gNxd2.js +0 -37
- package/dist/chunks/config-NuqoO_Of.js +0 -33
- package/dist/chunks/config-QsovJrku2.js +0 -66
- package/dist/chunks/config-R6F6zRJk.js +0 -9
- package/dist/chunks/config-SLwkDc4Q2.js +0 -9
- package/dist/chunks/config-aJ7sb62Y.js +0 -8
- package/dist/chunks/config-b9nc87Oc.js +0 -9
- package/dist/chunks/config-dSI8RttH2.js +0 -8
- package/dist/chunks/config-im2VHeSM.js +0 -9
- package/dist/chunks/config-vKeQ035f.js +0 -9
- package/dist/chunks/config-vMcxHlWi.js +0 -14
- package/dist/chunks/dialogShared-CONROtU2.js +0 -26
- package/dist/chunks/directives-Dr5NPOT8.js +0 -530
- package/dist/chunks/en-j3simI0h.js +0 -41
- package/dist/chunks/es-CIT9s_vo.js +0 -4
- package/dist/chunks/es-CLpJj7KP.js +0 -41
- package/dist/chunks/fileValidation-LFD-vwil.js +0 -193
- package/dist/chunks/grDropdownStyles-149X1NeB.js +0 -31
- package/dist/chunks/grLoadingStyles-Bjo7ylmq.js +0 -15
- package/dist/chunks/grModalStyles-Dmd4havY.js +0 -38
- package/dist/chunks/grSelectStyles-C3QKIn1J.js +0 -40
- package/dist/chunks/granularityI18n-8_v1B11L.js +0 -24
- package/dist/chunks/info-CNJnuTYC.js +0 -26
- package/dist/chunks/loader-circle-C5vCCMfB.js +0 -23
- package/dist/chunks/ru-CiOZPnBu.js +0 -41
- package/dist/chunks/safelist-Bq32hAXc.js +0 -13
- package/dist/chunks/safelist-CLcTRYB-.js +0 -22
- package/dist/chunks/transition-BJXMi52x.js +0 -1617
- package/dist/chunks/x--kxrj3ez.js +0 -23
- package/dist/chunks/x-circle-ChJ87u1v.js +0 -61
- package/dist/components/GrAlert/chunks/GrAlert-DLHkusb-.js +0 -129
- package/dist/components/GrAvatar/chunks/GrAvatar-BFYH3HJw.js +0 -32
- package/dist/components/GrBadge/chunks/GrBadge-D_AoqGrn.js +0 -27
- package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-C_N0QJfA.js +0 -26
- package/dist/components/GrBottomNav/chunks/GrBottomNav-Chpu3SVd.js +0 -21
- package/dist/components/GrButton/chunks/GrButton-BXVVt6Od.js +0 -67
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CmnYHVH7.js +0 -16
- package/dist/components/GrCard/chunks/GrCard-DEpN6Ptf.js +0 -10
- package/dist/components/GrCheckbox/chunks/GrCheckbox-DF3vJApB.js +0 -111
- package/dist/components/GrCollapse/chunks/GrCollapse-D7QYRqNa.js +0 -150
- package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-C7Eh8-Vn.js +0 -111
- package/dist/components/GrDataTable/chunks/GrDataTable-Dxsg1NMP.js +0 -142
- package/dist/components/GrDialog/chunks/GrDialog-BSd4-uP5.js +0 -169
- package/dist/components/GrDrawer/chunks/GrDrawer-DBBSwe1s.js +0 -135
- package/dist/components/GrDropdown/chunks/GrDropdown-BELyRP4A.js +0 -110
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-B8fuk7iP.js +0 -233
- package/dist/components/GrEmptyState/chunks/GrEmptyState-BPGoafJI.js +0 -49
- package/dist/components/GrFileUpload/chunks/GrFileUpload-BPzx3LEM.js +0 -294
- package/dist/components/GrFormField/chunks/GrFormField-Cn8g9eFP.js +0 -28
- package/dist/components/GrFormFile/chunks/GrFormFile-DfinD5Iv.js +0 -248
- package/dist/components/GrFormSection/chunks/GrFormSection-dKpQw-vh.js +0 -27
- package/dist/components/GrIcon/chunks/GrIcon-CXIHuG7L.js +0 -25
- package/dist/components/GrImageViewer/chunks/GrImageViewer-CQSNx-D7.js +0 -322
- package/dist/components/GrInput/chunks/GrInput-CLKX1inm.js +0 -158
- package/dist/components/GrInputTag/chunks/GrInputTag-BAtLody2.js +0 -214
- package/dist/components/GrLink/chunks/GrLink-BpXnly-Y.js +0 -59
- package/dist/components/GrList/chunks/GrList-BrFc7VdS.js +0 -55
- package/dist/components/GrLoading/chunks/GrLoading-dFuoryMY.js +0 -53
- package/dist/components/GrModal/chunks/GrModal-uaWXH08K.js +0 -136
- package/dist/components/GrNavbar/chunks/GrNavbar-KzLHgdjX.js +0 -62
- package/dist/components/GrNumberInput/chunks/GrNumberInput-rENn1802.js +0 -315
- package/dist/components/GrPagination/chunks/GrPagination-DP0x3rx6.js +0 -93
- package/dist/components/GrProgressBar/chunks/GrProgressBar-DpW93sOi.js +0 -29
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-ASfBwyzQ.js +0 -158
- package/dist/components/GrRadio/chunks/GrRadio-8BOo97XV.js +0 -147
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BymbUmqI.js +0 -66
- package/dist/components/GrSegmented/chunks/GrSegmented-CK5C_lN7.js +0 -250
- package/dist/components/GrSelect/chunks/GrSelect-BMfc1-vs.js +0 -314
- package/dist/components/GrSidebar/chunks/GrSidebar-C4SXXhfO.js +0 -29
- package/dist/components/GrSkeleton/chunks/GrSkeleton-QlieOdpY.js +0 -25
- package/dist/components/GrSwitch/chunks/GrSwitch-Cefiutzu.js +0 -64
- package/dist/components/GrTable/chunks/GrTable-k_FUiJQk.js +0 -44
- package/dist/components/GrTabs/chunks/GrTabs-B46P-lUc.js +0 -98
- package/dist/components/GrTextarea/chunks/GrTextarea-BX7L1MJk.js +0 -57
- package/dist/components/GrToaster/chunks/GrToaster-C4l_BjOh.js +0 -139
- package/dist/components/GrTooltip/chunks/GrTooltip-BqRAzuLT.js +0 -37
- package/dist/components/GrTree/chunks/GrTree-C2CXR_vW.js +0 -614
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-DAAay-QB.js +0 -353
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directives-Cuib0yOO.js","names":[],"sources":["../../src/directives/autofocus.ts","../../src/directives/autosize.ts","../../src/directives/clickOutside.ts","../../src/directives/dropzone.ts","../../src/directives/hotkey.ts","../../src/directives/loading.ts"],"sourcesContent":["import type { Directive } from 'vue'\nimport { nextTick } from 'vue'\n\nexport type AutofocusBindingValue =\n | boolean\n | string\n | {\n selector?: string\n preventScroll?: boolean\n disabled?: boolean\n }\n\nfunction resolveOptions(value: AutofocusBindingValue | undefined) {\n if (value === false) {\n return { enabled: false, selector: '', preventScroll: true }\n }\n\n if (typeof value === 'string') {\n return { enabled: true, selector: value, preventScroll: true }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.disabled !== true,\n selector: value.selector,\n preventScroll: value.preventScroll ?? true,\n }\n }\n\n return { enabled: true, selector: undefined as string | undefined, preventScroll: true }\n}\n\nfunction tryFocus(target: Element | null | undefined, preventScroll: boolean) {\n if (!target) return\n\n const focusable = target as unknown as { focus?: (options?: any) => void }\n if (typeof focusable.focus !== 'function') return\n\n try {\n focusable.focus({ preventScroll })\n } catch {\n // Fallback for browsers that don't support FocusOptions.\n focusable.focus()\n }\n}\n\n/**\n * `v-autofocus` — универсальный автофокус.\n * Работает как на нативных элементах, так и на компонентах-обёртках (фокусирует вложенный `input/textarea/...`).\n */\nexport const vAutofocus: Directive<HTMLElement, AutofocusBindingValue> = {\n mounted(el, binding) {\n const { enabled, selector, preventScroll } = resolveOptions(binding.value)\n if (!enabled) return\n\n void nextTick().then(() => {\n // Небольшая задержка помогает, когда внутренний input появляется после обновления/анимаций.\n requestAnimationFrame(() => {\n const defaultSelector = 'input, textarea, select, button, [tabindex]:not([tabindex=\"-1\"])'\n const finalSelector = selector || defaultSelector\n\n if ((el as any).matches?.(finalSelector)) {\n tryFocus(el, preventScroll)\n return\n }\n\n const inner = el.querySelector?.(finalSelector)\n tryFocus(inner, preventScroll)\n })\n })\n },\n}\n","import type { Directive } from 'vue'\nimport { nextTick } from 'vue'\n\nexport type AutosizeBindingValue =\n | boolean\n | {\n enabled?: boolean\n }\n\ntype InternalState = {\n textarea: HTMLTextAreaElement | null\n onInput: (() => void) | null\n prevOverflowY: string | null\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction normalize(value: AutosizeBindingValue | undefined) {\n if (value === false) return { enabled: false }\n if (value && typeof value === 'object') return { enabled: value.enabled ?? true }\n return { enabled: true }\n}\n\nfunction resolveTextarea(el: HTMLElement): HTMLTextAreaElement | null {\n if (el instanceof HTMLTextAreaElement) return el\n return el.querySelector('textarea')\n}\n\nfunction toNumber(input: string): number {\n const n = Number.parseFloat(input)\n return Number.isFinite(n) ? n : 0\n}\n\nfunction autosize(textarea: HTMLTextAreaElement) {\n // Важно сбросить, чтобы textarea могла уменьшаться при удалении текста.\n textarea.style.height = 'auto'\n\n const style = getComputedStyle(textarea)\n const border = toNumber(style.borderTopWidth) + toNumber(style.borderBottomWidth)\n const height = style.boxSizing === 'border-box' ? textarea.scrollHeight + border : textarea.scrollHeight\n\n textarea.style.height = `${height}px`\n}\n\nfunction scheduleAutosize(textarea: HTMLTextAreaElement) {\n void nextTick().then(() => {\n requestAnimationFrame(() => autosize(textarea))\n })\n}\n\n/**\n * `v-autosize` — автоподстройка высоты `textarea`.\n *\n * Пример:\n * ```vue\n * <textarea v-autosize />\n * ```\n */\nexport const vAutosize: Directive<HTMLElement, AutosizeBindingValue> = {\n mounted(el, binding) {\n const { enabled } = normalize(binding.value)\n const textarea = resolveTextarea(el)\n\n const state: InternalState = {\n textarea,\n onInput: null,\n prevOverflowY: textarea ? textarea.style.overflowY : null,\n }\n states.set(el, state)\n\n if (!enabled || !textarea) return\n\n textarea.style.overflowY = 'hidden'\n autosize(textarea)\n scheduleAutosize(textarea)\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n\n state.onInput = onInput\n textarea.addEventListener('input', onInput)\n },\n updated(el, binding) {\n const { enabled } = normalize(binding.value)\n const state = states.get(el)\n if (!state) return\n\n const nextTextarea = resolveTextarea(el)\n if (state.textarea !== nextTextarea) {\n if (state.textarea && state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n }\n\n state.textarea = nextTextarea\n state.prevOverflowY = nextTextarea ? nextTextarea.style.overflowY : null\n state.onInput = null\n\n if (enabled && nextTextarea) {\n nextTextarea.style.overflowY = 'hidden'\n autosize(nextTextarea)\n scheduleAutosize(nextTextarea)\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n state.onInput = onInput\n nextTextarea.addEventListener('input', onInput)\n }\n\n return\n }\n\n if (!state.textarea) return\n\n if (!enabled) {\n // Disabled in-flight: detach listener and restore previous overflow.\n if (state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n state.onInput = null\n }\n if (state.prevOverflowY !== null) {\n state.textarea.style.overflowY = state.prevOverflowY\n }\n return\n }\n\n // Re-enable after being disabled: reattach listener and re-apply overflow.\n if (!state.onInput) {\n state.prevOverflowY = state.textarea.style.overflowY\n state.textarea.style.overflowY = 'hidden'\n\n const onInput = () => {\n const current = states.get(el)\n if (!current?.textarea) return\n autosize(current.textarea)\n }\n state.onInput = onInput\n state.textarea.addEventListener('input', onInput)\n }\n\n autosize(state.textarea)\n scheduleAutosize(state.textarea)\n },\n unmounted(el) {\n const state = states.get(el)\n if (!state) return\n\n if (state.textarea && state.onInput) {\n state.textarea.removeEventListener('input', state.onInput)\n if (state.prevOverflowY !== null) state.textarea.style.overflowY = state.prevOverflowY\n }\n\n states.delete(el)\n },\n}\n","import type { Directive } from 'vue'\n\nexport type ClickOutsideHandler = (event: MouseEvent | TouchEvent | PointerEvent) => void\n\nexport type ClickOutsideExclude = HTMLElement | string | (() => HTMLElement | null | undefined)\n\nexport type ClickOutsideBindingValue =\n | ClickOutsideHandler\n | {\n handler: ClickOutsideHandler\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true` (слушаем в capture, чтобы stopPropagation внутри не ломал закрытие). */\n capture?: boolean\n /** Список событий. По умолчанию `['click']`. */\n events?: Array<'click' | 'mousedown' | 'touchstart' | 'pointerdown'>\n /** Элементы/селекторы, клики по которым считаются \"внутри\". */\n exclude?: ClickOutsideExclude[]\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n capture: boolean\n events: Array<'click' | 'mousedown' | 'touchstart' | 'pointerdown'>\n handler: ClickOutsideHandler | undefined\n exclude: ClickOutsideExclude[]\n}\n\nfunction normalize(value: ClickOutsideBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return { enabled: true, capture: true, events: ['click'], handler: value, exclude: [] }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n capture: value.capture ?? true,\n events: value.events?.length ? value.events : ['click'],\n handler: value.handler,\n exclude: value.exclude ?? [],\n }\n }\n\n return { enabled: false, capture: true, events: ['click'], handler: undefined, exclude: [] }\n}\n\nfunction isEventInside(el: HTMLElement, event: Event): boolean {\n const target = event.target as Node | null\n if (!target) return false\n\n const composedPath = (event as any).composedPath?.() as EventTarget[] | undefined\n if (Array.isArray(composedPath)) {\n return composedPath.includes(el)\n }\n\n return el.contains(target)\n}\n\nfunction resolveExclude(doc: Document, exclude: ClickOutsideExclude[]): HTMLElement[] {\n const resolved: HTMLElement[] = []\n\n for (const item of exclude) {\n if (typeof item === 'string') {\n const found = doc.querySelector(item)\n if (found instanceof HTMLElement) resolved.push(found)\n continue\n }\n\n if (typeof item === 'function') {\n const found = item()\n if (found instanceof HTMLElement) resolved.push(found)\n continue\n }\n\n if (item instanceof HTMLElement) {\n resolved.push(item)\n }\n }\n\n return resolved\n}\n\ntype InternalState = {\n options: NormalizedOptions\n doc: Document\n listener: (event: Event) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n for (const event of state.options.events) {\n state.doc.removeEventListener(event, state.listener, state.options.capture)\n }\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: ClickOutsideBindingValue | undefined) {\n const options = normalize(value)\n const doc = el.ownerDocument\n\n const listener = (event: Event) => {\n const current = states.get(el)\n if (!current) return\n\n const { enabled, handler, exclude } = current.options\n if (!enabled || !handler) return\n\n if ('button' in (event as any) && typeof (event as any).button === 'number' && (event as any).button !== 0) {\n return\n }\n\n if (!el.isConnected) return\n\n if (isEventInside(el, event)) return\n\n const excluded = resolveExclude(current.doc, exclude)\n for (const ex of excluded) {\n if (isEventInside(ex, event)) return\n }\n\n handler(event as any)\n }\n\n const nextState: InternalState = { options, doc, listener }\n states.set(el, nextState)\n\n if (!options.enabled || !options.handler) return\n\n for (const event of options.events) {\n doc.addEventListener(event, listener, options.capture)\n }\n}\n\n/**\n * `v-click-outside` — обработчик клика вне элемента (например, закрытие дропдауна/модалки).\n */\nexport const vClickOutside: Directive<HTMLElement, ClickOutsideBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n unbind(el)\n bind(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n","import type { Directive } from 'vue'\n\nimport type { FileValidator } from '../fileValidation'\n\nimport { FileValidationError, runFileValidators } from '../fileValidation'\n\nexport type DropzoneOnFiles = (files: File[], event: DragEvent) => void | Promise<void>\n\nexport type DropzoneBindingValue =\n | DropzoneOnFiles\n | {\n onFiles: DropzoneOnFiles\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true`. */\n multiple?: boolean\n\n /** Валидаторы, которые будут запущены перед `onFiles`. */\n validators?: FileValidator[]\n /** По умолчанию `true` (предотвращаем дефолтное поведение браузера при drop). */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Вызывается, если валидация файлов не прошла. */\n onError?: (error: unknown) => void\n /** Вызывается при изменении состояния drag-over. */\n onStateChange?: (state: { isOver: boolean }) => void\n /** CSS-класс, который навешивается на элемент, пока курсор с файлами над зоной. */\n overClass?: string\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n multiple: boolean\n validators: FileValidator[] | undefined\n preventDefault: boolean\n stopPropagation: boolean\n onFiles: DropzoneOnFiles | undefined\n onError: ((error: unknown) => void) | undefined\n onStateChange: ((state: { isOver: boolean }) => void) | undefined\n overClass: string\n}\n\nfunction normalize(value: DropzoneBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return {\n enabled: true,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: value,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n multiple: value.multiple ?? true,\n validators: value.validators,\n preventDefault: value.preventDefault ?? true,\n stopPropagation: value.stopPropagation ?? false,\n onFiles: value.onFiles,\n onError: value.onError,\n onStateChange: value.onStateChange,\n overClass: value.overClass ?? 'ds-dropzone--over',\n }\n }\n\n return {\n enabled: false,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: undefined,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n}\n\ntype InternalState = {\n options: NormalizedOptions\n overCounter: number\n isOver: boolean\n onDragEnter: (event: DragEvent) => void\n onDragOver: (event: DragEvent) => void\n onDragLeave: (event: DragEvent) => void\n onDrop: (event: DragEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction setOver(el: HTMLElement, next: boolean) {\n const state = states.get(el)\n if (!state) return\n\n // `state.isOver` может рассинхронизироваться с DOM (например, при обновлениях\n // компонента/директивы во время drag-over). Поэтому DOM-состояние всегда\n // приводим к `next`, а коллбек вызываем только при фактическом изменении.\n const wasDomOver = el.dataset.grDropzoneOver === 'true'\n const prev = state.isOver\n\n state.isOver = next\n\n if (next) {\n el.classList.add(state.options.overClass)\n el.dataset.grDropzoneOver = 'true'\n } else {\n el.classList.remove(state.options.overClass)\n delete el.dataset.grDropzoneOver\n }\n\n if (prev !== next || wasDomOver !== next) {\n state.options.onStateChange?.({ isOver: next })\n }\n}\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n // Гарантированно очищаем визуальное состояние и счётчики.\n // Это важно, если директива обновлялась/перебиндилась во время DnD.\n state.overCounter = 0\n setOver(el, false)\n\n delete el.dataset.grDropzone\n\n el.removeEventListener('dragenter', state.onDragEnter)\n el.removeEventListener('dragover', state.onDragOver)\n el.removeEventListener('dragleave', state.onDragLeave)\n el.removeEventListener('drop', state.onDrop)\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const options = normalize(value)\n\n const state: InternalState = {\n options,\n overCounter: 0,\n isOver: false,\n onDragEnter(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter += 1\n setOver(el, true)\n },\n onDragOver(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n },\n onDragLeave(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = Math.max(0, current.overCounter - 1)\n if (current.overCounter === 0) setOver(el, false)\n },\n onDrop(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = 0\n setOver(el, false)\n\n const dt = event.dataTransfer\n const files = dt?.files ? Array.prototype.slice.call(dt.files) as File[] : []\n if (!files.length) return\n\n void (async () => {\n try {\n const validators = current.options.validators ?? []\n\n const { files: picked, issues } = await runFileValidators(files, validators, {\n source: 'drop',\n multiple: current.options.multiple,\n })\n\n if (issues.length > 0) {\n current.options.onError?.(new FileValidationError(issues, picked))\n return\n }\n\n if (!picked.length) return\n await current.options.onFiles?.(picked, event)\n } catch (error) {\n current.options.onError?.(error)\n }\n })()\n },\n }\n\n states.set(el, state)\n\n // Base marker.\n el.dataset.grDropzone = 'true'\n\n el.addEventListener('dragenter', state.onDragEnter)\n el.addEventListener('dragover', state.onDragOver)\n el.addEventListener('dragleave', state.onDragLeave)\n el.addEventListener('drop', state.onDrop)\n}\n\nfunction update(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const state = states.get(el)\n if (!state) {\n bind(el, value)\n return\n }\n\n const prevOverClass = state.options.overClass\n const nextOptions = normalize(value)\n\n state.options = nextOptions\n\n // Если поменялся `overClass`, синхронизируем DOM.\n if (prevOverClass !== nextOptions.overClass) {\n el.classList.remove(prevOverClass)\n if (state.isOver) el.classList.add(nextOptions.overClass)\n }\n\n // Если директива выключена — сбрасываем состояние.\n if (!nextOptions.enabled) {\n state.overCounter = 0\n setOver(el, false)\n }\n}\n\n/**\n * `v-dropzone` — декларативная DnD-зона для файлов (перетаскивание + drop).\n *\n * Директива не делает загрузку сама — только нормализует события и отдаёт `File[]`.\n */\nexport const vDropzone: Directive<HTMLElement, DropzoneBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n update(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n","import type { Directive } from 'vue'\n\nexport type HotkeyHandler = (event: KeyboardEvent) => void\n\nexport type HotkeyEntry =\n | HotkeyHandler\n | {\n handler: HotkeyHandler\n /** По умолчанию: `true` для комбинаций с Ctrl/Meta/Alt, иначе `false`. */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Разрешить срабатывать, когда фокус в `input/textarea/[contenteditable]`. */\n allowInEditable?: boolean\n }\n\nexport type HotkeyMap = Record<string, HotkeyEntry>\n\nexport type HotkeyBindingValue =\n | HotkeyMap\n | {\n handlers: HotkeyMap\n enabled?: boolean\n }\n\ntype ParsedHotkey = {\n original: string\n key: string\n ctrl: boolean\n meta: boolean\n alt: boolean\n shift: boolean\n entry: HotkeyEntry\n}\n\ntype InternalState = {\n enabled: boolean\n hotkeys: ParsedHotkey[]\n listener: (event: KeyboardEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false\n if (target.isContentEditable) return true\n\n const tag = target.tagName\n return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n}\n\nfunction normalizeBinding(value: HotkeyBindingValue | undefined) {\n if (!value) return { enabled: false, handlers: {} as HotkeyMap }\n if ('handlers' in (value as any)) {\n const v = value as { handlers: HotkeyMap; enabled?: boolean }\n return { enabled: v.enabled ?? true, handlers: v.handlers ?? {} }\n }\n return { enabled: true, handlers: value as HotkeyMap }\n}\n\nfunction normalizeKeyToken(token: string): string {\n const t = token.trim().toLowerCase()\n if (t === 'esc') return 'Escape'\n if (t === 'escape') return 'Escape'\n if (t === 'space') return ' '\n if (t.length === 1) return t\n return token.trim()\n}\n\nfunction parseHotkeys(map: HotkeyMap): ParsedHotkey[] {\n const parsed: ParsedHotkey[] = []\n\n for (const [combo, entry] of Object.entries(map)) {\n const parts = combo\n .split('+')\n .map(p => p.trim())\n .filter(Boolean)\n\n if (!parts.length) continue\n\n let ctrl = false\n let meta = false\n let alt = false\n let shift = false\n\n const keyToken = parts.at(-1)\n if (!keyToken) continue\n for (const p of parts.slice(0, -1)) {\n const t = p.toLowerCase()\n if (t === 'ctrl' || t === 'control') ctrl = true\n else if (t === 'meta' || t === 'cmd' || t === 'command' || t === '⌘') meta = true\n else if (t === 'alt' || t === 'option') alt = true\n else if (t === 'shift') shift = true\n }\n\n const key = normalizeKeyToken(keyToken)\n parsed.push({ original: combo, key, ctrl, meta, alt, shift, entry })\n }\n\n return parsed\n}\n\nfunction matchKey(expected: string, eventKey: string): boolean {\n if (expected === ' ') return eventKey === ' ' || eventKey === 'Spacebar'\n if (expected.length === 1) return expected.toLowerCase() === eventKey.toLowerCase()\n return expected === eventKey\n}\n\nfunction resolveEntry(entry: HotkeyEntry) {\n if (typeof entry === 'function') {\n return {\n handler: entry,\n preventDefault: undefined as boolean | undefined,\n stopPropagation: false,\n allowInEditable: false,\n }\n }\n\n return {\n handler: entry.handler,\n preventDefault: entry.preventDefault,\n stopPropagation: entry.stopPropagation ?? false,\n allowInEditable: entry.allowInEditable ?? false,\n }\n}\n\n/**\n * `v-hotkey` — горячие клавиши на компонент/страницу.\n *\n * Пример:\n * ```vue\n * <div v-hotkey=\"{ 'Escape': close, 'Ctrl+K': openSearch }\" />\n * ```\n */\nexport const vHotkey: Directive<HTMLElement, HotkeyBindingValue> = {\n mounted(el, binding) {\n if (typeof window === 'undefined') return\n\n const { enabled, handlers } = normalizeBinding(binding.value)\n\n const state: InternalState = {\n enabled,\n hotkeys: parseHotkeys(handlers),\n listener: (event: KeyboardEvent) => {\n const current = states.get(el)\n if (!current?.enabled) return\n if (!el.isConnected) return\n\n const editable = isEditableTarget(event.target)\n\n for (const hk of current.hotkeys) {\n if (hk.ctrl !== event.ctrlKey) continue\n if (hk.meta !== event.metaKey) continue\n if (hk.alt !== event.altKey) continue\n if (hk.shift !== event.shiftKey) continue\n if (!matchKey(hk.key, event.key)) continue\n\n const entry = resolveEntry(hk.entry)\n\n // По умолчанию не перехватываем \"простые\" клавиши во время ввода.\n const hasModifier = hk.ctrl || hk.meta || hk.alt || hk.shift\n if (editable && !entry.allowInEditable && !hasModifier && hk.key !== 'Escape') {\n continue\n }\n\n const preventDefault = entry.preventDefault ?? (hk.ctrl || hk.meta || hk.alt)\n if (preventDefault) event.preventDefault()\n if (entry.stopPropagation) event.stopPropagation()\n\n entry.handler(event)\n return\n }\n },\n }\n\n states.set(el, state)\n window.addEventListener('keydown', state.listener)\n },\n updated(el, binding) {\n const state = states.get(el)\n if (!state) return\n\n const next = normalizeBinding(binding.value)\n state.enabled = next.enabled\n state.hotkeys = parseHotkeys(next.handlers)\n },\n unmounted(el) {\n const state = states.get(el)\n if (!state) return\n window.removeEventListener('keydown', state.listener)\n states.delete(el)\n },\n}\n","import type { AppContext, Component, Directive } from 'vue'\nimport { createVNode, render } from 'vue'\n\nimport GrLoading from '../components/GrLoading/GrLoading.vue'\n\nexport type LoadingTarget = string | HTMLElement\n\nexport type LoadingOptions = {\n /**\n * Контейнер, куда будет вставлен оверлей.\n * - если не задано, то для директивы используется сам `el`\n * - для ручного вызова (`createLoading`) по умолчанию используется `document.body`\n */\n target?: LoadingTarget\n\n /**\n * Полноэкранный лоадер (рендерится в `document.body`).\n * По умолчанию включается, если `target` = `document.body`.\n */\n fullscreen?: boolean\n\n text?: string\n spinner?: Component\n spinnerClass?: string\n animated?: boolean\n background?: string\n zIndex?: number\n customClass?: string\n\n /**\n * Внутренний контекст Vue-приложения.\n * Нужен, чтобы кастомный `spinner` мог использовать `inject()` даже при ручном `render()`.\n */\n appContext?: AppContext\n}\n\nexport type LoadingController = {\n close: () => void\n setText: (text?: string) => void\n setOptions: (next: Partial<LoadingOptions>) => void\n readonly target: HTMLElement\n}\n\nexport type LoadingBindingValue =\n | boolean\n | (Omit<LoadingOptions, 'appContext'> & {\n loading?: boolean\n })\n\nfunction isHTMLElement(value: unknown): value is HTMLElement {\n return typeof value === 'object' && value !== null && (value as any).nodeType === 1\n}\n\nfunction resolveTarget(input: LoadingTarget | undefined, fallback: HTMLElement): HTMLElement {\n if (!input) return fallback\n\n if (typeof input === 'string') {\n // Prefer searching within the same root (document / document fragment / shadow root)\n // to support components that are not attached to `document` yet (e.g. in unit tests).\n const root = fallback.getRootNode?.() ?? document\n const foundInRoot =\n typeof (root as any).querySelector === 'function' ? ((root as any).querySelector(input) as Element | null) : null\n if (isHTMLElement(foundInRoot)) return foundInRoot\n\n const foundInDocument = document.querySelector(input)\n if (isHTMLElement(foundInDocument)) return foundInDocument\n\n return fallback\n }\n\n if (isHTMLElement(input)) {\n return input\n }\n\n return fallback\n}\n\nfunction resolveFullscreen(options: LoadingOptions, target: HTMLElement): boolean {\n if (options.fullscreen != null) return options.fullscreen\n return target === document.body\n}\n\nfunction ensurePositionedContainer(target: HTMLElement, fullscreen: boolean): () => void {\n if (fullscreen) return () => {}\n\n const prevInline = target.style.position\n const computed = window.getComputedStyle(target)\n const isStatic = computed.position === 'static' || !computed.position\n\n if (isStatic) {\n target.style.position = 'relative'\n return () => {\n target.style.position = prevInline\n }\n }\n\n return () => {}\n}\n\nfunction parseBinding(value: LoadingBindingValue | undefined): { loading: boolean; options: LoadingOptions } {\n if (value === true || value === false) {\n return { loading: value, options: {} }\n }\n\n if (value && typeof value === 'object') {\n const { loading, ...rest } = value as any\n return { loading: loading ?? true, options: rest }\n }\n\n return { loading: false, options: {} }\n}\n\ntype InternalLoadingState = {\n controller?: LoadingController\n target?: HTMLElement\n fullscreen?: boolean\n}\n\nconst STATE_KEY: unique symbol = Symbol('grLoadingState')\n\nfunction getState(el: HTMLElement): InternalLoadingState {\n return ((el as any)[STATE_KEY] ??= {}) as InternalLoadingState\n}\n\nexport function createLoading(options: LoadingOptions = {}, fallbackTarget?: HTMLElement): LoadingController {\n const initialTarget = resolveTarget(options.target, fallbackTarget ?? document.body)\n const fullscreen = resolveFullscreen(options, initialTarget)\n const target = fullscreen ? document.body : initialTarget\n\n const appContext = options.appContext\n\n const restorePosition = ensurePositionedContainer(target, fullscreen)\n const mountEl = document.createElement('div')\n mountEl.setAttribute('data-ds-loading-host', '')\n target.appendChild(mountEl)\n target.setAttribute('aria-busy', 'true')\n\n let current: LoadingOptions = { ...options }\n let disposed = false\n\n function doRender(): void {\n if (disposed) return\n\n const vnode = createVNode(GrLoading as any, {\n text: current.text,\n spinner: current.spinner,\n spinnerClass: current.spinnerClass,\n animated: current.animated,\n background: current.background,\n customClass: current.customClass,\n zIndex: current.zIndex,\n fullscreen,\n })\n\n if (appContext) {\n ;(vnode as any).appContext = appContext\n }\n\n render(vnode, mountEl)\n }\n\n function close(): void {\n if (disposed) return\n disposed = true\n\n render(null, mountEl)\n mountEl.remove()\n restorePosition()\n target.removeAttribute('aria-busy')\n }\n\n function setOptions(next: Partial<LoadingOptions>): void {\n current = {\n ...current,\n ...next,\n }\n doRender()\n }\n\n function setText(text?: string): void {\n setOptions({ text })\n }\n\n doRender()\n\n return {\n close,\n setOptions,\n setText,\n get target() {\n return target\n },\n }\n}\n\nfunction sync(el: HTMLElement, value: LoadingBindingValue | undefined, appContext?: AppContext): void {\n const { loading, options } = parseBinding(value)\n const state = getState(el)\n\n if (!loading) {\n state.controller?.close()\n state.controller = undefined\n state.target = undefined\n state.fullscreen = undefined\n return\n }\n\n const target = resolveTarget(options.target, el)\n const fullscreen = resolveFullscreen(options, target)\n const normalizedTarget = fullscreen ? document.body : target\n\n const shouldRecreate =\n !state.controller\n || state.target !== normalizedTarget\n || state.fullscreen !== fullscreen\n\n if (shouldRecreate) {\n state.controller?.close()\n state.controller = createLoading({ ...options, fullscreen, target: normalizedTarget, appContext }, el)\n state.target = normalizedTarget\n state.fullscreen = fullscreen\n return\n }\n\n const controller = state.controller\n if (!controller) return\n controller.setOptions({ ...options, fullscreen, target: normalizedTarget })\n}\n\nexport const vLoading: Directive<HTMLElement, LoadingBindingValue> = {\n mounted(el, binding) {\n const appContext = (binding.instance as any)?.$?.appContext as AppContext | undefined\n sync(el, binding.value, appContext)\n },\n updated(el, binding) {\n const appContext = (binding.instance as any)?.$?.appContext as AppContext | undefined\n sync(el, binding.value, appContext)\n },\n unmounted(el) {\n const state = getState(el)\n state.controller?.close()\n state.controller = undefined\n state.target = undefined\n state.fullscreen = undefined\n },\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/i18n/locales/en.json
|
|
2
|
+
var common = {
|
|
3
|
+
"confirm": "Confirm",
|
|
4
|
+
"cancel": "Cancel",
|
|
5
|
+
"add": "Add",
|
|
6
|
+
"clear": "Clear",
|
|
7
|
+
"close": "Close"
|
|
8
|
+
};
|
|
9
|
+
var loading = { "defaultText": "Loading..." };
|
|
10
|
+
var treeSelect = {
|
|
11
|
+
"filterPlaceholder": "Search…",
|
|
12
|
+
"empty": "No data"
|
|
13
|
+
};
|
|
14
|
+
var dialog = {
|
|
15
|
+
"confirm": { "title": "Confirm" },
|
|
16
|
+
"prompt": {
|
|
17
|
+
"title": "Prompt",
|
|
18
|
+
"label": "Value",
|
|
19
|
+
"required": "Enter a value."
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var pagination = {
|
|
23
|
+
"pageSize": "Page size",
|
|
24
|
+
"prev": "Prev",
|
|
25
|
+
"next": "Next"
|
|
26
|
+
};
|
|
27
|
+
var navbar = { "openMenu": "Open menu" };
|
|
28
|
+
var colors = {
|
|
29
|
+
"neutral": "Neutral",
|
|
30
|
+
"success": "Success",
|
|
31
|
+
"warning": "Warning",
|
|
32
|
+
"danger": "Danger",
|
|
33
|
+
"info": "Info",
|
|
34
|
+
"primary": "Primary",
|
|
35
|
+
"slate": "Slate",
|
|
36
|
+
"azure": "Azure"
|
|
37
|
+
};
|
|
38
|
+
var en_default = {
|
|
39
|
+
common,
|
|
40
|
+
loading,
|
|
41
|
+
treeSelect,
|
|
42
|
+
dialog,
|
|
43
|
+
pagination,
|
|
44
|
+
navbar,
|
|
45
|
+
colors
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { colors, common, en_default as default, dialog, loading, navbar, pagination, treeSelect };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=en-BMjJZttK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en-BMjJZttK.js","names":[],"sources":["../../src/i18n/locales/en.json"],"sourcesContent":["{\n \"common\": {\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"add\": \"Add\",\n \"clear\": \"Clear\",\n \"close\": \"Close\"\n },\n \"loading\": {\n \"defaultText\": \"Loading...\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Search…\",\n \"empty\": \"No data\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirm\"\n },\n \"prompt\": {\n \"title\": \"Prompt\",\n \"label\": \"Value\",\n \"required\": \"Enter a value.\"\n }\n },\n \"pagination\": {\n \"pageSize\": \"Page size\",\n \"prev\": \"Prev\",\n \"next\": \"Next\"\n },\n \"navbar\": {\n \"openMenu\": \"Open menu\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Success\",\n \"warning\": \"Warning\",\n \"danger\": \"Danger\",\n \"info\": \"Info\",\n \"primary\": \"Primary\",\n \"slate\": \"Slate\",\n \"azure\": \"Azure\"\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/i18n/messages/const.ts
|
|
2
|
+
var GRANULARITY_I18N_BLOCK = "gr";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/i18n/messages/en.ts
|
|
5
|
+
/**
|
|
6
|
+
* English locale loaders for the playground app.
|
|
7
|
+
*
|
|
8
|
+
* Exported separately from other locales so that consumers (and bundlers)
|
|
9
|
+
* can import only the languages they actually need — see the
|
|
10
|
+
* "Authoring localization packages" guide in the docs.
|
|
11
|
+
*/
|
|
12
|
+
var en = { en: { ["gr"]: () => import("./en-BMjJZttK.js") } };
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/i18n/messages/ru.ts
|
|
15
|
+
var ru = { ru: { ["gr"]: () => import("./ru-DKswMSdd.js") } };
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/i18n/messages/es.ts
|
|
18
|
+
var es = { es: { ["gr"]: () => import("./es-EYCf8G_1.js") } };
|
|
19
|
+
//#endregion
|
|
20
|
+
export { GRANULARITY_I18N_BLOCK as i, ru as n, en as r, es as t };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=es-Cu_RlgIr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es-Cu_RlgIr.js","names":[],"sources":["../../src/i18n/messages/const.ts","../../src/i18n/messages/en.ts","../../src/i18n/messages/ru.ts","../../src/i18n/messages/es.ts"],"sourcesContent":["export const GRANULARITY_I18N_BLOCK = 'gr'","import type {LocaleLoaderCollection} from '@feugene/fint-i18n/core'\nimport {GRANULARITY_I18N_BLOCK} from \"./const\";\n\n/**\n * English locale loaders for the playground app.\n *\n * Exported separately from other locales so that consumers (and bundlers)\n * can import only the languages they actually need — see the\n * \"Authoring localization packages\" guide in the docs.\n */\nexport const en = {\n en: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/en.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default en\n","import type {LocaleLoaderCollection} from '@feugene/fint-i18n/core'\nimport {GRANULARITY_I18N_BLOCK} from \"./const\";\n\nexport const ru = {\n ru: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/ru.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default ru\n","import type {LocaleLoaderCollection} from '@feugene/fint-i18n/core'\nimport {GRANULARITY_I18N_BLOCK} from \"./const\";\n\nexport const es = {\n es: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/es.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default es\n"],"mappings":";AAAA,IAAa,yBAAyB;;;;;;;;;;ACUtC,IAAa,KAAK,EACd,IAAI,GAAA,aACgC,OAAO,qBAC1C,EACJ;;;ACXD,IAAa,KAAK,EACd,IAAI,GAAA,aACgC,OAAO,qBAC1C,EACJ;;;ACJD,IAAa,KAAK,EACd,IAAI,GAAA,aACgC,OAAO,qBAC1C,EACJ"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//#region src/i18n/locales/es.json
|
|
2
|
+
var common = {
|
|
3
|
+
"confirm": "Confirmar",
|
|
4
|
+
"cancel": "Cancelar",
|
|
5
|
+
"add": "Añadir",
|
|
6
|
+
"clear": "Limpiar",
|
|
7
|
+
"close": "Cerrar"
|
|
8
|
+
};
|
|
9
|
+
var loading = { "defaultText": "Cargando..." };
|
|
10
|
+
var treeSelect = {
|
|
11
|
+
"filterPlaceholder": "Buscar…",
|
|
12
|
+
"empty": "Sin datos"
|
|
13
|
+
};
|
|
14
|
+
var dialog = {
|
|
15
|
+
"confirm": { "title": "Confirmar" },
|
|
16
|
+
"prompt": {
|
|
17
|
+
"title": "Aviso",
|
|
18
|
+
"label": "Valor",
|
|
19
|
+
"required": "Introduzca un valor."
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var pagination = {
|
|
23
|
+
"pageSize": "Tamaño de página",
|
|
24
|
+
"prev": "Anterior",
|
|
25
|
+
"next": "Siguiente"
|
|
26
|
+
};
|
|
27
|
+
var navbar = { "openMenu": "Abrir menú" };
|
|
28
|
+
var colors = {
|
|
29
|
+
"neutral": "Neutral",
|
|
30
|
+
"success": "Éxito",
|
|
31
|
+
"warning": "Advertencia",
|
|
32
|
+
"danger": "Peligro",
|
|
33
|
+
"info": "Info",
|
|
34
|
+
"primary": "Primario",
|
|
35
|
+
"slate": "Pizarra",
|
|
36
|
+
"azure": "Azul celeste"
|
|
37
|
+
};
|
|
38
|
+
var es_default = {
|
|
39
|
+
common,
|
|
40
|
+
loading,
|
|
41
|
+
treeSelect,
|
|
42
|
+
dialog,
|
|
43
|
+
pagination,
|
|
44
|
+
navbar,
|
|
45
|
+
colors
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { colors, common, es_default as default, dialog, loading, navbar, pagination, treeSelect };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=es-EYCf8G_1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es-EYCf8G_1.js","names":[],"sources":["../../src/i18n/locales/es.json"],"sourcesContent":["{\n \"common\": {\n \"confirm\": \"Confirmar\",\n \"cancel\": \"Cancelar\",\n \"add\": \"Añadir\",\n \"clear\": \"Limpiar\",\n \"close\": \"Cerrar\"\n },\n \"loading\": {\n \"defaultText\": \"Cargando...\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Buscar…\",\n \"empty\": \"Sin datos\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirmar\"\n },\n \"prompt\": {\n \"title\": \"Aviso\",\n \"label\": \"Valor\",\n \"required\": \"Introduzca un valor.\"\n }\n },\n \"pagination\": {\n \"pageSize\": \"Tamaño de página\",\n \"prev\": \"Anterior\",\n \"next\": \"Siguiente\"\n },\n \"navbar\": {\n \"openMenu\": \"Abrir menú\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Éxito\",\n \"warning\": \"Advertencia\",\n \"danger\": \"Peligro\",\n \"info\": \"Info\",\n \"primary\": \"Primario\",\n \"slate\": \"Pizarra\",\n \"azure\": \"Azul celeste\"\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
//#region src/fileValidation/FileValidationError.ts
|
|
2
|
+
var FileValidationError = class extends Error {
|
|
3
|
+
code;
|
|
4
|
+
file;
|
|
5
|
+
issues;
|
|
6
|
+
constructor(issues, files, message) {
|
|
7
|
+
super(message ?? issues[0]?.message ?? "File validation failed");
|
|
8
|
+
this.name = "FileValidationError";
|
|
9
|
+
this.issues = issues;
|
|
10
|
+
this.code = issues[0]?.code ?? "accept";
|
|
11
|
+
const firstFileName = issues[0]?.fileName;
|
|
12
|
+
this.file = (firstFileName && files ? files.find((f) => f.name === firstFileName) : void 0) ?? files?.[0];
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/fileValidation/runFileValidators.ts
|
|
17
|
+
function normalizeFiles(files, multiple) {
|
|
18
|
+
const list = [...files];
|
|
19
|
+
return multiple ? list : list.slice(0, 1);
|
|
20
|
+
}
|
|
21
|
+
function isPromiseLike(value) {
|
|
22
|
+
return !!value && typeof value.then === "function";
|
|
23
|
+
}
|
|
24
|
+
function runFileValidators(files, validators, context) {
|
|
25
|
+
const picked = normalizeFiles(files, context.multiple);
|
|
26
|
+
const issues = [];
|
|
27
|
+
const list = validators ?? [];
|
|
28
|
+
for (let i = 0; i < list.length; i++) {
|
|
29
|
+
const validator = list[i];
|
|
30
|
+
if (!validator) continue;
|
|
31
|
+
const res = validator({
|
|
32
|
+
files: picked,
|
|
33
|
+
context
|
|
34
|
+
});
|
|
35
|
+
if (isPromiseLike(res)) return (async () => {
|
|
36
|
+
const first = await res;
|
|
37
|
+
if (Array.isArray(first) && first.length > 0) issues.push(...first);
|
|
38
|
+
for (let j = i + 1; j < list.length; j++) {
|
|
39
|
+
const nextValidator = list[j];
|
|
40
|
+
if (!nextValidator) continue;
|
|
41
|
+
const nextRes = nextValidator({
|
|
42
|
+
files: picked,
|
|
43
|
+
context
|
|
44
|
+
});
|
|
45
|
+
const next = isPromiseLike(nextRes) ? await nextRes : nextRes;
|
|
46
|
+
if (Array.isArray(next) && next.length > 0) issues.push(...next);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
files: picked,
|
|
50
|
+
issues
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
53
|
+
if (Array.isArray(res) && res.length > 0) issues.push(...res);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
files: picked,
|
|
57
|
+
issues
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/fileValidation/matchAccept.ts
|
|
62
|
+
function parseAccept(accept) {
|
|
63
|
+
if (!accept) return [];
|
|
64
|
+
return accept.split(",").map((s) => s.trim()).filter(Boolean);
|
|
65
|
+
}
|
|
66
|
+
function matchAccept(file, accept) {
|
|
67
|
+
const tokens = parseAccept(accept);
|
|
68
|
+
if (!tokens.length) return true;
|
|
69
|
+
const fileName = file.name.toLowerCase();
|
|
70
|
+
const fileType = (file.type || "").toLowerCase();
|
|
71
|
+
for (const rawToken of tokens) {
|
|
72
|
+
const token = rawToken.toLowerCase();
|
|
73
|
+
if (token.startsWith(".")) {
|
|
74
|
+
if (fileName.endsWith(token)) return true;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (token.endsWith("/*")) {
|
|
78
|
+
if (!fileType) continue;
|
|
79
|
+
const prefix = token.slice(0, -1);
|
|
80
|
+
if (fileType.startsWith(prefix)) return true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (!fileType) continue;
|
|
84
|
+
if (fileType === token) return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/fileValidation/acceptValidator.ts
|
|
90
|
+
function acceptValidator(accept) {
|
|
91
|
+
if (!accept) return () => [];
|
|
92
|
+
return ({ files }) => {
|
|
93
|
+
const issues = [];
|
|
94
|
+
for (const file of files) {
|
|
95
|
+
if (matchAccept(file, accept)) continue;
|
|
96
|
+
issues.push({
|
|
97
|
+
fileName: file.name,
|
|
98
|
+
code: "accept",
|
|
99
|
+
message: `File "${file.name}" does not match accept="${accept}"`
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return issues;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region src/fileValidation/allowedExtensionsValidator.ts
|
|
107
|
+
function normalizeExtensions(exts) {
|
|
108
|
+
return (exts ?? []).map((s) => s.trim().toLowerCase()).filter(Boolean).map((s) => s.startsWith(".") ? s.slice(1) : s);
|
|
109
|
+
}
|
|
110
|
+
function fileExtensionLower(fileName) {
|
|
111
|
+
const i = fileName.lastIndexOf(".");
|
|
112
|
+
if (i < 0) return "";
|
|
113
|
+
return fileName.slice(i + 1).toLowerCase();
|
|
114
|
+
}
|
|
115
|
+
function allowedExtensionsValidator(exts) {
|
|
116
|
+
const allowedExt = normalizeExtensions(exts);
|
|
117
|
+
if (allowedExt.length === 0) return () => [];
|
|
118
|
+
return ({ files }) => {
|
|
119
|
+
const issues = [];
|
|
120
|
+
for (const file of files) {
|
|
121
|
+
const ext = fileExtensionLower(file.name);
|
|
122
|
+
if (!ext) continue;
|
|
123
|
+
if (!allowedExt.includes(ext)) issues.push({
|
|
124
|
+
fileName: file.name,
|
|
125
|
+
code: "extension",
|
|
126
|
+
message: `File "${file.name}" has disallowed extension ".${ext}"`
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return issues;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
133
|
+
//#region src/fileValidation/allowedMimeTypesValidator.ts
|
|
134
|
+
function isFallbackType(type) {
|
|
135
|
+
return type === "" || type === "application/octet-stream";
|
|
136
|
+
}
|
|
137
|
+
function allowedMimeTypesValidator(allowed, options = {}) {
|
|
138
|
+
const allowedMime = (allowed ?? []).map((s) => s.trim().toLowerCase()).filter(Boolean);
|
|
139
|
+
if (allowedMime.length === 0) return () => [];
|
|
140
|
+
return ({ files }) => {
|
|
141
|
+
const issues = [];
|
|
142
|
+
for (const file of files) {
|
|
143
|
+
const fileType = (file.type || "").toLowerCase();
|
|
144
|
+
if (isFallbackType(fileType)) {
|
|
145
|
+
if (options.allowFallbackByExtension === false) issues.push({
|
|
146
|
+
fileName: file.name,
|
|
147
|
+
code: "mimeType",
|
|
148
|
+
message: `File "${file.name}" has fallback mime type "${fileType}"`
|
|
149
|
+
});
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (!allowedMime.includes(fileType)) issues.push({
|
|
153
|
+
fileName: file.name,
|
|
154
|
+
code: "mimeType",
|
|
155
|
+
message: `File "${file.name}" has disallowed mime type "${fileType}"`
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return issues;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/fileValidation/maxFileSizeBytesValidator.ts
|
|
163
|
+
function maxFileSizeBytesValidator(maxBytes) {
|
|
164
|
+
if (typeof maxBytes !== "number" || !Number.isFinite(maxBytes) || maxBytes <= 0) return () => [];
|
|
165
|
+
return ({ files }) => {
|
|
166
|
+
const issues = [];
|
|
167
|
+
for (const file of files) {
|
|
168
|
+
if (file.size <= maxBytes) continue;
|
|
169
|
+
issues.push({
|
|
170
|
+
fileName: file.name,
|
|
171
|
+
code: "maxFileSize",
|
|
172
|
+
message: `File "${file.name}" is too large (${file.size} bytes), maxBytes=${maxBytes}`,
|
|
173
|
+
meta: { maxBytes }
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return issues;
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region src/fileValidation/maxSizeMbValidator.ts
|
|
181
|
+
function maxSizeMbValidator(maxSizeMb) {
|
|
182
|
+
if (typeof maxSizeMb !== "number" || !Number.isFinite(maxSizeMb) || maxSizeMb <= 0) return () => [];
|
|
183
|
+
const maxBytes = maxSizeMb * 1024 * 1024;
|
|
184
|
+
return ({ files }) => {
|
|
185
|
+
const issues = [];
|
|
186
|
+
for (const file of files) {
|
|
187
|
+
if (file.size <= maxBytes) continue;
|
|
188
|
+
issues.push({
|
|
189
|
+
fileName: file.name,
|
|
190
|
+
code: "maxSize",
|
|
191
|
+
message: `File "${file.name}" is too large (${file.size} bytes), maxBytes=${maxBytes}`,
|
|
192
|
+
meta: {
|
|
193
|
+
maxBytes,
|
|
194
|
+
maxSizeMb
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return issues;
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
//#endregion
|
|
202
|
+
//#region src/fileValidation/maxTotalSizeBytesValidator.ts
|
|
203
|
+
function maxTotalSizeBytesValidator(maxBytes) {
|
|
204
|
+
if (typeof maxBytes !== "number" || !Number.isFinite(maxBytes) || maxBytes <= 0) return () => [];
|
|
205
|
+
return ({ files }) => {
|
|
206
|
+
const total = files.reduce((acc, f) => acc + (Number(f.size) || 0), 0);
|
|
207
|
+
if (total <= maxBytes) return [];
|
|
208
|
+
return [{
|
|
209
|
+
code: "maxTotalSize",
|
|
210
|
+
message: `Total files size is too large (${total} bytes), maxTotalSizeBytes=${maxBytes}`,
|
|
211
|
+
meta: {
|
|
212
|
+
total,
|
|
213
|
+
maxBytes
|
|
214
|
+
}
|
|
215
|
+
}];
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//#endregion
|
|
219
|
+
export { allowedExtensionsValidator as a, normalizeFiles as c, allowedMimeTypesValidator as i, runFileValidators as l, maxSizeMbValidator as n, acceptValidator as o, maxFileSizeBytesValidator as r, matchAccept as s, maxTotalSizeBytesValidator as t, FileValidationError as u };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=fileValidation-CgjTGoUx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileValidation-CgjTGoUx.js","names":[],"sources":["../../src/fileValidation/FileValidationError.ts","../../src/fileValidation/runFileValidators.ts","../../src/fileValidation/matchAccept.ts","../../src/fileValidation/acceptValidator.ts","../../src/fileValidation/allowedExtensionsValidator.ts","../../src/fileValidation/allowedMimeTypesValidator.ts","../../src/fileValidation/maxFileSizeBytesValidator.ts","../../src/fileValidation/maxSizeMbValidator.ts","../../src/fileValidation/maxTotalSizeBytesValidator.ts"],"sourcesContent":["import type { FileValidationIssue, FileValidationIssueCode } from './types'\n\nexport class FileValidationError extends Error {\n code: FileValidationIssueCode\n file?: File\n issues: FileValidationIssue[]\n\n constructor(issues: FileValidationIssue[], files?: File[], message?: string) {\n super(message ?? issues[0]?.message ?? 'File validation failed')\n this.name = 'FileValidationError'\n\n this.issues = issues\n this.code = issues[0]?.code ?? 'accept'\n\n const firstFileName = issues[0]?.fileName\n const byName = firstFileName && files ? files.find(f => f.name === firstFileName) : undefined\n // Fallback to the first file if the named one isn't present in `files`\n // (e.g. aggregate issue like `maxTotalSize` has no `fileName`, or names diverged).\n this.file = byName ?? files?.[0]\n }\n}","import type { FileValidationIssue, FileValidator, FileValidatorContext } from './types'\n\nexport function normalizeFiles(files: File[], multiple: boolean): File[] {\n const list = [...files]\n return multiple ? list : list.slice(0, 1)\n}\n\nfunction isPromiseLike<T>(value: unknown): value is PromiseLike<T> {\n return !!value && typeof (value as any).then === 'function'\n}\n\nexport type RunFileValidatorsResult = { files: File[]; issues: FileValidationIssue[] }\n\nexport function runFileValidators(\n files: File[],\n validators: FileValidator[] | undefined,\n context: FileValidatorContext,\n): RunFileValidatorsResult | Promise<RunFileValidatorsResult> {\n const picked = normalizeFiles(files, context.multiple)\n\n const issues: FileValidationIssue[] = []\n\n const list = validators ?? []\n for (let i = 0; i < list.length; i++) {\n const validator = list[i]\n if (!validator) continue\n\n const res = validator({ files: picked, context })\n\n if (isPromiseLike<FileValidationIssue[]>(res)) {\n return (async () => {\n const first = await res\n if (Array.isArray(first) && first.length > 0) issues.push(...first)\n\n for (let j = i + 1; j < list.length; j++) {\n const nextValidator = list[j]\n if (!nextValidator) continue\n\n const nextRes = nextValidator({ files: picked, context })\n const next = isPromiseLike<FileValidationIssue[]>(nextRes) ? await nextRes : nextRes\n if (Array.isArray(next) && next.length > 0) issues.push(...next)\n }\n\n return { files: picked, issues }\n })()\n }\n\n if (Array.isArray(res) && res.length > 0) issues.push(...res)\n }\n\n return { files: picked, issues }\n}","function parseAccept(accept: string | undefined): string[] {\n if (!accept) return []\n\n return accept\n .split(',')\n .map(s => s.trim())\n .filter(Boolean)\n}\n\nexport function matchAccept(file: File, accept: string | undefined): boolean {\n const tokens = parseAccept(accept)\n if (!tokens.length) return true\n\n const fileName = file.name.toLowerCase()\n const fileType = (file.type || '').toLowerCase()\n\n for (const rawToken of tokens) {\n const token = rawToken.toLowerCase()\n\n // Extension match, e.g. \".png\".\n if (token.startsWith('.')) {\n if (fileName.endsWith(token)) return true\n continue\n }\n\n // Mime group match, e.g. \"image/*\".\n if (token.endsWith('/*')) {\n if (!fileType) continue\n const prefix = token.slice(0, -1) // keep trailing '/'\n if (fileType.startsWith(prefix)) return true\n continue\n }\n\n // Exact mime match, e.g. \"image/png\".\n if (!fileType) continue\n if (fileType === token) return true\n }\n\n return false\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nimport { matchAccept } from './matchAccept'\n\nexport function acceptValidator(accept: string | undefined): FileValidator {\n if (!accept) return () => []\n\n return ({ files }): FileValidationIssue[] => {\n const issues: FileValidationIssue[] = []\n\n for (const file of files) {\n if (matchAccept(file, accept)) continue\n\n issues.push({\n fileName: file.name,\n code: 'accept',\n message: `File \"${file.name}\" does not match accept=\"${accept}\"`,\n })\n }\n\n return issues\n }\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nfunction normalizeExtensions(exts: string[] | undefined): string[] {\n return (exts ?? [])\n .map(s => s.trim().toLowerCase())\n .filter(Boolean)\n .map(s => (s.startsWith('.') ? s.slice(1) : s))\n}\n\nfunction fileExtensionLower(fileName: string): string {\n const i = fileName.lastIndexOf('.')\n if (i < 0) return ''\n return fileName.slice(i + 1).toLowerCase()\n}\n\nexport function allowedExtensionsValidator(exts: string[]): FileValidator {\n const allowedExt = normalizeExtensions(exts)\n if (allowedExt.length === 0) return () => []\n\n return ({ files }): FileValidationIssue[] => {\n const issues: FileValidationIssue[] = []\n\n for (const file of files) {\n const ext = fileExtensionLower(file.name)\n if (!ext) continue\n\n if (!allowedExt.includes(ext)) {\n issues.push({\n fileName: file.name,\n code: 'extension',\n message: `File \"${file.name}\" has disallowed extension \".${ext}\"`,\n })\n }\n }\n\n return issues\n }\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nexport type AllowedMimeTypesValidatorOptions = {\n /**\n * Если `true`, то для fallback-типа (`''`/`application/octet-stream`) валидация по MIME пропускается,\n * предполагая проверку расширения отдельным валидатором.\n */\n allowFallbackByExtension?: boolean\n}\n\nfunction isFallbackType(type: string): boolean {\n return type === '' || type === 'application/octet-stream'\n}\n\nexport function allowedMimeTypesValidator(\n allowed: string[],\n options: AllowedMimeTypesValidatorOptions = {},\n): FileValidator {\n const allowedMime = (allowed ?? []).map(s => s.trim().toLowerCase()).filter(Boolean)\n if (allowedMime.length === 0) return () => []\n\n return ({ files }): FileValidationIssue[] => {\n const issues: FileValidationIssue[] = []\n\n for (const file of files) {\n const fileType = (file.type || '').toLowerCase()\n\n if (isFallbackType(fileType)) {\n // Legacy behavior in DS: fallback types are not rejected by MIME allow-list.\n // If consumer needs strictness, it can explicitly forbid fallback types.\n if (options.allowFallbackByExtension === false) {\n issues.push({\n fileName: file.name,\n code: 'mimeType',\n message: `File \"${file.name}\" has fallback mime type \"${fileType}\"`,\n })\n }\n\n continue\n }\n\n if (!allowedMime.includes(fileType)) {\n issues.push({\n fileName: file.name,\n code: 'mimeType',\n message: `File \"${file.name}\" has disallowed mime type \"${fileType}\"`,\n })\n }\n }\n\n return issues\n }\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nexport function maxFileSizeBytesValidator(maxBytes: number | undefined): FileValidator {\n if (typeof maxBytes !== 'number' || !Number.isFinite(maxBytes) || maxBytes <= 0) return () => []\n\n return ({ files }): FileValidationIssue[] => {\n const issues: FileValidationIssue[] = []\n\n for (const file of files) {\n if (file.size <= maxBytes) continue\n\n issues.push({\n fileName: file.name,\n code: 'maxFileSize',\n message: `File \"${file.name}\" is too large (${file.size} bytes), maxBytes=${maxBytes}`,\n meta: { maxBytes },\n })\n }\n\n return issues\n }\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nexport function maxSizeMbValidator(maxSizeMb: number | undefined): FileValidator {\n if (typeof maxSizeMb !== 'number' || !Number.isFinite(maxSizeMb) || maxSizeMb <= 0) return () => []\n const maxBytes = maxSizeMb * 1024 * 1024\n\n return ({ files }): FileValidationIssue[] => {\n const issues: FileValidationIssue[] = []\n\n for (const file of files) {\n if (file.size <= maxBytes) continue\n\n issues.push({\n fileName: file.name,\n code: 'maxSize',\n message: `File \"${file.name}\" is too large (${file.size} bytes), maxBytes=${maxBytes}`,\n meta: { maxBytes, maxSizeMb },\n })\n }\n\n return issues\n }\n}","import type { FileValidationIssue, FileValidator } from './types'\n\nexport function maxTotalSizeBytesValidator(maxBytes: number | undefined): FileValidator {\n if (typeof maxBytes !== 'number' || !Number.isFinite(maxBytes) || maxBytes <= 0) return () => []\n\n return ({ files }): FileValidationIssue[] => {\n const total = files.reduce((acc, f) => acc + (Number(f.size) || 0), 0)\n if (total <= maxBytes) return []\n\n const issue: FileValidationIssue = {\n code: 'maxTotalSize',\n message: `Total files size is too large (${total} bytes), maxTotalSizeBytes=${maxBytes}`,\n meta: { total, maxBytes },\n }\n\n return [issue]\n }\n}"],"mappings":"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"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
//#region src/components/GrBadge/grBadgeStyles.ts
|
|
2
|
-
var
|
|
2
|
+
var sizeClassBySize = {
|
|
3
3
|
sm: "px-2 py-0.4 text-[11px]",
|
|
4
4
|
md: "px-2.5 py-0.5 text-[12px]",
|
|
5
5
|
lg: "px-3 py-1 text-[13px]"
|
|
6
|
-
}
|
|
6
|
+
};
|
|
7
|
+
var semiRadiusClassBySize = {
|
|
7
8
|
sm: "rounded-[3px]",
|
|
8
9
|
md: "rounded-[3px]",
|
|
9
10
|
lg: "rounded-[5px]"
|
|
10
|
-
}
|
|
11
|
+
};
|
|
12
|
+
var lightToneClassByTone = {
|
|
11
13
|
neutral: "bg-[var(--muted)] text-[var(--fg)] border-[var(--brd)]",
|
|
12
14
|
primary: "bg-[var(--accent)] text-[var(--accent-fg)] border-[color-mix(in_srgb,var(--primary)_30%,var(--accent))]",
|
|
13
15
|
success: "bg-[var(--ds-success-light)] text-[var(--ds-success)] border-[color-mix(in_srgb,var(--ds-success)_30%,var(--ds-success-light))]",
|
|
@@ -16,7 +18,8 @@ var e = {
|
|
|
16
18
|
info: "bg-[var(--ds-info-light)] text-[var(--ds-info)] border-[color-mix(in_srgb,var(--ds-info)_30%,var(--ds-info-light))]",
|
|
17
19
|
slate: "bg-[var(--ds-slate-light)] text-[var(--ds-slate-text)] border-[color-mix(in_srgb,var(--ds-slate)_30%,var(--ds-slate-light))]",
|
|
18
20
|
azure: "bg-[var(--ds-azure-light)] text-[var(--ds-azure-text)] border-[color-mix(in_srgb,var(--ds-azure)_30%,var(--ds-azure-light))]"
|
|
19
|
-
}
|
|
21
|
+
};
|
|
22
|
+
var darkToneClassByTone = {
|
|
20
23
|
neutral: "bg-[var(--fg)] text-[var(--bg)] border-[color-mix(in_srgb,var(--fg)_35%,var(--brd))]",
|
|
21
24
|
primary: "bg-[var(--primary)] text-[var(--primary-fg)] border-[var(--primary)]",
|
|
22
25
|
success: "bg-[var(--ds-success)] text-white border-[var(--ds-success)]",
|
|
@@ -26,18 +29,22 @@ var e = {
|
|
|
26
29
|
slate: "bg-[var(--ds-slate)] text-[var(--ds-slate-fg)] border-[var(--ds-slate)]",
|
|
27
30
|
azure: "bg-[var(--ds-azure)] text-[var(--ds-azure-fg)] border-[var(--ds-azure)]"
|
|
28
31
|
};
|
|
29
|
-
function
|
|
30
|
-
|
|
32
|
+
function radiusClass(radius, size) {
|
|
33
|
+
if (radius === "square") return "rounded-[var(--ds-radius-none)]";
|
|
34
|
+
if (radius === "semi") return semiRadiusClassBySize[size];
|
|
35
|
+
return "rounded-full";
|
|
31
36
|
}
|
|
32
|
-
function
|
|
33
|
-
return
|
|
37
|
+
function toneClass(tone, dark) {
|
|
38
|
+
return dark ? darkToneClassByTone[tone] : lightToneClassByTone[tone];
|
|
34
39
|
}
|
|
35
|
-
function
|
|
40
|
+
function grBadgeClass(options) {
|
|
36
41
|
return [
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
radiusClass(options.radius, options.size),
|
|
43
|
+
sizeClassBySize[options.size],
|
|
44
|
+
toneClass(options.tone, options.dark)
|
|
40
45
|
].join(" ");
|
|
41
46
|
}
|
|
42
47
|
//#endregion
|
|
43
|
-
export {
|
|
48
|
+
export { sizeClassBySize as a, semiRadiusClassBySize as i, grBadgeClass as n, lightToneClassByTone as r, darkToneClassByTone as t };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=grBadgeStyles-pqqbVgLk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grBadgeStyles-pqqbVgLk.js","names":[],"sources":["../../src/components/GrBadge/grBadgeStyles.ts"],"sourcesContent":["export type GrBadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'slate' | 'azure'\nexport type GrBadgeSize = 'sm' | 'md' | 'lg'\nexport type GrBadgeRadius = 'square' | 'semi' | 'round'\nexport const sizeClassBySize: Record<GrBadgeSize, string> = {\n sm: 'px-2 py-0.4 text-[11px]',\n md: 'px-2.5 py-0.5 text-[12px]',\n lg: 'px-3 py-1 text-[13px]',\n}\nexport const semiRadiusClassBySize: Record<GrBadgeSize, string> = {\n sm: 'rounded-[3px]',\n md: 'rounded-[3px]',\n lg: 'rounded-[5px]',\n}\nexport const lightToneClassByTone: Record<GrBadgeTone, string> = {\n neutral: 'bg-[var(--muted)] text-[var(--fg)] border-[var(--brd)]',\n primary:\n 'bg-[var(--accent)] text-[var(--accent-fg)] border-[color-mix(in_srgb,var(--primary)_30%,var(--accent))]',\n success: 'bg-[var(--ds-success-light)] text-[var(--ds-success)] border-[color-mix(in_srgb,var(--ds-success)_30%,var(--ds-success-light))]',\n warning: 'bg-[var(--ds-warning-light)] text-[var(--ds-warning)] border-[color-mix(in_srgb,var(--ds-warning)_30%,var(--ds-warning-light))]',\n danger: 'bg-[var(--ds-danger-light)] text-[var(--ds-danger)] border-[color-mix(in_srgb,var(--ds-danger)_30%,var(--ds-danger-light))]',\n info: 'bg-[var(--ds-info-light)] text-[var(--ds-info)] border-[color-mix(in_srgb,var(--ds-info)_30%,var(--ds-info-light))]',\n slate: 'bg-[var(--ds-slate-light)] text-[var(--ds-slate-text)] border-[color-mix(in_srgb,var(--ds-slate)_30%,var(--ds-slate-light))]',\n azure: 'bg-[var(--ds-azure-light)] text-[var(--ds-azure-text)] border-[color-mix(in_srgb,var(--ds-azure)_30%,var(--ds-azure-light))]',\n}\nexport const darkToneClassByTone: Record<GrBadgeTone, string> = {\n neutral: 'bg-[var(--fg)] text-[var(--bg)] border-[color-mix(in_srgb,var(--fg)_35%,var(--brd))]',\n primary: 'bg-[var(--primary)] text-[var(--primary-fg)] border-[var(--primary)]',\n success: 'bg-[var(--ds-success)] text-white border-[var(--ds-success)]',\n warning: 'bg-[var(--ds-warning)] text-white border-[var(--ds-warning)]',\n danger: 'bg-[var(--ds-danger)] text-white border-[var(--ds-danger)]',\n info: 'bg-[var(--ds-info)] text-white border-[var(--ds-info)]',\n slate: 'bg-[var(--ds-slate)] text-[var(--ds-slate-fg)] border-[var(--ds-slate)]',\n azure: 'bg-[var(--ds-azure)] text-[var(--ds-azure-fg)] border-[var(--ds-azure)]',\n}\nfunction radiusClass(radius: GrBadgeRadius, size: GrBadgeSize): string {\n if (radius === 'square') return 'rounded-[var(--ds-radius-none)]'\n if (radius === 'semi') return semiRadiusClassBySize[size]\n return 'rounded-full'\n}\nfunction toneClass(tone: GrBadgeTone, dark: boolean): string {\n return dark ? darkToneClassByTone[tone] : lightToneClassByTone[tone]\n}\nexport function grBadgeClass(options: { tone: GrBadgeTone, dark: boolean, size: GrBadgeSize, radius: GrBadgeRadius }): string {\n return [\n radiusClass(options.radius, options.size),\n sizeClassBySize[options.size],\n toneClass(options.tone, options.dark),\n ].join(' ')\n}\n"],"mappings":";AAGA,IAAa,kBAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AACD,IAAa,wBAAqD;CAChE,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AACD,IAAa,uBAAoD;CAC/D,SAAS;CACT,SACE;CACF,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;CACR;AACD,IAAa,sBAAmD;CAC9D,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;CACR;AACD,SAAS,YAAY,QAAuB,MAA2B;AACrE,KAAI,WAAW,SAAU,QAAO;AAChC,KAAI,WAAW,OAAQ,QAAO,sBAAsB;AACpD,QAAO;;AAET,SAAS,UAAU,MAAmB,MAAuB;AAC3D,QAAO,OAAO,oBAAoB,QAAQ,qBAAqB;;AAEjE,SAAgB,aAAa,SAAiG;AAC5H,QAAO;EACL,YAAY,QAAQ,QAAQ,QAAQ,KAAK;EACzC,gBAAgB,QAAQ;EACxB,UAAU,QAAQ,MAAM,QAAQ,KAAK;EACtC,CAAC,KAAK,IAAI"}
|