@feugene/granularity 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/chunks/config-8Pcutu1j.js.map +1 -0
- package/dist/chunks/{config-06SQjBx0.js → config-B4w5gBD0.js} +1 -8
- package/dist/chunks/{config-06SQjBx0.js.map → config-B4w5gBD0.js.map} +1 -1
- package/dist/chunks/config-BE6n20np.js.map +1 -0
- package/dist/chunks/{config-B-iNaGdw.js → config-BEVBsvni.js} +1 -3
- package/dist/chunks/{config-B-iNaGdw.js.map → config-BEVBsvni.js.map} +1 -1
- package/dist/chunks/config-BKvX0q10.js.map +1 -0
- package/dist/chunks/config-BTCOJO5z.js +37 -0
- package/dist/chunks/config-BTCOJO5z.js.map +1 -0
- package/dist/chunks/{config-Rw9OyW702.js → config-BfsBepkH2.js} +1 -5
- package/dist/chunks/{config-Rw9OyW702.js.map → config-BfsBepkH2.js.map} +1 -1
- package/dist/chunks/{config-DP7eseR1.js → config-Bsh948nP.js} +1 -8
- package/dist/chunks/{config-DP7eseR1.js.map → config-Bsh948nP.js.map} +1 -1
- package/dist/chunks/config-CDat1wXf.js.map +1 -0
- package/dist/chunks/config-COpuWGr_2.js.map +1 -0
- package/dist/chunks/config-CY0_6cMi.js.map +1 -0
- package/dist/chunks/config-D94Z9po5.js.map +1 -0
- package/dist/chunks/config-DAX8Deh12.js.map +1 -0
- package/dist/chunks/{config-_qPUfb6-2.js → config-DWN4x6_e.js} +1 -7
- package/dist/chunks/config-DWN4x6_e.js.map +1 -0
- package/dist/chunks/{config-DhHbU3zO.js → config-Dgj1Q6JY.js} +1 -12
- package/dist/chunks/{config-DhHbU3zO.js.map → config-Dgj1Q6JY.js.map} +1 -1
- package/dist/chunks/{config-D3_g2KIn.js → config-Dguto_6o.js} +1 -13
- package/dist/chunks/{config-D3_g2KIn.js.map → config-Dguto_6o.js.map} +1 -1
- package/dist/chunks/config-WTNhdh6T.js.map +1 -0
- package/dist/chunks/config-eXB87DOi2.js.map +1 -0
- package/dist/chunks/{config-DvQIb4kb.js → config-vSji8w90.js} +1 -14
- package/dist/chunks/{config-DvQIb4kb.js.map → config-vSji8w90.js.map} +1 -1
- package/dist/chunks/{context-BSYR7RZs.js → context-CTbuwcYs.js} +1 -20
- package/dist/chunks/{context-BSYR7RZs.js.map → context-CTbuwcYs.js.map} +1 -1
- package/dist/chunks/{config-BqFjr3tN.js → grRadioStyles-BTjGNhtU.js} +1 -36
- package/dist/chunks/grRadioStyles-BTjGNhtU.js.map +1 -0
- package/dist/chunks/{granular-provider-C6uAujdJ.js → granular-provider-CZYm70Pm.js} +19 -19
- package/dist/chunks/{granular-provider-C6uAujdJ.js.map → granular-provider-CZYm70Pm.js.map} +1 -1
- package/dist/chunks/{useModalOverlay-DrQVYwwA.js → useModalOverlay-Cv5hF63W.js} +2 -2
- package/dist/chunks/{useModalOverlay-DrQVYwwA.js.map → useModalOverlay-Cv5hF63W.js.map} +1 -1
- package/dist/chunks/{usePortalTarget-Cn-Wiz5d.js → usePortalTarget-C0p-mhaM.js} +1 -1
- package/dist/chunks/{usePortalTarget-Cn-Wiz5d.js.map → usePortalTarget-C0p-mhaM.js.map} +1 -1
- package/dist/chunks/{validation-5HhpanPP.js → validation-DauXRIkL.js} +1 -1
- package/dist/chunks/{validation-5HhpanPP.js.map → validation-DauXRIkL.js.map} +1 -1
- package/dist/components/GrAlert/chunks/{GrAlert-BC1lplbY.js → GrAlert-B21QGele.js} +2 -16
- package/dist/components/GrAlert/chunks/{GrAlert-BC1lplbY.js.map → GrAlert-B21QGele.js.map} +1 -1
- package/dist/components/GrAlert/index.js +2 -2
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-gY4Xopza.js → GrAutocomplete-DsevPtiS.js} +3 -3
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-gY4Xopza.js.map → GrAutocomplete-DsevPtiS.js.map} +1 -1
- package/dist/components/GrAutocomplete/index.js +1 -1
- package/dist/components/GrAvatar/chunks/{GrAvatar-CVUujLmn.js → GrAvatar-BbdKRX8i.js} +3 -3
- package/dist/components/GrAvatar/chunks/{GrAvatar-CVUujLmn.js.map → GrAvatar-BbdKRX8i.js.map} +1 -1
- package/dist/components/GrAvatar/index.js +3 -3
- package/dist/components/GrBadge/chunks/{GrBadge-B1tgqfGQ.js → GrBadge-u2ZdS7CN.js} +1 -1
- package/dist/components/GrBadge/chunks/{GrBadge-B1tgqfGQ.js.map → GrBadge-u2ZdS7CN.js.map} +1 -1
- package/dist/components/GrBadge/index.js +1 -1
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-C-E9betg.js → GrBadgeWrap-DDoFQscR.js} +1 -1
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-C-E9betg.js.map → GrBadgeWrap-DDoFQscR.js.map} +1 -1
- package/dist/components/GrBadgeWrap/index.js +3 -3
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-9GH7Dd9E.js → GrBottomNav-JUu4ylYv.js} +2 -2
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-9GH7Dd9E.js.map → GrBottomNav-JUu4ylYv.js.map} +1 -1
- package/dist/components/GrBottomNav/index.js +3 -3
- package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DS_-PBVt.js → GrBreadcrumbs-CQ44iU2o.js} +2 -2
- package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DS_-PBVt.js.map → GrBreadcrumbs-CQ44iU2o.js.map} +1 -1
- package/dist/components/GrBreadcrumbs/index.js +1 -1
- package/dist/components/GrButton/chunks/{GrButton-D0m_z0XW.js → GrButton-Bw2AH4uX.js} +1 -1
- package/dist/components/GrButton/chunks/{GrButton-D0m_z0XW.js.map → GrButton-Bw2AH4uX.js.map} +1 -1
- package/dist/components/GrButton/index.js +2 -3
- package/dist/components/GrCard/chunks/{GrCard-DOrGHf2x.js → GrCard-DfIZOP5N.js} +1 -1
- package/dist/components/GrCard/chunks/{GrCard-DOrGHf2x.js.map → GrCard-DfIZOP5N.js.map} +1 -1
- package/dist/components/GrCard/index.js +1 -1
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-BLOp8452.js → GrCheckbox-CEcHIsXM.js} +1 -1
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-BLOp8452.js.map → GrCheckbox-CEcHIsXM.js.map} +1 -1
- package/dist/components/GrCheckbox/index.js +2 -2
- package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-CXTx2Z5H.js → GrCheckboxGroup-BOwrVcFr.js} +2 -2
- package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-CXTx2Z5H.js.map → GrCheckboxGroup-BOwrVcFr.js.map} +1 -1
- package/dist/components/GrCheckboxGroup/index.js +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-Kk0DE8tb.js → GrCollapse-KFcrji1L.js} +4 -18
- package/dist/components/GrCollapse/chunks/{GrCollapse-Kk0DE8tb.js.map → GrCollapse-KFcrji1L.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +2 -2
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-CkBTzkqn.js → GrColorPicker-qQdoEPHF.js} +5 -5
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-CkBTzkqn.js.map → GrColorPicker-qQdoEPHF.js.map} +1 -1
- package/dist/components/GrColorPicker/index.js +2 -2
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-BugTlGdj.js → GrCommandPalette-BFcMf4Pn.js} +4 -4
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-BugTlGdj.js.map → GrCommandPalette-BFcMf4Pn.js.map} +1 -1
- package/dist/components/GrCommandPalette/index.js +2 -2
- package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BA6JO7V6.js → GrConfigProvider-UP-EaoAf.js} +1 -1
- package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BA6JO7V6.js.map → GrConfigProvider-UP-EaoAf.js.map} +1 -1
- package/dist/components/GrConfigProvider/index.js +3 -3
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-Ds5T0GiR.js → GrConfirmDialog-rRtMScJX.js} +4 -4
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-Ds5T0GiR.js.map → GrConfirmDialog-rRtMScJX.js.map} +1 -1
- package/dist/components/GrConfirmDialog/index.js +1 -1
- package/dist/components/GrDataTable/chunks/{GrDataTable-CYe2A2WA.js → GrDataTable-CNvZg2HZ.js} +5 -5
- package/dist/components/GrDataTable/chunks/{GrDataTable-CYe2A2WA.js.map → GrDataTable-CNvZg2HZ.js.map} +1 -1
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-C3tYaA8v.js → GrDialog-D0U5iRqV.js} +3 -3
- package/dist/components/GrDialog/chunks/{GrDialog-C3tYaA8v.js.map → GrDialog-D0U5iRqV.js.map} +1 -1
- package/dist/components/GrDialog/index.js +2 -3
- package/dist/components/GrDialogService/chunks/{GrDialogService-CTBiiJDI.js → GrDialogService-CrwA4aJq.js} +6 -6
- package/dist/components/GrDialogService/chunks/GrDialogService-CrwA4aJq.js.map +1 -0
- package/dist/components/GrDialogService/index.js +2 -2
- package/dist/components/GrDivider/chunks/{GrDivider-xxq1_fIl.js → GrDivider-CAhm9jbE.js} +2 -2
- package/dist/components/GrDivider/chunks/{GrDivider-xxq1_fIl.js.map → GrDivider-CAhm9jbE.js.map} +1 -1
- package/dist/components/GrDivider/index.js +2 -2
- package/dist/components/GrDrawer/chunks/{GrDrawer-BSSuiNHU.js → GrDrawer-C3zAg2tG.js} +5 -5
- package/dist/components/GrDrawer/chunks/{GrDrawer-BSSuiNHU.js.map → GrDrawer-C3zAg2tG.js.map} +1 -1
- package/dist/components/GrDrawer/index.js +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-Bh6UK2M5.js → GrDropdown-BSfFOcDx.js} +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-Bh6UK2M5.js.map → GrDropdown-BSfFOcDx.js.map} +1 -1
- package/dist/components/GrDropdown/index.js +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-LyfEFUbg.js → GrDropdownMenu-LOaFSCyd.js} +3 -3
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-LyfEFUbg.js.map → GrDropdownMenu-LOaFSCyd.js.map} +1 -1
- package/dist/components/GrDropdownMenu/index.js +3 -3
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-W7Irx3vc.js → GrEmptyState-CS9do8eM.js} +3 -3
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-W7Irx3vc.js.map → GrEmptyState-CS9do8eM.js.map} +1 -1
- package/dist/components/GrEmptyState/index.js +3 -3
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-DuDzC43S.js → GrFileUpload-D3-vC-ap.js} +4 -4
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-DuDzC43S.js.map → GrFileUpload-D3-vC-ap.js.map} +1 -1
- package/dist/components/GrFileUpload/index.js +3 -3
- package/dist/components/GrForm/chunks/{GrForm-BCHCfIMv.js → GrForm-DdJw23Pz.js} +1 -1
- package/dist/components/GrForm/chunks/{GrForm-BCHCfIMv.js.map → GrForm-DdJw23Pz.js.map} +1 -1
- package/dist/components/GrForm/index.js +4 -4
- package/dist/components/GrFormField/chunks/{GrFormField-CL5rcgj6.js → GrFormField-kqfVY30N.js} +1 -1
- package/dist/components/GrFormField/chunks/{GrFormField-CL5rcgj6.js.map → GrFormField-kqfVY30N.js.map} +1 -1
- package/dist/components/GrFormField/index.js +3 -3
- package/dist/components/GrFormFile/chunks/{GrFormFile-BikSD7bg.js → GrFormFile-D722xHn8.js} +3 -3
- package/dist/components/GrFormFile/chunks/{GrFormFile-BikSD7bg.js.map → GrFormFile-D722xHn8.js.map} +1 -1
- package/dist/components/GrFormFile/index.js +1 -1
- package/dist/components/GrFormSection/chunks/{GrFormSection-BEh5n4jF.js → GrFormSection-CdGWvzXO.js} +2 -2
- package/dist/components/GrFormSection/chunks/{GrFormSection-BEh5n4jF.js.map → GrFormSection-CdGWvzXO.js.map} +1 -1
- package/dist/components/GrFormSection/index.js +3 -3
- package/dist/components/GrIcon/chunks/{GrIcon-BvA2ZGXP.js → GrIcon-bQwtZtYT.js} +1 -1
- package/dist/components/GrIcon/chunks/{GrIcon-BvA2ZGXP.js.map → GrIcon-bQwtZtYT.js.map} +1 -1
- package/dist/components/GrIcon/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-DfD4euH5.js → GrImageViewer-CMO10TS7.js} +2 -2
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-DfD4euH5.js.map → GrImageViewer-CMO10TS7.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInput/chunks/{GrInput-2wd7Crs0.js → GrInput-Bb_pxqpT.js} +1 -1
- package/dist/components/GrInput/chunks/{GrInput-2wd7Crs0.js.map → GrInput-Bb_pxqpT.js.map} +1 -1
- package/dist/components/GrInput/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-CyV2eY7Z.js → GrInputTag-Dghhg03-.js} +3 -3
- package/dist/components/GrInputTag/chunks/{GrInputTag-CyV2eY7Z.js.map → GrInputTag-Dghhg03-.js.map} +1 -1
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-DU2lBkRV.js → GrKbd-BXbhsH0M.js} +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-DU2lBkRV.js.map → GrKbd-BXbhsH0M.js.map} +1 -1
- package/dist/components/GrKbd/index.js +1 -1
- package/dist/components/GrLink/chunks/{GrLink-D-cgUMXW.js → GrLink-BQb7U4so.js} +2 -2
- package/dist/components/GrLink/chunks/{GrLink-D-cgUMXW.js.map → GrLink-BQb7U4so.js.map} +1 -1
- package/dist/components/GrLink/index.js +1 -1
- package/dist/components/GrList/chunks/{GrList-4YU1NZtM.js → GrList-CHibO0xA.js} +2 -2
- package/dist/components/GrList/chunks/{GrList-4YU1NZtM.js.map → GrList-CHibO0xA.js.map} +1 -1
- package/dist/components/GrList/index.js +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading-CH95CFzS.js → GrLoading-C3DZSSuh.js} +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading-CH95CFzS.js.map → GrLoading-C3DZSSuh.js.map} +1 -1
- package/dist/components/GrLoading/index.js +1 -1
- package/dist/components/GrModal/chunks/{GrModal-CbMMr6W1.js → GrModal-CPz7SWD_.js} +2 -2
- package/dist/components/GrModal/chunks/{GrModal-CbMMr6W1.js.map → GrModal-CPz7SWD_.js.map} +1 -1
- package/dist/components/GrModal/index.js +1 -1
- package/dist/components/GrNavbar/chunks/{GrNavbar-CF0KbM_6.js → GrNavbar-DWaaoV7n.js} +2 -2
- package/dist/components/GrNavbar/chunks/{GrNavbar-CF0KbM_6.js.map → GrNavbar-DWaaoV7n.js.map} +1 -1
- package/dist/components/GrNavbar/index.js +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-B5CHZDBj.js → GrNumberInput-BotnzW77.js} +2 -2
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-B5CHZDBj.js.map → GrNumberInput-BotnzW77.js.map} +1 -1
- package/dist/components/GrNumberInput/index.js +1 -1
- package/dist/components/GrPagination/chunks/{GrPagination-BM4FrD6Q.js → GrPagination-GtGtSMJG.js} +3 -3
- package/dist/components/GrPagination/chunks/{GrPagination-BM4FrD6Q.js.map → GrPagination-GtGtSMJG.js.map} +1 -1
- package/dist/components/GrPagination/index.js +1 -1
- package/dist/components/GrPopover/chunks/{GrPopover-DMH4Jjst.js → GrPopover-b70bIlQ9.js} +2 -2
- package/dist/components/GrPopover/chunks/{GrPopover-DMH4Jjst.js.map → GrPopover-b70bIlQ9.js.map} +1 -1
- package/dist/components/GrPopover/index.js +1 -1
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-xwbNM9QB.js → GrProgressBar-hszUOC8f.js} +1 -1
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-xwbNM9QB.js.map → GrProgressBar-hszUOC8f.js.map} +1 -1
- package/dist/components/GrProgressBar/index.js +1 -1
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-B8olXRo5.js → GrProgressCircle-BeUx1g1f.js} +3 -11
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-B8olXRo5.js.map → GrProgressCircle-BeUx1g1f.js.map} +1 -1
- package/dist/components/GrProgressCircle/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Pwr9NPxK.js → GrPromptDialog-CEI8bf-t.js} +8 -8
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Pwr9NPxK.js.map → GrPromptDialog-CEI8bf-t.js.map} +1 -1
- package/dist/components/GrPromptDialog/index.js +1 -1
- package/dist/components/GrRadio/chunks/{GrRadio-DWiRaMzt.js → GrRadio-BdhknbO8.js} +2 -2
- package/dist/components/GrRadio/chunks/{GrRadio-DWiRaMzt.js.map → GrRadio-BdhknbO8.js.map} +1 -1
- package/dist/components/GrRadio/index.js +3 -3
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-DIuBw0wk.js → GrRadioGroup-BVmjKXcv.js} +2 -2
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BVmjKXcv.js.map +1 -0
- package/dist/components/GrRadioGroup/index.js +1 -1
- package/dist/components/GrRating/chunks/{GrRating-DVFH3lYu.js → GrRating-BSEtaibx.js} +1 -1
- package/dist/components/GrRating/chunks/{GrRating-DVFH3lYu.js.map → GrRating-BSEtaibx.js.map} +1 -1
- package/dist/components/GrRating/index.js +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-C7W9mgYN.js → GrResponseErrorBanner-CZONq8uT.js} +3 -3
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-C7W9mgYN.js.map → GrResponseErrorBanner-CZONq8uT.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DhX4jjay.js → GrResponseErrorBanner-CgfAwlg3.js} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DhX4jjay.js.map → GrResponseErrorBanner-CgfAwlg3.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/index.js +3 -3
- package/dist/components/GrSegmented/chunks/{GrSegmented-CQw3ijqa.js → GrSegmented-DP9WMAbm.js} +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-CQw3ijqa.js.map → GrSegmented-DP9WMAbm.js.map} +1 -1
- package/dist/components/GrSegmented/index.js +3 -3
- package/dist/components/GrSelect/chunks/{GrSelect-B-Voni7D.js → GrSelect-CaGuyvtb.js} +5 -7
- package/dist/components/GrSelect/chunks/GrSelect-CaGuyvtb.js.map +1 -0
- package/dist/components/GrSelect/index.js +1 -1
- package/dist/components/GrSelect/styles.css +1 -1
- package/dist/components/GrSidebar/chunks/{GrSidebar-i7AxjhY_.js → GrSidebar-DG_t4aPE.js} +3 -3
- package/dist/components/GrSidebar/chunks/{GrSidebar-i7AxjhY_.js.map → GrSidebar-DG_t4aPE.js.map} +1 -1
- package/dist/components/GrSidebar/index.js +3 -3
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-DEvNE3bC.js → GrSkeleton-CgfXxPQ2.js} +1 -7
- package/dist/components/GrSkeleton/chunks/{GrSkeleton-DEvNE3bC.js.map → GrSkeleton-CgfXxPQ2.js.map} +1 -1
- package/dist/components/GrSkeleton/index.js +3 -3
- package/dist/components/GrSlider/chunks/{GrSlider-CyhVsNKn.js → GrSlider-s99yAyz6.js} +1 -1
- package/dist/components/GrSlider/chunks/{GrSlider-CyhVsNKn.js.map → GrSlider-s99yAyz6.js.map} +1 -1
- package/dist/components/GrSlider/index.js +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-XB7mXM1W.js → GrSortableList-DJFPdUVv.js} +2 -2
- package/dist/components/GrSortableList/chunks/{GrSortableList-XB7mXM1W.js.map → GrSortableList-DJFPdUVv.js.map} +1 -1
- package/dist/components/GrSortableList/index.js +2 -2
- package/dist/components/GrSplitter/chunks/{GrSplitter-BzxVQwbY.js → GrSplitter-B9_JrT7q.js} +3 -12
- package/dist/components/GrSplitter/chunks/{GrSplitter-BzxVQwbY.js.map → GrSplitter-B9_JrT7q.js.map} +1 -1
- package/dist/components/GrSplitter/index.js +3 -3
- package/dist/components/GrStatistic/chunks/{GrStatistic-DOsM6s5V.js → GrStatistic-C3VpykHo.js} +2 -2
- package/dist/components/GrStatistic/chunks/{GrStatistic-DOsM6s5V.js.map → GrStatistic-C3VpykHo.js.map} +1 -1
- package/dist/components/GrStatistic/index.js +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-DpyvVrZG.js → GrSwitch-x_vQQ6ao.js} +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-DpyvVrZG.js.map → GrSwitch-x_vQQ6ao.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +1 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-BVe1CZdJ.js → GrTabPanels-AJt1w1XC.js} +1 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-BVe1CZdJ.js.map → GrTabPanels-AJt1w1XC.js.map} +1 -1
- package/dist/components/GrTabPanels/index.js +3 -3
- package/dist/components/GrTable/chunks/{GrTable-BfqgwETQ.js → GrTable-f3qCWa99.js} +2 -2
- package/dist/components/GrTable/chunks/{GrTable-BfqgwETQ.js.map → GrTable-f3qCWa99.js.map} +1 -1
- package/dist/components/GrTable/index.js +2 -2
- package/dist/components/GrTabs/chunks/{GrTabs-f3-oQenu.js → GrTabs-CBHZkOFY.js} +2 -2
- package/dist/components/GrTabs/chunks/{GrTabs-f3-oQenu.js.map → GrTabs-CBHZkOFY.js.map} +1 -1
- package/dist/components/GrTabs/index.js +3 -3
- package/dist/components/GrTextarea/chunks/{GrTextarea-DSvd1nSy.js → GrTextarea-CNnkcIG1.js} +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-DSvd1nSy.js.map → GrTextarea-CNnkcIG1.js.map} +1 -1
- package/dist/components/GrTextarea/index.js +1 -1
- package/dist/components/GrTimeline/chunks/{GrTimeline-B-h2Yanw.js → GrTimeline-DlTraRn5.js} +4 -15
- package/dist/components/GrTimeline/chunks/{GrTimeline-B-h2Yanw.js.map → GrTimeline-DlTraRn5.js.map} +1 -1
- package/dist/components/GrTimeline/index.js +3 -3
- package/dist/components/GrToaster/chunks/{GrToaster-Dqja0Lf9.js → GrToaster-Db2NgrXu.js} +4 -4
- package/dist/components/GrToaster/chunks/{GrToaster-Dqja0Lf9.js.map → GrToaster-Db2NgrXu.js.map} +1 -1
- package/dist/components/GrToaster/index.js +1 -1
- package/dist/components/GrTooltip/chunks/{GrTooltip-Cn08heWz.js → GrTooltip-B6AwE_UX.js} +3 -3
- package/dist/components/GrTooltip/chunks/{GrTooltip-Cn08heWz.js.map → GrTooltip-B6AwE_UX.js.map} +1 -1
- package/dist/components/GrTooltip/index.js +1 -1
- package/dist/components/GrTree/chunks/{GrTree-BR9a2pay.js → GrTree-BvOeQ3xJ.js} +1 -1
- package/dist/components/GrTree/chunks/{GrTree-BR9a2pay.js.map → GrTree-BvOeQ3xJ.js.map} +1 -1
- package/dist/components/GrTree/index.js +2 -2
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect--muUeB0v.js → GrTreeSelect-_LjTRR7X.js} +5 -9
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect-_LjTRR7X.js.map +1 -0
- package/dist/components/GrTreeSelect/index.js +1 -1
- package/dist/composables/useGrComponentConfig.js +1 -1
- package/dist/composables/usePortalTarget.js +1 -1
- package/dist/directives/loading.js +1 -1
- package/dist/granular-provider-node.js +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/index.js +95 -96
- package/dist/testing.js +33 -2
- package/dist/testing.js.map +1 -1
- package/dist/types/{src/components → components}/GrAlert/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrAvatar/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrBadgeWrap/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrBottomNav/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrButton/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrCheckbox/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrCollapse/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrColorPicker/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrCommandPalette/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrConfigProvider/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrDataTable/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrDialog/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrDialogService/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrDropdownMenu/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrEmptyState/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrFileUpload/index.d.ts +2 -3
- package/dist/types/{src/components → components}/GrForm/index.d.ts +2 -2
- package/dist/types/{src/components → components}/GrFormField/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrFormSection/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrProgressCircle/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrRadio/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrResponseErrorBanner/index.d.ts +2 -3
- package/dist/types/{src/components → components}/GrSegmented/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrSelect/GrSelect.vue.d.ts +0 -6
- package/dist/types/{src/components → components}/GrSidebar/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrSkeleton/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrSplitter/index.d.ts +1 -1
- package/dist/types/{src/components → components}/GrTabPanels/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrTabs/index.d.ts +0 -1
- package/dist/types/{src/components → components}/GrTimeline/index.d.ts +0 -2
- package/dist/types/{src/components → components}/GrTreeSelect/GrTreeSelect.vue.d.ts +0 -6
- package/dist/types/{src/testing → testing}/index.d.ts +1 -0
- package/dist/types/testing/keyboard.d.ts +32 -0
- package/dist/web-types.json +1 -9
- package/package.json +109 -106
- package/dist/chunks/config-8Pcutu1j2.js.map +0 -1
- package/dist/chunks/config-BE6n20np2.js.map +0 -1
- package/dist/chunks/config-BKvX0q102.js.map +0 -1
- package/dist/chunks/config-BqFjr3tN.js.map +0 -1
- package/dist/chunks/config-CDat1wXf2.js.map +0 -1
- package/dist/chunks/config-COpuWGr_.js.map +0 -1
- package/dist/chunks/config-CY0_6cMi2.js.map +0 -1
- package/dist/chunks/config-D94Z9po52.js.map +0 -1
- package/dist/chunks/config-DAX8Deh1.js.map +0 -1
- package/dist/chunks/config-WTNhdh6T2.js.map +0 -1
- package/dist/chunks/config-_qPUfb6-2.js.map +0 -1
- package/dist/chunks/config-eXB87DOi.js.map +0 -1
- package/dist/components/GrDialogService/chunks/GrDialogService-CTBiiJDI.js.map +0 -1
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js.map +0 -1
- package/dist/components/GrSelect/chunks/GrSelect-B-Voni7D.js.map +0 -1
- package/dist/components/GrTreeSelect/chunks/GrTreeSelect--muUeB0v.js.map +0 -1
- /package/dist/chunks/{config-8Pcutu1j2.js → config-8Pcutu1j.js} +0 -0
- /package/dist/chunks/{config-BE6n20np2.js → config-BE6n20np.js} +0 -0
- /package/dist/chunks/{config-BKvX0q102.js → config-BKvX0q10.js} +0 -0
- /package/dist/chunks/{config-CDat1wXf2.js → config-CDat1wXf.js} +0 -0
- /package/dist/chunks/{config-COpuWGr_.js → config-COpuWGr_2.js} +0 -0
- /package/dist/chunks/{config-CY0_6cMi2.js → config-CY0_6cMi.js} +0 -0
- /package/dist/chunks/{config-D94Z9po52.js → config-D94Z9po5.js} +0 -0
- /package/dist/chunks/{config-DAX8Deh1.js → config-DAX8Deh12.js} +0 -0
- /package/dist/chunks/{config-WTNhdh6T2.js → config-WTNhdh6T.js} +0 -0
- /package/dist/chunks/{config-eXB87DOi.js → config-eXB87DOi2.js} +0 -0
- /package/dist/types/{src/components → components}/GrAlert/GrAlert.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAlert/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAlert/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAlert/grAlertStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/GrAutocomplete.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/grAutocompleteStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAutocomplete/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/GrAvatar.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/GrAvatarGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/avatarContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/grAvatarStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrAvatar/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/GrBadge.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/grBadgeStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadge/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadgeWrap/GrBadgeWrap.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadgeWrap/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadgeWrap/grBadgeWrapStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBadgeWrap/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBottomNav/GrBottomNav.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBottomNav/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBottomNav/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBottomNav/grBottomNavStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBottomNav/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/GrBreadcrumbs.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/grBreadcrumbsStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrBreadcrumbs/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButton/GrButton.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButton/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButton/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButton/grButtonStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButton/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButtonGroup/GrButtonGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButtonGroup/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButtonGroup/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrButtonGroup/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/GrCard.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/grCardStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCard/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/GrCheckbox.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/grCheckboxGroupContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/grCheckboxStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckbox/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckboxGroup/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckboxGroup/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCheckboxGroup/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/GrCollapse.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/GrCollapseItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/grCollapseContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/grCollapseStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCollapse/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/GrColorPicker.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/color.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/grColorPickerStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrColorPicker/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/GrCommandPalette.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/filtering.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/grCommandPaletteStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrCommandPalette/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfigProvider/GrConfigProvider.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfigProvider/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfigProvider/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfigProvider/zIndexScale.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfirmDialog/GrConfirmDialog.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfirmDialog/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfirmDialog/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrConfirmDialog/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/GrDataTable.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/grDataTableSort.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/grDataTableStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDataTable/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/GrDialog.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/GrDialogCloseButton.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/GrDialogFooter.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/GrDialogHeader.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/dialogShared.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialog/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/GrDialogServiceHost.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/GrDialogServiceItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/store.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/types.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDialogService/useDialogService.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/GrDivider.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/grDividerStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDivider/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/GrDrawer.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/grDrawerStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDrawer/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdown/GrDropdown.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdown/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdown/grDropdownStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdown/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdown/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenu.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuColumn.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuColumns.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuDivider.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuHeader.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/GrDropdownMenuList.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/grDropdownMenuStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/menuModel.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrDropdownMenu/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrEmptyState/GrEmptyState.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrEmptyState/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrEmptyState/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrEmptyState/grEmptyStateStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrEmptyState/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/FileValidationError.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/GrFileUpload.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/acceptValidator.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/fileEntry.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/grFileUploadStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/matchAccept.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/maxFileSize.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/runFileValidators.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/types.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/uploadState.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/uploadViaXhr.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/useDropZone.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/usePerFileUpload.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFileUpload/useUploadState.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/GrForm.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/fileRule.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/modelSnapshot.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrForm/validation.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/GrFormField.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/grFormFieldStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormField/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/GrFormFile.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/grFormFileStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormFile/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormSection/GrFormSection.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormSection/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormSection/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormSection/grFormSectionStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrFormSection/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/GrIcon.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/grIconStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrIcon/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/GrImageViewer.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/composables/usePointerGestures.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/composables/useViewerKeyboard.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/composables/useWheelGesture.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/composables/useZoomPan.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/grImageViewerStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrImageViewer/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/GrInput.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/grInputStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInput/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/GrInputTag.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/grInputTagStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrInputTag/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/GrKbd.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/grKbdStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrKbd/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/GrLink.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/grLinkStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLink/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/GrList.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/GrListItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/grListStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrList/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLoading/GrLoading.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLoading/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLoading/grLoadingStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLoading/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrLoading/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/GrModal.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/grModalStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrModal/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNavbar/GrNavbar.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNavbar/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNavbar/grNavbarStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNavbar/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNavbar/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/GrNumberInput.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/grNumberInputStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/numberInputMath.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrNumberInput/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/GrPagination.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/grPaginationStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPagination/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/GrPopover.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/grPopoverStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPopover/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/GrProgressBar.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/grStyle.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressBar/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/GrProgressCircle.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/geometry.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/grProgressCircleStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrProgressCircle/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPromptDialog/GrPromptDialog.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPromptDialog/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPromptDialog/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrPromptDialog/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/GrRadio.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/grRadioGroupContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/grRadioStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadio/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadioGroup/GrRadioGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadioGroup/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadioGroup/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRadioGroup/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/GrRating.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/grRatingStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrRating/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrFormErrorBanner.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrResponseErrorBanner.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/abortErrorParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/createResponseErrorClassifier.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/fileValidationParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/httpStatusParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/jsonApiErrorParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/laravelValidationParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/networkErrorParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/normalizeError.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/plainMessageParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/parsers/problemDetailsParser.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/responseError.defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/responseError.types.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrResponseErrorBanner/useResponseError.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSegmented/GrSegmented.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSegmented/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSegmented/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSegmented/grSegmentedStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSegmented/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/composables/useSelectNavigation.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/composables/useSelectPanelItems.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/composables/useSelectValues.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/composables/useSelectVirtualization.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/grSelectStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSelect/selectValue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/GrSidebar.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/GrSidebarGroup.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/GrSidebarItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/grSidebarStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSidebar/sidebarContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSkeleton/GrSkeleton.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSkeleton/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSkeleton/grSkeletonStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/GrSlider.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/grSliderStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSlider/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSortableList/GrSortableList.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSortableList/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSortableList/grSortableListStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSortableList/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSortableList/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/GrSplitter.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/grSplitterStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSplitter/splitterGeometry.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/GrStatistic.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/countUp.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/formatStatisticValue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/grStatisticStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrStatistic/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/GrSwitch.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/grSwitchStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrSwitch/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabPanels/GrTabPanel.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabPanels/GrTabPanels.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabPanels/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabPanels/context.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/GrTable.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/grTableStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTable/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabs/GrTabs.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabs/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabs/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabs/grTabsStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTabs/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/GrTextarea.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/grTextareaStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTextarea/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/GrTimeline.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/GrTimelineItem.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/grTimelineContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/grTimelineStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTimeline/timelineGroups.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrToaster/GrToaster.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrToaster/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrToaster/grToasterStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrToaster/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrToaster/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/GrTooltip.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/grTooltipStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTooltip/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/GrTree.vue.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeChecking.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeDataAdapter.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeInteractionContext.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeProps.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeStore.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/grTreeTypes.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTree/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/config.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/defaults.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/grTreeSelectStyles.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/grTreeSelectTypes.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/index.d.ts +0 -0
- /package/dist/types/{src/components → components}/GrTreeSelect/safelist.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/classTokens.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/hotkey.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/hotkeyTokens.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/icon.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/instance.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/optionFilter.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/sizes.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/slotNodes.d.ts +0 -0
- /package/dist/types/{src/components → components}/shared/tones.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/dragSortGeometry.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/focusables.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/inert.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/overlayStack.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/portalRoot.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useAddonMeasurement.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useControlAddons.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useControlledOpen.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useFilePreviews.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useFocusWithin.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useInertOthers.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useModalOverlay.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useOverlayPresence.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useScrollLock.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/internal/useTeleportEnabled.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useAnnouncer.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useComboboxNavigation.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useDismissible.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useDragGesture.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useDragSort.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useFloating.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useFocusTrap.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useGrComponentConfig.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useGrFormControl.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useGranularityTranslations.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useOverlayLayer.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/usePortalTarget.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useRovingFocus.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useTheme.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useToast.d.ts +0 -0
- /package/dist/types/{src/composables → composables}/useVirtualList.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/autofocus.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/autosize.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/clickOutside.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/dropzone.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/globalDirectives.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/hotkey.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/index.d.ts +0 -0
- /package/dist/types/{src/directives → directives}/loading.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/FileValidationError.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/acceptValidator.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/allowedExtensionsValidator.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/allowedMimeTypesValidator.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/i18n.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/index.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/matchAccept.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/maxCountValidator.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/maxFileSize.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/maxTotalSizeBytesValidator.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/runFileValidators.d.ts +0 -0
- /package/dist/types/{src/fileValidation → fileValidation}/types.d.ts +0 -0
- /package/dist/types/{src/granular-provider → granular-provider}/index.d.ts +0 -0
- /package/dist/types/{src/granular-provider → granular-provider}/node.d.ts +0 -0
- /package/dist/types/{src/granular-provider → granular-provider}/shared.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/adapter.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/all.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/index.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/messages/const.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/messages/en.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/messages/es.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/messages/index.d.ts +0 -0
- /package/dist/types/{src/i18n → i18n}/messages/ru.d.ts +0 -0
- /package/dist/types/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/types/{src/internal → internal}/granularityFormat.d.ts +0 -0
- /package/dist/types/{src/internal → internal}/granularityI18n.d.ts +0 -0
- /package/dist/types/{src/internal → internal}/keyboard.d.ts +0 -0
- /package/dist/types/{src/testing → testing}/announcer.d.ts +0 -0
- /package/dist/types/{src/testing → testing}/context.d.ts +0 -0
- /package/dist/types/{src/testing → testing}/env.d.ts +0 -0
- /package/dist/types/{src/testing → testing}/geometry.d.ts +0 -0
- /package/dist/types/{src/testing → testing}/pointer.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/apply.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/color.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/extendTheme.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/index.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/roles.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/tone.d.ts +0 -0
- /package/dist/types/{src/theme → theme}/validate.d.ts +0 -0
- /package/dist/types/{src/tokens → tokens}/generated.d.ts +0 -0
- /package/dist/types/{src/tokens → tokens}/index.d.ts +0 -0
- /package/dist/types/{src/tokens → tokens}/types.d.ts +0 -0
- /package/dist/types/{src/vue → vue}/index.d.ts +0 -0
- /package/dist/types/{src/vue → vue}/plugin.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrCheckboxGroup-CXTx2Z5H.js","names":[],"sources":["../../../../src/components/GrCheckboxGroup/GrCheckboxGroup.vue","../../../../src/components/GrCheckboxGroup/GrCheckboxGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrCheckboxGroup — контейнер группы `GrCheckbox` с общей моделью `string[]`.\n *\n * Работает и через слот (ручной рендер `GrCheckbox` с собственными подписями),\n * и через проп `options`. Дочерние чекбоксы получают из контекста выбранные\n * значения, `name`, `size` и состояния `disabled`/`readonly`/`invalid`, поэтому\n * свой `v-model` им не нужен.\n *\n * A11y: `role=\"group\"` — не `radiogroup`. У группы чекбоксов нет roving tabindex\n * и переезда выбора стрелками: каждый чекбокс независим и остаётся собственной\n * остановкой `Tab`, ровно как набор нативных `<input type=\"checkbox\">`.\n * `role=\"group\"` не поддерживает `aria-required` и `aria-readonly` (axe:\n * `aria-allowed-attr`), поэтому оба состояния объявляют чекбоксы группы.\n */\nimport { computed, provide, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGrFormControl } from '../../composables/useGrFormControl'\nimport { useFocusWithin } from '../../composables/internal/useFocusWithin'\n\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { GR_CHECKBOX_GROUP_CONTEXT } from '../GrCheckbox/grCheckboxGroupContext'\nimport type { GrCheckboxSize } from '../GrCheckbox/grCheckboxStyles'\n\nexport type GrCheckboxGroupDirection = 'vertical' | 'horizontal'\n\nexport interface GrCheckboxGroupOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface GrCheckboxGroupProps {\n modelValue: string[]\n options?: GrCheckboxGroupOption[]\n /** Общее имя для нативной формы: значения уйдут как повторяющиеся поля. */\n name?: string\n disabled?: boolean\n /** Только для чтения: выбор видно, но он не меняется. */\n readonly?: boolean\n /** Визуальное и ARIA-состояние ошибки для всей группы. */\n invalid?: boolean\n /** Обязательная группа: `aria-required` объявляют сами чекбоксы. */\n required?: boolean\n direction?: GrCheckboxGroupDirection\n size?: GrCheckboxSize\n ariaLabel?: string\n}\n\nexport interface GrCheckboxGroupEmits {\n (e: 'update:modelValue', value: string[]): void\n (e: 'change', value: string[]): void\n (e: 'focus', event: FocusEvent): void\n (e: 'blur', event: FocusEvent): void\n}\n\nconst props = withDefaults(defineProps<GrCheckboxGroupProps>(), {\n options: undefined,\n name: undefined,\n disabled: false,\n readonly: false,\n invalid: false,\n required: false,\n direction: 'vertical',\n size: undefined,\n ariaLabel: undefined,\n})\n\nconst emit = defineEmits<GrCheckboxGroupEmits>()\ndefineSlots<{\n /** Собственная разметка флажков вместо генерации из `options`. */\n default?: () => any\n}>()\n\n\n// Эффективный размер группы: локальный проп → `GrConfigProvider` → `md`.\n// Дочерние чекбоксы получают уже разрешённое значение через контекст.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCheckboxGroup' })\n\n// Контекст `GrFormField`. Группа — не labelable-элемент, поэтому имя приходит\n// через `aria-labelledby` на подпись поля, а не через `<label for>`.\nconst {\n disabled: isDisabled,\n id: fieldId,\n labelId: fieldLabelId,\n describedBy,\n invalid: isInvalid,\n required: isRequired,\n readonly: isReadonly,\n} = useGrFormControl(() => props)\n\nconst labelledBy = computed(() => (props.ariaLabel ? undefined : fieldLabelId.value))\n\nconst layoutClass = computed(() =>\n props.direction === 'horizontal' ? 'flex flex-wrap items-center gap-4' : 'grid gap-2',\n)\n\nfunction toggle(value: string, checked: boolean): void {\n if (isDisabled.value || isReadonly.value)\n return\n\n if (checked) {\n if (props.modelValue.includes(value))\n return\n commit([...props.modelValue, value])\n return\n }\n\n commit(props.modelValue.filter(item => item !== value))\n}\n\nfunction commit(next: string[]): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nconst rootEl = ref<HTMLElement | null>(null)\n\n// Фокус ходит между чекбоксами группы: без границы каждый переход давал бы\n// потребителю пару `blur` + `focus`.\nconst { onFocusIn, onFocusOut } = useFocusWithin(rootEl, {\n enter: event => emit('focus', event),\n leave: event => emit('blur', event),\n})\n\nfunction firstCheckbox(): HTMLElement | null | undefined {\n return rootEl.value?.querySelector<HTMLElement>('[role=\"checkbox\"]:not([aria-disabled=\"true\"])')\n}\n\nfunction focus(): void {\n firstCheckbox()?.focus()\n}\n\nfunction blur(): void {\n firstCheckbox()?.blur()\n}\n\ndefineExpose({ focus, blur })\n\nprovide(GR_CHECKBOX_GROUP_CONTEXT, {\n modelValue: computed(() => props.modelValue),\n name: computed(() => props.name),\n disabled: computed(() => isDisabled.value),\n readonly: isReadonly,\n invalid: isInvalid,\n size: resolvedSize,\n required: isRequired,\n toggle,\n})\n</script>\n\n<template>\n <div\n :id=\"fieldId\"\n ref=\"rootEl\"\n data-gr-checkbox-group\n role=\"group\"\n :class=\"layoutClass\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <slot>\n <GrCheckbox\n v-for=\"option in options ?? []\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </GrCheckbox>\n </slot>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrCheckboxGroup — контейнер группы `GrCheckbox` с общей моделью `string[]`.\n *\n * Работает и через слот (ручной рендер `GrCheckbox` с собственными подписями),\n * и через проп `options`. Дочерние чекбоксы получают из контекста выбранные\n * значения, `name`, `size` и состояния `disabled`/`readonly`/`invalid`, поэтому\n * свой `v-model` им не нужен.\n *\n * A11y: `role=\"group\"` — не `radiogroup`. У группы чекбоксов нет roving tabindex\n * и переезда выбора стрелками: каждый чекбокс независим и остаётся собственной\n * остановкой `Tab`, ровно как набор нативных `<input type=\"checkbox\">`.\n * `role=\"group\"` не поддерживает `aria-required` и `aria-readonly` (axe:\n * `aria-allowed-attr`), поэтому оба состояния объявляют чекбоксы группы.\n */\nimport { computed, provide, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGrFormControl } from '../../composables/useGrFormControl'\nimport { useFocusWithin } from '../../composables/internal/useFocusWithin'\n\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { GR_CHECKBOX_GROUP_CONTEXT } from '../GrCheckbox/grCheckboxGroupContext'\nimport type { GrCheckboxSize } from '../GrCheckbox/grCheckboxStyles'\n\nexport type GrCheckboxGroupDirection = 'vertical' | 'horizontal'\n\nexport interface GrCheckboxGroupOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface GrCheckboxGroupProps {\n modelValue: string[]\n options?: GrCheckboxGroupOption[]\n /** Общее имя для нативной формы: значения уйдут как повторяющиеся поля. */\n name?: string\n disabled?: boolean\n /** Только для чтения: выбор видно, но он не меняется. */\n readonly?: boolean\n /** Визуальное и ARIA-состояние ошибки для всей группы. */\n invalid?: boolean\n /** Обязательная группа: `aria-required` объявляют сами чекбоксы. */\n required?: boolean\n direction?: GrCheckboxGroupDirection\n size?: GrCheckboxSize\n ariaLabel?: string\n}\n\nexport interface GrCheckboxGroupEmits {\n (e: 'update:modelValue', value: string[]): void\n (e: 'change', value: string[]): void\n (e: 'focus', event: FocusEvent): void\n (e: 'blur', event: FocusEvent): void\n}\n\nconst props = withDefaults(defineProps<GrCheckboxGroupProps>(), {\n options: undefined,\n name: undefined,\n disabled: false,\n readonly: false,\n invalid: false,\n required: false,\n direction: 'vertical',\n size: undefined,\n ariaLabel: undefined,\n})\n\nconst emit = defineEmits<GrCheckboxGroupEmits>()\ndefineSlots<{\n /** Собственная разметка флажков вместо генерации из `options`. */\n default?: () => any\n}>()\n\n\n// Эффективный размер группы: локальный проп → `GrConfigProvider` → `md`.\n// Дочерние чекбоксы получают уже разрешённое значение через контекст.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCheckboxGroup' })\n\n// Контекст `GrFormField`. Группа — не labelable-элемент, поэтому имя приходит\n// через `aria-labelledby` на подпись поля, а не через `<label for>`.\nconst {\n disabled: isDisabled,\n id: fieldId,\n labelId: fieldLabelId,\n describedBy,\n invalid: isInvalid,\n required: isRequired,\n readonly: isReadonly,\n} = useGrFormControl(() => props)\n\nconst labelledBy = computed(() => (props.ariaLabel ? undefined : fieldLabelId.value))\n\nconst layoutClass = computed(() =>\n props.direction === 'horizontal' ? 'flex flex-wrap items-center gap-4' : 'grid gap-2',\n)\n\nfunction toggle(value: string, checked: boolean): void {\n if (isDisabled.value || isReadonly.value)\n return\n\n if (checked) {\n if (props.modelValue.includes(value))\n return\n commit([...props.modelValue, value])\n return\n }\n\n commit(props.modelValue.filter(item => item !== value))\n}\n\nfunction commit(next: string[]): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nconst rootEl = ref<HTMLElement | null>(null)\n\n// Фокус ходит между чекбоксами группы: без границы каждый переход давал бы\n// потребителю пару `blur` + `focus`.\nconst { onFocusIn, onFocusOut } = useFocusWithin(rootEl, {\n enter: event => emit('focus', event),\n leave: event => emit('blur', event),\n})\n\nfunction firstCheckbox(): HTMLElement | null | undefined {\n return rootEl.value?.querySelector<HTMLElement>('[role=\"checkbox\"]:not([aria-disabled=\"true\"])')\n}\n\nfunction focus(): void {\n firstCheckbox()?.focus()\n}\n\nfunction blur(): void {\n firstCheckbox()?.blur()\n}\n\ndefineExpose({ focus, blur })\n\nprovide(GR_CHECKBOX_GROUP_CONTEXT, {\n modelValue: computed(() => props.modelValue),\n name: computed(() => props.name),\n disabled: computed(() => isDisabled.value),\n readonly: isReadonly,\n invalid: isInvalid,\n size: resolvedSize,\n required: isRequired,\n toggle,\n})\n</script>\n\n<template>\n <div\n :id=\"fieldId\"\n ref=\"rootEl\"\n data-gr-checkbox-group\n role=\"group\"\n :class=\"layoutClass\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <slot>\n <GrCheckbox\n v-for=\"option in options ?? []\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </GrCheckbox>\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDA,MAAM,QAAQ;EAYd,MAAM,OAAO;EASb,MAAM,eAAe,yBAAyB,MAAM,MAAM,EAAE,WAAW,kBAAkB,CAAC;EAI1F,MAAM,EACJ,UAAU,YACV,IAAI,SACJ,SAAS,cACT,aACA,SAAS,WACT,UAAU,YACV,UAAU,eACR,uBAAuB,KAAK;EAEhC,MAAM,aAAa,eAAgB,MAAM,YAAY,KAAA,IAAY,aAAa,KAAM;EAEpF,MAAM,cAAc,eAClB,MAAM,cAAc,eAAe,sCAAsC,YAC3E;EAEA,SAAS,OAAO,OAAe,SAAwB;GACrD,IAAI,WAAW,SAAS,WAAW,OACjC;GAEF,IAAI,SAAS;IACX,IAAI,MAAM,WAAW,SAAS,KAAK,GACjC;IACF,OAAO,CAAC,GAAG,MAAM,YAAY,KAAK,CAAC;IACnC;GACF;GAEA,OAAO,MAAM,WAAW,QAAO,SAAQ,SAAS,KAAK,CAAC;EACxD;EAEA,SAAS,OAAO,MAAsB;GACpC,KAAK,qBAAqB,IAAI;GAC9B,KAAK,UAAU,IAAI;EACrB;EAEA,MAAM,SAAS,IAAwB,IAAI;EAI3C,MAAM,EAAE,WAAW,eAAe,eAAe,QAAQ;GACvD,QAAO,UAAS,KAAK,SAAS,KAAK;GACnC,QAAO,UAAS,KAAK,QAAQ,KAAK;EACpC,CAAC;EAED,SAAS,gBAAgD;GACvD,OAAO,OAAO,OAAO,cAA2B,mDAA+C;EACjG;EAEA,SAAS,QAAc;GACrB,cAAc,CAAC,EAAE,MAAM;EACzB;EAEA,SAAS,OAAa;GACpB,cAAc,CAAC,EAAE,KAAK;EACxB;EAEA,SAAa;GAAE;GAAO;EAAK,CAAC;EAE5B,QAAQ,2BAA2B;GACjC,YAAY,eAAe,MAAM,UAAU;GAC3C,MAAM,eAAe,MAAM,IAAI;GAC/B,UAAU,eAAe,WAAW,KAAK;GACzC,UAAU;GACV,SAAS;GACT,MAAM;GACN,UAAU;GACV;EACF,CAAC;;uBAIC,mBAwBM,OAAA;IAvBH,IAAI,MAAA,OAAA;aACD;IAAJ,KAAI;IACJ,0BAAA;IACA,MAAK;IACJ,OAAK,eAAE,YAAA,KAAW;IAClB,cAAY,QAAA;IACZ,mBAAiB,WAAA;IACjB,oBAAkB,MAAA,WAAA;IAClB,gBAAc,MAAA,SAAA,IAAS,SAAY,KAAA;IACnC,iBAAe,MAAA,UAAA,IAAU,SAAY,KAAA;IACrC,WAAO,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,SAAA,KAAA,MAAA,SAAA,CAAA,CAAA,GAAA,IAAA;IACT,YAAQ,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,UAAA,KAAA,MAAA,UAAA,CAAA,CAAA,GAAA,IAAA;OAEX,WASO,KAAA,QAAA,WAAA,CAAA,SAAA,EAAA,UAAA,IAAA,GARL,mBAOa,UAAA,MAAA,WANM,QAAA,WAAO,CAAA,IAAjB,WAAM;wBADf,YAOa,oBAAA;KALV,KAAK,OAAO;KACZ,OAAO,OAAO;KACd,UAAU,OAAO;;4BAEA,CAAA,gBAAA,gBAAf,OAAO,KAAK,GAAA,CAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"GrCheckboxGroup-BOwrVcFr.js","names":[],"sources":["../../../../src/components/GrCheckboxGroup/GrCheckboxGroup.vue","../../../../src/components/GrCheckboxGroup/GrCheckboxGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrCheckboxGroup — контейнер группы `GrCheckbox` с общей моделью `string[]`.\n *\n * Работает и через слот (ручной рендер `GrCheckbox` с собственными подписями),\n * и через проп `options`. Дочерние чекбоксы получают из контекста выбранные\n * значения, `name`, `size` и состояния `disabled`/`readonly`/`invalid`, поэтому\n * свой `v-model` им не нужен.\n *\n * A11y: `role=\"group\"` — не `radiogroup`. У группы чекбоксов нет roving tabindex\n * и переезда выбора стрелками: каждый чекбокс независим и остаётся собственной\n * остановкой `Tab`, ровно как набор нативных `<input type=\"checkbox\">`.\n * `role=\"group\"` не поддерживает `aria-required` и `aria-readonly` (axe:\n * `aria-allowed-attr`), поэтому оба состояния объявляют чекбоксы группы.\n */\nimport { computed, provide, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGrFormControl } from '../../composables/useGrFormControl'\nimport { useFocusWithin } from '../../composables/internal/useFocusWithin'\n\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { GR_CHECKBOX_GROUP_CONTEXT } from '../GrCheckbox/grCheckboxGroupContext'\nimport type { GrCheckboxSize } from '../GrCheckbox/grCheckboxStyles'\n\nexport type GrCheckboxGroupDirection = 'vertical' | 'horizontal'\n\nexport interface GrCheckboxGroupOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface GrCheckboxGroupProps {\n modelValue: string[]\n options?: GrCheckboxGroupOption[]\n /** Общее имя для нативной формы: значения уйдут как повторяющиеся поля. */\n name?: string\n disabled?: boolean\n /** Только для чтения: выбор видно, но он не меняется. */\n readonly?: boolean\n /** Визуальное и ARIA-состояние ошибки для всей группы. */\n invalid?: boolean\n /** Обязательная группа: `aria-required` объявляют сами чекбоксы. */\n required?: boolean\n direction?: GrCheckboxGroupDirection\n size?: GrCheckboxSize\n ariaLabel?: string\n}\n\nexport interface GrCheckboxGroupEmits {\n (e: 'update:modelValue', value: string[]): void\n (e: 'change', value: string[]): void\n (e: 'focus', event: FocusEvent): void\n (e: 'blur', event: FocusEvent): void\n}\n\nconst props = withDefaults(defineProps<GrCheckboxGroupProps>(), {\n options: undefined,\n name: undefined,\n disabled: false,\n readonly: false,\n invalid: false,\n required: false,\n direction: 'vertical',\n size: undefined,\n ariaLabel: undefined,\n})\n\nconst emit = defineEmits<GrCheckboxGroupEmits>()\ndefineSlots<{\n /** Собственная разметка флажков вместо генерации из `options`. */\n default?: () => any\n}>()\n\n\n// Эффективный размер группы: локальный проп → `GrConfigProvider` → `md`.\n// Дочерние чекбоксы получают уже разрешённое значение через контекст.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCheckboxGroup' })\n\n// Контекст `GrFormField`. Группа — не labelable-элемент, поэтому имя приходит\n// через `aria-labelledby` на подпись поля, а не через `<label for>`.\nconst {\n disabled: isDisabled,\n id: fieldId,\n labelId: fieldLabelId,\n describedBy,\n invalid: isInvalid,\n required: isRequired,\n readonly: isReadonly,\n} = useGrFormControl(() => props)\n\nconst labelledBy = computed(() => (props.ariaLabel ? undefined : fieldLabelId.value))\n\nconst layoutClass = computed(() =>\n props.direction === 'horizontal' ? 'flex flex-wrap items-center gap-4' : 'grid gap-2',\n)\n\nfunction toggle(value: string, checked: boolean): void {\n if (isDisabled.value || isReadonly.value)\n return\n\n if (checked) {\n if (props.modelValue.includes(value))\n return\n commit([...props.modelValue, value])\n return\n }\n\n commit(props.modelValue.filter(item => item !== value))\n}\n\nfunction commit(next: string[]): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nconst rootEl = ref<HTMLElement | null>(null)\n\n// Фокус ходит между чекбоксами группы: без границы каждый переход давал бы\n// потребителю пару `blur` + `focus`.\nconst { onFocusIn, onFocusOut } = useFocusWithin(rootEl, {\n enter: event => emit('focus', event),\n leave: event => emit('blur', event),\n})\n\nfunction firstCheckbox(): HTMLElement | null | undefined {\n return rootEl.value?.querySelector<HTMLElement>('[role=\"checkbox\"]:not([aria-disabled=\"true\"])')\n}\n\nfunction focus(): void {\n firstCheckbox()?.focus()\n}\n\nfunction blur(): void {\n firstCheckbox()?.blur()\n}\n\ndefineExpose({ focus, blur })\n\nprovide(GR_CHECKBOX_GROUP_CONTEXT, {\n modelValue: computed(() => props.modelValue),\n name: computed(() => props.name),\n disabled: computed(() => isDisabled.value),\n readonly: isReadonly,\n invalid: isInvalid,\n size: resolvedSize,\n required: isRequired,\n toggle,\n})\n</script>\n\n<template>\n <div\n :id=\"fieldId\"\n ref=\"rootEl\"\n data-gr-checkbox-group\n role=\"group\"\n :class=\"layoutClass\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <slot>\n <GrCheckbox\n v-for=\"option in options ?? []\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </GrCheckbox>\n </slot>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrCheckboxGroup — контейнер группы `GrCheckbox` с общей моделью `string[]`.\n *\n * Работает и через слот (ручной рендер `GrCheckbox` с собственными подписями),\n * и через проп `options`. Дочерние чекбоксы получают из контекста выбранные\n * значения, `name`, `size` и состояния `disabled`/`readonly`/`invalid`, поэтому\n * свой `v-model` им не нужен.\n *\n * A11y: `role=\"group\"` — не `radiogroup`. У группы чекбоксов нет roving tabindex\n * и переезда выбора стрелками: каждый чекбокс независим и остаётся собственной\n * остановкой `Tab`, ровно как набор нативных `<input type=\"checkbox\">`.\n * `role=\"group\"` не поддерживает `aria-required` и `aria-readonly` (axe:\n * `aria-allowed-attr`), поэтому оба состояния объявляют чекбоксы группы.\n */\nimport { computed, provide, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGrFormControl } from '../../composables/useGrFormControl'\nimport { useFocusWithin } from '../../composables/internal/useFocusWithin'\n\nimport GrCheckbox from '../GrCheckbox/GrCheckbox.vue'\nimport { GR_CHECKBOX_GROUP_CONTEXT } from '../GrCheckbox/grCheckboxGroupContext'\nimport type { GrCheckboxSize } from '../GrCheckbox/grCheckboxStyles'\n\nexport type GrCheckboxGroupDirection = 'vertical' | 'horizontal'\n\nexport interface GrCheckboxGroupOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface GrCheckboxGroupProps {\n modelValue: string[]\n options?: GrCheckboxGroupOption[]\n /** Общее имя для нативной формы: значения уйдут как повторяющиеся поля. */\n name?: string\n disabled?: boolean\n /** Только для чтения: выбор видно, но он не меняется. */\n readonly?: boolean\n /** Визуальное и ARIA-состояние ошибки для всей группы. */\n invalid?: boolean\n /** Обязательная группа: `aria-required` объявляют сами чекбоксы. */\n required?: boolean\n direction?: GrCheckboxGroupDirection\n size?: GrCheckboxSize\n ariaLabel?: string\n}\n\nexport interface GrCheckboxGroupEmits {\n (e: 'update:modelValue', value: string[]): void\n (e: 'change', value: string[]): void\n (e: 'focus', event: FocusEvent): void\n (e: 'blur', event: FocusEvent): void\n}\n\nconst props = withDefaults(defineProps<GrCheckboxGroupProps>(), {\n options: undefined,\n name: undefined,\n disabled: false,\n readonly: false,\n invalid: false,\n required: false,\n direction: 'vertical',\n size: undefined,\n ariaLabel: undefined,\n})\n\nconst emit = defineEmits<GrCheckboxGroupEmits>()\ndefineSlots<{\n /** Собственная разметка флажков вместо генерации из `options`. */\n default?: () => any\n}>()\n\n\n// Эффективный размер группы: локальный проп → `GrConfigProvider` → `md`.\n// Дочерние чекбоксы получают уже разрешённое значение через контекст.\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCheckboxGroup' })\n\n// Контекст `GrFormField`. Группа — не labelable-элемент, поэтому имя приходит\n// через `aria-labelledby` на подпись поля, а не через `<label for>`.\nconst {\n disabled: isDisabled,\n id: fieldId,\n labelId: fieldLabelId,\n describedBy,\n invalid: isInvalid,\n required: isRequired,\n readonly: isReadonly,\n} = useGrFormControl(() => props)\n\nconst labelledBy = computed(() => (props.ariaLabel ? undefined : fieldLabelId.value))\n\nconst layoutClass = computed(() =>\n props.direction === 'horizontal' ? 'flex flex-wrap items-center gap-4' : 'grid gap-2',\n)\n\nfunction toggle(value: string, checked: boolean): void {\n if (isDisabled.value || isReadonly.value)\n return\n\n if (checked) {\n if (props.modelValue.includes(value))\n return\n commit([...props.modelValue, value])\n return\n }\n\n commit(props.modelValue.filter(item => item !== value))\n}\n\nfunction commit(next: string[]): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nconst rootEl = ref<HTMLElement | null>(null)\n\n// Фокус ходит между чекбоксами группы: без границы каждый переход давал бы\n// потребителю пару `blur` + `focus`.\nconst { onFocusIn, onFocusOut } = useFocusWithin(rootEl, {\n enter: event => emit('focus', event),\n leave: event => emit('blur', event),\n})\n\nfunction firstCheckbox(): HTMLElement | null | undefined {\n return rootEl.value?.querySelector<HTMLElement>('[role=\"checkbox\"]:not([aria-disabled=\"true\"])')\n}\n\nfunction focus(): void {\n firstCheckbox()?.focus()\n}\n\nfunction blur(): void {\n firstCheckbox()?.blur()\n}\n\ndefineExpose({ focus, blur })\n\nprovide(GR_CHECKBOX_GROUP_CONTEXT, {\n modelValue: computed(() => props.modelValue),\n name: computed(() => props.name),\n disabled: computed(() => isDisabled.value),\n readonly: isReadonly,\n invalid: isInvalid,\n size: resolvedSize,\n required: isRequired,\n toggle,\n})\n</script>\n\n<template>\n <div\n :id=\"fieldId\"\n ref=\"rootEl\"\n data-gr-checkbox-group\n role=\"group\"\n :class=\"layoutClass\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"labelledBy\"\n :aria-describedby=\"describedBy\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <slot>\n <GrCheckbox\n v-for=\"option in options ?? []\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </GrCheckbox>\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDA,MAAM,QAAQ;EAYd,MAAM,OAAO;EASb,MAAM,eAAe,yBAAyB,MAAM,MAAM,EAAE,WAAW,kBAAkB,CAAC;EAI1F,MAAM,EACJ,UAAU,YACV,IAAI,SACJ,SAAS,cACT,aACA,SAAS,WACT,UAAU,YACV,UAAU,eACR,uBAAuB,KAAK;EAEhC,MAAM,aAAa,eAAgB,MAAM,YAAY,KAAA,IAAY,aAAa,KAAM;EAEpF,MAAM,cAAc,eAClB,MAAM,cAAc,eAAe,sCAAsC,YAC3E;EAEA,SAAS,OAAO,OAAe,SAAwB;GACrD,IAAI,WAAW,SAAS,WAAW,OACjC;GAEF,IAAI,SAAS;IACX,IAAI,MAAM,WAAW,SAAS,KAAK,GACjC;IACF,OAAO,CAAC,GAAG,MAAM,YAAY,KAAK,CAAC;IACnC;GACF;GAEA,OAAO,MAAM,WAAW,QAAO,SAAQ,SAAS,KAAK,CAAC;EACxD;EAEA,SAAS,OAAO,MAAsB;GACpC,KAAK,qBAAqB,IAAI;GAC9B,KAAK,UAAU,IAAI;EACrB;EAEA,MAAM,SAAS,IAAwB,IAAI;EAI3C,MAAM,EAAE,WAAW,eAAe,eAAe,QAAQ;GACvD,QAAO,UAAS,KAAK,SAAS,KAAK;GACnC,QAAO,UAAS,KAAK,QAAQ,KAAK;EACpC,CAAC;EAED,SAAS,gBAAgD;GACvD,OAAO,OAAO,OAAO,cAA2B,mDAA+C;EACjG;EAEA,SAAS,QAAc;GACrB,cAAc,CAAC,EAAE,MAAM;EACzB;EAEA,SAAS,OAAa;GACpB,cAAc,CAAC,EAAE,KAAK;EACxB;EAEA,SAAa;GAAE;GAAO;EAAK,CAAC;EAE5B,QAAQ,2BAA2B;GACjC,YAAY,eAAe,MAAM,UAAU;GAC3C,MAAM,eAAe,MAAM,IAAI;GAC/B,UAAU,eAAe,WAAW,KAAK;GACzC,UAAU;GACV,SAAS;GACT,MAAM;GACN,UAAU;GACV;EACF,CAAC;;uBAIC,mBAwBM,OAAA;IAvBH,IAAI,MAAA,OAAA;aACD;IAAJ,KAAI;IACJ,0BAAA;IACA,MAAK;IACJ,OAAK,eAAE,YAAA,KAAW;IAClB,cAAY,QAAA;IACZ,mBAAiB,WAAA;IACjB,oBAAkB,MAAA,WAAA;IAClB,gBAAc,MAAA,SAAA,IAAS,SAAY,KAAA;IACnC,iBAAe,MAAA,UAAA,IAAU,SAAY,KAAA;IACrC,WAAO,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,SAAA,KAAA,MAAA,SAAA,CAAA,CAAA,GAAA,IAAA;IACT,YAAQ,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,MAAA,UAAA,KAAA,MAAA,UAAA,CAAA,CAAA,GAAA,IAAA;OAEX,WASO,KAAA,QAAA,WAAA,CAAA,SAAA,EAAA,UAAA,IAAA,GARL,mBAOa,UAAA,MAAA,WANM,QAAA,WAAO,CAAA,IAAjB,WAAM;wBADf,YAOa,oBAAA;KALV,KAAK,OAAO;KACZ,OAAO,OAAO;KACd,UAAU,OAAO;;4BAEA,CAAA,gBAAA,gBAAf,OAAO,KAAK,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrCheckboxGroup_default } from "./chunks/GrCheckboxGroup-
|
|
1
|
+
import { t as GrCheckboxGroup_default } from "./chunks/GrCheckboxGroup-BOwrVcFr.js";
|
|
2
2
|
import { t as grCheckboxGroupConfig } from "../../chunks/config-BuGlNPE9.js";
|
|
3
3
|
export { GrCheckboxGroup_default as GrCheckboxGroup, GrCheckboxGroup_default as default, grCheckboxGroupConfig };
|
|
@@ -1,26 +1,12 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as useGrComponentSize, i as useGrComponentProp } from "../../../chunks/context-CTbuwcYs.js";
|
|
2
2
|
import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-BC5zsj_d.js";
|
|
3
|
-
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-
|
|
3
|
+
import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-bQwtZtYT.js";
|
|
4
4
|
import { t as chevron_down_default } from "../../../chunks/chevron-down-CQS2OG_s.js";
|
|
5
|
-
import { t as GrCard_default } from "../../GrCard/chunks/GrCard-
|
|
5
|
+
import { t as GrCard_default } from "../../GrCard/chunks/GrCard-DfIZOP5N.js";
|
|
6
6
|
import { n as hasMeaningfulSlotContent } from "../../../chunks/slotNodes-DxNXpC7v.js";
|
|
7
7
|
import { a as grCollapseBodyClass, c as grCollapseHeaderClass, i as collapseExtraPaddings, l as grCollapseRowClass, o as grCollapseChevronClass, r as collapseChevronSizes, s as grCollapseEmptyClass, u as grCollapseTitleClass } from "../../../chunks/config-DU2DNSRx2.js";
|
|
8
8
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, normalizeClass, openBlock, provide, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useSlots, withCtx } from "vue";
|
|
9
9
|
//#region src/components/GrCollapse/grCollapseContext.ts
|
|
10
|
-
/**
|
|
11
|
-
* Уровень заголовка секции. APG для accordion требует, чтобы он соответствовал
|
|
12
|
-
* структуре страницы: аккордеон в разделе `<h4>` с захардкоженным `<h3>` рвёт
|
|
13
|
-
* навигацию по заголовкам.
|
|
14
|
-
*/
|
|
15
|
-
var GR_COLLAPSE_HEADING_LEVELS = [
|
|
16
|
-
2,
|
|
17
|
-
3,
|
|
18
|
-
4,
|
|
19
|
-
5,
|
|
20
|
-
6
|
|
21
|
-
];
|
|
22
|
-
/** Сторона шеврона относительно заголовка — логическая, не физическая (RTL). */
|
|
23
|
-
var GR_COLLAPSE_ICON_POSITIONS = ["start", "end"];
|
|
24
10
|
var GR_COLLAPSE_CONTEXT = Symbol("GR_COLLAPSE_CONTEXT");
|
|
25
11
|
//#endregion
|
|
26
12
|
//#region src/components/GrCollapse/GrCollapse.vue
|
|
@@ -305,4 +291,4 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
|
|
|
305
291
|
}
|
|
306
292
|
});
|
|
307
293
|
//#endregion
|
|
308
|
-
export {
|
|
294
|
+
export { GrCollapse_default as n, GrCollapseItem_default as t };
|
package/dist/components/GrCollapse/chunks/{GrCollapse-Kk0DE8tb.js.map → GrCollapse-KFcrji1L.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrCollapse-Kk0DE8tb.js","names":["$slots"],"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\nimport type { GrComponentSize } from '../shared/sizes'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\n/**\n * Уровень заголовка секции. APG для accordion требует, чтобы он соответствовал\n * структуре страницы: аккордеон в разделе `<h4>` с захардкоженным `<h3>` рвёт\n * навигацию по заголовкам.\n */\nexport const GR_COLLAPSE_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\n\nexport type GrCollapseHeadingLevel = typeof GR_COLLAPSE_HEADING_LEVELS[number]\n\n/** Сторона шеврона относительно заголовка — логическая, не физическая (RTL). */\nexport const GR_COLLAPSE_ICON_POSITIONS = ['start', 'end'] as const\n\nexport type GrCollapseIconPosition = typeof GR_COLLAPSE_ICON_POSITIONS[number]\n\n/**\n * Async-guard на переключение секции: `false` отменяет его. Второй аргумент —\n * куда идёт секция (`true` — раскрывается), чтобы «сохранить изменения?»\n * спрашивалось только на сворачивании.\n */\nexport type GrCollapseBeforeChange = (\n name: GrCollapseValue,\n expanding: boolean,\n) => boolean | void | Promise<boolean | void>\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n size: ComputedRef<GrComponentSize>\n headingLevel: ComputedRef<GrCollapseHeadingLevel>\n expandIconPosition: ComputedRef<GrCollapseIconPosition>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')\n","<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\n\nimport GrCard from '../GrCard'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { hasMeaningfulSlotContent } from '../shared/slotNodes'\nimport { grCollapseEmptyClass } from './grCollapseStyles'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseBeforeChange,\n type GrCollapseContext,\n type GrCollapseHeadingLevel,\n type GrCollapseIconPosition,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nimport './defaults'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n * @prop borderless — без обёртки в `GrCard`: аккордеон внутри карточки или сайдбара\n * иначе получает вторую рамку и вторую тень.\n * @prop beforeChange — async-guard: `false` отменяет переключение.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n borderless?: boolean\n /** Уровень заголовков секций (`h2`…`h6`) — под структуру страницы. */\n headingLevel?: GrCollapseHeadingLevel\n /** Сторона шеврона относительно заголовка. */\n expandIconPosition?: GrCollapseIconPosition\n beforeChange?: GrCollapseBeforeChange\n /** Размер секций. Не задан — берётся из `GrConfigProvider`, иначе `md`. */\n size?: GrComponentSize\n /**\n * Пусто ли. Не задан — считается по содержимому: аккордеон без секций\n * показывает заглушку вместо пустой рамки. `false` подавляет автоопределение —\n * например, когда секции приезжают асинхронно и мигать текстом не надо.\n */\n empty?: boolean\n /** Текст пустого состояния. Слот `#empty` сильнее. */\n emptyText?: string\n}\n\nexport interface GrCollapseEmits {\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}\n\n// Дефолты оформления намеренно `undefined`: «настоящий» дефолт живёт в\n// `useGrComponentProp`, иначе `GrConfigProvider` не отличит заданный пользователем\n// проп от подставленного Vue.\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: undefined,\n borderless: undefined,\n headingLevel: undefined,\n expandIconPosition: undefined,\n beforeChange: undefined,\n size: undefined,\n empty: undefined,\n emptyText: undefined,\n})\n\nconst emit = defineEmits<GrCollapseEmits>()\n\ndefineSlots<{\n /** Секции аккордеона (`GrCollapseItem`). */\n default?: () => any\n /** Содержимое пустого состояния вместо текста по умолчанию. */\n empty?: () => any\n}>()\n\nconst slots = useSlots()\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCollapse' })\nconst divided = useGrComponentProp('GrCollapse', 'divided', () => props.divided, true)\nconst borderless = useGrComponentProp('GrCollapse', 'borderless', () => props.borderless, false)\nconst headingLevel = useGrComponentProp('GrCollapse', 'headingLevel', () => props.headingLevel, 3)\nconst expandIconPosition = useGrComponentProp('GrCollapse', 'expandIconPosition', () => props.expandIconPosition, 'end')\n\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.collapse.empty', 'Nothing here yet'))\n\n/**\n * Пустоту считает общий разборщик слота: `v-for` приходит фрагментом, `v-if`\n * оставляет после себя комментарий, а шаблон — переносы строк, и всё это не\n * содержимое.\n */\nconst isEmpty = computed(() => {\n if (props.empty !== undefined) return props.empty\n\n return !hasMeaningfulSlotContent(slots.default?.() ?? [])\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 applyToggle(name: GrCollapseValue): void {\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\n// Секции, у которых guard ещё не ответил. Без этого повторный клик по заголовку\n// уходил бы во второй `beforeChange`, и после двух «да» состояние переключилось\n// бы дважды — то есть вернулось бы к исходному.\nconst awaitingGuard = new Set<GrCollapseValue>()\n\nasync function toggle(name: GrCollapseValue): Promise<void> {\n if (props.disabled || awaitingGuard.has(name))\n return\n\n if (!props.beforeChange) {\n applyToggle(name)\n return\n }\n\n awaitingGuard.add(name)\n try {\n if (await props.beforeChange(name, !activeSet.value.has(name)) === false)\n return\n\n applyToggle(name)\n }\n finally {\n awaitingGuard.delete(name)\n }\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n size: resolvedSize,\n headingLevel,\n expandIconPosition,\n isActive: name => activeSet.value.has(name),\n toggle: (name) => { void toggle(name) },\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard v-if=\"!borderless\" data-gr-collapse>\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <div v-else :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n\n <!-- Разделители остаются на корне: без обёртки в карточку он и есть список\n секций, и лишний уровень вложенности сдвинул бы вёрстку потребителя. -->\n <div\n v-else\n data-gr-collapse\n :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\"\n >\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <slot v-else />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\n\nimport GrCard from '../GrCard'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { hasMeaningfulSlotContent } from '../shared/slotNodes'\nimport { grCollapseEmptyClass } from './grCollapseStyles'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseBeforeChange,\n type GrCollapseContext,\n type GrCollapseHeadingLevel,\n type GrCollapseIconPosition,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nimport './defaults'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n * @prop borderless — без обёртки в `GrCard`: аккордеон внутри карточки или сайдбара\n * иначе получает вторую рамку и вторую тень.\n * @prop beforeChange — async-guard: `false` отменяет переключение.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n borderless?: boolean\n /** Уровень заголовков секций (`h2`…`h6`) — под структуру страницы. */\n headingLevel?: GrCollapseHeadingLevel\n /** Сторона шеврона относительно заголовка. */\n expandIconPosition?: GrCollapseIconPosition\n beforeChange?: GrCollapseBeforeChange\n /** Размер секций. Не задан — берётся из `GrConfigProvider`, иначе `md`. */\n size?: GrComponentSize\n /**\n * Пусто ли. Не задан — считается по содержимому: аккордеон без секций\n * показывает заглушку вместо пустой рамки. `false` подавляет автоопределение —\n * например, когда секции приезжают асинхронно и мигать текстом не надо.\n */\n empty?: boolean\n /** Текст пустого состояния. Слот `#empty` сильнее. */\n emptyText?: string\n}\n\nexport interface GrCollapseEmits {\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}\n\n// Дефолты оформления намеренно `undefined`: «настоящий» дефолт живёт в\n// `useGrComponentProp`, иначе `GrConfigProvider` не отличит заданный пользователем\n// проп от подставленного Vue.\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: undefined,\n borderless: undefined,\n headingLevel: undefined,\n expandIconPosition: undefined,\n beforeChange: undefined,\n size: undefined,\n empty: undefined,\n emptyText: undefined,\n})\n\nconst emit = defineEmits<GrCollapseEmits>()\n\ndefineSlots<{\n /** Секции аккордеона (`GrCollapseItem`). */\n default?: () => any\n /** Содержимое пустого состояния вместо текста по умолчанию. */\n empty?: () => any\n}>()\n\nconst slots = useSlots()\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCollapse' })\nconst divided = useGrComponentProp('GrCollapse', 'divided', () => props.divided, true)\nconst borderless = useGrComponentProp('GrCollapse', 'borderless', () => props.borderless, false)\nconst headingLevel = useGrComponentProp('GrCollapse', 'headingLevel', () => props.headingLevel, 3)\nconst expandIconPosition = useGrComponentProp('GrCollapse', 'expandIconPosition', () => props.expandIconPosition, 'end')\n\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.collapse.empty', 'Nothing here yet'))\n\n/**\n * Пустоту считает общий разборщик слота: `v-for` приходит фрагментом, `v-if`\n * оставляет после себя комментарий, а шаблон — переносы строк, и всё это не\n * содержимое.\n */\nconst isEmpty = computed(() => {\n if (props.empty !== undefined) return props.empty\n\n return !hasMeaningfulSlotContent(slots.default?.() ?? [])\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 applyToggle(name: GrCollapseValue): void {\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\n// Секции, у которых guard ещё не ответил. Без этого повторный клик по заголовку\n// уходил бы во второй `beforeChange`, и после двух «да» состояние переключилось\n// бы дважды — то есть вернулось бы к исходному.\nconst awaitingGuard = new Set<GrCollapseValue>()\n\nasync function toggle(name: GrCollapseValue): Promise<void> {\n if (props.disabled || awaitingGuard.has(name))\n return\n\n if (!props.beforeChange) {\n applyToggle(name)\n return\n }\n\n awaitingGuard.add(name)\n try {\n if (await props.beforeChange(name, !activeSet.value.has(name)) === false)\n return\n\n applyToggle(name)\n }\n finally {\n awaitingGuard.delete(name)\n }\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n size: resolvedSize,\n headingLevel,\n expandIconPosition,\n isActive: name => activeSet.value.has(name),\n toggle: (name) => { void toggle(name) },\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard v-if=\"!borderless\" data-gr-collapse>\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <div v-else :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n\n <!-- Разделители остаются на корне: без обёртки в карточку он и есть список\n секций, и лишний уровень вложенности сдвинул бы вёрстку потребителя. -->\n <div\n v-else\n data-gr-collapse\n :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\"\n >\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <slot v-else />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, inject, ref, useId } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\nimport {\n collapseChevronSizes,\n collapseExtraPaddings,\n grCollapseBodyClass,\n grCollapseChevronClass,\n grCollapseHeaderClass,\n grCollapseRowClass,\n grCollapseTitleClass,\n} from './grCollapseStyles'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n *\n * Слот `#extra` (счётчик, бейдж, кнопка) рендерится **рядом с** триггером, а не\n * внутри него: `<button>` внутри `<button>` — невалидная разметка, а axe ловит\n * это как `nested-interactive`.\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 uid = useId()\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 headingTag = computed(() => `h${collapseContext.headingLevel.value}`)\nconst iconAtStart = computed(() => collapseContext.expandIconPosition.value === 'start')\n\nconst rowClassName = computed(() => grCollapseRowClass(resolvedDisabled.value))\nconst headerClassName = computed(() => grCollapseHeaderClass({\n size: collapseContext.size.value,\n disabled: resolvedDisabled.value,\n}))\nconst extraClassName = computed(() => collapseExtraPaddings[collapseContext.size.value])\nconst titleClassName = computed(() => grCollapseTitleClass(collapseContext.size.value))\nconst bodyClassName = computed(() => grCollapseBodyClass(collapseContext.size.value))\nconst chevronClassName = computed(() => grCollapseChevronClass(expanded.value))\nconst chevronSize = computed(() => collapseChevronSizes[collapseContext.size.value])\n\n// Свёрнутая панель схлопывается визуально (`grid-rows-[0fr]`), но это не\n// скрытие: без `inert` ссылки и кнопки внутри неё ловятся Tab'ом, фокус уезжает\n// в невидимую область нулевой высоты, а скринридер читает содержимое всех\n// закрытых секций подряд — прямо вопреки `aria-expanded=\"false\"` на триггере.\n// `inert` убирает поддерево и из таб-порядка, и из дерева доступности, при этом\n// (в отличие от `hidden`/`display:none`) не ломает анимацию раскрытия.\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-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\n/**\n * Только заголовки **своего** аккордеона: вложенный `GrCollapse` внутри\n * раскрытой панели тоже помечен `[data-gr-collapse]`, и без фильтра стрелки\n * внешнего аккордеона перескакивали бы на заголовки внутреннего.\n */\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n const triggers = Array.prototype.slice.call(\n root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]'),\n ) as HTMLElement[]\n\n return triggers.filter(trigger => trigger.closest('[data-gr-collapse]') === root)\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-gr-collapse-item\n class=\"text-[var(--gr-fg)]\"\n >\n <div :class=\"rowClassName\">\n <component\n :is=\"headingTag\"\n class=\"m-0 min-w-0 flex-1\"\n >\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n :class=\"headerClassName\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <GrIcon\n v-if=\"iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n\n <span :class=\"titleClassName\">\n <slot name=\"title\">\n <span class=\"font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n v-if=\"!iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n </button>\n </component>\n\n <div\n v-if=\"$slots.extra\"\n data-gr-collapse-extra\n class=\"shrink-0\"\n :class=\"extraClassName\"\n >\n <slot name=\"extra\" />\n </div>\n </div>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n :inert=\"expanded ? undefined : true\"\n class=\"grid transition-[grid-template-rows] duration-[var(--gr-duration-base)]\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div :class=\"bodyClassName\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, inject, ref, useId } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\nimport {\n collapseChevronSizes,\n collapseExtraPaddings,\n grCollapseBodyClass,\n grCollapseChevronClass,\n grCollapseHeaderClass,\n grCollapseRowClass,\n grCollapseTitleClass,\n} from './grCollapseStyles'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n *\n * Слот `#extra` (счётчик, бейдж, кнопка) рендерится **рядом с** триггером, а не\n * внутри него: `<button>` внутри `<button>` — невалидная разметка, а axe ловит\n * это как `nested-interactive`.\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 uid = useId()\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 headingTag = computed(() => `h${collapseContext.headingLevel.value}`)\nconst iconAtStart = computed(() => collapseContext.expandIconPosition.value === 'start')\n\nconst rowClassName = computed(() => grCollapseRowClass(resolvedDisabled.value))\nconst headerClassName = computed(() => grCollapseHeaderClass({\n size: collapseContext.size.value,\n disabled: resolvedDisabled.value,\n}))\nconst extraClassName = computed(() => collapseExtraPaddings[collapseContext.size.value])\nconst titleClassName = computed(() => grCollapseTitleClass(collapseContext.size.value))\nconst bodyClassName = computed(() => grCollapseBodyClass(collapseContext.size.value))\nconst chevronClassName = computed(() => grCollapseChevronClass(expanded.value))\nconst chevronSize = computed(() => collapseChevronSizes[collapseContext.size.value])\n\n// Свёрнутая панель схлопывается визуально (`grid-rows-[0fr]`), но это не\n// скрытие: без `inert` ссылки и кнопки внутри неё ловятся Tab'ом, фокус уезжает\n// в невидимую область нулевой высоты, а скринридер читает содержимое всех\n// закрытых секций подряд — прямо вопреки `aria-expanded=\"false\"` на триггере.\n// `inert` убирает поддерево и из таб-порядка, и из дерева доступности, при этом\n// (в отличие от `hidden`/`display:none`) не ломает анимацию раскрытия.\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-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\n/**\n * Только заголовки **своего** аккордеона: вложенный `GrCollapse` внутри\n * раскрытой панели тоже помечен `[data-gr-collapse]`, и без фильтра стрелки\n * внешнего аккордеона перескакивали бы на заголовки внутреннего.\n */\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n const triggers = Array.prototype.slice.call(\n root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]'),\n ) as HTMLElement[]\n\n return triggers.filter(trigger => trigger.closest('[data-gr-collapse]') === root)\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-gr-collapse-item\n class=\"text-[var(--gr-fg)]\"\n >\n <div :class=\"rowClassName\">\n <component\n :is=\"headingTag\"\n class=\"m-0 min-w-0 flex-1\"\n >\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n :class=\"headerClassName\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <GrIcon\n v-if=\"iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n\n <span :class=\"titleClassName\">\n <slot name=\"title\">\n <span class=\"font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n v-if=\"!iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n </button>\n </component>\n\n <div\n v-if=\"$slots.extra\"\n data-gr-collapse-extra\n class=\"shrink-0\"\n :class=\"extraClassName\"\n >\n <slot name=\"extra\" />\n </div>\n </div>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n :inert=\"expanded ? undefined : true\"\n class=\"grid transition-[grid-template-rows] duration-[var(--gr-duration-base)]\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div :class=\"bodyClassName\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GrCollapse-KFcrji1L.js","names":["$slots"],"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\nimport type { GrComponentSize } from '../shared/sizes'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\n/**\n * Уровень заголовка секции. APG для accordion требует, чтобы он соответствовал\n * структуре страницы: аккордеон в разделе `<h4>` с захардкоженным `<h3>` рвёт\n * навигацию по заголовкам.\n */\nexport const GR_COLLAPSE_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\n\nexport type GrCollapseHeadingLevel = typeof GR_COLLAPSE_HEADING_LEVELS[number]\n\n/** Сторона шеврона относительно заголовка — логическая, не физическая (RTL). */\nexport const GR_COLLAPSE_ICON_POSITIONS = ['start', 'end'] as const\n\nexport type GrCollapseIconPosition = typeof GR_COLLAPSE_ICON_POSITIONS[number]\n\n/**\n * Async-guard на переключение секции: `false` отменяет его. Второй аргумент —\n * куда идёт секция (`true` — раскрывается), чтобы «сохранить изменения?»\n * спрашивалось только на сворачивании.\n */\nexport type GrCollapseBeforeChange = (\n name: GrCollapseValue,\n expanding: boolean,\n) => boolean | void | Promise<boolean | void>\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n size: ComputedRef<GrComponentSize>\n headingLevel: ComputedRef<GrCollapseHeadingLevel>\n expandIconPosition: ComputedRef<GrCollapseIconPosition>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')\n","<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\n\nimport GrCard from '../GrCard'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { hasMeaningfulSlotContent } from '../shared/slotNodes'\nimport { grCollapseEmptyClass } from './grCollapseStyles'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseBeforeChange,\n type GrCollapseContext,\n type GrCollapseHeadingLevel,\n type GrCollapseIconPosition,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nimport './defaults'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n * @prop borderless — без обёртки в `GrCard`: аккордеон внутри карточки или сайдбара\n * иначе получает вторую рамку и вторую тень.\n * @prop beforeChange — async-guard: `false` отменяет переключение.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n borderless?: boolean\n /** Уровень заголовков секций (`h2`…`h6`) — под структуру страницы. */\n headingLevel?: GrCollapseHeadingLevel\n /** Сторона шеврона относительно заголовка. */\n expandIconPosition?: GrCollapseIconPosition\n beforeChange?: GrCollapseBeforeChange\n /** Размер секций. Не задан — берётся из `GrConfigProvider`, иначе `md`. */\n size?: GrComponentSize\n /**\n * Пусто ли. Не задан — считается по содержимому: аккордеон без секций\n * показывает заглушку вместо пустой рамки. `false` подавляет автоопределение —\n * например, когда секции приезжают асинхронно и мигать текстом не надо.\n */\n empty?: boolean\n /** Текст пустого состояния. Слот `#empty` сильнее. */\n emptyText?: string\n}\n\nexport interface GrCollapseEmits {\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}\n\n// Дефолты оформления намеренно `undefined`: «настоящий» дефолт живёт в\n// `useGrComponentProp`, иначе `GrConfigProvider` не отличит заданный пользователем\n// проп от подставленного Vue.\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: undefined,\n borderless: undefined,\n headingLevel: undefined,\n expandIconPosition: undefined,\n beforeChange: undefined,\n size: undefined,\n empty: undefined,\n emptyText: undefined,\n})\n\nconst emit = defineEmits<GrCollapseEmits>()\n\ndefineSlots<{\n /** Секции аккордеона (`GrCollapseItem`). */\n default?: () => any\n /** Содержимое пустого состояния вместо текста по умолчанию. */\n empty?: () => any\n}>()\n\nconst slots = useSlots()\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCollapse' })\nconst divided = useGrComponentProp('GrCollapse', 'divided', () => props.divided, true)\nconst borderless = useGrComponentProp('GrCollapse', 'borderless', () => props.borderless, false)\nconst headingLevel = useGrComponentProp('GrCollapse', 'headingLevel', () => props.headingLevel, 3)\nconst expandIconPosition = useGrComponentProp('GrCollapse', 'expandIconPosition', () => props.expandIconPosition, 'end')\n\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.collapse.empty', 'Nothing here yet'))\n\n/**\n * Пустоту считает общий разборщик слота: `v-for` приходит фрагментом, `v-if`\n * оставляет после себя комментарий, а шаблон — переносы строк, и всё это не\n * содержимое.\n */\nconst isEmpty = computed(() => {\n if (props.empty !== undefined) return props.empty\n\n return !hasMeaningfulSlotContent(slots.default?.() ?? [])\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 applyToggle(name: GrCollapseValue): void {\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\n// Секции, у которых guard ещё не ответил. Без этого повторный клик по заголовку\n// уходил бы во второй `beforeChange`, и после двух «да» состояние переключилось\n// бы дважды — то есть вернулось бы к исходному.\nconst awaitingGuard = new Set<GrCollapseValue>()\n\nasync function toggle(name: GrCollapseValue): Promise<void> {\n if (props.disabled || awaitingGuard.has(name))\n return\n\n if (!props.beforeChange) {\n applyToggle(name)\n return\n }\n\n awaitingGuard.add(name)\n try {\n if (await props.beforeChange(name, !activeSet.value.has(name)) === false)\n return\n\n applyToggle(name)\n }\n finally {\n awaitingGuard.delete(name)\n }\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n size: resolvedSize,\n headingLevel,\n expandIconPosition,\n isActive: name => activeSet.value.has(name),\n toggle: (name) => { void toggle(name) },\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard v-if=\"!borderless\" data-gr-collapse>\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <div v-else :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n\n <!-- Разделители остаются на корне: без обёртки в карточку он и есть список\n секций, и лишний уровень вложенности сдвинул бы вёрстку потребителя. -->\n <div\n v-else\n data-gr-collapse\n :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\"\n >\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <slot v-else />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\n\nimport GrCard from '../GrCard'\nimport { useGrComponentProp, useGrComponentSize } from '../GrConfigProvider/context'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport { hasMeaningfulSlotContent } from '../shared/slotNodes'\nimport { grCollapseEmptyClass } from './grCollapseStyles'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseBeforeChange,\n type GrCollapseContext,\n type GrCollapseHeadingLevel,\n type GrCollapseIconPosition,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nimport './defaults'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n * @prop borderless — без обёртки в `GrCard`: аккордеон внутри карточки или сайдбара\n * иначе получает вторую рамку и вторую тень.\n * @prop beforeChange — async-guard: `false` отменяет переключение.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n borderless?: boolean\n /** Уровень заголовков секций (`h2`…`h6`) — под структуру страницы. */\n headingLevel?: GrCollapseHeadingLevel\n /** Сторона шеврона относительно заголовка. */\n expandIconPosition?: GrCollapseIconPosition\n beforeChange?: GrCollapseBeforeChange\n /** Размер секций. Не задан — берётся из `GrConfigProvider`, иначе `md`. */\n size?: GrComponentSize\n /**\n * Пусто ли. Не задан — считается по содержимому: аккордеон без секций\n * показывает заглушку вместо пустой рамки. `false` подавляет автоопределение —\n * например, когда секции приезжают асинхронно и мигать текстом не надо.\n */\n empty?: boolean\n /** Текст пустого состояния. Слот `#empty` сильнее. */\n emptyText?: string\n}\n\nexport interface GrCollapseEmits {\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}\n\n// Дефолты оформления намеренно `undefined`: «настоящий» дефолт живёт в\n// `useGrComponentProp`, иначе `GrConfigProvider` не отличит заданный пользователем\n// проп от подставленного Vue.\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: undefined,\n borderless: undefined,\n headingLevel: undefined,\n expandIconPosition: undefined,\n beforeChange: undefined,\n size: undefined,\n empty: undefined,\n emptyText: undefined,\n})\n\nconst emit = defineEmits<GrCollapseEmits>()\n\ndefineSlots<{\n /** Секции аккордеона (`GrCollapseItem`). */\n default?: () => any\n /** Содержимое пустого состояния вместо текста по умолчанию. */\n empty?: () => any\n}>()\n\nconst slots = useSlots()\nconst { t } = useGranularityTranslations()\n\nconst resolvedSize = useGrComponentSize(() => props.size, { component: 'GrCollapse' })\nconst divided = useGrComponentProp('GrCollapse', 'divided', () => props.divided, true)\nconst borderless = useGrComponentProp('GrCollapse', 'borderless', () => props.borderless, false)\nconst headingLevel = useGrComponentProp('GrCollapse', 'headingLevel', () => props.headingLevel, 3)\nconst expandIconPosition = useGrComponentProp('GrCollapse', 'expandIconPosition', () => props.expandIconPosition, 'end')\n\nconst resolvedEmptyText = computed(() => props.emptyText ?? t('gr.collapse.empty', 'Nothing here yet'))\n\n/**\n * Пустоту считает общий разборщик слота: `v-for` приходит фрагментом, `v-if`\n * оставляет после себя комментарий, а шаблон — переносы строк, и всё это не\n * содержимое.\n */\nconst isEmpty = computed(() => {\n if (props.empty !== undefined) return props.empty\n\n return !hasMeaningfulSlotContent(slots.default?.() ?? [])\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 applyToggle(name: GrCollapseValue): void {\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\n// Секции, у которых guard ещё не ответил. Без этого повторный клик по заголовку\n// уходил бы во второй `beforeChange`, и после двух «да» состояние переключилось\n// бы дважды — то есть вернулось бы к исходному.\nconst awaitingGuard = new Set<GrCollapseValue>()\n\nasync function toggle(name: GrCollapseValue): Promise<void> {\n if (props.disabled || awaitingGuard.has(name))\n return\n\n if (!props.beforeChange) {\n applyToggle(name)\n return\n }\n\n awaitingGuard.add(name)\n try {\n if (await props.beforeChange(name, !activeSet.value.has(name)) === false)\n return\n\n applyToggle(name)\n }\n finally {\n awaitingGuard.delete(name)\n }\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n size: resolvedSize,\n headingLevel,\n expandIconPosition,\n isActive: name => activeSet.value.has(name),\n toggle: (name) => { void toggle(name) },\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard v-if=\"!borderless\" data-gr-collapse>\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <div v-else :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n\n <!-- Разделители остаются на корне: без обёртки в карточку он и есть список\n секций, и лишний уровень вложенности сдвинул бы вёрстку потребителя. -->\n <div\n v-else\n data-gr-collapse\n :class=\"divided ? 'divide-y divide-[var(--gr-brd)]' : ''\"\n >\n <div\n v-if=\"isEmpty\"\n data-gr-collapse-empty\n :class=\"grCollapseEmptyClass(resolvedSize)\"\n >\n <slot name=\"empty\">\n {{ resolvedEmptyText }}\n </slot>\n </div>\n\n <slot v-else />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, inject, ref, useId } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\nimport {\n collapseChevronSizes,\n collapseExtraPaddings,\n grCollapseBodyClass,\n grCollapseChevronClass,\n grCollapseHeaderClass,\n grCollapseRowClass,\n grCollapseTitleClass,\n} from './grCollapseStyles'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n *\n * Слот `#extra` (счётчик, бейдж, кнопка) рендерится **рядом с** триггером, а не\n * внутри него: `<button>` внутри `<button>` — невалидная разметка, а axe ловит\n * это как `nested-interactive`.\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 uid = useId()\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 headingTag = computed(() => `h${collapseContext.headingLevel.value}`)\nconst iconAtStart = computed(() => collapseContext.expandIconPosition.value === 'start')\n\nconst rowClassName = computed(() => grCollapseRowClass(resolvedDisabled.value))\nconst headerClassName = computed(() => grCollapseHeaderClass({\n size: collapseContext.size.value,\n disabled: resolvedDisabled.value,\n}))\nconst extraClassName = computed(() => collapseExtraPaddings[collapseContext.size.value])\nconst titleClassName = computed(() => grCollapseTitleClass(collapseContext.size.value))\nconst bodyClassName = computed(() => grCollapseBodyClass(collapseContext.size.value))\nconst chevronClassName = computed(() => grCollapseChevronClass(expanded.value))\nconst chevronSize = computed(() => collapseChevronSizes[collapseContext.size.value])\n\n// Свёрнутая панель схлопывается визуально (`grid-rows-[0fr]`), но это не\n// скрытие: без `inert` ссылки и кнопки внутри неё ловятся Tab'ом, фокус уезжает\n// в невидимую область нулевой высоты, а скринридер читает содержимое всех\n// закрытых секций подряд — прямо вопреки `aria-expanded=\"false\"` на триггере.\n// `inert` убирает поддерево и из таб-порядка, и из дерева доступности, при этом\n// (в отличие от `hidden`/`display:none`) не ломает анимацию раскрытия.\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-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\n/**\n * Только заголовки **своего** аккордеона: вложенный `GrCollapse` внутри\n * раскрытой панели тоже помечен `[data-gr-collapse]`, и без фильтра стрелки\n * внешнего аккордеона перескакивали бы на заголовки внутреннего.\n */\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n const triggers = Array.prototype.slice.call(\n root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]'),\n ) as HTMLElement[]\n\n return triggers.filter(trigger => trigger.closest('[data-gr-collapse]') === root)\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-gr-collapse-item\n class=\"text-[var(--gr-fg)]\"\n >\n <div :class=\"rowClassName\">\n <component\n :is=\"headingTag\"\n class=\"m-0 min-w-0 flex-1\"\n >\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n :class=\"headerClassName\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <GrIcon\n v-if=\"iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n\n <span :class=\"titleClassName\">\n <slot name=\"title\">\n <span class=\"font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n v-if=\"!iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n </button>\n </component>\n\n <div\n v-if=\"$slots.extra\"\n data-gr-collapse-extra\n class=\"shrink-0\"\n :class=\"extraClassName\"\n >\n <slot name=\"extra\" />\n </div>\n </div>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n :inert=\"expanded ? undefined : true\"\n class=\"grid transition-[grid-template-rows] duration-[var(--gr-duration-base)]\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div :class=\"bodyClassName\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, inject, ref, useId } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\nimport {\n collapseChevronSizes,\n collapseExtraPaddings,\n grCollapseBodyClass,\n grCollapseChevronClass,\n grCollapseHeaderClass,\n grCollapseRowClass,\n grCollapseTitleClass,\n} from './grCollapseStyles'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n *\n * Слот `#extra` (счётчик, бейдж, кнопка) рендерится **рядом с** триггером, а не\n * внутри него: `<button>` внутри `<button>` — невалидная разметка, а axe ловит\n * это как `nested-interactive`.\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 uid = useId()\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 headingTag = computed(() => `h${collapseContext.headingLevel.value}`)\nconst iconAtStart = computed(() => collapseContext.expandIconPosition.value === 'start')\n\nconst rowClassName = computed(() => grCollapseRowClass(resolvedDisabled.value))\nconst headerClassName = computed(() => grCollapseHeaderClass({\n size: collapseContext.size.value,\n disabled: resolvedDisabled.value,\n}))\nconst extraClassName = computed(() => collapseExtraPaddings[collapseContext.size.value])\nconst titleClassName = computed(() => grCollapseTitleClass(collapseContext.size.value))\nconst bodyClassName = computed(() => grCollapseBodyClass(collapseContext.size.value))\nconst chevronClassName = computed(() => grCollapseChevronClass(expanded.value))\nconst chevronSize = computed(() => collapseChevronSizes[collapseContext.size.value])\n\n// Свёрнутая панель схлопывается визуально (`grid-rows-[0fr]`), но это не\n// скрытие: без `inert` ссылки и кнопки внутри неё ловятся Tab'ом, фокус уезжает\n// в невидимую область нулевой высоты, а скринридер читает содержимое всех\n// закрытых секций подряд — прямо вопреки `aria-expanded=\"false\"` на триггере.\n// `inert` убирает поддерево и из таб-порядка, и из дерева доступности, при этом\n// (в отличие от `hidden`/`display:none`) не ломает анимацию раскрытия.\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-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\n/**\n * Только заголовки **своего** аккордеона: вложенный `GrCollapse` внутри\n * раскрытой панели тоже помечен `[data-gr-collapse]`, и без фильтра стрелки\n * внешнего аккордеона перескакивали бы на заголовки внутреннего.\n */\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n const triggers = Array.prototype.slice.call(\n root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]'),\n ) as HTMLElement[]\n\n return triggers.filter(trigger => trigger.closest('[data-gr-collapse]') === root)\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-gr-collapse-item\n class=\"text-[var(--gr-fg)]\"\n >\n <div :class=\"rowClassName\">\n <component\n :is=\"headingTag\"\n class=\"m-0 min-w-0 flex-1\"\n >\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n :class=\"headerClassName\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <GrIcon\n v-if=\"iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n\n <span :class=\"titleClassName\">\n <slot name=\"title\">\n <span class=\"font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n v-if=\"!iconAtStart\"\n :size=\"chevronSize\"\n \n data-gr-collapse-chevron\n :class=\"chevronClassName\"\n >\n <slot name=\"icon\">\n <ChevronDownIcon />\n </slot>\n </GrIcon>\n </button>\n </component>\n\n <div\n v-if=\"$slots.extra\"\n data-gr-collapse-extra\n class=\"shrink-0\"\n :class=\"extraClassName\"\n >\n <slot name=\"extra\" />\n </div>\n </div>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n :inert=\"expanded ? undefined : true\"\n class=\"grid transition-[grid-template-rows] duration-[var(--gr-duration-base)]\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div :class=\"bodyClassName\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { n as grCollapseSafelist, t as grCollapseConfig } from "../../chunks/config-DU2DNSRx2.js";
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
2
|
+
import { n as GrCollapse_default, t as GrCollapseItem_default } from "./chunks/GrCollapse-KFcrji1L.js";
|
|
3
|
+
export { GrCollapse_default as GrCollapse, GrCollapse_default as default, GrCollapseItem_default as GrCollapseItem, grCollapseConfig, grCollapseSafelist };
|
package/dist/components/GrColorPicker/chunks/{GrColorPicker-CkBTzkqn.js → GrColorPicker-qQdoEPHF.js}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as useGrComponentSize } from "../../../chunks/context-CTbuwcYs.js";
|
|
2
2
|
import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-BC5zsj_d.js";
|
|
3
3
|
import { n as useGrFormFieldContext } from "../../../chunks/context-DdNIxa1w.js";
|
|
4
4
|
import { useGrFormControl } from "../../../composables/useGrFormControl.js";
|
|
5
|
-
import { t as GrInput_default } from "../../GrInput/chunks/GrInput-
|
|
6
|
-
import { t as GrPopover_default } from "../../GrPopover/chunks/GrPopover-
|
|
7
|
-
import { t as GrSlider_default } from "../../GrSlider/chunks/GrSlider-
|
|
5
|
+
import { t as GrInput_default } from "../../GrInput/chunks/GrInput-Bb_pxqpT.js";
|
|
6
|
+
import { t as GrPopover_default } from "../../GrPopover/chunks/GrPopover-b70bIlQ9.js";
|
|
7
|
+
import { t as GrSlider_default } from "../../GrSlider/chunks/GrSlider-s99yAyz6.js";
|
|
8
8
|
import { a as grColorPickerPresetClass, c as previewClass, d as rowValueClass, f as swatchBaseClass, h as triggerValueClass, i as grColorPickerPanelClass, l as rowClass, m as triggerSwatchSizeBySize, o as grColorPickerTriggerClass, p as swatchFillClass, r as checkerClass, s as presetsGridClass, u as rowLabelClass } from "../../../chunks/config-BsPDQ0dS.js";
|
|
9
9
|
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, isRef, mergeProps, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderList, toDisplayString, unref, useId, watch, withCtx, withKeys } from "vue";
|
|
10
10
|
import '../styles.css';//#region src/components/GrColorPicker/color.ts
|
|
@@ -581,4 +581,4 @@ var GrColorPicker_default = /* @__PURE__ */ defineComponent({
|
|
|
581
581
|
}
|
|
582
582
|
});
|
|
583
583
|
//#endregion
|
|
584
|
-
export {
|
|
584
|
+
export { GrColorPicker_default as t };
|