@feugene/granularity 0.4.0 → 0.4.2
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-K6zZTzBi.js +4 -0
- package/dist/chunks/adapter-K6zZTzBi.js.map +1 -0
- package/dist/chunks/arrow-up-DNXrMoAI.js +23 -0
- package/dist/chunks/arrow-up-DNXrMoAI.js.map +1 -0
- package/dist/chunks/classTokens-BPeBXNzu.js +6 -0
- package/dist/chunks/classTokens-BPeBXNzu.js.map +1 -0
- package/dist/chunks/config-1I95Zy4V.js +14 -0
- package/dist/chunks/config-1I95Zy4V.js.map +1 -0
- package/dist/chunks/config-2wgwWaAB.js +8 -0
- package/dist/chunks/config-2wgwWaAB.js.map +1 -0
- package/dist/chunks/config-BA0BWYzs.js +8 -0
- package/dist/chunks/config-BA0BWYzs.js.map +1 -0
- package/dist/chunks/config-BCPyma1I.js +8 -0
- package/dist/chunks/config-BCPyma1I.js.map +1 -0
- package/dist/chunks/config-BDlh6iNz.js +24 -0
- package/dist/chunks/config-BDlh6iNz.js.map +1 -0
- package/dist/chunks/config-BKRmlivc.js +8 -0
- package/dist/chunks/config-BKRmlivc.js.map +1 -0
- package/dist/chunks/config-BN-B2K4r.js +17 -0
- package/dist/chunks/config-BN-B2K4r.js.map +1 -0
- package/dist/chunks/config-BNOf_qjD.js +40 -0
- package/dist/chunks/config-BNOf_qjD.js.map +1 -0
- package/dist/chunks/config-BaMO9dQh.js +20 -0
- package/dist/chunks/config-BaMO9dQh.js.map +1 -0
- package/dist/chunks/config-Bv2G0OU6.js +8 -0
- package/dist/chunks/config-Bv2G0OU6.js.map +1 -0
- package/dist/chunks/config-BvuQUBtZ.js +21 -0
- package/dist/chunks/config-BvuQUBtZ.js.map +1 -0
- package/dist/chunks/config-BzZGpWsj.js +9 -0
- package/dist/chunks/config-BzZGpWsj.js.map +1 -0
- package/dist/chunks/config-C0j836dC.js +8 -0
- package/dist/chunks/config-C0j836dC.js.map +1 -0
- package/dist/chunks/config-C2iI7_QX.js +9 -0
- package/dist/chunks/config-C2iI7_QX.js.map +1 -0
- package/dist/chunks/config-C4AlNm912.js +13 -0
- package/dist/chunks/config-C4AlNm912.js.map +1 -0
- package/dist/chunks/config-C5SJXHQ4.js +9 -0
- package/dist/chunks/config-C5SJXHQ4.js.map +1 -0
- package/dist/chunks/config-C6SBJxcH.js +8 -0
- package/dist/chunks/config-C6SBJxcH.js.map +1 -0
- package/dist/chunks/config-CByfsV-z2.js +9 -0
- package/dist/chunks/config-CByfsV-z2.js.map +1 -0
- package/dist/chunks/config-CM7nbATU2.js +78 -0
- package/dist/chunks/config-CM7nbATU2.js.map +1 -0
- package/dist/chunks/config-CMZE2fu0.js +9 -0
- package/dist/chunks/config-CMZE2fu0.js.map +1 -0
- package/dist/chunks/config-CU_CBd0k.js +22 -0
- package/dist/chunks/config-CU_CBd0k.js.map +1 -0
- package/dist/chunks/config-CUgvsjZx.js +171 -0
- package/dist/chunks/config-CUgvsjZx.js.map +1 -0
- package/dist/chunks/config-CWvHiaqr2.js +23 -0
- package/dist/chunks/config-CWvHiaqr2.js.map +1 -0
- package/dist/chunks/config-Cf0J6wCX.js +58 -0
- package/dist/chunks/config-Cf0J6wCX.js.map +1 -0
- package/dist/chunks/config-CgAY2WP9.js +9 -0
- package/dist/chunks/config-CgAY2WP9.js.map +1 -0
- package/dist/chunks/config-Cgc-D1K4.js +9 -0
- package/dist/chunks/config-Cgc-D1K4.js.map +1 -0
- package/dist/chunks/config-D19pyP4D.js +35 -0
- package/dist/chunks/config-D19pyP4D.js.map +1 -0
- package/dist/chunks/config-DCQO6H6h.js +11 -0
- package/dist/chunks/config-DCQO6H6h.js.map +1 -0
- package/dist/chunks/config-DEv4m-ZP.js +58 -0
- package/dist/chunks/config-DEv4m-ZP.js.map +1 -0
- package/dist/chunks/config-DFRYOcrP.js +9 -0
- package/dist/chunks/config-DFRYOcrP.js.map +1 -0
- package/dist/chunks/config-DTpwUHgF.js +9 -0
- package/dist/chunks/config-DTpwUHgF.js.map +1 -0
- package/dist/chunks/config-DW_RqmUp.js +8 -0
- package/dist/chunks/config-DW_RqmUp.js.map +1 -0
- package/dist/chunks/config-Da90XGsi.js +38 -0
- package/dist/chunks/config-Da90XGsi.js.map +1 -0
- package/dist/chunks/config-DgRJlF00.js +53 -0
- package/dist/chunks/config-DgRJlF00.js.map +1 -0
- package/dist/chunks/config-Dkq0HeLe.js +9 -0
- package/dist/chunks/config-Dkq0HeLe.js.map +1 -0
- package/dist/chunks/config-DmI1IQvI2.js +8 -0
- package/dist/chunks/config-DmI1IQvI2.js.map +1 -0
- package/dist/chunks/config-Dnu4VuO0.js +8 -0
- package/dist/chunks/config-Dnu4VuO0.js.map +1 -0
- package/dist/chunks/config-DxqpV-KM.js +45 -0
- package/dist/chunks/config-DxqpV-KM.js.map +1 -0
- package/dist/chunks/config-TyzU6gLf.js +8 -0
- package/dist/chunks/config-TyzU6gLf.js.map +1 -0
- package/dist/chunks/config-XwI6t8cn.js +39 -0
- package/dist/chunks/config-XwI6t8cn.js.map +1 -0
- package/dist/chunks/config-bpQYM5O-.js +44 -0
- package/dist/chunks/config-bpQYM5O-.js.map +1 -0
- package/dist/chunks/config-etXh7Bsr2.js +9 -0
- package/dist/chunks/config-etXh7Bsr2.js.map +1 -0
- package/dist/chunks/config-fCcRwjIB.js +13 -0
- package/dist/chunks/config-fCcRwjIB.js.map +1 -0
- package/dist/chunks/config-nfOMJXVs.js +9 -0
- package/dist/chunks/config-nfOMJXVs.js.map +1 -0
- package/dist/chunks/config-qJXIIY1E.js +8 -0
- package/dist/chunks/config-qJXIIY1E.js.map +1 -0
- package/dist/chunks/config-r6hzn2Bn2.js +9 -0
- package/dist/chunks/config-r6hzn2Bn2.js.map +1 -0
- package/dist/chunks/config-rQlbnEKn.js +8 -0
- package/dist/chunks/config-rQlbnEKn.js.map +1 -0
- package/dist/chunks/dialogShared-BtXUk6Zc.js +32 -0
- package/dist/chunks/dialogShared-BtXUk6Zc.js.map +1 -0
- package/dist/chunks/en-BeJa78lP.js +48 -0
- package/dist/chunks/en-BeJa78lP.js.map +1 -0
- package/dist/chunks/es-BPqm7rLm.js +20 -0
- package/dist/chunks/es-BPqm7rLm.js.map +1 -0
- package/dist/chunks/es-axYOwwWD.js +48 -0
- package/dist/chunks/es-axYOwwWD.js.map +1 -0
- package/dist/chunks/fileValidation-CwJA8Vmn.js +219 -0
- package/dist/chunks/fileValidation-CwJA8Vmn.js.map +1 -0
- package/dist/chunks/{grBadgeStyles-Bu4H8bFc.js → grBadgeStyles-pqqbVgLk.js} +18 -13
- package/dist/chunks/grBadgeStyles-pqqbVgLk.js.map +1 -0
- package/dist/chunks/{grButtonStyles-C5k0bN2e.js → grButtonStyles-BxZW2x0-.js} +60 -52
- package/dist/chunks/grButtonStyles-BxZW2x0-.js.map +1 -0
- package/dist/chunks/{grDropdownStyles-149X1NeB.js → grDropdownStyles-DMp7RrI9.js} +10 -9
- package/dist/chunks/grDropdownStyles-DMp7RrI9.js.map +1 -0
- package/dist/chunks/grLoadingStyles-CrxZHFL0.js +17 -0
- package/dist/chunks/grLoadingStyles-CrxZHFL0.js.map +1 -0
- package/dist/chunks/{grModalStyles-Dmd4havY.js → grModalStyles-Dv2NXBKi.js} +20 -11
- package/dist/chunks/grModalStyles-Dv2NXBKi.js.map +1 -0
- package/dist/chunks/grSelectStyles-B7doeAQp.js +50 -0
- package/dist/chunks/grSelectStyles-B7doeAQp.js.map +1 -0
- package/dist/chunks/granularityI18n-GCqUz_lo.js +26 -0
- package/dist/chunks/granularityI18n-GCqUz_lo.js.map +1 -0
- package/dist/chunks/info-C0bHmdZq.js +26 -0
- package/dist/chunks/info-C0bHmdZq.js.map +1 -0
- package/dist/chunks/loader-circle-B2rWDk5u.js +23 -0
- package/dist/chunks/loader-circle-B2rWDk5u.js.map +1 -0
- package/dist/chunks/ru-Dqh-2C00.js +48 -0
- package/dist/chunks/ru-Dqh-2C00.js.map +1 -0
- package/dist/chunks/safelist-BF822K15.js +13 -0
- package/dist/chunks/safelist-BF822K15.js.map +1 -0
- package/dist/chunks/safelist-BY7z8fOl.js +24 -0
- package/dist/chunks/safelist-BY7z8fOl.js.map +1 -0
- package/dist/chunks/{shared-BqUqjuxn.js → shared-Cu5QkNmt.js} +149 -111
- package/dist/chunks/shared-Cu5QkNmt.js.map +1 -0
- package/dist/chunks/transition-mJ3PZCHH.js +1692 -0
- package/dist/chunks/transition-mJ3PZCHH.js.map +1 -0
- package/dist/chunks/x-Pa6C2hwi.js +23 -0
- package/dist/chunks/x-Pa6C2hwi.js.map +1 -0
- package/dist/chunks/x-circle-DQSlBLmX.js +67 -0
- package/dist/chunks/x-circle-DQSlBLmX.js.map +1 -0
- package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js +146 -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 +41 -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 +32 -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 +33 -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 +31 -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 +83 -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 +21 -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 +11 -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 +134 -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 +205 -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 +131 -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 +179 -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 +221 -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 +156 -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-BkACCXdp.js +151 -0
- package/dist/components/GrDropdown/chunks/GrDropdown-BkACCXdp.js.map +1 -0
- package/dist/components/GrDropdown/index.js +3 -3
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-BEenXrJw.js +309 -0
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-BEenXrJw.js.map +1 -0
- package/dist/components/GrDropdownMenu/index.js +3 -3
- package/dist/components/GrEmptyState/chunks/GrEmptyState-BLbMJFW-.js +62 -0
- package/dist/components/GrEmptyState/chunks/GrEmptyState-BLbMJFW-.js.map +1 -0
- package/dist/components/GrEmptyState/index.js +3 -3
- package/dist/components/GrFileUpload/chunks/GrFileUpload-u01j9S0t.js +368 -0
- package/dist/components/GrFileUpload/chunks/GrFileUpload-u01j9S0t.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +4 -4
- package/dist/components/GrFormField/chunks/GrFormField-C6PfAs4u.js +35 -0
- package/dist/components/GrFormField/chunks/GrFormField-C6PfAs4u.js.map +1 -0
- package/dist/components/GrFormField/index.js +3 -3
- package/dist/components/GrFormFile/chunks/GrFormFile-DdM8Bc2B.js +313 -0
- package/dist/components/GrFormFile/chunks/GrFormFile-DdM8Bc2B.js.map +1 -0
- package/dist/components/GrFormFile/index.js +3 -3
- package/dist/components/GrFormSection/chunks/GrFormSection-5djEaQZQ.js +35 -0
- package/dist/components/GrFormSection/chunks/GrFormSection-5djEaQZQ.js.map +1 -0
- package/dist/components/GrFormSection/index.js +3 -3
- package/dist/components/GrIcon/chunks/GrIcon-BV7RBU_0.js +32 -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-CjSnohW7.js +397 -0
- package/dist/components/GrImageViewer/chunks/GrImageViewer-CjSnohW7.js.map +1 -0
- package/dist/components/GrImageViewer/index.js +3 -3
- package/dist/components/GrInput/chunks/GrInput-ghxaTf6d.js +211 -0
- package/dist/components/GrInput/chunks/GrInput-ghxaTf6d.js.map +1 -0
- package/dist/components/GrInput/index.js +3 -3
- package/dist/components/GrInputTag/chunks/GrInputTag-B0x4U0Yk.js +257 -0
- package/dist/components/GrInputTag/chunks/GrInputTag-B0x4U0Yk.js.map +1 -0
- package/dist/components/GrInputTag/index.js +3 -3
- package/dist/components/GrLink/chunks/GrLink-C7-Y1u88.js +80 -0
- package/dist/components/GrLink/chunks/GrLink-C7-Y1u88.js.map +1 -0
- package/dist/components/GrLink/index.js +3 -3
- package/dist/components/GrList/chunks/GrList--Ib4zLNw.js +77 -0
- package/dist/components/GrList/chunks/GrList--Ib4zLNw.js.map +1 -0
- package/dist/components/GrList/index.js +3 -3
- package/dist/components/GrLoading/chunks/GrLoading-C3QZKwE-.js +69 -0
- package/dist/components/GrLoading/chunks/GrLoading-C3QZKwE-.js.map +1 -0
- package/dist/components/GrLoading/index.js +3 -3
- package/dist/components/GrModal/chunks/GrModal-gvfvlp7k.js +168 -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-nIyuiVj1.js +75 -0
- package/dist/components/GrNavbar/chunks/GrNavbar-nIyuiVj1.js.map +1 -0
- package/dist/components/GrNavbar/index.js +3 -3
- package/dist/components/GrNumberInput/chunks/GrNumberInput-B0mPLjdv.js +397 -0
- package/dist/components/GrNumberInput/chunks/GrNumberInput-B0mPLjdv.js.map +1 -0
- package/dist/components/GrNumberInput/index.js +3 -3
- package/dist/components/GrPagination/chunks/GrPagination-BSTO6flk.js +114 -0
- package/dist/components/GrPagination/chunks/GrPagination-BSTO6flk.js.map +1 -0
- package/dist/components/GrPagination/index.js +3 -3
- package/dist/components/GrProgressBar/chunks/GrProgressBar-MvMnzsJl.js +39 -0
- package/dist/components/GrProgressBar/chunks/GrProgressBar-MvMnzsJl.js.map +1 -0
- package/dist/components/GrProgressBar/index.js +3 -3
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DKhbN6ji.js +190 -0
- package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DKhbN6ji.js.map +1 -0
- package/dist/components/GrPromptDialog/index.js +3 -3
- package/dist/components/GrRadio/chunks/GrRadio-BxBs3WHq.js +184 -0
- package/dist/components/GrRadio/chunks/GrRadio-BxBs3WHq.js.map +1 -0
- package/dist/components/GrRadio/index.js +3 -3
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CEAfJQ6A.js +80 -0
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-CEAfJQ6A.js.map +1 -0
- package/dist/components/GrRadioGroup/index.js +3 -3
- package/dist/components/GrSegmented/chunks/GrSegmented-Bwn2qOY4.js +323 -0
- package/dist/components/GrSegmented/chunks/GrSegmented-Bwn2qOY4.js.map +1 -0
- package/dist/components/GrSegmented/index.js +3 -3
- package/dist/components/GrSelect/chunks/GrSelect-9wRWAu2R.js +443 -0
- package/dist/components/GrSelect/chunks/GrSelect-9wRWAu2R.js.map +1 -0
- package/dist/components/GrSelect/index.js +3 -3
- package/dist/components/GrSidebar/chunks/GrSidebar-CSZ3RpFB.js +44 -0
- package/dist/components/GrSidebar/chunks/GrSidebar-CSZ3RpFB.js.map +1 -0
- package/dist/components/GrSidebar/index.js +3 -3
- package/dist/components/GrSkeleton/chunks/GrSkeleton-DKXkqWDa.js +33 -0
- package/dist/components/GrSkeleton/chunks/GrSkeleton-DKXkqWDa.js.map +1 -0
- package/dist/components/GrSkeleton/index.js +3 -3
- package/dist/components/GrSwitch/chunks/GrSwitch-CdBxwV3k.js +79 -0
- package/dist/components/GrSwitch/chunks/GrSwitch-CdBxwV3k.js.map +1 -0
- package/dist/components/GrSwitch/index.js +3 -3
- package/dist/components/GrTable/chunks/GrTable-CyQ9uw8A.js +57 -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-BpF8AAUz.js +118 -0
- package/dist/components/GrTabs/chunks/GrTabs-BpF8AAUz.js.map +1 -0
- package/dist/components/GrTabs/index.js +3 -3
- package/dist/components/GrTextarea/chunks/GrTextarea-DFS9ZkrA.js +71 -0
- package/dist/components/GrTextarea/chunks/GrTextarea-DFS9ZkrA.js.map +1 -0
- package/dist/components/GrTextarea/index.js +3 -3
- package/dist/components/GrToaster/chunks/GrToaster-3Mf0Moxt.js +171 -0
- package/dist/components/GrToaster/chunks/GrToaster-3Mf0Moxt.js.map +1 -0
- package/dist/components/GrToaster/index.js +3 -3
- package/dist/components/GrTooltip/chunks/GrTooltip-BvmsukLW.js +55 -0
- package/dist/components/GrTooltip/chunks/GrTooltip-BvmsukLW.js.map +1 -0
- package/dist/components/GrTooltip/index.js +3 -3
- package/dist/components/GrTree/chunks/GrTree-C2kN-O4Q.js +734 -0
- package/dist/components/GrTree/chunks/GrTree-C2kN-O4Q.js.map +1 -0
- package/dist/components/GrTree/index.js +3 -3
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-Da-CpRqm.js +454 -0
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-Da-CpRqm.js.map +1 -0
- package/dist/components/GrTreeSelect/index.js +3 -3
- package/dist/composables/useTheme.js +39 -30
- package/dist/composables/useTheme.js.map +1 -0
- package/dist/composables/useToast.js +41 -34
- package/dist/composables/useToast.js.map +1 -0
- package/dist/directives/autofocus.js +55 -0
- package/dist/directives/autofocus.js.map +1 -0
- package/dist/directives/autosize.js +117 -0
- package/dist/directives/autosize.js.map +1 -0
- package/dist/directives/clickOutside.js +96 -0
- package/dist/directives/clickOutside.js.map +1 -0
- package/dist/directives/dropzone.js +164 -0
- package/dist/directives/dropzone.js.map +1 -0
- package/dist/directives/hotkey.js +138 -0
- package/dist/directives/hotkey.js.map +1 -0
- package/dist/directives/index.js +7 -2
- package/dist/directives/loading.js +163 -0
- package/dist/directives/loading.js.map +1 -0
- package/dist/fileValidation/index.js +2 -2
- package/dist/granular-provider-node.js +23 -14
- package/dist/granular-provider-node.js.map +1 -0
- package/dist/granular-provider.js +3 -3
- package/dist/granular-provider.js.map +1 -0
- package/dist/i18n/all.js +6 -6
- package/dist/i18n/all.js.map +1 -0
- package/dist/i18n/index.js +3 -3
- package/dist/index.js +110 -105
- package/dist/vue/index.js +64 -26
- package/dist/vue/index.js.map +1 -0
- package/package.json +25 -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/grLoadingStyles-Bjo7ylmq.js +0 -15
- 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":"GrCollapse-HU20VTVn.js","names":[],"sources":["../../../../src/components/GrCollapse/grCollapseContext.ts","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import { t as
|
|
3
|
-
export {
|
|
1
|
+
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-HU20VTVn.js";
|
|
2
|
+
import { t as grCollapseConfig } from "../../chunks/config-BzZGpWsj.js";
|
|
3
|
+
export { GR_COLLAPSE_CONTEXT, GrCollapse_default as GrCollapse, GrCollapse_default as default, GrCollapseItem_default as GrCollapseItem, grCollapseConfig };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BmGdp8-4.js";
|
|
2
|
+
import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-gObmaVEl.js";
|
|
3
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderSlot, toDisplayString, withCtx } from "vue";
|
|
4
|
+
//#region src/components/GrConfirmDialog/GrConfirmDialog.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var _hoisted_1 = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "text-[14px] text-[var(--muted-fg)]"
|
|
8
|
+
};
|
|
9
|
+
var _hoisted_2 = { class: "flex items-center justify-end gap-3" };
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/components/GrConfirmDialog/GrConfirmDialog.vue
|
|
12
|
+
var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
|
|
13
|
+
__name: "GrConfirmDialog",
|
|
14
|
+
props: {
|
|
15
|
+
modelValue: { type: Boolean },
|
|
16
|
+
title: { default: "Confirm" },
|
|
17
|
+
description: { default: void 0 },
|
|
18
|
+
closeOnBackdrop: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: true
|
|
21
|
+
},
|
|
22
|
+
closeOnEsc: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: true
|
|
25
|
+
},
|
|
26
|
+
showHeader: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: true
|
|
29
|
+
},
|
|
30
|
+
showCloseButton: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: true
|
|
33
|
+
},
|
|
34
|
+
size: { default: "md" },
|
|
35
|
+
headerConfig: { default: void 0 },
|
|
36
|
+
footerConfig: { default: void 0 },
|
|
37
|
+
bodyConfig: { default: void 0 },
|
|
38
|
+
closeLabel: { default: "Close" },
|
|
39
|
+
buttonSize: { default: void 0 },
|
|
40
|
+
confirmText: { default: "Confirm" },
|
|
41
|
+
cancelText: { default: "Cancel" },
|
|
42
|
+
confirmVariant: { default: "primary" },
|
|
43
|
+
confirmTone: { default: "primary" }
|
|
44
|
+
},
|
|
45
|
+
emits: [
|
|
46
|
+
"update:modelValue",
|
|
47
|
+
"confirm",
|
|
48
|
+
"cancel"
|
|
49
|
+
],
|
|
50
|
+
setup(__props, { emit: __emit }) {
|
|
51
|
+
/**
|
|
52
|
+
* GrConfirmDialog — DS-примитив диалога подтверждения поверх `GrDialog`.
|
|
53
|
+
*
|
|
54
|
+
* Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:
|
|
55
|
+
* `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,
|
|
56
|
+
* `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.
|
|
57
|
+
*
|
|
58
|
+
* Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог
|
|
59
|
+
* через `update:modelValue`.
|
|
60
|
+
*/
|
|
61
|
+
const props = __props;
|
|
62
|
+
const emit = __emit;
|
|
63
|
+
const open = computed({
|
|
64
|
+
get: () => props.modelValue,
|
|
65
|
+
set: (value) => emit("update:modelValue", value)
|
|
66
|
+
});
|
|
67
|
+
function onCancel() {
|
|
68
|
+
emit("cancel");
|
|
69
|
+
emit("update:modelValue", false);
|
|
70
|
+
}
|
|
71
|
+
function onConfirm() {
|
|
72
|
+
emit("confirm");
|
|
73
|
+
emit("update:modelValue", false);
|
|
74
|
+
}
|
|
75
|
+
return (_ctx, _cache) => {
|
|
76
|
+
return openBlock(), createBlock(GrDialog_default, {
|
|
77
|
+
modelValue: open.value,
|
|
78
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => open.value = $event),
|
|
79
|
+
title: __props.title,
|
|
80
|
+
size: __props.size,
|
|
81
|
+
"close-on-backdrop": __props.closeOnBackdrop,
|
|
82
|
+
"close-on-esc": __props.closeOnEsc,
|
|
83
|
+
"show-header": __props.showHeader,
|
|
84
|
+
"show-close-button": __props.showCloseButton,
|
|
85
|
+
"header-config": __props.headerConfig,
|
|
86
|
+
"footer-config": __props.footerConfig,
|
|
87
|
+
"body-config": __props.bodyConfig,
|
|
88
|
+
"close-label": __props.closeLabel
|
|
89
|
+
}, {
|
|
90
|
+
footer: withCtx(() => [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("div", _hoisted_2, [createVNode(GrButton_default, {
|
|
91
|
+
"data-testid": "ds-confirm-cancel",
|
|
92
|
+
variant: "outline",
|
|
93
|
+
size: __props.buttonSize,
|
|
94
|
+
onClick: onCancel
|
|
95
|
+
}, {
|
|
96
|
+
default: withCtx(() => [createTextVNode(toDisplayString(__props.cancelText), 1)]),
|
|
97
|
+
_: 1
|
|
98
|
+
}, 8, ["size"]), createVNode(GrButton_default, {
|
|
99
|
+
"data-testid": "ds-confirm-confirm",
|
|
100
|
+
variant: __props.confirmVariant,
|
|
101
|
+
tone: __props.confirmTone,
|
|
102
|
+
size: __props.buttonSize,
|
|
103
|
+
onClick: onConfirm
|
|
104
|
+
}, {
|
|
105
|
+
default: withCtx(() => [createTextVNode(toDisplayString(__props.confirmText), 1)]),
|
|
106
|
+
_: 1
|
|
107
|
+
}, 8, [
|
|
108
|
+
"variant",
|
|
109
|
+
"tone",
|
|
110
|
+
"size"
|
|
111
|
+
])])])]),
|
|
112
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, () => [__props.description ? (openBlock(), createElementBlock("div", _hoisted_1, toDisplayString(__props.description), 1)) : createCommentVNode("", true)])]),
|
|
113
|
+
_: 3
|
|
114
|
+
}, 8, [
|
|
115
|
+
"modelValue",
|
|
116
|
+
"title",
|
|
117
|
+
"size",
|
|
118
|
+
"close-on-backdrop",
|
|
119
|
+
"close-on-esc",
|
|
120
|
+
"show-header",
|
|
121
|
+
"show-close-button",
|
|
122
|
+
"header-config",
|
|
123
|
+
"footer-config",
|
|
124
|
+
"body-config",
|
|
125
|
+
"close-label"
|
|
126
|
+
]);
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
//#endregion
|
|
131
|
+
export { GrConfirmDialog_default as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrConfirmDialog-DjGOX9Hd.js","names":[],"sources":["../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue","../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — DS-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: 'Confirm',\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: 'Close',\n buttonSize: undefined,\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n confirmTone: 'primary',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"title\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"closeLabel\"\n >\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"ds-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ cancelText }}\n </GrButton>\n <GrButton\n data-testid=\"ds-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n @click=\"onConfirm\"\n >\n {{ confirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — DS-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: 'Confirm',\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: 'Close',\n buttonSize: undefined,\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n confirmTone: 'primary',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"title\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"closeLabel\"\n >\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"ds-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ cancelText }}\n </GrButton>\n <GrButton\n data-testid=\"ds-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n @click=\"onConfirm\"\n >\n {{ confirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EAmBd,MAAM,OAAO;EAMb,MAAM,OAAO,SAAS;GACpB,WAAW,MAAM;GACjB,MAAM,UAAmB,KAAK,qBAAqB,MAAM;GAC1D,CAAA;EAED,SAAS,WAAiB;AACxB,QAAK,SAAQ;AACb,QAAK,qBAAqB,MAAK;;EAGjC,SAAS,YAAkB;AACzB,QAAK,UAAS;AACd,QAAK,qBAAqB,MAAK;;;uBAK/B,YAqCW,kBAAA;gBApCA,KAAA;sEAAI,QAAA;IACZ,OAAO,QAAA;IACP,MAAM,QAAA;IACN,qBAAmB,QAAA;IACnB,gBAAc,QAAA;IACd,eAAa,QAAA;IACb,qBAAmB,QAAA;IACnB,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,eAAa,QAAA;IACb,eAAa,QAAA;;IAQH,QAAM,cAgBR,CAfP,WAeO,KAAA,QAAA,UAAA,EAAA,QAAA,CAdL,mBAaM,OAbN,YAaM,CAZJ,YAEW,kBAAA;KAFD,eAAY;KAAoB,SAAQ;KAAW,MAAM,QAAA;KAAa,SAAO;;4BACrE,CAAA,gBAAA,gBAAb,QAAA,WAAU,EAAA,EAAA,CAAA,CAAA;;qBAEf,YAQW,kBAAA;KAPT,eAAY;KACX,SAAS,QAAA;KACT,MAAM,QAAA;KACN,MAAM,QAAA;KACN,SAAO;;4BAES,CAAA,gBAAA,gBAAd,QAAA,YAAW,EAAA,EAAA,CAAA,CAAA;;;;;;;2BAff,CAJP,WAIO,KAAA,QAAA,WAAA,EAAA,QAAA,CAHM,QAAA,eAAA,WAAA,EAAX,mBAEM,OAFN,YAEM,gBADD,QAAA,YAAW,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { t } from "../../chunks/config-
|
|
3
|
-
export {
|
|
1
|
+
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-DjGOX9Hd.js";
|
|
2
|
+
import { t as grConfirmDialogConfig } from "../../chunks/config-DFRYOcrP.js";
|
|
3
|
+
export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-BV7RBU_0.js";
|
|
2
|
+
import { t as GrTable_default } from "../../GrTable/chunks/GrTable-CyQ9uw8A.js";
|
|
3
|
+
import { t as arrow_up_default } from "../../../chunks/arrow-up-DNXrMoAI.js";
|
|
4
|
+
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, markRaw, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
|
|
5
|
+
//#region ~icons/lucide/arrow-down
|
|
6
|
+
var _hoisted_1$1 = {
|
|
7
|
+
viewBox: "0 0 24 24",
|
|
8
|
+
width: "1.2em",
|
|
9
|
+
height: "1.2em"
|
|
10
|
+
};
|
|
11
|
+
function render$1(_ctx, _cache) {
|
|
12
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$1, [..._cache[0] || (_cache[0] = [createElementVNode("path", {
|
|
13
|
+
fill: "none",
|
|
14
|
+
stroke: "currentColor",
|
|
15
|
+
"stroke-linecap": "round",
|
|
16
|
+
"stroke-linejoin": "round",
|
|
17
|
+
"stroke-width": "2",
|
|
18
|
+
d: "M12 5v14m7-7l-7 7l-7-7"
|
|
19
|
+
}, null, -1)])]);
|
|
20
|
+
}
|
|
21
|
+
var arrow_down_default = markRaw({
|
|
22
|
+
name: "lucide-arrow-down",
|
|
23
|
+
render: render$1
|
|
24
|
+
});
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/components/GrDataTable/GrDataTable.vue?vue&type=script&setup=true&lang.ts
|
|
27
|
+
var _hoisted_1 = { "data-ds-datatable-header": "" };
|
|
28
|
+
var _hoisted_2 = ["aria-sort"];
|
|
29
|
+
var _hoisted_3 = { class: "inline-flex items-center gap-2" };
|
|
30
|
+
var _hoisted_4 = ["aria-label", "onClick"];
|
|
31
|
+
var _hoisted_5 = { class: "inline-flex" };
|
|
32
|
+
var _hoisted_6 = {
|
|
33
|
+
key: 1,
|
|
34
|
+
class: "text-[var(--muted-fg)]"
|
|
35
|
+
};
|
|
36
|
+
var _hoisted_7 = {
|
|
37
|
+
key: 0,
|
|
38
|
+
"data-ds-datatable-empty": ""
|
|
39
|
+
};
|
|
40
|
+
var _hoisted_8 = ["colspan"];
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/components/GrDataTable/GrDataTable.vue
|
|
43
|
+
var GrDataTable_default = /* @__PURE__ */ defineComponent({
|
|
44
|
+
__name: "GrDataTable",
|
|
45
|
+
props: {
|
|
46
|
+
rows: {},
|
|
47
|
+
columns: {},
|
|
48
|
+
rowKey: {
|
|
49
|
+
type: [String, Function],
|
|
50
|
+
default: "id"
|
|
51
|
+
},
|
|
52
|
+
initialSortKey: { default: void 0 },
|
|
53
|
+
initialSortDir: { default: "asc" },
|
|
54
|
+
density: { default: "regular" },
|
|
55
|
+
caption: { default: void 0 },
|
|
56
|
+
ariaLabel: { default: void 0 },
|
|
57
|
+
ariaLabelledby: { default: void 0 },
|
|
58
|
+
regionLabel: { default: void 0 }
|
|
59
|
+
},
|
|
60
|
+
setup(__props) {
|
|
61
|
+
const props = __props;
|
|
62
|
+
const sortKey = ref(props.initialSortKey ?? "");
|
|
63
|
+
const sortDir = ref(props.initialSortDir);
|
|
64
|
+
const sortedRows = computed(() => {
|
|
65
|
+
const items = [...props.rows];
|
|
66
|
+
if (!sortKey.value) return items;
|
|
67
|
+
const key = sortKey.value;
|
|
68
|
+
const dir = sortDir.value;
|
|
69
|
+
items.sort((a, b) => {
|
|
70
|
+
const av = a[key];
|
|
71
|
+
const bv = b[key];
|
|
72
|
+
const aNum = typeof av === "number" ? av : Number(av);
|
|
73
|
+
const bNum = typeof bv === "number" ? bv : Number(bv);
|
|
74
|
+
const res = Number.isFinite(aNum) && Number.isFinite(bNum) ? aNum - bNum : String(av ?? "").localeCompare(String(bv ?? ""), void 0, { sensitivity: "base" });
|
|
75
|
+
return dir === "asc" ? res : -res;
|
|
76
|
+
});
|
|
77
|
+
return items;
|
|
78
|
+
});
|
|
79
|
+
function toggleSort(col) {
|
|
80
|
+
if (!col.sortable) return;
|
|
81
|
+
if (sortKey.value !== col.key) {
|
|
82
|
+
sortKey.value = col.key;
|
|
83
|
+
sortDir.value = "asc";
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
sortDir.value = sortDir.value === "asc" ? "desc" : "asc";
|
|
87
|
+
}
|
|
88
|
+
function cellAlign(col) {
|
|
89
|
+
if (col.align === "right") return "text-right";
|
|
90
|
+
if (col.align === "center") return "text-center";
|
|
91
|
+
return "text-left";
|
|
92
|
+
}
|
|
93
|
+
function rowKeyValue(row) {
|
|
94
|
+
const rk = props.rowKey;
|
|
95
|
+
if (typeof rk === "function") return rk(row);
|
|
96
|
+
const v = row[rk];
|
|
97
|
+
if (typeof v === "string" || typeof v === "number") return v;
|
|
98
|
+
return String(v ?? "");
|
|
99
|
+
}
|
|
100
|
+
function ariaSortFor(col) {
|
|
101
|
+
if (!col.sortable) return void 0;
|
|
102
|
+
if (sortKey.value !== col.key) return "none";
|
|
103
|
+
return sortDir.value === "asc" ? "ascending" : "descending";
|
|
104
|
+
}
|
|
105
|
+
function sortButtonLabel(col) {
|
|
106
|
+
if (sortKey.value !== col.key) return `Sort by ${col.label}`;
|
|
107
|
+
return sortDir.value === "asc" ? `Sorted by ${col.label} ascending, activate to sort descending` : `Sorted by ${col.label} descending, activate to sort ascending`;
|
|
108
|
+
}
|
|
109
|
+
const tableProps = computed(() => ({
|
|
110
|
+
density: props.density,
|
|
111
|
+
caption: props.caption,
|
|
112
|
+
ariaLabel: props.ariaLabel,
|
|
113
|
+
ariaLabelledby: props.ariaLabelledby,
|
|
114
|
+
regionLabel: props.regionLabel
|
|
115
|
+
}));
|
|
116
|
+
const isEmpty = computed(() => sortedRows.value.length === 0);
|
|
117
|
+
function cellValue(row, key) {
|
|
118
|
+
return row[key];
|
|
119
|
+
}
|
|
120
|
+
return (_ctx, _cache) => {
|
|
121
|
+
return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-ds-datatable": "" }), createSlots({
|
|
122
|
+
head: withCtx(() => [createElementVNode("tr", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
123
|
+
return openBlock(), createElementBlock("th", {
|
|
124
|
+
key: col.key,
|
|
125
|
+
class: normalizeClass(["font-700 text-xs px-4 py-3", cellAlign(col)]),
|
|
126
|
+
"aria-sort": ariaSortFor(col),
|
|
127
|
+
scope: "col"
|
|
128
|
+
}, [createElementVNode("div", _hoisted_3, [col.sortable ? (openBlock(), createElementBlock("button", {
|
|
129
|
+
key: 0,
|
|
130
|
+
type: "button",
|
|
131
|
+
class: "inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded",
|
|
132
|
+
"aria-label": sortButtonLabel(col),
|
|
133
|
+
onClick: ($event) => toggleSort(col)
|
|
134
|
+
}, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [sortKey.value === col.key && sortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
|
|
135
|
+
key: 0,
|
|
136
|
+
size: "sm",
|
|
137
|
+
"aria-hidden": "true"
|
|
138
|
+
}, {
|
|
139
|
+
default: withCtx(() => [createVNode(unref(arrow_up_default))]),
|
|
140
|
+
_: 1
|
|
141
|
+
})) : sortKey.value === col.key && sortDir.value === "desc" ? (openBlock(), createBlock(GrIcon_default, {
|
|
142
|
+
key: 1,
|
|
143
|
+
size: "sm",
|
|
144
|
+
"aria-hidden": "true"
|
|
145
|
+
}, {
|
|
146
|
+
default: withCtx(() => [createVNode(unref(arrow_down_default))]),
|
|
147
|
+
_: 1
|
|
148
|
+
})) : createCommentVNode("", true)])], 8, _hoisted_4)) : (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(col.label), 1))])], 10, _hoisted_2);
|
|
149
|
+
}), 128))])]),
|
|
150
|
+
default: withCtx(() => [isEmpty.value ? (openBlock(), createElementBlock("tr", _hoisted_7, [createElementVNode("td", {
|
|
151
|
+
colspan: __props.columns.length,
|
|
152
|
+
class: "px-4 py-6 text-center text-[var(--muted-fg)]"
|
|
153
|
+
}, [renderSlot(_ctx.$slots, "empty", {}, () => [_cache[0] || (_cache[0] = createTextVNode(" Нет данных ", -1))])], 8, _hoisted_8)])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(sortedRows.value, (row) => {
|
|
154
|
+
return openBlock(), createElementBlock("tr", {
|
|
155
|
+
key: rowKeyValue(row),
|
|
156
|
+
class: "border-t border-[var(--brd)]",
|
|
157
|
+
"data-ds-datatable-row": ""
|
|
158
|
+
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
|
|
159
|
+
return openBlock(), createElementBlock("td", {
|
|
160
|
+
key: col.key,
|
|
161
|
+
class: normalizeClass(["px-4 py-3", cellAlign(col)])
|
|
162
|
+
}, [renderSlot(_ctx.$slots, `cell-${col.key}`, { row }, () => [createElementVNode("span", null, toDisplayString(cellValue(row, col.key)), 1)])], 2);
|
|
163
|
+
}), 128))]);
|
|
164
|
+
}), 128))]),
|
|
165
|
+
_: 2
|
|
166
|
+
}, [_ctx.$slots.caption ? {
|
|
167
|
+
name: "caption",
|
|
168
|
+
fn: withCtx(() => [renderSlot(_ctx.$slots, "caption")]),
|
|
169
|
+
key: "0"
|
|
170
|
+
} : void 0, _ctx.$slots.foot ? {
|
|
171
|
+
name: "foot",
|
|
172
|
+
fn: withCtx(() => [renderSlot(_ctx.$slots, "foot")]),
|
|
173
|
+
key: "1"
|
|
174
|
+
} : void 0]), 1040);
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
//#endregion
|
|
179
|
+
export { GrDataTable_default as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrDataTable-QDOJWmdY.js","names":["$slots"],"sources":["../../../../src/components/GrDataTable/GrDataTable.vue","../../../../src/components/GrDataTable/GrDataTable.vue"],"sourcesContent":["\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки. */\n initialSortKey?: string\n /** Направление начальной сортировки. */\n initialSortDir?: 'asc' | 'desc'\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n})\n\nconst sortKey = ref<string>(props.initialSortKey ?? '')\nconst sortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n if (!sortKey.value)\n return items\n\n const key = sortKey.value\n const dir = sortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (sortKey.value !== col.key) {\n sortKey.value = col.key\n sortDir.value = 'asc'\n return\n }\n\n sortDir.value = sortDir.value === 'asc' ? 'desc' : 'asc'\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (sortKey.value !== col.key)\n return 'none'\n return sortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (sortKey.value !== col.key)\n return `Sort by ${col.label}`\n return sortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-ds-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-ds-datatable-header>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"sortKey === col.key && sortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"sortKey === col.key && sortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-ds-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\n</slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--brd)]\"\n data-ds-datatable-row\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки. */\n initialSortKey?: string\n /** Направление начальной сортировки. */\n initialSortDir?: 'asc' | 'desc'\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n})\n\nconst sortKey = ref<string>(props.initialSortKey ?? '')\nconst sortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n if (!sortKey.value)\n return items\n\n const key = sortKey.value\n const dir = sortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (sortKey.value !== col.key) {\n sortKey.value = col.key\n sortDir.value = 'asc'\n return\n }\n\n sortDir.value = sortDir.value === 'asc' ? 'desc' : 'asc'\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (sortKey.value !== col.key)\n return 'none'\n return sortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (sortKey.value !== col.key)\n return `Sort by ${col.label}`\n return sortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-ds-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-ds-datatable-header>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"sortKey === col.key && sortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"sortKey === col.key && sortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-ds-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\n</slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--brd)]\"\n data-ds-datatable-row\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { t } from "../../chunks/config-
|
|
3
|
-
export {
|
|
1
|
+
import { t as GrDataTable_default } from "./chunks/GrDataTable-QDOJWmdY.js";
|
|
2
|
+
import { t as grDataTableConfig } from "../../chunks/config-CMZE2fu0.js";
|
|
3
|
+
export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
|