@feugene/granularity 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/config-BFJIxE8b.js +62 -0
- package/dist/chunks/config-BFJIxE8b.js.map +1 -0
- package/dist/chunks/{config-DBQQT-WP.js → config-BIa3ilQm.js} +18 -3
- package/dist/chunks/config-BIa3ilQm.js.map +1 -0
- package/dist/chunks/config-BfsBepkH.js.map +1 -0
- package/dist/chunks/config-BoNR7_PD.js.map +1 -0
- package/dist/chunks/config-BuGlNPE92.js.map +1 -0
- package/dist/chunks/{config-Be9k9bOf.js → config-C8tVRv8i.js} +16 -2
- package/dist/chunks/config-C8tVRv8i.js.map +1 -0
- package/dist/chunks/config-CPSxM7XE.js +8 -0
- package/dist/chunks/config-CPSxM7XE.js.map +1 -0
- package/dist/chunks/config-D7zgE_Gr.js +107 -0
- package/dist/chunks/config-D7zgE_Gr.js.map +1 -0
- package/dist/chunks/config-DAX8Deh1.js.map +1 -0
- package/dist/chunks/config-DGCMHPCR.js +19 -0
- package/dist/chunks/config-DGCMHPCR.js.map +1 -0
- package/dist/chunks/config-DGWFal5h.js +128 -0
- package/dist/chunks/config-DGWFal5h.js.map +1 -0
- package/dist/chunks/config-DKISz9gR.js +39 -0
- package/dist/chunks/config-DKISz9gR.js.map +1 -0
- package/dist/chunks/{config-Bm_Sovla.js → config-DYgfMrIF.js} +14 -2
- package/dist/chunks/config-DYgfMrIF.js.map +1 -0
- package/dist/chunks/{config-BSyiFlbi.js → config-DtgYuGUn2.js} +2 -1
- package/dist/chunks/config-DtgYuGUn2.js.map +1 -0
- package/dist/chunks/config-Iu684VNI.js +21 -0
- package/dist/chunks/config-Iu684VNI.js.map +1 -0
- package/dist/chunks/config-T3qdQBgU.js.map +1 -0
- package/dist/chunks/{config-DCwQBMmJ.js → config-rkcKArZQ.js} +27 -8
- package/dist/chunks/config-rkcKArZQ.js.map +1 -0
- package/dist/chunks/config-zjeAJ4ho2.js.map +1 -0
- package/dist/chunks/context-BfIQv7m12.js.map +1 -0
- package/dist/chunks/context-CTbuwcYs.js.map +1 -1
- package/dist/chunks/{en-DCCFP4qu.js → en-NpP9e7lC.js} +16 -2
- package/dist/chunks/en-NpP9e7lC.js.map +1 -0
- package/dist/chunks/{es-CT34HBVM.js → es-DaeA2Ql-.js} +16 -2
- package/dist/chunks/es-DaeA2Ql-.js.map +1 -0
- package/dist/chunks/{es-DdJsxlUr.js → es-Do2CNrC2.js} +3 -3
- package/dist/chunks/{es-DdJsxlUr.js.map → es-Do2CNrC2.js.map} +1 -1
- package/dist/chunks/{generated-CiCrGDQO.js → generated-CJe6hdiE.js} +138 -6
- package/dist/chunks/{generated-CiCrGDQO.js.map → generated-CJe6hdiE.js.map} +1 -1
- package/dist/chunks/{grBadgeStyles-C2wLlkjF.js → grBadgeStyles-C1S56Alo.js} +6 -1
- package/dist/chunks/{grBadgeStyles-C2wLlkjF.js.map → grBadgeStyles-C1S56Alo.js.map} +1 -1
- package/dist/chunks/grChipGroupContext-DZXkACap.js +4 -0
- package/dist/chunks/grChipGroupContext-DZXkACap.js.map +1 -0
- package/dist/chunks/{config-C5mO5DYZ.js → grDropdownMenuStyles-D1LOkdVj.js} +1 -38
- package/dist/chunks/grDropdownMenuStyles-D1LOkdVj.js.map +1 -0
- package/dist/chunks/{grPopoverStyles-Rz_Z5nLW.js → grPopoverStyles-Cke_BZsM.js} +16 -3
- package/dist/chunks/grPopoverStyles-Cke_BZsM.js.map +1 -0
- package/dist/chunks/{granular-provider-CQKhl5C_.js → granular-provider-BaHkLjFX.js} +26 -16
- package/dist/chunks/granular-provider-BaHkLjFX.js.map +1 -0
- package/dist/chunks/{ru-CLiAMwrx.js → ru-Bg9-DPmg.js} +16 -2
- package/dist/chunks/ru-Bg9-DPmg.js.map +1 -0
- package/dist/chunks/{config-qVg3Zz_A.js → safelist-DOfCQR5O.js} +2 -19
- package/dist/chunks/safelist-DOfCQR5O.js.map +1 -0
- package/dist/chunks/useMenuItemsFocus-OyOnIAlr.js +117 -0
- package/dist/chunks/useMenuItemsFocus-OyOnIAlr.js.map +1 -0
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-DsevPtiS.js → GrAutocomplete-D9c9BNFg.js} +1 -1
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-DsevPtiS.js.map → GrAutocomplete-D9c9BNFg.js.map} +1 -1
- package/dist/components/GrAutocomplete/index.js +1 -1
- package/dist/components/GrBadge/chunks/{GrBadge-u2ZdS7CN.js → GrBadge-_9rCHuE1.js} +1 -1
- package/dist/components/GrBadge/chunks/{GrBadge-u2ZdS7CN.js.map → GrBadge-_9rCHuE1.js.map} +1 -1
- package/dist/components/GrBadge/index.js +3 -2
- package/dist/components/GrButton/chunks/{GrButton-Bw2AH4uX.js → GrButton-DCz-Wn-V.js} +1 -1
- package/dist/components/GrButton/chunks/{GrButton-Bw2AH4uX.js.map → GrButton-DCz-Wn-V.js.map} +1 -1
- package/dist/components/GrButton/index.js +1 -1
- package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CKyiAV8K.js → GrButtonGroup-BQo5VQ_c.js} +1 -1
- package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CKyiAV8K.js.map → GrButtonGroup-BQo5VQ_c.js.map} +1 -1
- package/dist/components/GrButtonGroup/index.js +2 -2
- package/dist/components/GrCard/chunks/{GrCard-Bc7nRfbe.js → GrCard-aQIjk6I9.js} +9 -3
- package/dist/components/GrCard/chunks/GrCard-aQIjk6I9.js.map +1 -0
- package/dist/components/GrCard/index.js +2 -2
- package/dist/components/GrCheckboxGroup/index.js +1 -1
- package/dist/components/GrChip/chunks/GrChip-BnL2FedO.js +222 -0
- package/dist/components/GrChip/chunks/GrChip-BnL2FedO.js.map +1 -0
- package/dist/components/GrChip/index.js +3 -0
- package/dist/components/GrChipGroup/chunks/GrChipGroup-DefmSdY9.js +209 -0
- package/dist/components/GrChipGroup/chunks/GrChipGroup-DefmSdY9.js.map +1 -0
- package/dist/components/GrChipGroup/index.js +3 -0
- package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-BmXCLgLS.js → GrCodeBlock-CyptiEo4.js} +1 -1
- package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-BmXCLgLS.js.map → GrCodeBlock-CyptiEo4.js.map} +1 -1
- package/dist/components/GrCodeBlock/index.js +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-C1rCfbc0.js → GrCollapse-DUROgAgc.js} +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-C1rCfbc0.js.map → GrCollapse-DUROgAgc.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +1 -1
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-qQdoEPHF.js → GrColorPicker-CDaJRVIM.js} +1 -1
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-qQdoEPHF.js.map → GrColorPicker-CDaJRVIM.js.map} +1 -1
- package/dist/components/GrColorPicker/index.js +1 -1
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-BFcMf4Pn.js → GrCommandPalette-BPsVN_XU.js} +3 -3
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-BPsVN_XU.js.map +1 -0
- package/dist/components/GrCommandPalette/index.js +1 -1
- package/dist/components/GrCommandPalette/styles.css +1 -1
- package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-UP-EaoAf.js → GrConfigProvider-BF7R3hgg.js} +1 -1
- package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BF7R3hgg.js.map +1 -0
- package/dist/components/GrConfigProvider/index.js +1 -1
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-rRtMScJX.js → GrConfirmDialog-CwXNLyzk.js} +3 -3
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-rRtMScJX.js.map → GrConfirmDialog-CwXNLyzk.js.map} +1 -1
- package/dist/components/GrConfirmDialog/index.js +1 -1
- package/dist/components/GrContextMenu/chunks/GrContextMenu-BbAJholy.js +331 -0
- package/dist/components/GrContextMenu/chunks/GrContextMenu-BbAJholy.js.map +1 -0
- package/dist/components/GrContextMenu/index.js +3 -0
- package/dist/components/GrDataTable/chunks/{GrDataTable-B5MmZFUg.js → GrDataTable-NRbrXpdx.js} +2 -2
- package/dist/components/GrDataTable/chunks/GrDataTable-NRbrXpdx.js.map +1 -0
- package/dist/components/GrDataTable/index.js +1 -1
- package/dist/components/GrDelta/chunks/{GrDelta-DFvxNpmN.js → GrDelta-NE5HhXoo.js} +0 -0
- package/dist/components/GrDelta/chunks/GrDelta-NE5HhXoo.js.map +1 -0
- package/dist/components/GrDelta/index.js +2 -2
- package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-2zFXzX83.js → GrDescriptionList-1mICfrqX.js} +8 -4
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-1mICfrqX.js.map +1 -0
- package/dist/components/GrDescriptionList/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-D0U5iRqV.js → GrDialog-5Y5K87ss.js} +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-D0U5iRqV.js.map → GrDialog-5Y5K87ss.js.map} +1 -1
- package/dist/components/GrDialog/index.js +1 -1
- package/dist/components/GrDialogService/chunks/{GrDialogService-CrwA4aJq.js → GrDialogService-CHhzGRWy.js} +6 -6
- package/dist/components/GrDialogService/chunks/GrDialogService-CHhzGRWy.js.map +1 -0
- package/dist/components/GrDialogService/index.js +1 -1
- package/dist/components/GrDrawer/chunks/{GrDrawer-C3zAg2tG.js → GrDrawer-CXy3-SVd.js} +2 -2
- package/dist/components/GrDrawer/chunks/GrDrawer-CXy3-SVd.js.map +1 -0
- package/dist/components/GrDrawer/index.js +1 -1
- package/dist/components/GrDropdown/chunks/{GrDropdown-BSfFOcDx.js → GrDropdown-BfTmdPyh.js} +10 -79
- package/dist/components/GrDropdown/chunks/GrDropdown-BfTmdPyh.js.map +1 -0
- package/dist/components/GrDropdown/index.js +1 -1
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-l5HEqzjr.js +130 -0
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-l5HEqzjr.js.map +1 -0
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DyS6dWDp.js → GrDropdownMenuList-BGA_xNVo.js} +57 -159
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenuList-BGA_xNVo.js.map +1 -0
- package/dist/components/GrDropdownMenu/index.js +3 -2
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-D3-vC-ap.js → GrFileUpload-wNXzHb5N.js} +1 -1
- package/dist/components/GrFileUpload/chunks/GrFileUpload-wNXzHb5N.js.map +1 -0
- package/dist/components/GrFileUpload/index.js +1 -1
- package/dist/components/GrFormField/chunks/{GrFormField-kqfVY30N.js → GrFormField-DSylU7IU.js} +1 -1
- package/dist/components/GrFormField/chunks/GrFormField-DSylU7IU.js.map +1 -0
- package/dist/components/GrFormField/index.js +1 -1
- package/dist/components/GrFormFile/chunks/{GrFormFile-D722xHn8.js → GrFormFile-DhVkB2gm.js} +1 -1
- package/dist/components/GrFormFile/chunks/{GrFormFile-D722xHn8.js.map → GrFormFile-DhVkB2gm.js.map} +1 -1
- package/dist/components/GrFormFile/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-C7QVPijj.js → GrInputTag-UI8kIB_F.js} +2 -2
- package/dist/components/GrInputTag/chunks/{GrInputTag-C7QVPijj.js.map → GrInputTag-UI8kIB_F.js.map} +1 -1
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-DFUppRNb.js → GrJsonViewer-jk3ylOTc.js} +2 -2
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-jk3ylOTc.js.map +1 -0
- package/dist/components/GrJsonViewer/index.js +1 -1
- package/dist/components/GrList/chunks/{GrList-BRYhpqIe.js → GrList-B5bclmHV.js} +30 -3
- package/dist/components/GrList/chunks/GrList-B5bclmHV.js.map +1 -0
- package/dist/components/GrList/index.js +1 -1
- package/dist/components/GrList/styles.css +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading-C3DZSSuh.js → GrLoading-DeBFTvFX.js} +1 -1
- package/dist/components/GrLoading/chunks/GrLoading-DeBFTvFX.js.map +1 -0
- package/dist/components/GrLoading/index.js +1 -1
- package/dist/components/GrModal/chunks/{GrModal-CPz7SWD_.js → GrModal-CCoWZuIl.js} +2 -2
- package/dist/components/GrModal/chunks/GrModal-CCoWZuIl.js.map +1 -0
- package/dist/components/GrModal/index.js +1 -1
- package/dist/components/GrNavbar/chunks/{GrNavbar-DWaaoV7n.js → GrNavbar-DPj30sHX.js} +1 -1
- package/dist/components/GrNavbar/chunks/{GrNavbar-DWaaoV7n.js.map → GrNavbar-DPj30sHX.js.map} +1 -1
- package/dist/components/GrNavbar/index.js +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-BotnzW77.js → GrNumberInput-V2mZvDDC.js} +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-BotnzW77.js.map → GrNumberInput-V2mZvDDC.js.map} +1 -1
- package/dist/components/GrNumberInput/index.js +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-GtGtSMJG.js → GrPagination-DG7kp6VL.js} +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-GtGtSMJG.js.map → GrPagination-DG7kp6VL.js.map} +1 -1
- package/dist/components/GrPagination/index.js +1 -1
- package/dist/components/GrPopover/chunks/{GrPopover-b70bIlQ9.js → GrPopover-DDChM1jD.js} +28 -10
- package/dist/components/GrPopover/chunks/GrPopover-DDChM1jD.js.map +1 -0
- package/dist/components/GrPopover/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-CEI8bf-t.js → GrPromptDialog-DjF-5oD9.js} +4 -4
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-CEI8bf-t.js.map → GrPromptDialog-DjF-5oD9.js.map} +1 -1
- package/dist/components/GrPromptDialog/index.js +1 -1
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-BVmjKXcv.js → GrRadioGroup-7w4bXIg_.js} +1 -1
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-BVmjKXcv.js.map → GrRadioGroup-7w4bXIg_.js.map} +1 -1
- package/dist/components/GrRadioGroup/index.js +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CZONq8uT.js → GrResponseErrorBanner-BhP-xw2P.js} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CZONq8uT.js.map → GrResponseErrorBanner-BhP-xw2P.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CgfAwlg3.js → GrResponseErrorBanner-DA4q90Zt.js} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CgfAwlg3.js.map → GrResponseErrorBanner-DA4q90Zt.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/index.js +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-D1mjxF_O.js → GrSegmented-DKpo3cnC.js} +30 -5
- package/dist/components/GrSegmented/chunks/GrSegmented-DKpo3cnC.js.map +1 -0
- package/dist/components/GrSegmented/index.js +1 -1
- package/dist/components/GrSelect/chunks/{GrSelect-CaGuyvtb.js → GrSelect-BA1wfX3c.js} +19 -3
- package/dist/components/GrSelect/chunks/GrSelect-BA1wfX3c.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-D7WxRtIu.js → GrSidebar-DY-LgIbS.js} +2 -2
- package/dist/components/GrSidebar/chunks/{GrSidebar-D7WxRtIu.js.map → GrSidebar-DY-LgIbS.js.map} +1 -1
- package/dist/components/GrSidebar/index.js +2 -2
- package/dist/components/GrSlider/index.js +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-DPjxilmN.js → GrSortableList-BMXyxmRc.js} +3 -3
- package/dist/components/GrSortableList/chunks/{GrSortableList-DPjxilmN.js.map → GrSortableList-BMXyxmRc.js.map} +1 -1
- package/dist/components/GrSortableList/index.js +2 -2
- package/dist/components/GrStatistic/chunks/{GrStatistic-C7wQECeS.js → GrStatistic-BJQv5aOS.js} +41 -26
- package/dist/components/GrStatistic/chunks/GrStatistic-BJQv5aOS.js.map +1 -0
- package/dist/components/GrStatistic/index.js +2 -2
- package/dist/components/GrSteps/chunks/GrSteps-Cce4rfr3.js +282 -0
- package/dist/components/GrSteps/chunks/GrSteps-Cce4rfr3.js.map +1 -0
- package/dist/components/GrSteps/index.js +3 -0
- package/dist/components/GrSwitch/chunks/{GrSwitch-x_vQQ6ao.js → GrSwitch-CHiIj9GT.js} +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-x_vQQ6ao.js.map → GrSwitch-CHiIj9GT.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +2 -2
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-AJt1w1XC.js → GrTabPanels-BZQS8-JM.js} +12 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-AJt1w1XC.js.map → GrTabPanels-BZQS8-JM.js.map} +1 -1
- package/dist/components/GrTabPanels/index.js +1 -1
- package/dist/components/GrTimeline/chunks/{GrTimeline-Ch9sHzwL.js → GrTimeline-DIDdkTn7.js} +12 -1
- package/dist/components/GrTimeline/chunks/GrTimeline-DIDdkTn7.js.map +1 -0
- package/dist/components/GrTimeline/index.js +1 -1
- package/dist/components/GrToaster/chunks/{GrToaster-DJUzx3sR.js → GrToaster-CC49q3a4.js} +1 -1
- package/dist/components/GrToaster/chunks/{GrToaster-DJUzx3sR.js.map → GrToaster-CC49q3a4.js.map} +1 -1
- package/dist/components/GrToaster/index.js +1 -1
- package/dist/components/GrTree/chunks/{GrTree-BvOeQ3xJ.js.map → GrTree-J5q8aCya.js.map} +1 -1
- package/dist/components/GrTree/index.js +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-_LjTRR7X.js → GrTreeSelect-DEfxWAc3.js} +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-_LjTRR7X.js.map → GrTreeSelect-DEfxWAc3.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +1 -1
- package/dist/components/GrValue/chunks/GrValue-CZsuZ4x-.js +38 -0
- package/dist/components/GrValue/chunks/GrValue-CZsuZ4x-.js.map +1 -0
- package/dist/components/GrValue/index.js +3 -0
- package/dist/composables/useFloating.js +47 -7
- package/dist/composables/useFloating.js.map +1 -1
- package/dist/composables/useTheme.js.map +1 -1
- package/dist/composables/useToast.js.map +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/i18n/all.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.js +74 -62
- package/dist/styles/themes/dark.css +11 -6
- package/dist/styles/themes/light.css +5 -0
- package/dist/theme.js +1 -1
- package/dist/tokens.js +1 -1
- package/dist/types/components/GrBadge/grBadgeStyles.d.ts +7 -0
- package/dist/types/components/GrCard/GrCard.vue.d.ts +1 -1
- package/dist/types/components/GrCard/grCardStyles.d.ts +11 -0
- package/dist/types/components/GrChip/GrChip.vue.d.ts +118 -0
- package/dist/types/components/GrChip/config.d.ts +1 -0
- package/dist/types/components/GrChip/defaults.d.ts +16 -0
- package/dist/types/components/GrChip/grChipGroupContext.d.ts +52 -0
- package/dist/types/components/GrChip/grChipStyles.d.ts +64 -0
- package/dist/types/components/GrChip/index.d.ts +11 -0
- package/dist/types/components/GrChip/safelist.d.ts +7 -0
- package/dist/types/components/GrChipGroup/GrChipGroup.vue.d.ts +128 -0
- package/dist/types/components/GrChipGroup/config.d.ts +1 -0
- package/dist/types/components/GrChipGroup/defaults.d.ts +13 -0
- package/dist/types/components/GrChipGroup/grChipGroupStyles.d.ts +7 -0
- package/dist/types/components/GrChipGroup/index.d.ts +9 -0
- package/dist/types/components/GrChipGroup/safelist.d.ts +1 -0
- package/dist/types/components/GrContextMenu/GrContextMenu.vue.d.ts +157 -0
- package/dist/types/components/GrContextMenu/config.d.ts +1 -0
- package/dist/types/components/GrContextMenu/contextMenuAnchor.d.ts +29 -0
- package/dist/types/components/GrContextMenu/index.d.ts +7 -0
- package/dist/types/components/GrDataTable/GrDataTable.vue.d.ts +1 -1
- package/dist/types/components/GrDelta/grDeltaStyles.d.ts +13 -1
- package/dist/types/components/GrDescriptionList/grDescriptionListStyles.d.ts +29 -1
- package/dist/types/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +3 -3
- package/dist/types/components/GrDropdownMenu/GrDropdownMenuEntries.vue.d.ts +22 -0
- package/dist/types/components/GrFilePreview/GrFilePreview.vue.d.ts +1 -1
- package/dist/types/components/GrList/GrListItem.vue.d.ts +1 -1
- package/dist/types/components/GrPopover/GrPopover.vue.d.ts +21 -2
- package/dist/types/components/GrPopover/grPopoverStyles.d.ts +11 -1
- package/dist/types/components/GrPopover/index.d.ts +1 -1
- package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +6 -6
- package/dist/types/components/GrStatistic/grStatisticStyles.d.ts +9 -0
- package/dist/types/components/GrSteps/GrSteps.vue.d.ts +118 -0
- package/dist/types/components/GrSteps/config.d.ts +1 -0
- package/dist/types/components/GrSteps/defaults.d.ts +18 -0
- package/dist/types/components/GrSteps/grStepsStyles.d.ts +63 -0
- package/dist/types/components/GrSteps/index.d.ts +11 -0
- package/dist/types/components/GrSteps/safelist.d.ts +1 -0
- package/dist/types/components/GrSteps/stepsModel.d.ts +57 -0
- package/dist/types/components/GrValue/GrValue.vue.d.ts +51 -0
- package/dist/types/components/GrValue/config.d.ts +1 -0
- package/dist/types/components/GrValue/grValueStyles.d.ts +34 -0
- package/dist/types/components/GrValue/index.d.ts +5 -0
- package/dist/types/components/GrValue/safelist.d.ts +1 -0
- package/dist/types/components/shared/truncationTitle.d.ts +16 -0
- package/dist/types/composables/internal/useMenuItemsFocus.d.ts +24 -0
- package/dist/types/composables/internal/useTypeahead.d.ts +30 -0
- package/dist/types/composables/useFloating.d.ts +33 -2
- package/dist/types/granular-provider/shared.d.ts +5 -0
- package/dist/types/i18n/messages/en.d.ts +26 -0
- package/dist/types/i18n/messages/es.d.ts +26 -0
- package/dist/types/i18n/messages/ru.d.ts +26 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/web-types.json +799 -195
- package/package.json +22 -2
- package/tokens/themes/dark.json +26 -6
- package/tokens/themes/light.json +20 -0
- package/dist/chunks/config-BSyiFlbi.js.map +0 -1
- package/dist/chunks/config-Be9k9bOf.js.map +0 -1
- package/dist/chunks/config-BfsBepkH2.js.map +0 -1
- package/dist/chunks/config-Bm_Sovla.js.map +0 -1
- package/dist/chunks/config-BoNR7_PD2.js.map +0 -1
- package/dist/chunks/config-BuGlNPE9.js.map +0 -1
- package/dist/chunks/config-C5mO5DYZ.js.map +0 -1
- package/dist/chunks/config-DAX8Deh12.js.map +0 -1
- package/dist/chunks/config-DBQQT-WP.js.map +0 -1
- package/dist/chunks/config-DCwQBMmJ.js.map +0 -1
- package/dist/chunks/config-T3qdQBgU2.js.map +0 -1
- package/dist/chunks/config-qVg3Zz_A.js.map +0 -1
- package/dist/chunks/config-zjeAJ4ho.js.map +0 -1
- package/dist/chunks/context-BfIQv7m1.js.map +0 -1
- package/dist/chunks/en-DCCFP4qu.js.map +0 -1
- package/dist/chunks/es-CT34HBVM.js.map +0 -1
- package/dist/chunks/grPopoverStyles-Rz_Z5nLW.js.map +0 -1
- package/dist/chunks/granular-provider-CQKhl5C_.js.map +0 -1
- package/dist/chunks/ru-CLiAMwrx.js.map +0 -1
- package/dist/components/GrCard/chunks/GrCard-Bc7nRfbe.js.map +0 -1
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-BFcMf4Pn.js.map +0 -1
- package/dist/components/GrConfigProvider/chunks/GrConfigProvider-UP-EaoAf.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-B5MmZFUg.js.map +0 -1
- package/dist/components/GrDelta/chunks/GrDelta-DFvxNpmN.js.map +0 -1
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-2zFXzX83.js.map +0 -1
- package/dist/components/GrDialogService/chunks/GrDialogService-CrwA4aJq.js.map +0 -1
- package/dist/components/GrDrawer/chunks/GrDrawer-C3zAg2tG.js.map +0 -1
- package/dist/components/GrDropdown/chunks/GrDropdown-BSfFOcDx.js.map +0 -1
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-DyS6dWDp.js.map +0 -1
- package/dist/components/GrFileUpload/chunks/GrFileUpload-D3-vC-ap.js.map +0 -1
- package/dist/components/GrFormField/chunks/GrFormField-kqfVY30N.js.map +0 -1
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-DFUppRNb.js.map +0 -1
- package/dist/components/GrList/chunks/GrList-BRYhpqIe.js.map +0 -1
- package/dist/components/GrLoading/chunks/GrLoading-C3DZSSuh.js.map +0 -1
- package/dist/components/GrModal/chunks/GrModal-CPz7SWD_.js.map +0 -1
- package/dist/components/GrPopover/chunks/GrPopover-b70bIlQ9.js.map +0 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-D1mjxF_O.js.map +0 -1
- package/dist/components/GrSelect/chunks/GrSelect-CaGuyvtb.js.map +0 -1
- package/dist/components/GrStatistic/chunks/GrStatistic-C7wQECeS.js.map +0 -1
- package/dist/components/GrTimeline/chunks/GrTimeline-Ch9sHzwL.js.map +0 -1
- package/dist/chunks/{config-BfsBepkH2.js → config-BfsBepkH.js} +0 -0
- package/dist/chunks/{config-BoNR7_PD2.js → config-BoNR7_PD.js} +0 -0
- package/dist/chunks/{config-BuGlNPE9.js → config-BuGlNPE92.js} +0 -0
- package/dist/chunks/{config-DAX8Deh12.js → config-DAX8Deh1.js} +0 -0
- package/dist/chunks/{config-T3qdQBgU2.js → config-T3qdQBgU.js} +0 -0
- package/dist/chunks/{config-zjeAJ4ho.js → config-zjeAJ4ho2.js} +0 -0
- package/dist/chunks/{context-BfIQv7m1.js → context-BfIQv7m12.js} +0 -0
- package/dist/components/GrTree/chunks/{GrTree-BvOeQ3xJ.js → GrTree-J5q8aCya.js} +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTheme.js","names":[],"sources":["../../src/composables/useTheme.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, ref } from 'vue'\nimport type { App, InjectionKey, Ref } from 'vue'\n\nexport type ThemeName = 'light' | 'dark'\n\nexport type UseThemeOptions = {\n /**\n * Ключ для хранения выбранной темы в localStorage.\n * По умолчанию: `gr-theme`.\n */\n storageKey?: string\n\n /**\n * Если `false` — не читать/не писать localStorage (полезно для SSR/embedded сценариев).\n * По умолчанию: `true`.\n */\n persist?: boolean\n\n /**\n * Куда писать `data-theme`. По умолчанию — `<html>` (канон одного приложения).\n *\n * Геттер, а не элемент: на момент `app.use(...)` корень приложения ещё не\n * смонтирован. Обязателен нескольким приложениям с независимыми темами:\n * селектор тем атрибутный (`[data-theme='dark']`), поэтому тема работает от\n * любого контейнера, а без `target` все приложения писали бы в один `<html>`\n * и побеждал бы последний.\n */\n target?: () => HTMLElement | null\n}\n\nconst DEFAULT_STORAGE_KEY = 'gr-theme'\nconst IS_SERVER = typeof window === 'undefined'\n\nfunction readStoredTheme(storageKey: string, persist: boolean): ThemeName | null {\n if (typeof window === 'undefined' || !persist) return null\n\n // Доступ к `localStorage` может бросать `SecurityError` в Safari private mode\n // и при отключённых cookies/storage — поэтому оборачиваем в try/catch.\n try {\n const storage = window.localStorage\n if (typeof storage?.getItem !== 'function') return null\n\n const stored = storage.getItem(storageKey)\n if (stored === 'light' || stored === 'dark') return stored\n }\n catch {\n // ignore\n }\n\n return null\n}\n\nfunction getSystemTheme(): ThemeName {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light'\n}\n\nfunction getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true): ThemeName {\n return readStoredTheme(storageKey, persist) ?? getSystemTheme()\n}\n\nfunction applyTheme(theme: ThemeName, target?: () => HTMLElement | null) {\n if (typeof document === 'undefined') return\n\n // Канон GR — атрибут `[data-theme]`: на `<html>` (см. docs/styling.md →\n // «Темизация») либо на корне приложения, когда состояние задало `target`.\n // `useTheme`/`initThemeEarly` — единственный рантайм-API переключения темы.\n const root = target?.() ?? document.documentElement\n root.dataset.theme = theme\n}\n\n/**\n * Состояние темы одного приложения.\n *\n * `theme` общий для всех вызовов `useTheme()` внутри приложения: свой `ref` на\n * вызов означал бы, что переключение темы в одном компоненте не трогает\n * `theme`/`isDark` в другом — менялся бы только DOM-атрибут, а реактивные\n * потребители разъехались бы.\n */\ntype ThemeState = {\n theme: Ref<ThemeName>\n storageKey: string\n persist: boolean\n /** Корень, получающий `data-theme`; не задан — `<html>`. */\n target?: () => HTMLElement | null\n listenersBound: boolean\n /**\n * Снимает window-слушатели состояния. Появляется после `bindListeners`;\n * зовёт `app.onUnmount` у app-scoped состояний — модульный синглтон живёт со\n * страницей, и снимать его незачем.\n */\n teardownListeners?: () => void\n /** Разрешена ли мутация — см. `resolveThemeState`. */\n writable: boolean\n}\n\nfunction createThemeState(options: UseThemeOptions = {}, writable = true): ThemeState {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n\n return {\n theme: ref<ThemeName>(getPreferredTheme(storageKey, persist)),\n storageKey,\n persist,\n target: options.target,\n listenersBound: false,\n writable,\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния темы (устанавливает плагин ниже). */\nexport const GRANULARITY_THEME_STATE: InjectionKey<ThemeState> = Symbol.for('@feugene/granularity/theme-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное состояние темы через\n * `app.provide`. Обязателен для (а) SSR, если приложение переключает тему на\n * сервере — иначе тема одного запроса уедет в ответ следующему, — и (б)\n * нескольких Vue-приложений на одной странице, которым нужны независимые темы.\n *\n * Для (б) обязателен и `target` — корень, получающий `data-theme`: без него\n * изолировано только состояние, а атрибут все приложения пишут в один `<html>`,\n * и побеждает последний.\n *\n * ```ts\n * app.use(granularityThemePlugin)\n * app.use(granularityThemePlugin, {\n * storageKey: 'admin-theme',\n * persist: false,\n * target: () => document.getElementById('admin-app'),\n * })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedThemeProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityThemePlugin = {\n install(app: App, options: UseThemeOptions = {}) {\n appScopedThemeProvided = true\n const state = createThemeState(options)\n app.provide(GRANULARITY_THEME_STATE, state)\n // Слушатели `storage`/`prefers-color-scheme` держат состояние; без снятия\n // каждый цикл mount/unmount микрофронтенда копил бы их на window навсегда.\n app.onUnmount(() => state.teardownListeners?.())\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleThemeState: ThemeState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetThemeContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveThemeState(options: UseThemeOptions): ThemeState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useTheme())` — `hasInjectionContext` покрывает оба.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_THEME_STATE, null)\n if (provided) return provided\n }\n\n // На сервере без плагина модульное состояние текло бы между запросами. Но\n // читать тему на сервере — нормальный сценарий (шаблон смотрит `isDark`), и\n // ронять на нём весь рендер нельзя: отдаём состояние на один вызов и запрещаем\n // мутацию — течёт именно она.\n if (IS_SERVER) return createThemeState(options, false)\n\n // Дедуп и текст — инлайном под dev-гардом: бандлер потребителя сворачивает\n // условие в `false` и выкидывает сообщение из продакшн-сборки.\n if (\n appScopedThemeProvided && !contextFallbackWarned\n && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production'\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useTheme() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityThemePlugin недоступно, использован модульный синглтон. '\n + 'Оберните вызов: app.runWithContext(() => useTheme()).',\n )\n }\n\n if (!moduleThemeState)\n moduleThemeState = createThemeState(options)\n\n return moduleThemeState\n}\n\n// Подписки на системную тему и синхронизацию между вкладками. Привязаны к\n// состоянию, а не к модулю: у каждого приложения своё. Одна подписка на\n// состояние, а не на потребителя, — `onScopeDispose` здесь был бы вреден, он\n// порвал бы общую подписку при размонтировании одного из них.\nfunction bindListeners(state: ThemeState) {\n if (state.listenersBound || typeof window === 'undefined') return\n state.listenersBound = true\n\n // Cross-tab: другая вкладка записала тему в localStorage.\n const onStorage = (event: StorageEvent): void => {\n if (!state.persist || event.key !== state.storageKey) return\n if (event.newValue === 'light' || event.newValue === 'dark') {\n state.theme.value = event.newValue\n applyTheme(event.newValue, state.target)\n }\n }\n window.addEventListener?.('storage', onStorage)\n\n // Системная смена `prefers-color-scheme` — следуем ей только если пользователь\n // НЕ выбрал тему явно (в storage ничего не сохранено).\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)')\n const onSchemeChange = (event: MediaQueryListEvent): void => {\n if (readStoredTheme(state.storageKey, state.persist) !== null) return\n const next: ThemeName = event.matches ? 'dark' : 'light'\n state.theme.value = next\n applyTheme(next, state.target)\n }\n mql?.addEventListener?.('change', onSchemeChange)\n\n state.teardownListeners = () => {\n window.removeEventListener?.('storage', onStorage)\n mql?.removeEventListener?.('change', onSchemeChange)\n state.listenersBound = false\n state.teardownListeners = undefined\n }\n}\n\n/**\n * Для применения темы максимально рано (до монтирования Vue), чтобы избежать \"мигания\".\n * Также сидирует модульное состояние, чтобы значение в `useTheme()` совпадало с уже\n * применённым к документу.\n *\n * Функция клиентская: её зовут из браузерной точки входа до создания приложения,\n * то есть app-scoped состояние инжектить там ещё неоткуда. Расхождения с плагином\n * это не даёт — оба сидируются из одного `localStorage`.\n */\nexport function initThemeEarly(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n const preferred = getPreferredTheme(storageKey, persist)\n\n moduleThemeState ??= createThemeState(options)\n moduleThemeState.storageKey = storageKey\n moduleThemeState.persist = persist\n moduleThemeState.theme.value = preferred\n\n applyTheme(preferred)\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const state = resolveThemeState(options)\n\n // Опции вызова уточняют состояние — тот же приём, что был у модульного\n // синглтона: слушателям нужно знать, какой ключ отслеживать.\n if (options.storageKey !== undefined) state.storageKey = options.storageKey\n if (options.persist !== undefined) state.persist = options.persist\n if (options.target !== undefined) state.target = options.target\n\n bindListeners(state)\n\n const theme = state.theme\n const isDark = computed(() => theme.value === 'dark')\n\n function setTheme(next: ThemeName) {\n if (!state.writable) {\n throw new Error(\n '[granularity] useTheme: setTheme/toggleTheme require `app.use(granularityThemePlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side, so a theme set by one request would leak into '\n + 'the next response. Reading `theme`/`isDark` on the server works without the plugin.',\n )\n }\n\n theme.value = next\n applyTheme(next, state.target)\n\n if (state.persist && typeof window !== 'undefined') {\n // См. комментарий в `readStoredTheme`: запись тоже может бросать.\n try {\n const storage = window.localStorage\n if (typeof storage?.setItem === 'function')\n storage.setItem(state.storageKey, next)\n }\n catch {\n // ignore\n }\n }\n }\n\n function toggleTheme() {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n }\n\n function initTheme() {\n applyTheme(theme.value, state.target)\n }\n\n return {\n theme,\n isDark,\n setTheme,\n toggleTheme,\n initTheme,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTheme.js","names":[],"sources":["../../src/composables/useTheme.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, ref } from 'vue'\nimport type { App, InjectionKey, Ref } from 'vue'\n\nexport type ThemeName = 'light' | 'dark'\n\nexport type UseThemeOptions = {\n /**\n * Ключ для хранения выбранной темы в localStorage.\n * По умолчанию: `gr-theme`.\n */\n storageKey?: string\n\n /**\n * Если `false` — не читать/не писать localStorage (полезно для SSR/embedded сценариев).\n * По умолчанию: `true`.\n */\n persist?: boolean\n\n /**\n * Куда писать `data-theme`. По умолчанию — `<html>` (канон одного приложения).\n *\n * Геттер, а не элемент: на момент `app.use(...)` корень приложения ещё не\n * смонтирован. Обязателен нескольким приложениям с независимыми темами:\n * селектор тем атрибутный (`[data-theme='dark']`), поэтому тема работает от\n * любого контейнера, а без `target` все приложения писали бы в один `<html>`\n * и побеждал бы последний.\n */\n target?: () => HTMLElement | null\n}\n\nconst DEFAULT_STORAGE_KEY = 'gr-theme'\nconst IS_SERVER = typeof window === 'undefined'\n\nfunction readStoredTheme(storageKey: string, persist: boolean): ThemeName | null {\n if (typeof window === 'undefined' || !persist) return null\n\n // Доступ к `localStorage` может бросать `SecurityError` в Safari private mode\n // и при отключённых cookies/storage — поэтому оборачиваем в try/catch.\n try {\n const storage = window.localStorage\n if (typeof storage?.getItem !== 'function') return null\n\n const stored = storage.getItem(storageKey)\n if (stored === 'light' || stored === 'dark') return stored\n }\n catch {\n // ignore\n }\n\n return null\n}\n\nfunction getSystemTheme(): ThemeName {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ? 'dark' : 'light'\n}\n\nfunction getPreferredTheme(storageKey = DEFAULT_STORAGE_KEY, persist = true): ThemeName {\n return readStoredTheme(storageKey, persist) ?? getSystemTheme()\n}\n\nfunction applyTheme(theme: ThemeName, target?: () => HTMLElement | null) {\n if (typeof document === 'undefined') return\n\n // Канон GR — атрибут `[data-theme]`: на `<html>` (см. docs/styling.md →\n // «Темизация») либо на корне приложения, когда состояние задало `target`.\n // `useTheme`/`initThemeEarly` — единственный рантайм-API переключения темы.\n const root = target?.() ?? document.documentElement\n root.dataset.theme = theme\n}\n\n/**\n * Состояние темы одного приложения.\n *\n * `theme` общий для всех вызовов `useTheme()` внутри приложения: свой `ref` на\n * вызов означал бы, что переключение темы в одном компоненте не трогает\n * `theme`/`isDark` в другом — менялся бы только DOM-атрибут, а реактивные\n * потребители разъехались бы.\n */\ntype ThemeState = {\n theme: Ref<ThemeName>\n storageKey: string\n persist: boolean\n /** Корень, получающий `data-theme`; не задан — `<html>`. */\n target?: () => HTMLElement | null\n listenersBound: boolean\n /**\n * Снимает window-слушатели состояния. Появляется после `bindListeners`;\n * зовёт `app.onUnmount` у app-scoped состояний — модульный синглтон живёт со\n * страницей, и снимать его незачем.\n */\n teardownListeners?: () => void\n /** Разрешена ли мутация — см. `resolveThemeState`. */\n writable: boolean\n}\n\nfunction createThemeState(options: UseThemeOptions = {}, writable = true): ThemeState {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n\n return {\n theme: ref<ThemeName>(getPreferredTheme(storageKey, persist)),\n storageKey,\n persist,\n target: options.target,\n listenersBound: false,\n writable,\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния темы (устанавливает плагин ниже). */\nexport const GRANULARITY_THEME_STATE: InjectionKey<ThemeState> = Symbol.for('@feugene/granularity/theme-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное состояние темы через\n * `app.provide`. Обязателен для (а) SSR, если приложение переключает тему на\n * сервере — иначе тема одного запроса уедет в ответ следующему, — и (б)\n * нескольких Vue-приложений на одной странице, которым нужны независимые темы.\n *\n * Для (б) обязателен и `target` — корень, получающий `data-theme`: без него\n * изолировано только состояние, а атрибут все приложения пишут в один `<html>`,\n * и побеждает последний.\n *\n * ```ts\n * app.use(granularityThemePlugin)\n * app.use(granularityThemePlugin, {\n * storageKey: 'admin-theme',\n * persist: false,\n * target: () => document.getElementById('admin-app'),\n * })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedThemeProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityThemePlugin = {\n install(app: App, options: UseThemeOptions = {}) {\n appScopedThemeProvided = true\n const state = createThemeState(options)\n app.provide(GRANULARITY_THEME_STATE, state)\n // Слушатели `storage`/`prefers-color-scheme` держат состояние; без снятия\n // каждый цикл mount/unmount микрофронтенда копил бы их на window навсегда.\n app.onUnmount(() => state.teardownListeners?.())\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleThemeState: ThemeState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetThemeContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveThemeState(options: UseThemeOptions): ThemeState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useTheme())` — `hasInjectionContext` покрывает оба.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_THEME_STATE, null)\n if (provided) return provided\n }\n\n // На сервере без плагина модульное состояние текло бы между запросами. Но\n // читать тему на сервере — нормальный сценарий (шаблон смотрит `isDark`), и\n // ронять на нём весь рендер нельзя: отдаём состояние на один вызов и запрещаем\n // мутацию — течёт именно она.\n if (IS_SERVER) return createThemeState(options, false)\n\n // Дедуп и текст — прямо под гардом: `__GR_DEV__` разворачивается в условие\n // на сборке, и у потребителя вся ветка выкидывается вместе с сообщением.\n if (\n appScopedThemeProvided && !contextFallbackWarned\n && __GR_DEV__\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useTheme() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityThemePlugin недоступно, использован модульный синглтон. '\n + 'Оберните вызов: app.runWithContext(() => useTheme()).',\n )\n }\n\n if (!moduleThemeState)\n moduleThemeState = createThemeState(options)\n\n return moduleThemeState\n}\n\n// Подписки на системную тему и синхронизацию между вкладками. Привязаны к\n// состоянию, а не к модулю: у каждого приложения своё. Одна подписка на\n// состояние, а не на потребителя, — `onScopeDispose` здесь был бы вреден, он\n// порвал бы общую подписку при размонтировании одного из них.\nfunction bindListeners(state: ThemeState) {\n if (state.listenersBound || typeof window === 'undefined') return\n state.listenersBound = true\n\n // Cross-tab: другая вкладка записала тему в localStorage.\n const onStorage = (event: StorageEvent): void => {\n if (!state.persist || event.key !== state.storageKey) return\n if (event.newValue === 'light' || event.newValue === 'dark') {\n state.theme.value = event.newValue\n applyTheme(event.newValue, state.target)\n }\n }\n window.addEventListener?.('storage', onStorage)\n\n // Системная смена `prefers-color-scheme` — следуем ей только если пользователь\n // НЕ выбрал тему явно (в storage ничего не сохранено).\n const mql = window.matchMedia?.('(prefers-color-scheme: dark)')\n const onSchemeChange = (event: MediaQueryListEvent): void => {\n if (readStoredTheme(state.storageKey, state.persist) !== null) return\n const next: ThemeName = event.matches ? 'dark' : 'light'\n state.theme.value = next\n applyTheme(next, state.target)\n }\n mql?.addEventListener?.('change', onSchemeChange)\n\n state.teardownListeners = () => {\n window.removeEventListener?.('storage', onStorage)\n mql?.removeEventListener?.('change', onSchemeChange)\n state.listenersBound = false\n state.teardownListeners = undefined\n }\n}\n\n/**\n * Для применения темы максимально рано (до монтирования Vue), чтобы избежать \"мигания\".\n * Также сидирует модульное состояние, чтобы значение в `useTheme()` совпадало с уже\n * применённым к документу.\n *\n * Функция клиентская: её зовут из браузерной точки входа до создания приложения,\n * то есть app-scoped состояние инжектить там ещё неоткуда. Расхождения с плагином\n * это не даёт — оба сидируются из одного `localStorage`.\n */\nexport function initThemeEarly(options: UseThemeOptions = {}) {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY\n const persist = options.persist ?? true\n const preferred = getPreferredTheme(storageKey, persist)\n\n moduleThemeState ??= createThemeState(options)\n moduleThemeState.storageKey = storageKey\n moduleThemeState.persist = persist\n moduleThemeState.theme.value = preferred\n\n applyTheme(preferred)\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const state = resolveThemeState(options)\n\n // Опции вызова уточняют состояние — тот же приём, что был у модульного\n // синглтона: слушателям нужно знать, какой ключ отслеживать.\n if (options.storageKey !== undefined) state.storageKey = options.storageKey\n if (options.persist !== undefined) state.persist = options.persist\n if (options.target !== undefined) state.target = options.target\n\n bindListeners(state)\n\n const theme = state.theme\n const isDark = computed(() => theme.value === 'dark')\n\n function setTheme(next: ThemeName) {\n if (!state.writable) {\n throw new Error(\n '[granularity] useTheme: setTheme/toggleTheme require `app.use(granularityThemePlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side, so a theme set by one request would leak into '\n + 'the next response. Reading `theme`/`isDark` on the server works without the plugin.',\n )\n }\n\n theme.value = next\n applyTheme(next, state.target)\n\n if (state.persist && typeof window !== 'undefined') {\n // См. комментарий в `readStoredTheme`: запись тоже может бросать.\n try {\n const storage = window.localStorage\n if (typeof storage?.setItem === 'function')\n storage.setItem(state.storageKey, next)\n }\n catch {\n // ignore\n }\n }\n }\n\n function toggleTheme() {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n }\n\n function initTheme() {\n applyTheme(theme.value, state.target)\n }\n\n return {\n theme,\n isDark,\n setTheme,\n toggleTheme,\n initTheme,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, reactive } from 'vue'\nimport type { App, InjectionKey } from 'vue'\n\nimport type { GrButtonSize, GrButtonVariant } from '../components/GrButton/grButtonStyles'\nimport type { GrTone } from '../components/shared/tones'\n\nexport type GrToastTone = GrTone\n\n/**\n * Опциональная action-кнопка тоста: `label` — текст, `onClick` — обработчик.\n * По клику вызывается `onClick`, затем тост закрывается (если `dismissOnClick`\n * не установлен в `false`). `size`/`variant` настраивают вид кнопки.\n */\nexport type ToastAction = {\n label: string\n onClick: () => void\n /** Закрывать ли тост после клика по действию. По умолчанию `true`. */\n dismissOnClick?: boolean\n /** Размер кнопки действия. По умолчанию `sm`. */\n size?: GrButtonSize\n /** Вариант кнопки действия. По умолчанию `outline`. */\n variant?: GrButtonVariant\n}\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n /** Одна action-кнопка в теле тоста (шорткат для `actions: [action]`). */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. Рендерятся после `action`. */\n actions?: ToastAction[]\n /**\n * Схлопывать повтор: `push` с уже занятым ключом обновляет **живой** тост\n * и перезапускает его автозакрытие вместо того, чтобы завести второй.\n *\n * Ключ действует только пока тост на экране. Это не то же самое, что помнить\n * последнее показанное: повтор действия с тем же текстом обязан показаться\n * снова, иначе второе «Сохранено» пропадёт молча.\n */\n dedupeKey?: string\n}\n\n/**\n * Сообщения для `promise`. Строка — шорткат для `{ title }`; функция получает\n * результат промиса (или причину отказа), чтобы подставить его в текст.\n */\nexport type ToastPromiseMessages<T> = {\n loading: string | ToastInput\n success: string | ToastInput | ((value: T) => string | ToastInput)\n error: string | ToastInput | ((reason: unknown) => string | ToastInput)\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n /** Исходный таймаут автозакрытия, мс (`0` — без автозакрытия). Нужен для progress-бара. */\n timeoutMs: number\n /** Одна action-кнопка в теле тоста. */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. */\n actions?: ToastAction[]\n /** Ключ схлопывания повторов, если тост создан с ним. */\n dedupeKey?: string\n}\n\nconst DEFAULT_TIMEOUT_MS = 3500\nconst IS_SERVER = typeof window === 'undefined'\n\n// Метаданные таймера автозакрытия с поддержкой pause/resume (WCAG 2.2.1: под\n// курсором/фокусом отсчёт должен останавливаться).\ntype ToastTimer = {\n handle: number | null\n /** Сколько мс осталось до автозакрытия на момент последней паузы/старта. */\n remaining: number\n /** `performance.now()` момента запуска текущего отрезка (для вычисления остатка). */\n startedAt: number\n}\n\nexport type ToastState = {\n toasts: Toast[]\n timers: Map<string, ToastTimer>\n /** Потолок очереди: сверх него самые старые тосты вытесняются. */\n maxToasts: number\n}\n\n/**\n * Потолок очереди по умолчанию. `maxVisible` у `GrToaster` режет только видимые,\n * поэтому без него поток событий (переподключение сокета, цикл ошибок) копил бы\n * очередь и вываливал её на пользователя, когда стек освободится.\n */\nconst DEFAULT_MAX_TOASTS = 20\n\nexport type GranularityToastPluginOptions = {\n /** Потолок очереди. По умолчанию `20`. */\n maxToasts?: number\n}\n\nfunction createToastState(maxToasts = DEFAULT_MAX_TOASTS): ToastState {\n return {\n toasts: reactive<Toast[]>([]),\n timers: new Map<string, ToastTimer>(),\n maxToasts: Math.max(1, Math.trunc(maxToasts)),\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния тостов (устанавливает плагин ниже). */\nexport const GRANULARITY_TOAST_STATE: InjectionKey<ToastState> = Symbol.for('@feugene/granularity/toast-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное изолированное состояние тостов\n * через `app.provide`. Обязателен для (а) нескольких Vue-приложений на одной\n * странице (микрофронтенды — иначе делят один стек тостов) и (б) SSR (иначе\n * модульное состояние течёт между запросами).\n *\n * ```ts\n * app.use(granularityToastPlugin)\n * app.use(granularityToastPlugin, { maxToasts: 50 })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedToastProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityToastPlugin = {\n install(app: App, options: GranularityToastPluginOptions = {}) {\n appScopedToastProvided = true\n app.provide(GRANULARITY_TOAST_STATE, createToastState(options.maxToasts))\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleToastState: ToastState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetToastContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveToastState(): ToastState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useToast())` — `hasInjectionContext` покрывает оба,\n // поэтому вызов из router guard / интерцептора достаёт состояние приложения.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_TOAST_STATE, null)\n if (provided) return provided\n }\n\n // В SSR модульный фолбэк запрещён: одно mutable-состояние на модуль утекало бы\n // между запросами. Требуем установленный плагин (app.provide).\n if (IS_SERVER) {\n throw new Error(\n '[granularity] useToast requires `app.use(granularityToastPlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side to avoid state leaking between requests.',\n )\n }\n\n // Дедуп и текст — инлайном под dev-гардом: бандлер потребителя сворачивает\n // условие в `false` и выкидывает сообщение из продакшн-сборки.\n if (\n appScopedToastProvided && !contextFallbackWarned\n && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production'\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useToast() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityToastPlugin недоступно, использован модульный синглтон — эти тосты не попадут '\n + 'в GrToaster приложения. Оберните вызов: app.runWithContext(() => useToast()).',\n )\n }\n\n if (!moduleToastState)\n moduleToastState = createToastState()\n\n return moduleToastState\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nexport function useToast() {\n const state = resolveToastState()\n const list = computed(() => state.toasts)\n\n function armTimer(id: string, timer: ToastTimer): void {\n if (timer.remaining <= 0 || typeof window === 'undefined') return\n timer.startedAt = now()\n timer.handle = window.setTimeout(() => {\n state.timers.delete(id)\n dismiss(id)\n }, timer.remaining)\n }\n\n function clearTimer(id: string): void {\n const timer = state.timers.get(id)\n if (timer?.handle != null) {\n clearTimeout(timer.handle)\n timer.handle = null\n }\n state.timers.delete(id)\n }\n\n function push(input: ToastInput): string {\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n\n // Схлопывание ищет тост только среди живых. Помнить последний показанный\n // ключ нельзя: тогда повтор того же действия («Сохранено» второй раз)\n // не показался бы вообще — тост уже ушёл, а ключ ещё занят.\n if (input.dedupeKey !== undefined) {\n const existing = state.toasts.find(item => item.dedupeKey === input.dedupeKey)\n if (existing) {\n // Замена целиком, а не патч: повторный `push` — это законченное\n // высказывание, и `message` от прошлого раза донашивать он не должен.\n applyStage(existing.id, { ...input, tone: input.tone ?? 'info', timeoutMs: timeout })\n return existing.id\n }\n }\n\n const id = makeId()\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n timeoutMs: timeout > 0 ? timeout : 0,\n action: input.action,\n actions: input.actions,\n dedupeKey: input.dedupeKey,\n }\n\n state.toasts.unshift(toast)\n trimQueue()\n\n if (toast.timeoutMs > 0) {\n const timer: ToastTimer = { handle: null, remaining: toast.timeoutMs, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return id\n }\n\n // Вытесняем с хвоста — там самые старые: при потоке событий устаревшее\n // уведомление менее ценно, чем свежее. Таймеры снимаем, иначе остались бы\n // висящие `setTimeout` на тосты, которых больше нет.\n //\n // Это флуд-защита уровня состояния, а не очередь показа (`GrToaster` держит\n // видимыми старейших): при переполнении потолка вытеснен может быть и тост,\n // который сейчас на экране, — осознанный компромисс.\n function trimQueue(): void {\n while (state.toasts.length > state.maxToasts) {\n const dropped = state.toasts.pop()\n if (dropped)\n clearTimer(dropped.id)\n }\n }\n\n /**\n * Меняет показанный тост на месте. `timeoutMs` в патче перезапускает таймер\n * (`0` — снова «навсегда»), поэтому «вечный» loading может стать\n * самозакрывающимся success.\n *\n * Возвращает `false`, если тоста уже нет: пользователь мог закрыть его руками,\n * и воскрешать его нельзя.\n */\n function update(id: string, patch: Partial<ToastInput>): boolean {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return false\n\n if (patch.title !== undefined) toast.title = patch.title\n if (patch.message !== undefined) toast.message = patch.message\n if (patch.tone !== undefined) toast.tone = patch.tone\n if (patch.action !== undefined) toast.action = patch.action\n if (patch.actions !== undefined) toast.actions = patch.actions\n\n if (patch.timeoutMs !== undefined)\n toast.timeoutMs = rearmTimer(id, patch.timeoutMs)\n\n return true\n }\n\n /** Перезапускает автозакрытие с нового таймаута; `0` и меньше — «навсегда». */\n function rearmTimer(id: string, timeoutMs: number): number {\n clearTimer(id)\n const next = timeoutMs > 0 ? timeoutMs : 0\n\n if (next > 0) {\n const timer: ToastTimer = { handle: null, remaining: next, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return next\n }\n\n /**\n * Полная замена стадии для `promise()`. В отличие от `update`, поле без\n * значения очищается: успех не должен донашивать `message` и action-кнопки\n * загрузки — патч-семантика оставляла бы их в тосте навсегда.\n */\n function applyStage(id: string, stage: ToastInput & { tone: GrToastTone, timeoutMs: number }): void {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return\n\n toast.title = stage.title\n toast.message = stage.message\n toast.tone = stage.tone\n toast.action = stage.action\n toast.actions = stage.actions\n toast.timeoutMs = rearmTimer(id, stage.timeoutMs)\n }\n\n /**\n * Один тост на весь жизненный цикл промиса: «загружаем» переписывается в\n * успех или ошибку, а не закрывается ради нового — стек не дёргается.\n *\n * Каждая стадия **заменяет** предыдущую целиком: поле, не заданное в\n * success/error, очищается, а не наследуется от loading.\n *\n * Возвращает исходный промис и **не глотает отказ**: тост не заменяет\n * обработку ошибки, вызывающий по-прежнему обязан её обработать.\n */\n function promise<T>(input: Promise<T>, messages: ToastPromiseMessages<T>): Promise<T> {\n const id = push({ tone: 'info', ...toToastInput(messages.loading), timeoutMs: 0 })\n\n input.then(\n (value) => {\n const stage = resolveMessage(messages.success, value)\n applyStage(id, { ...stage, tone: stage.tone ?? 'success', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n (reason: unknown) => {\n const stage = resolveMessage(messages.error, reason)\n applyStage(id, { ...stage, tone: stage.tone ?? 'danger', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n )\n\n return input\n }\n\n /** Останавливает отсчёт автозакрытия, сохраняя остаток (идемпотентно). */\n function pause(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle == null) return\n\n clearTimeout(timer.handle)\n timer.handle = null\n timer.remaining = Math.max(0, timer.remaining - (now() - timer.startedAt))\n }\n\n /** Возобновляет отсчёт с сохранённого остатка (идемпотентно). */\n function resume(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle != null) return\n\n armTimer(id, timer)\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = state.toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n state.toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of [...state.timers.keys()]) clearTimer(id)\n state.toasts.splice(0, state.toasts.length)\n }\n\n return {\n list,\n push,\n update,\n promise,\n dismiss,\n clear,\n pause,\n resume,\n }\n}\n\nfunction toToastInput(message: string | ToastInput): ToastInput {\n return typeof message === 'string' ? { title: message } : message\n}\n\nfunction resolveMessage<T>(\n message: string | ToastInput | ((value: T) => string | ToastInput),\n value: T,\n): ToastInput {\n return toToastInput(typeof message === 'function' ? message(value) : message)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, hasInjectionContext, inject, reactive } from 'vue'\nimport type { App, InjectionKey } from 'vue'\n\nimport type { GrButtonSize, GrButtonVariant } from '../components/GrButton/grButtonStyles'\nimport type { GrTone } from '../components/shared/tones'\n\nexport type GrToastTone = GrTone\n\n/**\n * Опциональная action-кнопка тоста: `label` — текст, `onClick` — обработчик.\n * По клику вызывается `onClick`, затем тост закрывается (если `dismissOnClick`\n * не установлен в `false`). `size`/`variant` настраивают вид кнопки.\n */\nexport type ToastAction = {\n label: string\n onClick: () => void\n /** Закрывать ли тост после клика по действию. По умолчанию `true`. */\n dismissOnClick?: boolean\n /** Размер кнопки действия. По умолчанию `sm`. */\n size?: GrButtonSize\n /** Вариант кнопки действия. По умолчанию `outline`. */\n variant?: GrButtonVariant\n}\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n /** Одна action-кнопка в теле тоста (шорткат для `actions: [action]`). */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. Рендерятся после `action`. */\n actions?: ToastAction[]\n /**\n * Схлопывать повтор: `push` с уже занятым ключом обновляет **живой** тост\n * и перезапускает его автозакрытие вместо того, чтобы завести второй.\n *\n * Ключ действует только пока тост на экране. Это не то же самое, что помнить\n * последнее показанное: повтор действия с тем же текстом обязан показаться\n * снова, иначе второе «Сохранено» пропадёт молча.\n */\n dedupeKey?: string\n}\n\n/**\n * Сообщения для `promise`. Строка — шорткат для `{ title }`; функция получает\n * результат промиса (или причину отказа), чтобы подставить его в текст.\n */\nexport type ToastPromiseMessages<T> = {\n loading: string | ToastInput\n success: string | ToastInput | ((value: T) => string | ToastInput)\n error: string | ToastInput | ((reason: unknown) => string | ToastInput)\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n /** Исходный таймаут автозакрытия, мс (`0` — без автозакрытия). Нужен для progress-бара. */\n timeoutMs: number\n /** Одна action-кнопка в теле тоста. */\n action?: ToastAction\n /** Несколько action-кнопок в теле тоста. */\n actions?: ToastAction[]\n /** Ключ схлопывания повторов, если тост создан с ним. */\n dedupeKey?: string\n}\n\nconst DEFAULT_TIMEOUT_MS = 3500\nconst IS_SERVER = typeof window === 'undefined'\n\n// Метаданные таймера автозакрытия с поддержкой pause/resume (WCAG 2.2.1: под\n// курсором/фокусом отсчёт должен останавливаться).\ntype ToastTimer = {\n handle: number | null\n /** Сколько мс осталось до автозакрытия на момент последней паузы/старта. */\n remaining: number\n /** `performance.now()` момента запуска текущего отрезка (для вычисления остатка). */\n startedAt: number\n}\n\nexport type ToastState = {\n toasts: Toast[]\n timers: Map<string, ToastTimer>\n /** Потолок очереди: сверх него самые старые тосты вытесняются. */\n maxToasts: number\n}\n\n/**\n * Потолок очереди по умолчанию. `maxVisible` у `GrToaster` режет только видимые,\n * поэтому без него поток событий (переподключение сокета, цикл ошибок) копил бы\n * очередь и вываливал её на пользователя, когда стек освободится.\n */\nconst DEFAULT_MAX_TOASTS = 20\n\nexport type GranularityToastPluginOptions = {\n /** Потолок очереди. По умолчанию `20`. */\n maxToasts?: number\n}\n\nfunction createToastState(maxToasts = DEFAULT_MAX_TOASTS): ToastState {\n return {\n toasts: reactive<Toast[]>([]),\n timers: new Map<string, ToastTimer>(),\n maxToasts: Math.max(1, Math.trunc(maxToasts)),\n }\n}\n\n/** Ключ provide/inject для app-scoped состояния тостов (устанавливает плагин ниже). */\nexport const GRANULARITY_TOAST_STATE: InjectionKey<ToastState> = Symbol.for('@feugene/granularity/toast-state')\n\n/**\n * Vue-плагин: даёт каждому приложению собственное изолированное состояние тостов\n * через `app.provide`. Обязателен для (а) нескольких Vue-приложений на одной\n * странице (микрофронтенды — иначе делят один стек тостов) и (б) SSR (иначе\n * модульное состояние течёт между запросами).\n *\n * ```ts\n * app.use(granularityToastPlugin)\n * app.use(granularityToastPlugin, { maxToasts: 50 })\n * ```\n */\n// Где-то на странице установлен плагин: фолбэк в синглтон для такого приложения —\n// почти наверняка ошибка вызова, а не осознанный выбор.\nlet appScopedToastProvided = false\nlet contextFallbackWarned = false\n\nexport const granularityToastPlugin = {\n install(app: App, options: GranularityToastPluginOptions = {}) {\n appScopedToastProvided = true\n app.provide(GRANULARITY_TOAST_STATE, createToastState(options.maxToasts))\n },\n}\n\n// Ленивый модульный синглтон — канонический фолбэк для простых SPA без плагина.\nlet moduleToastState: ToastState | null = null\n\n/** Сброс dev-предупреждения о фолбэке. Внутреннее API — нужно тестам. */\nexport function resetToastContextWarning(): void {\n contextFallbackWarned = false\n}\n\nfunction resolveToastState(): ToastState {\n // App-scoped состояние (provide через плагин): setup-контекст ИЛИ\n // `app.runWithContext(() => useToast())` — `hasInjectionContext` покрывает оба,\n // поэтому вызов из router guard / интерцептора достаёт состояние приложения.\n if (hasInjectionContext()) {\n const provided = inject(GRANULARITY_TOAST_STATE, null)\n if (provided) return provided\n }\n\n // В SSR модульный фолбэк запрещён: одно mutable-состояние на модуль утекало бы\n // между запросами. Требуем установленный плагин (app.provide).\n if (IS_SERVER) {\n throw new Error(\n '[granularity] useToast requires `app.use(granularityToastPlugin)` during SSR — '\n + 'the module-singleton fallback is disabled server-side to avoid state leaking between requests.',\n )\n }\n\n // Дедуп и текст — прямо под гардом: `__GR_DEV__` разворачивается в условие\n // на сборке, и у потребителя вся ветка выкидывается вместе с сообщением.\n if (\n appScopedToastProvided && !contextFallbackWarned\n && __GR_DEV__\n ) {\n contextFallbackWarned = true\n console.warn(\n '[granularity] useToast() вызван вне setup/inject-контекста: app-scoped состояние '\n + 'granularityToastPlugin недоступно, использован модульный синглтон — эти тосты не попадут '\n + 'в GrToaster приложения. Оберните вызов: app.runWithContext(() => useToast()).',\n )\n }\n\n if (!moduleToastState)\n moduleToastState = createToastState()\n\n return moduleToastState\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nexport function useToast() {\n const state = resolveToastState()\n const list = computed(() => state.toasts)\n\n function armTimer(id: string, timer: ToastTimer): void {\n if (timer.remaining <= 0 || typeof window === 'undefined') return\n timer.startedAt = now()\n timer.handle = window.setTimeout(() => {\n state.timers.delete(id)\n dismiss(id)\n }, timer.remaining)\n }\n\n function clearTimer(id: string): void {\n const timer = state.timers.get(id)\n if (timer?.handle != null) {\n clearTimeout(timer.handle)\n timer.handle = null\n }\n state.timers.delete(id)\n }\n\n function push(input: ToastInput): string {\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n\n // Схлопывание ищет тост только среди живых. Помнить последний показанный\n // ключ нельзя: тогда повтор того же действия («Сохранено» второй раз)\n // не показался бы вообще — тост уже ушёл, а ключ ещё занят.\n if (input.dedupeKey !== undefined) {\n const existing = state.toasts.find(item => item.dedupeKey === input.dedupeKey)\n if (existing) {\n // Замена целиком, а не патч: повторный `push` — это законченное\n // высказывание, и `message` от прошлого раза донашивать он не должен.\n applyStage(existing.id, { ...input, tone: input.tone ?? 'info', timeoutMs: timeout })\n return existing.id\n }\n }\n\n const id = makeId()\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n timeoutMs: timeout > 0 ? timeout : 0,\n action: input.action,\n actions: input.actions,\n dedupeKey: input.dedupeKey,\n }\n\n state.toasts.unshift(toast)\n trimQueue()\n\n if (toast.timeoutMs > 0) {\n const timer: ToastTimer = { handle: null, remaining: toast.timeoutMs, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return id\n }\n\n // Вытесняем с хвоста — там самые старые: при потоке событий устаревшее\n // уведомление менее ценно, чем свежее. Таймеры снимаем, иначе остались бы\n // висящие `setTimeout` на тосты, которых больше нет.\n //\n // Это флуд-защита уровня состояния, а не очередь показа (`GrToaster` держит\n // видимыми старейших): при переполнении потолка вытеснен может быть и тост,\n // который сейчас на экране, — осознанный компромисс.\n function trimQueue(): void {\n while (state.toasts.length > state.maxToasts) {\n const dropped = state.toasts.pop()\n if (dropped)\n clearTimer(dropped.id)\n }\n }\n\n /**\n * Меняет показанный тост на месте. `timeoutMs` в патче перезапускает таймер\n * (`0` — снова «навсегда»), поэтому «вечный» loading может стать\n * самозакрывающимся success.\n *\n * Возвращает `false`, если тоста уже нет: пользователь мог закрыть его руками,\n * и воскрешать его нельзя.\n */\n function update(id: string, patch: Partial<ToastInput>): boolean {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return false\n\n if (patch.title !== undefined) toast.title = patch.title\n if (patch.message !== undefined) toast.message = patch.message\n if (patch.tone !== undefined) toast.tone = patch.tone\n if (patch.action !== undefined) toast.action = patch.action\n if (patch.actions !== undefined) toast.actions = patch.actions\n\n if (patch.timeoutMs !== undefined)\n toast.timeoutMs = rearmTimer(id, patch.timeoutMs)\n\n return true\n }\n\n /** Перезапускает автозакрытие с нового таймаута; `0` и меньше — «навсегда». */\n function rearmTimer(id: string, timeoutMs: number): number {\n clearTimer(id)\n const next = timeoutMs > 0 ? timeoutMs : 0\n\n if (next > 0) {\n const timer: ToastTimer = { handle: null, remaining: next, startedAt: now() }\n state.timers.set(id, timer)\n armTimer(id, timer)\n }\n\n return next\n }\n\n /**\n * Полная замена стадии для `promise()`. В отличие от `update`, поле без\n * значения очищается: успех не должен донашивать `message` и action-кнопки\n * загрузки — патч-семантика оставляла бы их в тосте навсегда.\n */\n function applyStage(id: string, stage: ToastInput & { tone: GrToastTone, timeoutMs: number }): void {\n const toast = state.toasts.find(item => item.id === id)\n if (!toast) return\n\n toast.title = stage.title\n toast.message = stage.message\n toast.tone = stage.tone\n toast.action = stage.action\n toast.actions = stage.actions\n toast.timeoutMs = rearmTimer(id, stage.timeoutMs)\n }\n\n /**\n * Один тост на весь жизненный цикл промиса: «загружаем» переписывается в\n * успех или ошибку, а не закрывается ради нового — стек не дёргается.\n *\n * Каждая стадия **заменяет** предыдущую целиком: поле, не заданное в\n * success/error, очищается, а не наследуется от loading.\n *\n * Возвращает исходный промис и **не глотает отказ**: тост не заменяет\n * обработку ошибки, вызывающий по-прежнему обязан её обработать.\n */\n function promise<T>(input: Promise<T>, messages: ToastPromiseMessages<T>): Promise<T> {\n const id = push({ tone: 'info', ...toToastInput(messages.loading), timeoutMs: 0 })\n\n input.then(\n (value) => {\n const stage = resolveMessage(messages.success, value)\n applyStage(id, { ...stage, tone: stage.tone ?? 'success', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n (reason: unknown) => {\n const stage = resolveMessage(messages.error, reason)\n applyStage(id, { ...stage, tone: stage.tone ?? 'danger', timeoutMs: stage.timeoutMs ?? DEFAULT_TIMEOUT_MS })\n },\n )\n\n return input\n }\n\n /** Останавливает отсчёт автозакрытия, сохраняя остаток (идемпотентно). */\n function pause(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle == null) return\n\n clearTimeout(timer.handle)\n timer.handle = null\n timer.remaining = Math.max(0, timer.remaining - (now() - timer.startedAt))\n }\n\n /** Возобновляет отсчёт с сохранённого остатка (идемпотентно). */\n function resume(id: string): void {\n const timer = state.timers.get(id)\n if (!timer || timer.handle != null) return\n\n armTimer(id, timer)\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = state.toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n state.toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of [...state.timers.keys()]) clearTimer(id)\n state.toasts.splice(0, state.toasts.length)\n }\n\n return {\n list,\n push,\n update,\n promise,\n dismiss,\n clear,\n pause,\n resume,\n }\n}\n\nfunction toToastInput(message: string | ToastInput): ToastInput {\n return typeof message === 'string' ? { title: message } : message\n}\n\nfunction resolveMessage<T>(\n message: string | ToastInput | ((value: T) => string | ToastInput),\n value: T,\n): ToastInput {\n return toToastInput(typeof message === 'function' ? message(value) : message)\n}\n"],"mappings":";;AAyEA,IAAM,qBAAqB;AAC3B,IAAM,YAAY,OAAO,WAAW;;;;;;AAwBpC,IAAM,qBAAqB;AAO3B,SAAS,iBAAiB,YAAY,oBAAgC;CACpE,OAAO;EACL,QAAQ,SAAkB,CAAC,CAAC;EAC5B,wBAAQ,IAAI,IAAwB;EACpC,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC;CAC9C;AACF;;AAGA,IAAa,0BAAoD,OAAO,IAAI,kCAAkC;;;;;;;;;;;;AAe9G,IAAI,yBAAyB;AAC7B,IAAI,wBAAwB;AAE5B,IAAa,yBAAyB,EACpC,QAAQ,KAAU,UAAyC,CAAC,GAAG;CAC7D,yBAAyB;CACzB,IAAI,QAAQ,yBAAyB,iBAAiB,QAAQ,SAAS,CAAC;AAC1E,EACF;AAGA,IAAI,mBAAsC;;AAG1C,SAAgB,2BAAiC;CAC/C,wBAAwB;AAC1B;AAEA,SAAS,oBAAgC;CAIvC,IAAI,oBAAoB,GAAG;EACzB,MAAM,WAAW,OAAO,yBAAyB,IAAI;EACrD,IAAI,UAAU,OAAO;CACvB;CAIA,IAAI,WACF,MAAM,IAAI,MACR,+KAEF;CAKF,IACE,0BAA0B,CAAC,yBAAA,OAAA,YAAA,eAAA,QAAA,IAAA,aAAA,cAE3B;EACA,wBAAwB;EACxB,QAAQ,KACN,yPAGF;CACF;CAEA,IAAI,CAAC,kBACH,mBAAmB,iBAAiB;CAEtC,OAAO;AACT;AAEA,SAAS,MAAc;CACrB,OAAO,OAAO,gBAAgB,cAAc,YAAY,IAAI,IAAI,KAAK,IAAI;AAC3E;AAEA,SAAS,SAAiB;CACxB,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;AAC5D;AAEA,SAAgB,WAAW;CACzB,MAAM,QAAQ,kBAAkB;CAChC,MAAM,OAAO,eAAe,MAAM,MAAM;CAExC,SAAS,SAAS,IAAY,OAAyB;EACrD,IAAI,MAAM,aAAa,KAAK,OAAO,WAAW,aAAa;EAC3D,MAAM,YAAY,IAAI;EACtB,MAAM,SAAS,OAAO,iBAAiB;GACrC,MAAM,OAAO,OAAO,EAAE;GACtB,QAAQ,EAAE;EACZ,GAAG,MAAM,SAAS;CACpB;CAEA,SAAS,WAAW,IAAkB;EACpC,MAAM,QAAQ,MAAM,OAAO,IAAI,EAAE;EACjC,IAAI,OAAO,UAAU,MAAM;GACzB,aAAa,MAAM,MAAM;GACzB,MAAM,SAAS;EACjB;EACA,MAAM,OAAO,OAAO,EAAE;CACxB;CAEA,SAAS,KAAK,OAA2B;EACvC,MAAM,UAAU,MAAM,aAAa;EAKnC,IAAI,MAAM,cAAc,KAAA,GAAW;GACjC,MAAM,WAAW,MAAM,OAAO,MAAK,SAAQ,KAAK,cAAc,MAAM,SAAS;GAC7E,IAAI,UAAU;IAGZ,WAAW,SAAS,IAAI;KAAE,GAAG;KAAO,MAAM,MAAM,QAAQ;KAAQ,WAAW;IAAQ,CAAC;IACpF,OAAO,SAAS;GAClB;EACF;EAEA,MAAM,KAAK,OAAO;EAClB,MAAM,QAAe;GACnB;GACA,OAAO,MAAM;GACb,SAAS,MAAM;GACf,MAAM,MAAM,QAAQ;GACpB,WAAW,UAAU,IAAI,UAAU;GACnC,QAAQ,MAAM;GACd,SAAS,MAAM;GACf,WAAW,MAAM;EACnB;EAEA,MAAM,OAAO,QAAQ,KAAK;EAC1B,UAAU;EAEV,IAAI,MAAM,YAAY,GAAG;GACvB,MAAM,QAAoB;IAAE,QAAQ;IAAM,WAAW,MAAM;IAAW,WAAW,IAAI;GAAE;GACvF,MAAM,OAAO,IAAI,IAAI,KAAK;GAC1B,SAAS,IAAI,KAAK;EACpB;EAEA,OAAO;CACT;CASA,SAAS,YAAkB;EACzB,OAAO,MAAM,OAAO,SAAS,MAAM,WAAW;GAC5C,MAAM,UAAU,MAAM,OAAO,IAAI;GACjC,IAAI,SACF,WAAW,QAAQ,EAAE;EACzB;CACF;;;;;;;;;CAUA,SAAS,OAAO,IAAY,OAAqC;EAC/D,MAAM,QAAQ,MAAM,OAAO,MAAK,SAAQ,KAAK,OAAO,EAAE;EACtD,IAAI,CAAC,OAAO,OAAO;EAEnB,IAAI,MAAM,UAAU,KAAA,GAAW,MAAM,QAAQ,MAAM;EACnD,IAAI,MAAM,YAAY,KAAA,GAAW,MAAM,UAAU,MAAM;EACvD,IAAI,MAAM,SAAS,KAAA,GAAW,MAAM,OAAO,MAAM;EACjD,IAAI,MAAM,WAAW,KAAA,GAAW,MAAM,SAAS,MAAM;EACrD,IAAI,MAAM,YAAY,KAAA,GAAW,MAAM,UAAU,MAAM;EAEvD,IAAI,MAAM,cAAc,KAAA,GACtB,MAAM,YAAY,WAAW,IAAI,MAAM,SAAS;EAElD,OAAO;CACT;;CAGA,SAAS,WAAW,IAAY,WAA2B;EACzD,WAAW,EAAE;EACb,MAAM,OAAO,YAAY,IAAI,YAAY;EAEzC,IAAI,OAAO,GAAG;GACZ,MAAM,QAAoB;IAAE,QAAQ;IAAM,WAAW;IAAM,WAAW,IAAI;GAAE;GAC5E,MAAM,OAAO,IAAI,IAAI,KAAK;GAC1B,SAAS,IAAI,KAAK;EACpB;EAEA,OAAO;CACT;;;;;;CAOA,SAAS,WAAW,IAAY,OAAoE;EAClG,MAAM,QAAQ,MAAM,OAAO,MAAK,SAAQ,KAAK,OAAO,EAAE;EACtD,IAAI,CAAC,OAAO;EAEZ,MAAM,QAAQ,MAAM;EACpB,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,MAAM;EACnB,MAAM,SAAS,MAAM;EACrB,MAAM,UAAU,MAAM;EACtB,MAAM,YAAY,WAAW,IAAI,MAAM,SAAS;CAClD;;;;;;;;;;;CAYA,SAAS,QAAW,OAAmB,UAA+C;EACpF,MAAM,KAAK,KAAK;GAAE,MAAM;GAAQ,GAAG,aAAa,SAAS,OAAO;GAAG,WAAW;EAAE,CAAC;EAEjF,MAAM,MACH,UAAU;GACT,MAAM,QAAQ,eAAe,SAAS,SAAS,KAAK;GACpD,WAAW,IAAI;IAAE,GAAG;IAAO,MAAM,MAAM,QAAQ;IAAW,WAAW,MAAM,aAAa;GAAmB,CAAC;EAC9G,IACC,WAAoB;GACnB,MAAM,QAAQ,eAAe,SAAS,OAAO,MAAM;GACnD,WAAW,IAAI;IAAE,GAAG;IAAO,MAAM,MAAM,QAAQ;IAAU,WAAW,MAAM,aAAa;GAAmB,CAAC;EAC7G,CACF;EAEA,OAAO;CACT;;CAGA,SAAS,MAAM,IAAkB;EAC/B,MAAM,QAAQ,MAAM,OAAO,IAAI,EAAE;EACjC,IAAI,CAAC,SAAS,MAAM,UAAU,MAAM;EAEpC,aAAa,MAAM,MAAM;EACzB,MAAM,SAAS;EACf,MAAM,YAAY,KAAK,IAAI,GAAG,MAAM,aAAa,IAAI,IAAI,MAAM,UAAU;CAC3E;;CAGA,SAAS,OAAO,IAAkB;EAChC,MAAM,QAAQ,MAAM,OAAO,IAAI,EAAE;EACjC,IAAI,CAAC,SAAS,MAAM,UAAU,MAAM;EAEpC,SAAS,IAAI,KAAK;CACpB;CAEA,SAAS,QAAQ,IAAkB;EACjC,WAAW,EAAE;EACb,MAAM,QAAQ,MAAM,OAAO,WAAU,UAAS,MAAM,OAAO,EAAE;EAC7D,IAAI,SAAS,GACX,MAAM,OAAO,OAAO,OAAO,CAAC;CAChC;CAEA,SAAS,QAAc;EACrB,KAAK,MAAM,MAAM,CAAC,GAAG,MAAM,OAAO,KAAK,CAAC,GAAG,WAAW,EAAE;EACxD,MAAM,OAAO,OAAO,GAAG,MAAM,OAAO,MAAM;CAC5C;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAS,aAAa,SAA0C;CAC9D,OAAO,OAAO,YAAY,WAAW,EAAE,OAAO,QAAQ,IAAI;AAC5D;AAEA,SAAS,eACP,SACA,OACY;CACZ,OAAO,aAAa,OAAO,YAAY,aAAa,QAAQ,KAAK,IAAI,OAAO;AAC9E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as ensurePortalRoot } from "../chunks/portalRoot-CVhCgdG6.js";
|
|
2
2
|
import { n as markInert, t as inertableOutside } from "../chunks/inert-DIHCCn_1.js";
|
|
3
|
-
import { t as GrLoading_default } from "../components/GrLoading/chunks/GrLoading-
|
|
3
|
+
import { t as GrLoading_default } from "../components/GrLoading/chunks/GrLoading-DeBFTvFX.js";
|
|
4
4
|
import { createVNode, render } from "vue";
|
|
5
5
|
//#region src/directives/loading.ts
|
|
6
6
|
function isHTMLElement(value) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as granularityDefaultThemes, i as granularityComponentConfigs, n as GRANULARITY_PROVIDER_ID, o as granularityThemeNames, r as createGranularityProvider, t as granularityProvider } from "./chunks/granular-provider-
|
|
1
|
+
import { a as granularityDefaultThemes, i as granularityComponentConfigs, n as GRANULARITY_PROVIDER_ID, o as granularityThemeNames, r as createGranularityProvider, t as granularityProvider } from "./chunks/granular-provider-BaHkLjFX.js";
|
|
2
2
|
export { GRANULARITY_PROVIDER_ID, createGranularityProvider, granularityProvider as default, granularityProvider, granularityComponentConfigs, granularityDefaultThemes, granularityThemeNames };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as granularityDefaultThemes, i as granularityComponentConfigs, n as GRANULARITY_PROVIDER_ID, o as granularityThemeNames, r as createGranularityProvider, t as granularityProvider } from "./chunks/granular-provider-
|
|
1
|
+
import { a as granularityDefaultThemes, i as granularityComponentConfigs, n as GRANULARITY_PROVIDER_ID, o as granularityThemeNames, r as createGranularityProvider, t as granularityProvider } from "./chunks/granular-provider-BaHkLjFX.js";
|
|
2
2
|
export { GRANULARITY_PROVIDER_ID, createGranularityProvider, granularityProvider as default, granularityProvider, granularityComponentConfigs, granularityDefaultThemes, granularityThemeNames };
|
package/dist/i18n/all.js
CHANGED
package/dist/i18n/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GRANULARITY_I18N_KEY } from "../chunks/adapter-CAOxmn2G.js";
|
|
2
|
-
import { i as GRANULARITY_I18N_BLOCK, n as ru, r as en, t as es } from "../chunks/es-
|
|
2
|
+
import { i as GRANULARITY_I18N_BLOCK, n as ru, r as en, t as es } from "../chunks/es-Do2CNrC2.js";
|
|
3
3
|
export { GRANULARITY_I18N_BLOCK, GRANULARITY_I18N_KEY, en, es, ru };
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { p as FileValidationError } from "./chunks/fileValidation-D5TFBhbv.js";
|
|
|
11
11
|
import { vDropzone } from "./directives/dropzone.js";
|
|
12
12
|
import { vHotkey } from "./directives/hotkey.js";
|
|
13
13
|
import { t as GrIcon_default } from "./components/GrIcon/chunks/GrIcon-bQwtZtYT.js";
|
|
14
|
-
import { t as GrLoading_default } from "./components/GrLoading/chunks/GrLoading-
|
|
14
|
+
import { t as GrLoading_default } from "./components/GrLoading/chunks/GrLoading-DeBFTvFX.js";
|
|
15
15
|
import { createLoading, vLoading } from "./directives/loading.js";
|
|
16
16
|
import { useFloating } from "./composables/useFloating.js";
|
|
17
17
|
import { useOverlayLayer } from "./composables/useOverlayLayer.js";
|
|
@@ -20,13 +20,14 @@ import { useVirtualList } from "./composables/useVirtualList.js";
|
|
|
20
20
|
import { n as useGrFormFieldContext } from "./chunks/context-DdNIxa1w.js";
|
|
21
21
|
import { useGrFormControl } from "./composables/useGrFormControl.js";
|
|
22
22
|
import { useComboboxNavigation } from "./composables/useComboboxNavigation.js";
|
|
23
|
-
import { t as GrBadge_default } from "./components/GrBadge/chunks/GrBadge-
|
|
23
|
+
import { t as GrBadge_default } from "./components/GrBadge/chunks/GrBadge-_9rCHuE1.js";
|
|
24
24
|
import { n as grAutocompleteSafelist, t as grAutocompleteConfig } from "./chunks/config-BbY2SKGE.js";
|
|
25
|
-
import { t as GrAutocomplete_default } from "./components/GrAutocomplete/chunks/GrAutocomplete-
|
|
25
|
+
import { t as GrAutocomplete_default } from "./components/GrAutocomplete/chunks/GrAutocomplete-D9c9BNFg.js";
|
|
26
26
|
import { t as GrSkeleton_default } from "./components/GrSkeleton/chunks/GrSkeleton-CgfXxPQ2.js";
|
|
27
27
|
import { n as GrAvatar_default, t as GrAvatarGroup_default } from "./components/GrAvatar/chunks/GrAvatar-BbdKRX8i.js";
|
|
28
28
|
import { c as initialsFrom, n as grAvatarSafelist, t as grAvatarConfig } from "./chunks/config-Bsh948nP.js";
|
|
29
|
-
import {
|
|
29
|
+
import { t as grBadgeSafelist } from "./chunks/safelist-DOfCQR5O.js";
|
|
30
|
+
import { t as grBadgeConfig } from "./chunks/config-DGCMHPCR.js";
|
|
30
31
|
import "./components/GrBadge/index.js";
|
|
31
32
|
import { n as grBadgeWrapSafelist, o as formatBadgeValue, t as grBadgeWrapConfig } from "./chunks/config-B4w5gBD0.js";
|
|
32
33
|
import { t as GrBadgeWrap_default } from "./components/GrBadgeWrap/chunks/GrBadgeWrap-DDoFQscR.js";
|
|
@@ -35,84 +36,93 @@ import { t as GrBottomNav_default } from "./components/GrBottomNav/chunks/GrBott
|
|
|
35
36
|
import { t as GrLink_default } from "./components/GrLink/chunks/GrLink-BQb7U4so.js";
|
|
36
37
|
import { m as resolveBreadcrumbsLayout, n as grBreadcrumbsSafelist, p as resolveBreadcrumbsFit, t as grBreadcrumbsConfig } from "./chunks/config-DKdlqXiY.js";
|
|
37
38
|
import { t as GrBreadcrumbs_default } from "./components/GrBreadcrumbs/chunks/GrBreadcrumbs-CQ44iU2o.js";
|
|
38
|
-
import { n as useGrButtonGroup } from "./chunks/context-
|
|
39
|
-
import { t as GrButton_default } from "./components/GrButton/chunks/GrButton-
|
|
39
|
+
import { n as useGrButtonGroup } from "./chunks/context-BfIQv7m12.js";
|
|
40
|
+
import { t as GrButton_default } from "./components/GrButton/chunks/GrButton-DCz-Wn-V.js";
|
|
40
41
|
import { t as grButtonSafelist } from "./chunks/safelist-CudBLyAD.js";
|
|
41
42
|
import { t as grButtonConfig } from "./chunks/config-B84z1aos.js";
|
|
42
|
-
import { t as GrButtonGroup_default } from "./components/GrButtonGroup/chunks/GrButtonGroup-
|
|
43
|
+
import { t as GrButtonGroup_default } from "./components/GrButtonGroup/chunks/GrButtonGroup-BQo5VQ_c.js";
|
|
43
44
|
import { t as grButtonGroupConfig } from "./chunks/config-DBmdgoVf.js";
|
|
44
45
|
import "./components/GrButtonGroup/index.js";
|
|
45
|
-
import { n as grCardSafelist, t as grCardConfig } from "./chunks/config-
|
|
46
|
-
import { t as GrCard_default } from "./components/GrCard/chunks/GrCard-
|
|
46
|
+
import { n as grCardSafelist, t as grCardConfig } from "./chunks/config-DYgfMrIF.js";
|
|
47
|
+
import { t as GrCard_default } from "./components/GrCard/chunks/GrCard-aQIjk6I9.js";
|
|
47
48
|
import { t as GrCheckbox_default } from "./components/GrCheckbox/chunks/GrCheckbox-CEcHIsXM.js";
|
|
48
49
|
import { n as grCheckboxSafelist, t as grCheckboxConfig } from "./chunks/config-esdviAPL.js";
|
|
49
50
|
import "./components/GrCheckbox/index.js";
|
|
50
51
|
import { t as GrCheckboxGroup_default } from "./components/GrCheckboxGroup/chunks/GrCheckboxGroup-BOwrVcFr.js";
|
|
51
|
-
import { t as grCheckboxGroupConfig } from "./chunks/config-
|
|
52
|
+
import { t as grCheckboxGroupConfig } from "./chunks/config-BuGlNPE92.js";
|
|
53
|
+
import { n as grChipSafelist, t as grChipConfig } from "./chunks/config-D7zgE_Gr.js";
|
|
54
|
+
import { t as GrChip_default } from "./components/GrChip/chunks/GrChip-BnL2FedO.js";
|
|
55
|
+
import { useRovingFocus } from "./composables/useRovingFocus.js";
|
|
56
|
+
import { n as grChipGroupSafelist, t as grChipGroupConfig } from "./chunks/config-Iu684VNI.js";
|
|
57
|
+
import { t as GrChipGroup_default } from "./components/GrChipGroup/chunks/GrChipGroup-DefmSdY9.js";
|
|
52
58
|
import { useAnnouncer } from "./composables/useAnnouncer.js";
|
|
53
|
-
import { t as GrCodeBlock_default } from "./components/GrCodeBlock/chunks/GrCodeBlock-
|
|
59
|
+
import { t as GrCodeBlock_default } from "./components/GrCodeBlock/chunks/GrCodeBlock-CyptiEo4.js";
|
|
54
60
|
import { n as grCodeBlockSafelist, t as grCodeBlockConfig } from "./chunks/config-B_qi4Fma.js";
|
|
55
61
|
import { n as grCollapseSafelist, t as grCollapseConfig } from "./chunks/config-DU2DNSRx.js";
|
|
56
|
-
import { n as GrCollapse_default, t as GrCollapseItem_default } from "./components/GrCollapse/chunks/GrCollapse-
|
|
62
|
+
import { n as GrCollapse_default, t as GrCollapseItem_default } from "./components/GrCollapse/chunks/GrCollapse-DUROgAgc.js";
|
|
57
63
|
import { n as grIconSafelist, t as grIconConfig } from "./chunks/config-Cp0DE0GH.js";
|
|
58
64
|
import { t as GrInput_default } from "./components/GrInput/chunks/GrInput-Bb_pxqpT.js";
|
|
59
65
|
import { useFocusTrap } from "./composables/useFocusTrap.js";
|
|
60
|
-
import { t as GrPopover_default } from "./components/GrPopover/chunks/GrPopover-
|
|
66
|
+
import { t as GrPopover_default } from "./components/GrPopover/chunks/GrPopover-DDChM1jD.js";
|
|
61
67
|
import { useDragGesture } from "./composables/useDragGesture.js";
|
|
62
68
|
import { t as GrSlider_default } from "./components/GrSlider/chunks/GrSlider-s99yAyz6.js";
|
|
63
|
-
import { t as GrColorPicker_default } from "./components/GrColorPicker/chunks/GrColorPicker-
|
|
69
|
+
import { t as GrColorPicker_default } from "./components/GrColorPicker/chunks/GrColorPicker-CDaJRVIM.js";
|
|
64
70
|
import { n as grColorPickerSafelist, t as grColorPickerConfig } from "./chunks/config-BsPDQ0dS.js";
|
|
65
71
|
import { a as GR_KBD_TOKENS, o as findKbdToken, t as GrKbd_default } from "./components/GrKbd/chunks/GrKbd-BXbhsH0M.js";
|
|
66
|
-
import { t as GrModal_default } from "./components/GrModal/chunks/GrModal-
|
|
67
|
-
import { t as GrCommandPalette_default } from "./components/GrCommandPalette/chunks/GrCommandPalette-
|
|
72
|
+
import { t as GrModal_default } from "./components/GrModal/chunks/GrModal-CCoWZuIl.js";
|
|
73
|
+
import { t as GrCommandPalette_default } from "./components/GrCommandPalette/chunks/GrCommandPalette-BPsVN_XU.js";
|
|
68
74
|
import { n as grCommandPaletteSafelist, t as grCommandPaletteConfig } from "./chunks/config-9PYRZlKE.js";
|
|
69
|
-
import { t as GrConfigProvider_default } from "./components/GrConfigProvider/chunks/GrConfigProvider-
|
|
75
|
+
import { t as GrConfigProvider_default } from "./components/GrConfigProvider/chunks/GrConfigProvider-BF7R3hgg.js";
|
|
70
76
|
import { t as grConfigProviderConfig } from "./chunks/config-B7W9VlZ7.js";
|
|
71
|
-
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./components/GrDialog/chunks/GrDialog-
|
|
72
|
-
import { a as extendDefaultParsers, n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as normalizeError, t as GrResponseErrorBanner_default } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-
|
|
73
|
-
import { t as GrConfirmDialog_default } from "./components/GrConfirmDialog/chunks/GrConfirmDialog-
|
|
77
|
+
import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./components/GrDialog/chunks/GrDialog-5Y5K87ss.js";
|
|
78
|
+
import { a as extendDefaultParsers, n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as normalizeError, t as GrResponseErrorBanner_default } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BhP-xw2P.js";
|
|
79
|
+
import { t as GrConfirmDialog_default } from "./components/GrConfirmDialog/chunks/GrConfirmDialog-CwXNLyzk.js";
|
|
74
80
|
import { t as grConfirmDialogConfig } from "./chunks/config-A-bBiotF.js";
|
|
75
81
|
import "./components/GrConfirmDialog/index.js";
|
|
82
|
+
import { a as GrDropdownMenuItem_default, c as GrDropdownMenuDivider_default, o as GrDropdownMenuGroup_default, s as GrDropdownMenuHeader_default, t as GrDropdownMenuList_default } from "./components/GrDropdownMenu/chunks/GrDropdownMenuList-BGA_xNVo.js";
|
|
83
|
+
import { t as GrContextMenu_default } from "./components/GrContextMenu/chunks/GrContextMenu-BbAJholy.js";
|
|
84
|
+
import { t as grContextMenuConfig } from "./chunks/config-CPSxM7XE.js";
|
|
76
85
|
import { t as GrTable_default } from "./components/GrTable/chunks/GrTable-f3qCWa99.js";
|
|
77
86
|
import { t as useDragSort } from "./chunks/useDragSort-0l47h4yb.js";
|
|
78
|
-
import {
|
|
79
|
-
import { t as GrDataTable_default } from "./components/GrDataTable/chunks/GrDataTable-B5MmZFUg.js";
|
|
87
|
+
import { t as GrDataTable_default } from "./components/GrDataTable/chunks/GrDataTable-NRbrXpdx.js";
|
|
80
88
|
import { n as grDataTableSafelist, t as grDataTableConfig } from "./chunks/config-BC8d_smz.js";
|
|
81
|
-
import { t as GrDelta_default } from "./components/GrDelta/chunks/GrDelta-
|
|
89
|
+
import { t as GrDelta_default } from "./components/GrDelta/chunks/GrDelta-NE5HhXoo.js";
|
|
90
|
+
import { n as grValueSafelist, t as grValueConfig } from "./chunks/config-BFJIxE8b.js";
|
|
91
|
+
import { t as GrValue_default } from "./components/GrValue/chunks/GrValue-CZsuZ4x-.js";
|
|
82
92
|
import { n as deltaTone, t as deltaDirection } from "./chunks/deltaTone-B5OoS1vo.js";
|
|
83
|
-
import { n as grDeltaSafelist, t as grDeltaConfig } from "./chunks/config-
|
|
84
|
-
import { n as grDescriptionListSafelist, t as grDescriptionListConfig } from "./chunks/config-
|
|
85
|
-
import { t as GrDescriptionList_default } from "./components/GrDescriptionList/chunks/GrDescriptionList-
|
|
93
|
+
import { n as grDeltaSafelist, t as grDeltaConfig } from "./chunks/config-BIa3ilQm.js";
|
|
94
|
+
import { n as grDescriptionListSafelist, t as grDescriptionListConfig } from "./chunks/config-rkcKArZQ.js";
|
|
95
|
+
import { t as GrDescriptionList_default } from "./components/GrDescriptionList/chunks/GrDescriptionList-1mICfrqX.js";
|
|
86
96
|
import { t as grDialogSafelist } from "./chunks/safelist-CkF4v7DC.js";
|
|
87
97
|
import "./components/GrDialog/index.js";
|
|
88
98
|
import { n as useGrFormContext } from "./chunks/context-Bfrgsluh.js";
|
|
89
|
-
import { t as GrFormField_default } from "./components/GrFormField/chunks/GrFormField-
|
|
99
|
+
import { t as GrFormField_default } from "./components/GrFormField/chunks/GrFormField-DSylU7IU.js";
|
|
90
100
|
import { t as GrTextarea_default } from "./components/GrTextarea/chunks/GrTextarea-CNnkcIG1.js";
|
|
91
101
|
import { a as runFieldRules, t as createGrFormMessageResolver } from "./chunks/validation-DauXRIkL.js";
|
|
92
|
-
import { t as GrPromptDialog_default } from "./components/GrPromptDialog/chunks/GrPromptDialog-
|
|
93
|
-
import { a as useDialogService, i as teardownDialogService, n as dialogService, r as granularityDialogServicePlugin, t as GrDialogServiceHost_default } from "./components/GrDialogService/chunks/GrDialogService-
|
|
102
|
+
import { t as GrPromptDialog_default } from "./components/GrPromptDialog/chunks/GrPromptDialog-DjF-5oD9.js";
|
|
103
|
+
import { a as useDialogService, i as teardownDialogService, n as dialogService, r as granularityDialogServicePlugin, t as GrDialogServiceHost_default } from "./components/GrDialogService/chunks/GrDialogService-CHhzGRWy.js";
|
|
94
104
|
import { t as grDialogServiceConfig } from "./chunks/config-CjXjhphs.js";
|
|
95
105
|
import { n as grDividerSafelist, t as grDividerConfig } from "./chunks/config-CY0_6cMi.js";
|
|
96
106
|
import { t as GrDivider_default } from "./components/GrDivider/chunks/GrDivider-CAhm9jbE.js";
|
|
97
107
|
import { n as grDrawerSafelist, t as grDrawerConfig } from "./chunks/config-D94Z9po5.js";
|
|
98
|
-
import { t as GrDrawer_default } from "./components/GrDrawer/chunks/GrDrawer-
|
|
99
|
-
import { t as GrDropdown_default } from "./components/GrDropdown/chunks/GrDropdown-
|
|
108
|
+
import { t as GrDrawer_default } from "./components/GrDrawer/chunks/GrDrawer-CXy3-SVd.js";
|
|
109
|
+
import { t as GrDropdown_default } from "./components/GrDropdown/chunks/GrDropdown-BfTmdPyh.js";
|
|
100
110
|
import { n as grDropdownSafelist, t as grDropdownConfig } from "./chunks/config-BViooYNv.js";
|
|
101
111
|
import "./components/GrDropdown/index.js";
|
|
102
|
-
import { n as
|
|
103
|
-
import {
|
|
112
|
+
import { n as GrDropdownMenuColumn_default, r as GrDropdownMenu_default, t as GrDropdownMenuColumns_default } from "./components/GrDropdownMenu/chunks/GrDropdownMenu-l5HEqzjr.js";
|
|
113
|
+
import { n as grDropdownMenuSafelist, t as grDropdownMenuConfig } from "./chunks/config-DKISz9gR.js";
|
|
104
114
|
import { t as GrEmptyState_default } from "./components/GrEmptyState/chunks/GrEmptyState-CS9do8eM.js";
|
|
105
115
|
import { n as grEmptyStateSafelist, t as grEmptyStateConfig } from "./chunks/config-vSji8w90.js";
|
|
106
116
|
import { n as fileKindOf, r as isPreviewableKind, t as GrFilePreview_default } from "./components/GrFilePreview/chunks/GrFilePreview-D0Bt-0nn.js";
|
|
107
117
|
import { n as grFilePreviewSafelist, t as grFilePreviewConfig } from "./chunks/config-QJ54_fcM.js";
|
|
108
118
|
import { t as GrProgressBar_default } from "./components/GrProgressBar/chunks/GrProgressBar-hszUOC8f.js";
|
|
109
|
-
import { n as GrUploadAbortError, r as GrUploadHttpError, t as GrFileUpload_default } from "./components/GrFileUpload/chunks/GrFileUpload-
|
|
119
|
+
import { n as GrUploadAbortError, r as GrUploadHttpError, t as GrFileUpload_default } from "./components/GrFileUpload/chunks/GrFileUpload-wNXzHb5N.js";
|
|
110
120
|
import { n as grFileUploadSafelist, t as grFileUploadConfig } from "./chunks/config-CN970ZcJ.js";
|
|
111
121
|
import { t as GrForm_default } from "./components/GrForm/chunks/GrForm-B_Qq_13k.js";
|
|
112
122
|
import { t as grFormConfig } from "./chunks/config-Droqn55j.js";
|
|
113
123
|
import { n as grFormFieldSafelist, t as grFormFieldConfig } from "./chunks/config-D6W1rnlp.js";
|
|
114
124
|
import "./components/GrFormField/index.js";
|
|
115
|
-
import { t as GrFormFile_default } from "./components/GrFormFile/chunks/GrFormFile-
|
|
125
|
+
import { t as GrFormFile_default } from "./components/GrFormFile/chunks/GrFormFile-DhVkB2gm.js";
|
|
116
126
|
import { n as grFormFileSafelist, t as grFormFileConfig } from "./chunks/config-COvrUfhR.js";
|
|
117
127
|
import { n as grFormSectionSafelist, t as grFormSectionConfig } from "./chunks/config-Dgj1Q6JY.js";
|
|
118
128
|
import { t as GrFormSection_default } from "./components/GrFormSection/chunks/GrFormSection-CdGWvzXO.js";
|
|
@@ -121,28 +131,28 @@ import { n as grImageViewerSafelist, t as grImageViewerConfig } from "./chunks/c
|
|
|
121
131
|
import { n as grInputSafelist, t as grInputConfig } from "./chunks/config-DpeQchsV.js";
|
|
122
132
|
import "./components/GrInput/index.js";
|
|
123
133
|
import { n as grInputTagSafelist, t as grInputTagConfig } from "./chunks/config-BN4sXYXn.js";
|
|
124
|
-
import { t as GrInputTag_default } from "./components/GrInputTag/chunks/GrInputTag-
|
|
125
|
-
import { t as GrTree_default } from "./components/GrTree/chunks/GrTree-
|
|
126
|
-
import { t as GrJsonViewer_default } from "./components/GrJsonViewer/chunks/GrJsonViewer-
|
|
134
|
+
import { t as GrInputTag_default } from "./components/GrInputTag/chunks/GrInputTag-UI8kIB_F.js";
|
|
135
|
+
import { t as GrTree_default } from "./components/GrTree/chunks/GrTree-J5q8aCya.js";
|
|
136
|
+
import { t as GrJsonViewer_default } from "./components/GrJsonViewer/chunks/GrJsonViewer-jk3ylOTc.js";
|
|
127
137
|
import { n as grJsonViewerSafelist, t as grJsonViewerConfig } from "./chunks/config-CIcynHGr.js";
|
|
128
138
|
import { n as grKbdSafelist, t as grKbdConfig } from "./chunks/config-DA6SnEoy.js";
|
|
129
139
|
import "./components/GrKbd/index.js";
|
|
130
140
|
import { n as grLinkSafelist, t as grLinkConfig } from "./chunks/config-Cl4ST6Qd.js";
|
|
131
141
|
import "./components/GrLink/index.js";
|
|
132
142
|
import { n as grListSafelist, t as grListConfig } from "./chunks/config-CKULiuvc.js";
|
|
133
|
-
import { n as GrList_default, t as GrListItem_default } from "./components/GrList/chunks/GrList-
|
|
143
|
+
import { n as GrList_default, t as GrListItem_default } from "./components/GrList/chunks/GrList-B5bclmHV.js";
|
|
134
144
|
import { n as grLoadingSafelist, t as grLoadingConfig } from "./chunks/config-CjnbevbD.js";
|
|
135
145
|
import "./components/GrLoading/index.js";
|
|
136
146
|
import { n as grModalSafelist, t as grModalConfig } from "./chunks/config-BtXRpAtq.js";
|
|
137
147
|
import "./components/GrModal/index.js";
|
|
138
|
-
import { t as GrNavbar_default } from "./components/GrNavbar/chunks/GrNavbar-
|
|
148
|
+
import { t as GrNavbar_default } from "./components/GrNavbar/chunks/GrNavbar-DPj30sHX.js";
|
|
139
149
|
import { n as grNavbarSafelist, t as grNavbarConfig } from "./chunks/config-Bpt9Xbxm.js";
|
|
140
|
-
import { n as grNumberInputSafelist, t as grNumberInputConfig } from "./chunks/config-
|
|
141
|
-
import { t as GrNumberInput_default } from "./components/GrNumberInput/chunks/GrNumberInput-
|
|
142
|
-
import { t as GrSelect_default } from "./components/GrSelect/chunks/GrSelect-
|
|
150
|
+
import { n as grNumberInputSafelist, t as grNumberInputConfig } from "./chunks/config-zjeAJ4ho2.js";
|
|
151
|
+
import { t as GrNumberInput_default } from "./components/GrNumberInput/chunks/GrNumberInput-V2mZvDDC.js";
|
|
152
|
+
import { t as GrSelect_default } from "./components/GrSelect/chunks/GrSelect-BA1wfX3c.js";
|
|
143
153
|
import { n as grPaginationSafelist, t as grPaginationConfig } from "./chunks/config-DSJY6aEl.js";
|
|
144
|
-
import { t as GrPagination_default } from "./components/GrPagination/chunks/GrPagination-
|
|
145
|
-
import { n as grPopoverSafelist, t as grPopoverConfig } from "./chunks/config-
|
|
154
|
+
import { t as GrPagination_default } from "./components/GrPagination/chunks/GrPagination-DG7kp6VL.js";
|
|
155
|
+
import { n as grPopoverSafelist, t as grPopoverConfig } from "./chunks/config-DtgYuGUn2.js";
|
|
146
156
|
import "./components/GrPopover/index.js";
|
|
147
157
|
import { n as grProgressBarSafelist, r as GR_TONES, t as grProgressBarConfig } from "./chunks/config-CQzGyi1C.js";
|
|
148
158
|
import "./components/GrProgressBar/index.js";
|
|
@@ -153,48 +163,50 @@ import "./components/GrPromptDialog/index.js";
|
|
|
153
163
|
import { t as GrRadio_default } from "./components/GrRadio/chunks/GrRadio-BdhknbO8.js";
|
|
154
164
|
import { n as grRadioSafelist, t as grRadioConfig } from "./chunks/config-BTCOJO5z2.js";
|
|
155
165
|
import "./components/GrRadio/index.js";
|
|
156
|
-
import { t as GrRadioGroup_default } from "./components/GrRadioGroup/chunks/GrRadioGroup-
|
|
166
|
+
import { t as GrRadioGroup_default } from "./components/GrRadioGroup/chunks/GrRadioGroup-7w4bXIg_.js";
|
|
157
167
|
import { t as grRadioGroupConfig } from "./chunks/config-QaIc_gRa.js";
|
|
158
168
|
import { n as grRatingSafelist, t as grRatingConfig } from "./chunks/config-Baj7Wvx-.js";
|
|
159
169
|
import { t as GrRating_default } from "./components/GrRating/chunks/GrRating-BSEtaibx.js";
|
|
160
|
-
import { n as GrFormErrorBanner_default, r as GrUploadErrorBanner_default, t as useResponseError } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-
|
|
170
|
+
import { n as GrFormErrorBanner_default, r as GrUploadErrorBanner_default, t as useResponseError } from "./components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-DA4q90Zt.js";
|
|
171
|
+
import { n as titleWhenTruncated, t as GrSegmented_default } from "./components/GrSegmented/chunks/GrSegmented-DKpo3cnC.js";
|
|
161
172
|
import { n as grSegmentedSafelist, t as grSegmentedConfig } from "./chunks/config-BEVBsvni2.js";
|
|
162
|
-
import { t as GrSegmented_default } from "./components/GrSegmented/chunks/GrSegmented-D1mjxF_O.js";
|
|
163
173
|
import { n as grSelectSafelist, t as grSelectConfig } from "./chunks/config-Cwd3yjRw.js";
|
|
164
174
|
import "./components/GrSelect/index.js";
|
|
165
|
-
import { n as grSidebarSafelist, t as grSidebarConfig } from "./chunks/config-
|
|
166
|
-
import { n as GrSidebarItem_default, r as GrSidebar_default, t as GrSidebarGroup_default } from "./components/GrSidebar/chunks/GrSidebar-
|
|
175
|
+
import { n as grSidebarSafelist, t as grSidebarConfig } from "./chunks/config-BfsBepkH.js";
|
|
176
|
+
import { n as GrSidebarItem_default, r as GrSidebar_default, t as GrSidebarGroup_default } from "./components/GrSidebar/chunks/GrSidebar-DY-LgIbS.js";
|
|
167
177
|
import { t as grSkeletonConfig } from "./chunks/config-8Pcutu1j.js";
|
|
168
178
|
import "./components/GrSkeleton/index.js";
|
|
169
|
-
import { n as grSliderSafelist, t as grSliderConfig } from "./chunks/config-
|
|
179
|
+
import { n as grSliderSafelist, t as grSliderConfig } from "./chunks/config-T3qdQBgU.js";
|
|
170
180
|
import "./components/GrSlider/index.js";
|
|
171
|
-
import { n as grSortableListSafelist, t as grSortableListConfig } from "./chunks/config-
|
|
172
|
-
import { t as GrSortableList_default } from "./components/GrSortableList/chunks/GrSortableList-
|
|
181
|
+
import { n as grSortableListSafelist, t as grSortableListConfig } from "./chunks/config-DAX8Deh1.js";
|
|
182
|
+
import { t as GrSortableList_default } from "./components/GrSortableList/chunks/GrSortableList-BMXyxmRc.js";
|
|
173
183
|
import { n as grSplitterSafelist, t as grSplitterConfig } from "./chunks/config-BE6n20np.js";
|
|
174
184
|
import { n as sizeFromPointer, t as GrSplitter_default } from "./components/GrSplitter/chunks/GrSplitter-B9_JrT7q.js";
|
|
175
|
-
import { n as formatStatisticValue, t as GrStatistic_default } from "./components/GrStatistic/chunks/GrStatistic-
|
|
176
|
-
import { n as grStatisticSafelist, t as grStatisticConfig } from "./chunks/config-
|
|
177
|
-
import { n as
|
|
178
|
-
import { t as
|
|
185
|
+
import { n as formatStatisticValue, t as GrStatistic_default } from "./components/GrStatistic/chunks/GrStatistic-BJQv5aOS.js";
|
|
186
|
+
import { n as grStatisticSafelist, t as grStatisticConfig } from "./chunks/config-C8tVRv8i.js";
|
|
187
|
+
import { n as grStepsSafelist, t as grStepsConfig } from "./chunks/config-DGWFal5h.js";
|
|
188
|
+
import { t as GrSteps_default } from "./components/GrSteps/chunks/GrSteps-Cce4rfr3.js";
|
|
189
|
+
import { n as grSwitchSafelist, t as grSwitchConfig } from "./chunks/config-BoNR7_PD.js";
|
|
190
|
+
import { t as GrSwitch_default } from "./components/GrSwitch/chunks/GrSwitch-CHiIj9GT.js";
|
|
179
191
|
import { n as grTableSafelist, t as grTableConfig } from "./chunks/config-WTNhdh6T.js";
|
|
180
192
|
import "./components/GrTable/index.js";
|
|
181
|
-
import { n as GrTabPanels_default, t as GrTabPanel_default } from "./components/GrTabPanels/chunks/GrTabPanels-
|
|
193
|
+
import { n as GrTabPanels_default, t as GrTabPanel_default } from "./components/GrTabPanels/chunks/GrTabPanels-BZQS8-JM.js";
|
|
182
194
|
import { t as grTabPanelsConfig } from "./chunks/config-eXB87DOi.js";
|
|
183
195
|
import { n as grTabsSafelist, t as grTabsConfig } from "./chunks/config-DWN4x6_e.js";
|
|
184
196
|
import { t as GrTabs_default } from "./components/GrTabs/chunks/GrTabs-CBHZkOFY.js";
|
|
185
197
|
import { n as grTextareaSafelist, t as grTextareaConfig } from "./chunks/config-BDfTXHo1.js";
|
|
186
198
|
import "./components/GrTextarea/index.js";
|
|
187
|
-
import { n as GrTimeline_default, t as GrTimelineItem_default } from "./components/GrTimeline/chunks/GrTimeline-
|
|
199
|
+
import { n as GrTimeline_default, t as GrTimelineItem_default } from "./components/GrTimeline/chunks/GrTimeline-DIDdkTn7.js";
|
|
188
200
|
import { n as grTimelineSafelist, t as grTimelineConfig } from "./chunks/config-COpuWGr_.js";
|
|
189
201
|
import { GRANULARITY_TOAST_STATE, granularityToastPlugin, useToast } from "./composables/useToast.js";
|
|
190
202
|
import { n as grToasterSafelist, t as grToasterConfig } from "./chunks/config-ScuvHw6k.js";
|
|
191
|
-
import { t as GrToaster_default } from "./components/GrToaster/chunks/GrToaster-
|
|
203
|
+
import { t as GrToaster_default } from "./components/GrToaster/chunks/GrToaster-CC49q3a4.js";
|
|
192
204
|
import { n as grTooltipSafelist, t as grTooltipConfig } from "./chunks/config-CN2ULSQL.js";
|
|
193
205
|
import { t as GrTooltip_default } from "./components/GrTooltip/chunks/GrTooltip-B6AwE_UX.js";
|
|
194
206
|
import { n as grTreeSafelist, t as grTreeConfig } from "./chunks/config-CDat1wXf.js";
|
|
195
207
|
import { n as grTreeSelectSafelist, t as grTreeSelectConfig } from "./chunks/config-DCFvmHEv.js";
|
|
196
|
-
import { t as GrTreeSelect_default } from "./components/GrTreeSelect/chunks/GrTreeSelect-
|
|
208
|
+
import { t as GrTreeSelect_default } from "./components/GrTreeSelect/chunks/GrTreeSelect-DEfxWAc3.js";
|
|
197
209
|
import "./composables/useGrComponentConfig.js";
|
|
198
210
|
import "./composables/useGranularityTranslations.js";
|
|
199
211
|
import { GRANULARITY_THEME_STATE, granularityThemePlugin, initThemeEarly, useTheme } from "./composables/useTheme.js";
|
|
200
|
-
export { FileValidationError, GRANULARITY_THEME_STATE, GRANULARITY_TOAST_STATE, GR_KBD_TOKENS, GR_TONES, GrAlert_default as GrAlert, GrAutocomplete_default as GrAutocomplete, GrAvatar_default as GrAvatar, GrAvatarGroup_default as GrAvatarGroup, GrBadge_default as GrBadge, GrBadgeWrap_default as GrBadgeWrap, GrBottomNav_default as GrBottomNav, GrBreadcrumbs_default as GrBreadcrumbs, GrButton_default as GrButton, GrButtonGroup_default as GrButtonGroup, GrCard_default as GrCard, GrCheckbox_default as GrCheckbox, GrCheckboxGroup_default as GrCheckboxGroup, GrCodeBlock_default as GrCodeBlock, GrCollapse_default as GrCollapse, GrCollapseItem_default as GrCollapseItem, GrColorPicker_default as GrColorPicker, GrCommandPalette_default as GrCommandPalette, GrConfigProvider_default as GrConfigProvider, GrConfirmDialog_default as GrConfirmDialog, GrDataTable_default as GrDataTable, GrDelta_default as GrDelta, GrDescriptionList_default as GrDescriptionList, GrDialog_default as GrDialog, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, GrDialogServiceHost_default as GrDialogServiceHost, GrDivider_default as GrDivider, GrDrawer_default as GrDrawer, GrDropdown_default as GrDropdown, GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, GrEmptyState_default as GrEmptyState, GrFilePreview_default as GrFilePreview, GrFileUpload_default as GrFileUpload, GrForm_default as GrForm, GrFormErrorBanner_default as GrFormErrorBanner, GrFormField_default as GrFormField, GrFormFile_default as GrFormFile, GrFormSection_default as GrFormSection, GrIcon_default as GrIcon, GrImageViewer_default as GrImageViewer, GrInput_default as GrInput, GrInputTag_default as GrInputTag, GrJsonViewer_default as GrJsonViewer, GrKbd_default as GrKbd, GrLink_default as GrLink, GrList_default as GrList, GrListItem_default as GrListItem, GrLoading_default as GrLoading, GrModal_default as GrModal, GrNavbar_default as GrNavbar, GrNumberInput_default as GrNumberInput, GrPagination_default as GrPagination, GrPopover_default as GrPopover, GrProgressBar_default as GrProgressBar, GrProgressCircle_default as GrProgressCircle, GrPromptDialog_default as GrPromptDialog, GrRadio_default as GrRadio, GrRadioGroup_default as GrRadioGroup, GrRating_default as GrRating, GrResponseErrorBanner_default as GrResponseErrorBanner, GrSegmented_default as GrSegmented, GrSelect_default as GrSelect, GrSidebar_default as GrSidebar, GrSidebarGroup_default as GrSidebarGroup, GrSidebarItem_default as GrSidebarItem, GrSkeleton_default as GrSkeleton, GrSlider_default as GrSlider, GrSortableList_default as GrSortableList, GrSplitter_default as GrSplitter, GrStatistic_default as GrStatistic, GrSwitch_default as GrSwitch, GrTabPanel_default as GrTabPanel, GrTabPanels_default as GrTabPanels, GrTable_default as GrTable, GrTabs_default as GrTabs, GrTextarea_default as GrTextarea, GrTimeline_default as GrTimeline, GrTimelineItem_default as GrTimelineItem, GrToaster_default as GrToaster, GrTooltip_default as GrTooltip, GrTree_default as GrTree, GrTreeSelect_default as GrTreeSelect, GrUploadAbortError, GrUploadErrorBanner_default as GrUploadErrorBanner, GrUploadHttpError, coreResponseErrorParsers, createGrFormMessageResolver, createLoading, createResponseErrorClassifier, deltaDirection, deltaTone, dialogService, extendDefaultParsers, fileKindOf, findKbdToken, formatBadgeValue, formatStatisticValue, grAlertConfig, grAutocompleteConfig, grAutocompleteSafelist, grAvatarConfig, grAvatarSafelist, grBadgeConfig, grBadgeSafelist, grBadgeWrapConfig, grBadgeWrapSafelist, grBottomNavConfig, grBottomNavSafelist, grBreadcrumbsConfig, grBreadcrumbsSafelist, grButtonConfig, grButtonGroupConfig, grButtonSafelist, grCardConfig, grCardSafelist, grCheckboxConfig, grCheckboxGroupConfig, grCheckboxSafelist, grCodeBlockConfig, grCodeBlockSafelist, grCollapseConfig, grCollapseSafelist, grColorPickerConfig, grColorPickerSafelist, grCommandPaletteConfig, grCommandPaletteSafelist, grConfigProviderConfig, grConfirmDialogConfig, grDataTableConfig, grDataTableSafelist, grDeltaConfig, grDeltaSafelist, grDescriptionListConfig, grDescriptionListSafelist, grDialogSafelist, grDialogServiceConfig, grDividerConfig, grDividerSafelist, grDrawerConfig, grDrawerSafelist, grDropdownConfig, grDropdownMenuConfig, grDropdownMenuSafelist, grDropdownSafelist, grEmptyStateConfig, grEmptyStateSafelist, grFilePreviewConfig, grFilePreviewSafelist, grFileUploadConfig, grFileUploadSafelist, grFormConfig, grFormFieldConfig, grFormFieldSafelist, grFormFileConfig, grFormFileSafelist, grFormSectionConfig, grFormSectionSafelist, grIconConfig, grIconSafelist, grImageViewerConfig, grImageViewerSafelist, grInputConfig, grInputSafelist, grInputTagConfig, grInputTagSafelist, grJsonViewerConfig, grJsonViewerSafelist, grKbdConfig, grKbdSafelist, grLinkConfig, grLinkSafelist, grListConfig, grListSafelist, grLoadingConfig, grLoadingSafelist, grModalConfig, grModalSafelist, grNavbarConfig, grNavbarSafelist, grNumberInputConfig, grNumberInputSafelist, grPaginationConfig, grPaginationSafelist, grPopoverConfig, grPopoverSafelist, grProgressBarConfig, grProgressBarSafelist, grProgressCircleConfig, grProgressCircleSafelist, grPromptDialogConfig, grRadioConfig, grRadioGroupConfig, grRadioSafelist, grRatingConfig, grRatingSafelist, grSegmentedConfig, grSegmentedSafelist, grSelectConfig, grSelectSafelist, grSidebarConfig, grSidebarSafelist, grSkeletonConfig, grSliderConfig, grSliderSafelist, grSortableListConfig, grSortableListSafelist, grSplitterConfig, grSplitterSafelist, grStatisticConfig, grStatisticSafelist, grSwitchConfig, grSwitchSafelist, grTabPanelsConfig, grTableConfig, grTableSafelist, grTabsConfig, grTabsSafelist, grTextareaConfig, grTextareaSafelist, grTimelineConfig, grTimelineSafelist, grToasterConfig, grToasterSafelist, grTooltipConfig, grTooltipSafelist, grTreeConfig, grTreeSafelist, grTreeSelectConfig, grTreeSelectSafelist, granularityDialogServicePlugin, granularityThemePlugin, granularityToastPlugin, initThemeEarly, initialsFrom, isPreviewableKind, normalizeError, resolveBreadcrumbsFit, resolveBreadcrumbsLayout, resolveGrConfig, runFieldRules, sizeFromPointer, teardownDialogService, useAnnouncer, useComboboxNavigation, useDialogService, useDismissible, useDragGesture, useDragSort, useFloating, useFocusTrap, useGrButtonGroup, useGrComponentDefaults, useGrComponentProp, useGrComponentSize, useGrConfig, useGrFormContext, useGrFormControl, useGrFormFieldContext, useGrThemeAttrs, useGranularityTranslations, useOverlayLayer, usePortalTarget, useResponseError, useRovingFocus, useTheme, useToast, useVirtualList, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };
|
|
212
|
+
export { FileValidationError, GRANULARITY_THEME_STATE, GRANULARITY_TOAST_STATE, GR_KBD_TOKENS, GR_TONES, GrAlert_default as GrAlert, GrAutocomplete_default as GrAutocomplete, GrAvatar_default as GrAvatar, GrAvatarGroup_default as GrAvatarGroup, GrBadge_default as GrBadge, GrBadgeWrap_default as GrBadgeWrap, GrBottomNav_default as GrBottomNav, GrBreadcrumbs_default as GrBreadcrumbs, GrButton_default as GrButton, GrButtonGroup_default as GrButtonGroup, GrCard_default as GrCard, GrCheckbox_default as GrCheckbox, GrCheckboxGroup_default as GrCheckboxGroup, GrChip_default as GrChip, GrChipGroup_default as GrChipGroup, GrCodeBlock_default as GrCodeBlock, GrCollapse_default as GrCollapse, GrCollapseItem_default as GrCollapseItem, GrColorPicker_default as GrColorPicker, GrCommandPalette_default as GrCommandPalette, GrConfigProvider_default as GrConfigProvider, GrConfirmDialog_default as GrConfirmDialog, GrContextMenu_default as GrContextMenu, GrDataTable_default as GrDataTable, GrDelta_default as GrDelta, GrDescriptionList_default as GrDescriptionList, GrDialog_default as GrDialog, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, GrDialogServiceHost_default as GrDialogServiceHost, GrDivider_default as GrDivider, GrDrawer_default as GrDrawer, GrDropdown_default as GrDropdown, GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, GrEmptyState_default as GrEmptyState, GrFilePreview_default as GrFilePreview, GrFileUpload_default as GrFileUpload, GrForm_default as GrForm, GrFormErrorBanner_default as GrFormErrorBanner, GrFormField_default as GrFormField, GrFormFile_default as GrFormFile, GrFormSection_default as GrFormSection, GrIcon_default as GrIcon, GrImageViewer_default as GrImageViewer, GrInput_default as GrInput, GrInputTag_default as GrInputTag, GrJsonViewer_default as GrJsonViewer, GrKbd_default as GrKbd, GrLink_default as GrLink, GrList_default as GrList, GrListItem_default as GrListItem, GrLoading_default as GrLoading, GrModal_default as GrModal, GrNavbar_default as GrNavbar, GrNumberInput_default as GrNumberInput, GrPagination_default as GrPagination, GrPopover_default as GrPopover, GrProgressBar_default as GrProgressBar, GrProgressCircle_default as GrProgressCircle, GrPromptDialog_default as GrPromptDialog, GrRadio_default as GrRadio, GrRadioGroup_default as GrRadioGroup, GrRating_default as GrRating, GrResponseErrorBanner_default as GrResponseErrorBanner, GrSegmented_default as GrSegmented, GrSelect_default as GrSelect, GrSidebar_default as GrSidebar, GrSidebarGroup_default as GrSidebarGroup, GrSidebarItem_default as GrSidebarItem, GrSkeleton_default as GrSkeleton, GrSlider_default as GrSlider, GrSortableList_default as GrSortableList, GrSplitter_default as GrSplitter, GrStatistic_default as GrStatistic, GrSteps_default as GrSteps, GrSwitch_default as GrSwitch, GrTabPanel_default as GrTabPanel, GrTabPanels_default as GrTabPanels, GrTable_default as GrTable, GrTabs_default as GrTabs, GrTextarea_default as GrTextarea, GrTimeline_default as GrTimeline, GrTimelineItem_default as GrTimelineItem, GrToaster_default as GrToaster, GrTooltip_default as GrTooltip, GrTree_default as GrTree, GrTreeSelect_default as GrTreeSelect, GrUploadAbortError, GrUploadErrorBanner_default as GrUploadErrorBanner, GrUploadHttpError, GrValue_default as GrValue, coreResponseErrorParsers, createGrFormMessageResolver, createLoading, createResponseErrorClassifier, deltaDirection, deltaTone, dialogService, extendDefaultParsers, fileKindOf, findKbdToken, formatBadgeValue, formatStatisticValue, grAlertConfig, grAutocompleteConfig, grAutocompleteSafelist, grAvatarConfig, grAvatarSafelist, grBadgeConfig, grBadgeSafelist, grBadgeWrapConfig, grBadgeWrapSafelist, grBottomNavConfig, grBottomNavSafelist, grBreadcrumbsConfig, grBreadcrumbsSafelist, grButtonConfig, grButtonGroupConfig, grButtonSafelist, grCardConfig, grCardSafelist, grCheckboxConfig, grCheckboxGroupConfig, grCheckboxSafelist, grChipConfig, grChipGroupConfig, grChipGroupSafelist, grChipSafelist, grCodeBlockConfig, grCodeBlockSafelist, grCollapseConfig, grCollapseSafelist, grColorPickerConfig, grColorPickerSafelist, grCommandPaletteConfig, grCommandPaletteSafelist, grConfigProviderConfig, grConfirmDialogConfig, grContextMenuConfig, grDataTableConfig, grDataTableSafelist, grDeltaConfig, grDeltaSafelist, grDescriptionListConfig, grDescriptionListSafelist, grDialogSafelist, grDialogServiceConfig, grDividerConfig, grDividerSafelist, grDrawerConfig, grDrawerSafelist, grDropdownConfig, grDropdownMenuConfig, grDropdownMenuSafelist, grDropdownSafelist, grEmptyStateConfig, grEmptyStateSafelist, grFilePreviewConfig, grFilePreviewSafelist, grFileUploadConfig, grFileUploadSafelist, grFormConfig, grFormFieldConfig, grFormFieldSafelist, grFormFileConfig, grFormFileSafelist, grFormSectionConfig, grFormSectionSafelist, grIconConfig, grIconSafelist, grImageViewerConfig, grImageViewerSafelist, grInputConfig, grInputSafelist, grInputTagConfig, grInputTagSafelist, grJsonViewerConfig, grJsonViewerSafelist, grKbdConfig, grKbdSafelist, grLinkConfig, grLinkSafelist, grListConfig, grListSafelist, grLoadingConfig, grLoadingSafelist, grModalConfig, grModalSafelist, grNavbarConfig, grNavbarSafelist, grNumberInputConfig, grNumberInputSafelist, grPaginationConfig, grPaginationSafelist, grPopoverConfig, grPopoverSafelist, grProgressBarConfig, grProgressBarSafelist, grProgressCircleConfig, grProgressCircleSafelist, grPromptDialogConfig, grRadioConfig, grRadioGroupConfig, grRadioSafelist, grRatingConfig, grRatingSafelist, grSegmentedConfig, grSegmentedSafelist, grSelectConfig, grSelectSafelist, grSidebarConfig, grSidebarSafelist, grSkeletonConfig, grSliderConfig, grSliderSafelist, grSortableListConfig, grSortableListSafelist, grSplitterConfig, grSplitterSafelist, grStatisticConfig, grStatisticSafelist, grStepsConfig, grStepsSafelist, grSwitchConfig, grSwitchSafelist, grTabPanelsConfig, grTableConfig, grTableSafelist, grTabsConfig, grTabsSafelist, grTextareaConfig, grTextareaSafelist, grTimelineConfig, grTimelineSafelist, grToasterConfig, grToasterSafelist, grTooltipConfig, grTooltipSafelist, grTreeConfig, grTreeSafelist, grTreeSelectConfig, grTreeSelectSafelist, grValueConfig, grValueSafelist, granularityDialogServicePlugin, granularityThemePlugin, granularityToastPlugin, initThemeEarly, initialsFrom, isPreviewableKind, normalizeError, resolveBreadcrumbsFit, resolveBreadcrumbsLayout, resolveGrConfig, runFieldRules, sizeFromPointer, teardownDialogService, titleWhenTruncated, useAnnouncer, useComboboxNavigation, useDialogService, useDismissible, useDragGesture, useDragSort, useFloating, useFocusTrap, useGrButtonGroup, useGrComponentDefaults, useGrComponentProp, useGrComponentSize, useGrConfig, useGrFormContext, useGrFormControl, useGrFormFieldContext, useGrThemeAttrs, useGranularityTranslations, useOverlayLayer, usePortalTarget, useResponseError, useRovingFocus, useTheme, useToast, useVirtualList, vAutofocus, vAutosize, vClickOutside, vDropzone, vHotkey, vLoading };
|
|
@@ -62,28 +62,28 @@
|
|
|
62
62
|
|
|
63
63
|
/* Status roles */
|
|
64
64
|
--gr-success: #34d399;
|
|
65
|
-
--gr-success-light: #
|
|
65
|
+
--gr-success-light: #194536;
|
|
66
66
|
--gr-success-fg: #0f172a;
|
|
67
67
|
--gr-primary-text: #c7d2fe;
|
|
68
68
|
--gr-success-text: #6ee7b7;
|
|
69
69
|
--gr-warning: #fb923c;
|
|
70
|
-
--gr-warning-light: #
|
|
70
|
+
--gr-warning-light: #672e1c;
|
|
71
71
|
--gr-warning-fg: #0f172a;
|
|
72
72
|
--gr-warning-text: #fdba74;
|
|
73
73
|
--gr-danger: #f87171;
|
|
74
|
-
--gr-danger-light: #
|
|
74
|
+
--gr-danger-light: #6a2522;
|
|
75
75
|
--gr-danger-fg: #0f172a;
|
|
76
76
|
--gr-danger-text: #fca5a5;
|
|
77
77
|
--gr-info: #60a5fa;
|
|
78
|
-
--gr-info-light: #
|
|
78
|
+
--gr-info-light: #213771;
|
|
79
79
|
--gr-info-fg: #0f172a;
|
|
80
80
|
--gr-info-text: #bfdbfe;
|
|
81
81
|
--gr-slate: #94a3b8;
|
|
82
|
-
--gr-slate-light: #
|
|
82
|
+
--gr-slate-light: #313b4a;
|
|
83
83
|
--gr-slate-fg: #0f172a;
|
|
84
84
|
--gr-slate-text: #cbd5e1;
|
|
85
85
|
--gr-azure: #38bdf8;
|
|
86
|
-
--gr-azure-light: #
|
|
86
|
+
--gr-azure-light: #1b425c;
|
|
87
87
|
--gr-azure-fg: #0f172a;
|
|
88
88
|
--gr-azure-text: #bae6fd;
|
|
89
89
|
|
|
@@ -149,6 +149,11 @@
|
|
|
149
149
|
--gr-sidebar-accent-fg: #f1f5f9;
|
|
150
150
|
--gr-sidebar-brd: #334155;
|
|
151
151
|
--gr-sidebar-ring: #818cf8;
|
|
152
|
+
|
|
153
|
+
/* Elevation */
|
|
154
|
+
--gr-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.45);
|
|
155
|
+
--gr-shadow-2: 0 8px 24px rgba(0, 0, 0, 0.55);
|
|
156
|
+
--gr-shadow-3: 0 16px 48px rgba(0, 0, 0, 0.65);
|
|
152
157
|
}
|
|
153
158
|
|
|
154
159
|
@supports not (color: color-mix(in srgb, #000 50%, #fff)) {
|
|
@@ -165,6 +165,11 @@
|
|
|
165
165
|
--gr-sidebar-accent-fg: #1e293b;
|
|
166
166
|
--gr-sidebar-brd: #e2e8f0;
|
|
167
167
|
--gr-sidebar-ring: #6366f1;
|
|
168
|
+
|
|
169
|
+
/* Elevation */
|
|
170
|
+
--gr-shadow-1: 0 1px 2px rgba(15, 23, 42, 0.08);
|
|
171
|
+
--gr-shadow-2: 0 8px 24px rgba(15, 23, 42, 0.14);
|
|
172
|
+
--gr-shadow-3: 0 16px 48px rgba(15, 23, 42, 0.20);
|
|
168
173
|
}
|
|
169
174
|
|
|
170
175
|
@supports not (color: color-mix(in srgb, #000 50%, #fff)) {
|