@feugene/granularity 0.36.0 → 0.38.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-2ZHRsdOc.js.map +1 -1
- package/dist/chunks/config-2vrOFn2f.js.map +1 -1
- package/dist/chunks/config-3bQeQvqd.js.map +1 -1
- package/dist/chunks/config-87fszqnD.js.map +1 -1
- package/dist/chunks/config-8Pcutu1j.js.map +1 -1
- package/dist/chunks/config-A-bBiotF.js.map +1 -1
- package/dist/chunks/config-B0uvcTPH.js.map +1 -1
- package/dist/chunks/config-B3J0alyY.js.map +1 -1
- package/dist/chunks/config-B5SBUa6u.js.map +1 -1
- package/dist/chunks/config-B7W9VlZ7.js.map +1 -1
- package/dist/chunks/config-BDSaD-5p.js.map +1 -1
- package/dist/chunks/config-BEO7brpO.js.map +1 -1
- package/dist/chunks/config-BNu8lFQB.js.map +1 -1
- package/dist/chunks/config-BRESvs9g.js.map +1 -1
- package/dist/chunks/config-BTmfQFwi.js.map +1 -1
- package/dist/chunks/{config-CuQmUkMw2.js → config-BUNxHnEz.js} +1 -1
- package/dist/chunks/config-BUNxHnEz.js.map +1 -0
- package/dist/chunks/config-BaWANzzB.js.map +1 -1
- package/dist/chunks/config-BcXX7S7B.js.map +1 -1
- package/dist/chunks/config-Bd7QfiGj.js.map +1 -1
- package/dist/chunks/config-BhfNgyWL.js.map +1 -1
- package/dist/chunks/config-Bjn30smH.js.map +1 -1
- package/dist/chunks/config-BlJa1Mj9.js.map +1 -1
- package/dist/chunks/config-BoUI0t-t.js.map +1 -1
- package/dist/chunks/config-BqT6PMzO.js.map +1 -1
- package/dist/chunks/config-BscVxZR3.js.map +1 -1
- package/dist/chunks/config-BuGlNPE9.js.map +1 -1
- package/dist/chunks/config-C0Ea9ePP.js.map +1 -1
- package/dist/chunks/config-C0Eu8jpG.js.map +1 -1
- package/dist/chunks/config-CDat1wXf.js.map +1 -1
- package/dist/chunks/config-CIkdsWUk.js.map +1 -1
- package/dist/chunks/config-CJzmDHfI.js.map +1 -1
- package/dist/chunks/config-CLjjjPZj.js.map +1 -1
- package/dist/chunks/config-CMNfZO7S.js.map +1 -1
- package/dist/chunks/config-CQLNjc9X.js.map +1 -0
- package/dist/chunks/config-CT4lP6S4.js.map +1 -1
- package/dist/chunks/config-CWtfxkM9.js.map +1 -1
- package/dist/chunks/config-CYthTVK2.js.map +1 -1
- package/dist/chunks/config-CZPDPJlg.js.map +1 -1
- package/dist/chunks/config-CbEbLyDE.js.map +1 -1
- package/dist/chunks/config-ChPg-BQv.js.map +1 -1
- package/dist/chunks/config-CjKpUcmy.js.map +1 -1
- package/dist/chunks/config-CjWOTgLL.js.map +1 -1
- package/dist/chunks/config-CjXjhphs.js.map +1 -1
- package/dist/chunks/config-CnYdE3HZ.js.map +1 -0
- package/dist/chunks/config-CsCUuukB.js.map +1 -1
- package/dist/chunks/config-CvbVM4ep.js.map +1 -1
- package/dist/chunks/config-D0NzGYaE.js.map +1 -1
- package/dist/chunks/config-D0W8mGFD.js.map +1 -1
- package/dist/chunks/config-D82r782v.js.map +1 -1
- package/dist/chunks/config-DBi0GVce.js.map +1 -1
- package/dist/chunks/config-DBmdgoVf.js.map +1 -0
- package/dist/chunks/config-DCq4JySZ.js.map +1 -1
- package/dist/chunks/config-DGC00bTp.js.map +1 -1
- package/dist/chunks/config-DIDz_E5m.js.map +1 -1
- package/dist/chunks/config-DM0lsduD.js.map +1 -1
- package/dist/chunks/config-DNDgp9bB.js.map +1 -1
- package/dist/chunks/config-DOYz_SVK.js.map +1 -1
- package/dist/chunks/config-DRbojEzO.js.map +1 -1
- package/dist/chunks/config-DUNH02Fg.js.map +1 -1
- package/dist/chunks/config-DUbbGcfw.js.map +1 -1
- package/dist/chunks/config-DVCNvhIG.js.map +1 -0
- package/dist/chunks/config-DWL81-aM.js.map +1 -1
- package/dist/chunks/config-DZCUPHPU.js.map +1 -1
- package/dist/chunks/config-DeyT9dJl.js.map +1 -1
- package/dist/chunks/config-DolULhjJ.js.map +1 -1
- package/dist/chunks/config-DpAYidyY.js.map +1 -0
- package/dist/chunks/config-Droqn55j.js.map +1 -1
- package/dist/chunks/config-DwABJHEo.js.map +1 -1
- package/dist/chunks/config-E1cTyRVV.js.map +1 -1
- package/dist/chunks/config-MmPym-Z7.js.map +1 -0
- package/dist/chunks/config-QaIc_gRa.js.map +1 -1
- package/dist/chunks/config-Yy67uWHY.js.map +1 -1
- package/dist/chunks/config-Z5LeUXys.js.map +1 -1
- package/dist/chunks/config-_jbgsFpw.js.map +1 -1
- package/dist/chunks/config-eXB87DOi.js.map +1 -1
- package/dist/chunks/config-rLkc9Zn2.js.map +1 -1
- package/dist/chunks/{context-CTbuwcYs.js → context-CPMRfwVr.js} +1 -1
- package/dist/chunks/{context-CTbuwcYs.js.map → context-CPMRfwVr.js.map} +1 -1
- package/dist/chunks/devHook-CiqijpNM.js +44 -0
- package/dist/chunks/devHook-CiqijpNM.js.map +1 -0
- package/dist/chunks/{grRadioStyles-DGL2QLy6.js → grRadioStyles-BwRyCjQQ.js} +4 -2
- package/dist/chunks/{grRadioStyles-DGL2QLy6.js.map → grRadioStyles-BwRyCjQQ.js.map} +1 -1
- package/dist/chunks/{granular-provider-Bp_BCBnr.js → granular-provider-DP2gk0oa.js} +9 -8
- package/dist/chunks/{granular-provider-Bp_BCBnr.js.map → granular-provider-DP2gk0oa.js.map} +1 -1
- package/dist/chunks/{overlayStack-0CZS99Da.js → overlayStack-DH4Z7am1.js} +45 -25
- package/dist/chunks/overlayStack-DH4Z7am1.js.map +1 -0
- package/dist/chunks/{renamedProp-BwcN-SJg.js → renamedProp-Dy96tT-F.js} +1 -1
- package/dist/chunks/{renamedProp-BwcN-SJg.js.map → renamedProp-Dy96tT-F.js.map} +1 -1
- package/dist/chunks/{useModalOverlay-BnAGZpcI.js → useModalOverlay-ACRkflzx.js} +3 -3
- package/dist/chunks/{useModalOverlay-BnAGZpcI.js.map → useModalOverlay-ACRkflzx.js.map} +1 -1
- package/dist/chunks/{usePortalTarget-C0p-mhaM.js → usePortalTarget-BhrRgdqW.js} +1 -1
- package/dist/chunks/{usePortalTarget-C0p-mhaM.js.map → usePortalTarget-BhrRgdqW.js.map} +1 -1
- package/dist/chunks/{validation-5HhpanPP.js → validation-BDjqsuGB.js} +1 -1
- package/dist/chunks/{validation-5HhpanPP.js.map → validation-BDjqsuGB.js.map} +1 -1
- package/dist/components/GrAlert/chunks/{GrAlert-FAVf-ksH.js → GrAlert-D72y1IEh.js} +1 -1
- package/dist/components/GrAlert/chunks/{GrAlert-FAVf-ksH.js.map → GrAlert-D72y1IEh.js.map} +1 -1
- package/dist/components/GrAlert/index.js +1 -1
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BQsSE7sj.js → GrAutocomplete-BpmFmpKs.js} +4 -6
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BQsSE7sj.js.map → GrAutocomplete-BpmFmpKs.js.map} +1 -1
- package/dist/components/GrAutocomplete/index.js +1 -1
- package/dist/components/GrAvatar/chunks/{GrAvatar-CNmLmgcr.js → GrAvatar-dWEXiCJG.js} +1 -1
- package/dist/components/GrAvatar/chunks/{GrAvatar-CNmLmgcr.js.map → GrAvatar-dWEXiCJG.js.map} +1 -1
- package/dist/components/GrAvatar/index.js +1 -1
- package/dist/components/GrBadge/chunks/{GrBadge-DpUDXKbq.js → GrBadge-DBeQXEir.js} +2 -2
- package/dist/components/GrBadge/chunks/{GrBadge-DpUDXKbq.js.map → GrBadge-DBeQXEir.js.map} +1 -1
- package/dist/components/GrBadge/index.js +1 -1
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-B-A3PRkE.js → GrBadgeWrap-wdfxaXiu.js} +3 -1
- package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-B-A3PRkE.js.map → GrBadgeWrap-wdfxaXiu.js.map} +1 -1
- package/dist/components/GrBadgeWrap/index.js +1 -1
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-wtFatLjB.js → GrBottomNav-nE08pVUJ.js} +1 -1
- package/dist/components/GrBottomNav/chunks/{GrBottomNav-wtFatLjB.js.map → GrBottomNav-nE08pVUJ.js.map} +1 -1
- package/dist/components/GrBottomNav/index.js +1 -1
- package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DRDNan_n.js → GrBreadcrumbs-DOpwY2EF.js} +3 -3
- package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DRDNan_n.js.map → GrBreadcrumbs-DOpwY2EF.js.map} +1 -1
- package/dist/components/GrBreadcrumbs/index.js +1 -1
- package/dist/components/GrButton/chunks/{GrButton-7GP0zObj.js → GrButton-CS4TqMtG.js} +1 -1
- package/dist/components/GrButton/chunks/{GrButton-7GP0zObj.js.map → GrButton-CS4TqMtG.js.map} +1 -1
- package/dist/components/GrButton/index.js +1 -1
- package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js.map +1 -1
- package/dist/components/GrButtonGroup/index.js +1 -1
- package/dist/components/GrCard/chunks/{GrCard-BttXz1pQ.js → GrCard-Ck5--lMF.js} +2 -2
- package/dist/components/GrCard/chunks/{GrCard-BttXz1pQ.js.map → GrCard-Ck5--lMF.js.map} +1 -1
- package/dist/components/GrCard/index.js +1 -1
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-CEcHIsXM.js → GrCheckbox-Dp201frb.js} +1 -1
- package/dist/components/GrCheckbox/chunks/{GrCheckbox-CEcHIsXM.js.map → GrCheckbox-Dp201frb.js.map} +1 -1
- package/dist/components/GrCheckbox/index.js +1 -1
- package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-BOwrVcFr.js → GrCheckboxGroup-IpqG5qwm.js} +2 -2
- package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-BOwrVcFr.js.map → GrCheckboxGroup-IpqG5qwm.js.map} +1 -1
- package/dist/components/GrCheckboxGroup/index.js +1 -1
- package/dist/components/GrChip/chunks/{GrChip-BTivtwff.js → GrChip-CKqyzYcv.js} +10 -7
- package/dist/components/GrChip/chunks/{GrChip-BTivtwff.js.map → GrChip-CKqyzYcv.js.map} +1 -1
- package/dist/components/GrChip/index.js +1 -1
- package/dist/components/GrChipGroup/chunks/{GrChipGroup-C78Vcwos.js → GrChipGroup-dDGwnC04.js} +1 -1
- package/dist/components/GrChipGroup/chunks/{GrChipGroup-C78Vcwos.js.map → GrChipGroup-dDGwnC04.js.map} +1 -1
- package/dist/components/GrChipGroup/index.js +1 -1
- package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-Dp0eEBTZ.js → GrCodeBlock-BUOwKwQE.js} +2 -2
- package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-Dp0eEBTZ.js.map → GrCodeBlock-BUOwKwQE.js.map} +1 -1
- package/dist/components/GrCodeBlock/index.js +1 -1
- package/dist/components/GrCollapse/chunks/{GrCollapse-BlW6ybdL.js → GrCollapse-DWH3QAnU.js} +6 -5
- package/dist/components/GrCollapse/chunks/{GrCollapse-BlW6ybdL.js.map → GrCollapse-DWH3QAnU.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +1 -1
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-B-L4CWMt.js → GrColorPicker-BwzRLs-i.js} +4 -4
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-B-L4CWMt.js.map → GrColorPicker-BwzRLs-i.js.map} +1 -1
- package/dist/components/GrColorPicker/index.js +1 -1
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-8HkYmMVP.js → GrCommandPalette-CnzPuoIM.js} +7 -7
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-8HkYmMVP.js.map → GrCommandPalette-CnzPuoIM.js.map} +1 -1
- package/dist/components/GrCommandPalette/index.js +1 -1
- package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BF7R3hgg.js → GrConfigProvider-t9x2UToH.js} +13 -12
- package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BF7R3hgg.js.map → GrConfigProvider-t9x2UToH.js.map} +1 -1
- package/dist/components/GrConfigProvider/index.js +2 -2
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-CZEO2JR4.js → GrConfirmDialog-e15nFI8M.js} +4 -4
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-CZEO2JR4.js.map → GrConfirmDialog-e15nFI8M.js.map} +1 -1
- package/dist/components/GrConfirmDialog/index.js +1 -1
- package/dist/components/GrContextMenu/chunks/{GrContextMenu-DlFWm0eW.js → GrContextMenu-RpxMHQXH.js} +1 -1
- package/dist/components/GrContextMenu/chunks/{GrContextMenu-DlFWm0eW.js.map → GrContextMenu-RpxMHQXH.js.map} +1 -1
- package/dist/components/GrContextMenu/index.js +1 -1
- package/dist/components/GrDataTable/chunks/{GrDataTable-4JAgOQ-7.js → GrDataTable-BYYG_XZA.js} +5 -5
- package/dist/components/GrDataTable/chunks/{GrDataTable-4JAgOQ-7.js.map → GrDataTable-BYYG_XZA.js.map} +1 -1
- package/dist/components/GrDataTable/index.js +1 -1
- package/dist/components/GrDelta/chunks/{GrDelta-BZwkgQW-.js → GrDelta-BpfqebEV.js} +0 -0
- package/dist/components/GrDelta/chunks/{GrDelta-BZwkgQW-.js.map → GrDelta-BpfqebEV.js.map} +1 -1
- package/dist/components/GrDelta/index.js +1 -1
- package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-BMeCgFV3.js → GrDescriptionList-D8ANFpn_.js} +2 -2
- package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-BMeCgFV3.js.map → GrDescriptionList-D8ANFpn_.js.map} +1 -1
- package/dist/components/GrDescriptionList/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-CKNbnxwO.js → GrDialog-DDz_OEhk.js} +3 -3
- package/dist/components/GrDialog/chunks/{GrDialog-CKNbnxwO.js.map → GrDialog-DDz_OEhk.js.map} +1 -1
- package/dist/components/GrDialog/index.js +1 -1
- package/dist/components/GrDialogService/chunks/{GrDialogService-Ut8iiBQh.js → GrDialogService-BmXiYmUp.js} +9 -8
- package/dist/components/GrDialogService/chunks/{GrDialogService-Ut8iiBQh.js.map → GrDialogService-BmXiYmUp.js.map} +1 -1
- package/dist/components/GrDialogService/index.js +1 -1
- package/dist/components/GrDivider/chunks/{GrDivider-BXavGcMX.js → GrDivider-DxA-zV25.js} +1 -1
- package/dist/components/GrDivider/chunks/{GrDivider-BXavGcMX.js.map → GrDivider-DxA-zV25.js.map} +1 -1
- package/dist/components/GrDivider/index.js +1 -1
- package/dist/components/GrDrawer/chunks/{GrDrawer-xfoy-MCj.js → GrDrawer-BRMHhvbd.js} +5 -5
- package/dist/components/GrDrawer/chunks/{GrDrawer-xfoy-MCj.js.map → GrDrawer-BRMHhvbd.js.map} +1 -1
- package/dist/components/GrDrawer/index.js +1 -1
- package/dist/components/GrDropdown/chunks/{GrDropdown-7r772-Cq.js → GrDropdown-cLZuZMEY.js} +6 -8
- package/dist/components/GrDropdown/chunks/{GrDropdown-7r772-Cq.js.map → GrDropdown-cLZuZMEY.js.map} +1 -1
- package/dist/components/GrDropdown/index.js +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DNurbsWc.js → GrDropdownMenu-Dxkz_ry4.js} +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DNurbsWc.js.map → GrDropdownMenu-Dxkz_ry4.js.map} +1 -1
- package/dist/components/GrDropdownMenu/chunks/GrDropdownMenuList-B33ZzwfB.js.map +1 -1
- package/dist/components/GrDropdownMenu/index.js +1 -1
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-RqsWvgI9.js → GrEmptyState-BbvwE-E0.js} +2 -2
- package/dist/components/GrEmptyState/chunks/{GrEmptyState-RqsWvgI9.js.map → GrEmptyState-BbvwE-E0.js.map} +1 -1
- package/dist/components/GrEmptyState/index.js +1 -1
- package/dist/components/GrFilePreview/chunks/{GrFilePreview-C9Z7hMK8.js → GrFilePreview-PabkLgYX.js} +1 -1
- package/dist/components/GrFilePreview/chunks/{GrFilePreview-C9Z7hMK8.js.map → GrFilePreview-PabkLgYX.js.map} +1 -1
- package/dist/components/GrFilePreview/index.js +1 -1
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-C0ROpmOY.js → GrFileUpload-BwMR71zN.js} +4 -4
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-C0ROpmOY.js.map → GrFileUpload-BwMR71zN.js.map} +1 -1
- package/dist/components/GrFileUpload/index.js +1 -1
- package/dist/components/GrForm/chunks/{GrForm-CrnfCsgj.js → GrForm-xTtavR-K.js} +1 -1
- package/dist/components/GrForm/chunks/{GrForm-CrnfCsgj.js.map → GrForm-xTtavR-K.js.map} +1 -1
- package/dist/components/GrForm/index.js +2 -2
- package/dist/components/GrFormField/chunks/{GrFormField-DSylU7IU.js → GrFormField-DO61vxpS.js} +2 -2
- package/dist/components/GrFormField/chunks/{GrFormField-DSylU7IU.js.map → GrFormField-DO61vxpS.js.map} +1 -1
- package/dist/components/GrFormField/index.js +1 -1
- package/dist/components/GrFormFile/chunks/{GrFormFile-B1jGZyIj.js → GrFormFile-Dlxx-9zi.js} +3 -3
- package/dist/components/GrFormFile/chunks/{GrFormFile-B1jGZyIj.js.map → GrFormFile-Dlxx-9zi.js.map} +1 -1
- package/dist/components/GrFormFile/index.js +1 -1
- package/dist/components/GrFormSection/chunks/{GrFormSection-ejieOg9H.js → GrFormSection-DV1S6R_N.js} +1 -1
- package/dist/components/GrFormSection/chunks/{GrFormSection-ejieOg9H.js.map → GrFormSection-DV1S6R_N.js.map} +1 -1
- package/dist/components/GrFormSection/index.js +1 -1
- package/dist/components/GrIcon/chunks/{GrIcon-Dmf0c9ba.js → GrIcon-DTZIgmje.js} +1 -1
- package/dist/components/GrIcon/chunks/{GrIcon-Dmf0c9ba.js.map → GrIcon-DTZIgmje.js.map} +1 -1
- package/dist/components/GrIcon/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer--BU8yrfx.js → GrImageViewer-CcduIFsa.js} +2 -4
- package/dist/components/GrImageViewer/chunks/{GrImageViewer--BU8yrfx.js.map → GrImageViewer-CcduIFsa.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInput/chunks/{GrInput-CJ7eu3fR.js → GrInput-TFeBm3gQ.js} +1 -1
- package/dist/components/GrInput/chunks/{GrInput-CJ7eu3fR.js.map → GrInput-TFeBm3gQ.js.map} +1 -1
- package/dist/components/GrInput/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-ByD9NugQ.js → GrInputTag-DhfUNOA5.js} +3 -3
- package/dist/components/GrInputTag/chunks/{GrInputTag-ByD9NugQ.js.map → GrInputTag-DhfUNOA5.js.map} +1 -1
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-BXG7DdTe.js → GrJsonViewer-CdtmUpZ3.js} +6 -6
- package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-BXG7DdTe.js.map → GrJsonViewer-CdtmUpZ3.js.map} +1 -1
- package/dist/components/GrJsonViewer/index.js +2 -2
- package/dist/components/GrKbd/chunks/{GrKbd-D2ga1H9i.js → GrKbd-D_a1mPLe.js} +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-D2ga1H9i.js.map → GrKbd-D_a1mPLe.js.map} +1 -1
- package/dist/components/GrKbd/index.js +1 -1
- package/dist/components/GrLink/chunks/{GrLink-DYXw3W9w.js → GrLink-DwWErumU.js} +2 -2
- package/dist/components/GrLink/chunks/{GrLink-DYXw3W9w.js.map → GrLink-DwWErumU.js.map} +1 -1
- package/dist/components/GrLink/index.js +2 -2
- package/dist/components/GrList/chunks/{GrList-B_CRJB4c.js → GrList-Unya-LXb.js} +3 -3
- package/dist/components/GrList/chunks/{GrList-B_CRJB4c.js.map → GrList-Unya-LXb.js.map} +1 -1
- package/dist/components/GrList/index.js +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading-CMD3Ri9P.js → GrLoading-BDrlrup_.js} +1 -1
- package/dist/components/GrLoading/chunks/{GrLoading-CMD3Ri9P.js.map → GrLoading-BDrlrup_.js.map} +1 -1
- package/dist/components/GrLoading/index.js +1 -1
- package/dist/components/GrModal/chunks/{GrModal-DixnhJcu.js → GrModal-Cm0mtSXk.js} +4 -4
- package/dist/components/GrModal/chunks/{GrModal-DixnhJcu.js.map → GrModal-Cm0mtSXk.js.map} +1 -1
- package/dist/components/GrModal/index.js +1 -1
- package/dist/components/GrNavbar/chunks/{GrNavbar-Dr8e5kW-.js → GrNavbar-BRGuksiy.js} +3 -3
- package/dist/components/GrNavbar/chunks/{GrNavbar-Dr8e5kW-.js.map → GrNavbar-BRGuksiy.js.map} +1 -1
- package/dist/components/GrNavbar/index.js +1 -1
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-DQ59YICu.js → GrNumberInput-BqPydXpK.js} +7 -9
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-DQ59YICu.js.map → GrNumberInput-BqPydXpK.js.map} +1 -1
- package/dist/components/GrNumberInput/index.js +2 -2
- package/dist/components/GrPagination/chunks/{GrPagination-68iyAwQz.js → GrPagination-DhbNZHEF.js} +4 -4
- package/dist/components/GrPagination/chunks/{GrPagination-68iyAwQz.js.map → GrPagination-DhbNZHEF.js.map} +1 -1
- package/dist/components/GrPagination/index.js +1 -1
- package/dist/components/GrPopover/chunks/{GrPopover-DEFxDffj.js → GrPopover-CcWvr1ZA.js} +3 -3
- package/dist/components/GrPopover/chunks/{GrPopover-DEFxDffj.js.map → GrPopover-CcWvr1ZA.js.map} +1 -1
- package/dist/components/GrPopover/index.js +2 -2
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-Cd7AaJtR.js → GrProgressBar-C3NRBqIP.js} +2 -2
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-Cd7AaJtR.js.map → GrProgressBar-C3NRBqIP.js.map} +1 -1
- package/dist/components/GrProgressBar/index.js +1 -1
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-D3yWXYDa.js → GrProgressCircle-CdvbINQc.js} +2 -2
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-D3yWXYDa.js.map → GrProgressCircle-CdvbINQc.js.map} +1 -1
- package/dist/components/GrProgressCircle/index.js +1 -1
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ckeombia.js → GrPromptDialog-8RxQsOQ_.js} +8 -8
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ckeombia.js.map → GrPromptDialog-8RxQsOQ_.js.map} +1 -1
- package/dist/components/GrPromptDialog/index.js +1 -1
- package/dist/components/GrRadio/chunks/{GrRadio-Aq3v8XgG.js → GrRadio-B1776V9D.js} +2 -2
- package/dist/components/GrRadio/chunks/{GrRadio-Aq3v8XgG.js.map → GrRadio-B1776V9D.js.map} +1 -1
- package/dist/components/GrRadio/index.js +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-y9LVdTWh.js → GrRadioGroup-UgitrBFl.js} +2 -2
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-y9LVdTWh.js.map → GrRadioGroup-UgitrBFl.js.map} +1 -1
- package/dist/components/GrRadioGroup/index.js +1 -1
- package/dist/components/GrRating/chunks/{GrRating-IEiTOdnF.js → GrRating-DTriyyqG.js} +1 -1
- package/dist/components/GrRating/chunks/{GrRating-IEiTOdnF.js.map → GrRating-DTriyyqG.js.map} +1 -1
- package/dist/components/GrRating/index.js +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DMeOWlzj.js → GrResponseErrorBanner-NEEJZ8zi.js} +2 -2
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DMeOWlzj.js.map → GrResponseErrorBanner-NEEJZ8zi.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CBVRpgIG.js → GrResponseErrorBanner-ZvBvEQDZ.js} +1 -1
- package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CBVRpgIG.js.map → GrResponseErrorBanner-ZvBvEQDZ.js.map} +1 -1
- package/dist/components/GrResponseErrorBanner/index.js +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-CB-VR-yL.js → GrSegmented-NKTi9bMG.js} +1 -1
- package/dist/components/GrSegmented/chunks/{GrSegmented-CB-VR-yL.js.map → GrSegmented-NKTi9bMG.js.map} +1 -1
- package/dist/components/GrSegmented/index.js +1 -1
- package/dist/components/GrSelect/chunks/{GrSelect-Bm3Jugx8.js → GrSelect-Do1iAyp1.js} +6 -6
- package/dist/components/GrSelect/chunks/{GrSelect-Bm3Jugx8.js.map → GrSelect-Do1iAyp1.js.map} +1 -1
- package/dist/components/GrSelect/index.js +1 -1
- package/dist/components/GrSidebar/chunks/{GrSidebar-alkwBUzL.js → GrSidebar-DoKLlHSw.js} +2 -2
- package/dist/components/GrSidebar/chunks/{GrSidebar-alkwBUzL.js.map → GrSidebar-DoKLlHSw.js.map} +1 -1
- package/dist/components/GrSidebar/index.js +1 -1
- package/dist/components/GrSkeleton/chunks/GrSkeleton-CgfXxPQ2.js.map +1 -1
- package/dist/components/GrSlider/chunks/{GrSlider-DM6W6U9c.js → GrSlider-Db-jACXz.js} +6 -4
- package/dist/components/GrSlider/chunks/{GrSlider-DM6W6U9c.js.map → GrSlider-Db-jACXz.js.map} +1 -1
- package/dist/components/GrSlider/index.js +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-HyKX--rO.js → GrSortableList-CQCaWivn.js} +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-HyKX--rO.js.map → GrSortableList-CQCaWivn.js.map} +1 -1
- package/dist/components/GrSortableList/index.js +1 -1
- package/dist/components/GrSplitter/chunks/{GrSplitter-MltjaADn.js → GrSplitter-C-XQzq7q.js} +1 -1
- package/dist/components/GrSplitter/chunks/{GrSplitter-MltjaADn.js.map → GrSplitter-C-XQzq7q.js.map} +1 -1
- package/dist/components/GrSplitter/index.js +1 -1
- package/dist/components/GrStatistic/chunks/{GrStatistic-BoLkXw7F.js → GrStatistic-C1_nY4Gc.js} +2 -2
- package/dist/components/GrStatistic/chunks/{GrStatistic-BoLkXw7F.js.map → GrStatistic-C1_nY4Gc.js.map} +1 -1
- package/dist/components/GrStatistic/index.js +1 -1
- package/dist/components/GrSteps/chunks/{GrSteps-CpGHXLOc.js → GrSteps-DXj7m-WO.js} +2 -2
- package/dist/components/GrSteps/chunks/{GrSteps-CpGHXLOc.js.map → GrSteps-DXj7m-WO.js.map} +1 -1
- package/dist/components/GrSteps/index.js +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-7Oe5QfQZ.js → GrSwitch-CriHWT2A.js} +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-7Oe5QfQZ.js.map → GrSwitch-CriHWT2A.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +1 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-BZQS8-JM.js → GrTabPanels-5zsbqS1v.js} +1 -1
- package/dist/components/GrTabPanels/chunks/{GrTabPanels-BZQS8-JM.js.map → GrTabPanels-5zsbqS1v.js.map} +1 -1
- package/dist/components/GrTabPanels/index.js +1 -1
- package/dist/components/GrTable/chunks/{GrTable-jhUTczjv.js → GrTable-iwzHvlMC.js} +1 -1
- package/dist/components/GrTable/chunks/{GrTable-jhUTczjv.js.map → GrTable-iwzHvlMC.js.map} +1 -1
- package/dist/components/GrTable/index.js +1 -1
- package/dist/components/GrTabs/chunks/{GrTabs-CT2nk_HV.js → GrTabs-DHfv67cp.js} +1 -1
- package/dist/components/GrTabs/chunks/{GrTabs-CT2nk_HV.js.map → GrTabs-DHfv67cp.js.map} +1 -1
- package/dist/components/GrTabs/index.js +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-DinXG12-.js → GrTextarea-BII3w61K.js} +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-DinXG12-.js.map → GrTextarea-BII3w61K.js.map} +1 -1
- package/dist/components/GrTextarea/index.js +1 -1
- package/dist/components/GrTimeline/chunks/{GrTimeline-BiHpArsg.js → GrTimeline-Bs60huw0.js} +2 -2
- package/dist/components/GrTimeline/chunks/{GrTimeline-BiHpArsg.js.map → GrTimeline-Bs60huw0.js.map} +1 -1
- package/dist/components/GrTimeline/index.js +1 -1
- package/dist/components/GrToaster/chunks/{GrToaster-COXIBKzq.js → GrToaster-D-sV-9of.js} +4 -4
- package/dist/components/GrToaster/chunks/{GrToaster-COXIBKzq.js.map → GrToaster-D-sV-9of.js.map} +1 -1
- package/dist/components/GrToaster/index.js +1 -1
- package/dist/components/GrTooltip/chunks/{GrTooltip-uYETdbCD.js → GrTooltip-BUiTbROv.js} +3 -3
- package/dist/components/GrTooltip/chunks/{GrTooltip-uYETdbCD.js.map → GrTooltip-BUiTbROv.js.map} +1 -1
- package/dist/components/GrTooltip/index.js +1 -1
- package/dist/components/GrTree/chunks/{GrTree-Ci6CZfKR.js → GrTree-CkELQwR8.js} +1 -2
- package/dist/components/GrTree/chunks/{GrTree-Ci6CZfKR.js.map → GrTree-CkELQwR8.js.map} +1 -1
- package/dist/components/GrTree/index.js +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-MGsyvkJV.js → GrTreeSelect-DurwZ7Cz.js} +4 -4
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-MGsyvkJV.js.map → GrTreeSelect-DurwZ7Cz.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +1 -1
- package/dist/components/GrValue/chunks/GrValue-ezkQM05Q.js.map +1 -1
- package/dist/composables/useFloating.js +1 -1
- package/dist/composables/useGrComponentConfig.js +1 -1
- package/dist/composables/useOverlayLayer.js +35 -6
- package/dist/composables/useOverlayLayer.js.map +1 -1
- package/dist/composables/usePortalTarget.js +1 -1
- package/dist/composables/useTheme.js +1 -1
- package/dist/composables/useTheme.js.map +1 -1
- package/dist/composables/useToast.js +1 -1
- package/dist/composables/useToast.js.map +1 -1
- package/dist/composables/useVirtualList.js +26 -6
- package/dist/composables/useVirtualList.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/index.js +86 -86
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/types/components/GrDialog/GrDialog.vue.d.ts +1 -1
- package/dist/types/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
- package/dist/types/components/GrModal/GrModal.vue.d.ts +1 -1
- package/dist/types/composables/internal/overlayStack.d.ts +11 -0
- package/dist/types/internal/devHook.d.ts +119 -0
- package/dist/vue/index.js +2 -2
- package/dist/vue/index.js.map +1 -1
- package/dist/web-types.json +1 -1
- package/package.json +16 -16
- package/dist/chunks/config-CQLNjc9X2.js.map +0 -1
- package/dist/chunks/config-CnYdE3HZ2.js.map +0 -1
- package/dist/chunks/config-CuQmUkMw2.js.map +0 -1
- package/dist/chunks/config-DBmdgoVf2.js.map +0 -1
- package/dist/chunks/config-DVCNvhIG2.js.map +0 -1
- package/dist/chunks/config-DpAYidyY2.js.map +0 -1
- package/dist/chunks/config-MmPym-Z72.js.map +0 -1
- package/dist/chunks/overlayStack-0CZS99Da.js.map +0 -1
- /package/dist/chunks/{config-CQLNjc9X2.js → config-CQLNjc9X.js} +0 -0
- /package/dist/chunks/{config-CnYdE3HZ2.js → config-CnYdE3HZ.js} +0 -0
- /package/dist/chunks/{config-DBmdgoVf2.js → config-DBmdgoVf.js} +0 -0
- /package/dist/chunks/{config-DVCNvhIG2.js → config-DVCNvhIG.js} +0 -0
- /package/dist/chunks/{config-DpAYidyY2.js → config-DpAYidyY.js} +0 -0
- /package/dist/chunks/{config-MmPym-Z72.js → config-MmPym-Z7.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-C0Eu8jpG.js","names":[],"sources":["../../src/components/GrBreadcrumbs/grBreadcrumbsStyles.ts","../../src/components/GrBreadcrumbs/safelist.ts","../../src/components/GrBreadcrumbs/config.ts"],"sourcesContent":["import type { Component } from 'vue'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nexport type GrBreadcrumbsSize = GrComponentSize\n\n/** Пункт пути. Кроме `label` всё опционально: последний пункт обычно без ссылки. */\nexport type GrBreadcrumbItem = {\n label: string\n href?: string\n /** Цель роутерной ссылки: уезжает в `GrLink` через `attrs` вместе с `as`. */\n to?: unknown\n /**\n * Иконка перед подписью — декоративна. Vue-компонент либо класс иконки вашей\n * UnoCSS-сборки (`i-lucide-*` требует вашего `presetIcons`).\n */\n icon?: string | Component\n /**\n * Показывать только иконку: подпись прячется визуально, но остаётся в\n * разметке и в дереве доступности. Классический «домик» в начале пути.\n *\n * Подпись не выбрасывается и не подменяется на `aria-label` намеренно: путь\n * читают и поиском, и диктором, и пункт без имени для незрячего пустой.\n * Без `icon` поле игнорируется — прятать подпись, ничего не показав взамен,\n * значит стереть пункт.\n */\n iconOnly?: boolean\n disabled?: boolean\n /** Доступное имя пункта, когда подписи недостаточно («Настройки» → «Настройки проекта»). */\n ariaLabel?: string\n}\n\nexport const breadcrumbsRootClass = 'w-full min-w-0'\nexport const breadcrumbsListClass = 'flex items-center gap-1 m-0 p-0 [list-style:none]'\n\n/**\n * Перенос — умолчание: длинный путь уезжает на вторую строку и остаётся читаемым.\n * В режиме `autoCollapse` строка одна, иначе переполнения не случится никогда и\n * мерить будет нечего: список просто перенесётся.\n *\n * Исключение — раскрытый вручную путь: в одну строку он бы не влез (её нехватка и\n * вызвала схлопывание), `overflow: hidden` срезал бы хвост вместе с текущей\n * страницей, а фокус на раскрытом пункте молча уводил бы скролл контейнера.\n * Поэтому раскрытие возвращает перенос.\n */\nexport const breadcrumbsListWrapClass = 'flex-wrap'\nexport const breadcrumbsListNowrapClass = 'flex-nowrap overflow-hidden'\n\n/** Кегль строки пути. Шкала общая с `GrLink`: путь — это ряд ссылок. */\nexport const breadcrumbsSizeClassBySize: Record<GrBreadcrumbsSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const breadcrumbsSeparatorClass = 'select-none text-[var(--gr-muted-fg)]'\n\n/** Текущая страница: не ссылка, но и не «выключенный» текст — обычный акцент подписи. */\nexport const breadcrumbsCurrentClass = 'inline-flex items-center gap-1 min-w-0 font-600 text-[var(--gr-fg)]'\n\n/**\n * Обёртка пункта — flex, а не блок с линейным боксом.\n *\n * Базовая линия `inline-flex` берётся от первого flex-элемента: у пункта\n * с иконкой это блочная иконка, и линейный бокс раздувается на высоту\n * подстрочных выносных. Пункт с иконкой выходил на 3px выше соседей, а при\n * `align-items: center` списка это смещало его содержимое на полтора пикселя.\n */\nexport const breadcrumbsItemWrapClass = 'flex items-center min-w-0'\n\nexport const breadcrumbsItemIconClass = 'inline-block h-4 w-4 shrink-0'\n\nexport const breadcrumbsLabelClass = 'truncate'\n\n/** Подпись пункта-иконки: не видна, но читается диктором и поиском. */\nexport const breadcrumbsLabelHiddenClass = 'sr-only'\n\n/**\n * Кнопка «…»: раскрывает схлопнутую середину пути на месте. Оформлена как\n * приглушённая ссылка, чтобы не выбиваться из ряда.\n */\nexport const breadcrumbsEllipsisClass = 'inline-flex items-center rounded-[var(--gr-radius-sm)] px-1 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport type GrBreadcrumbsLinkComponent = string | Component\n\n/**\n * Раскладка пути: какие пункты видны и где стоит кнопка раскрытия.\n *\n * Чистая функция, потому что вся её сложность — арифметика границ, и проверять\n * её монтированием компонента дороже, чем таблицей входов.\n */\nexport type GrBreadcrumbsLayoutEntry\n = | { kind: 'item', item: GrBreadcrumbItem, index: number }\n | { kind: 'ellipsis', hiddenCount: number }\n\n/**\n * Сколько пунктов хвоста влезает в доступную ширину.\n *\n * Порог по числу пунктов (`maxItems`) на узком экране предсказывает плохо: три\n * коротких пункта влезают, два длинных — нет. Здесь решение принимается по\n * измеренным ширинам.\n *\n * Голова не ужимается: `itemsBeforeCollapse` — обычно один корневой пункт, и он\n * дёшев. Хвост ужимается до упора, но **не меньше одного**: последний пункт\n * отвечает на вопрос «где я сейчас», и прятать его бессмысленно — путь\n * превратился бы в «Главная / …».\n *\n * Возврат — число пунктов хвоста; `items.length` означает «влезло всё».\n */\nexport function resolveBreadcrumbsFit(options: {\n itemWidths: number[]\n separatorWidth: number\n ellipsisWidth: number\n available: number\n itemsBeforeCollapse: number\n /** Зазор списка (`gap`). Стоит между каждой парой соседей, включая разделители. */\n gapWidth?: number\n}): number {\n const { itemWidths, separatorWidth, ellipsisWidth, available, itemsBeforeCollapse, gapWidth = 0 } = options\n const total = itemWidths.length\n\n if (total === 0)\n return 0\n\n const sum = (from: number, to: number): number =>\n itemWidths.slice(from, to).reduce((acc, width) => acc + width, 0)\n\n /**\n * Ширина строки из `parts` видимых блоков: сами блоки, разделители между ними\n * и зазоры. Элементов в списке `2 * parts - 1` (блоки и разделители вперемешку),\n * значит зазоров на один меньше — без них расчёт систематически оптимистичен и\n * путь подрезается уже после схлопывания.\n */\n const rowWidth = (content: number, parts: number): number =>\n content\n + Math.max(0, parts - 1) * separatorWidth\n + Math.max(0, 2 * parts - 2) * gapWidth\n\n if (rowWidth(sum(0, total), total) <= available)\n return total\n\n const before = Math.max(0, Math.min(itemsBeforeCollapse, total))\n\n for (let after = total - before - 1; after > 1; after--) {\n const content = sum(0, before) + ellipsisWidth + sum(total - after, total)\n\n if (rowWidth(content, before + 1 + after) <= available)\n return after\n }\n\n return 1\n}\n\nexport function resolveBreadcrumbsLayout(options: {\n items: GrBreadcrumbItem[]\n maxItems?: number\n itemsBeforeCollapse: number\n itemsAfterCollapse: number\n expanded: boolean\n}): GrBreadcrumbsLayoutEntry[] {\n const { items, maxItems, itemsBeforeCollapse, itemsAfterCollapse, expanded } = options\n const all: GrBreadcrumbsLayoutEntry[] = items.map((item, index) => ({ kind: 'item', item, index }))\n\n if (expanded || !maxItems || maxItems < 1 || items.length <= maxItems)\n return all\n\n // Хвост важнее головы: «где я сейчас» читается справа, поэтому при нехватке\n // места сначала жертвуем серединой, а не концом.\n const before = Math.max(0, Math.min(itemsBeforeCollapse, items.length))\n const after = Math.max(0, Math.min(itemsAfterCollapse, items.length - before))\n const hiddenCount = items.length - before - after\n\n if (hiddenCount <= 1)\n return all\n\n return [\n ...all.slice(0, before),\n { kind: 'ellipsis', hiddenCount },\n ...all.slice(items.length - after),\n ]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n breadcrumbsCurrentClass,\n breadcrumbsEllipsisClass,\n breadcrumbsItemIconClass,\n breadcrumbsItemWrapClass,\n breadcrumbsLabelClass,\n breadcrumbsLabelHiddenClass,\n breadcrumbsListClass,\n breadcrumbsListNowrapClass,\n breadcrumbsListWrapClass,\n breadcrumbsRootClass,\n breadcrumbsSeparatorClass,\n breadcrumbsSizeClassBySize,\n} from './grBreadcrumbsStyles'\n\n// Всё, что живёт в `grBreadcrumbsStyles.ts`: и мапа размеров, и строковые\n// литералы. Хелпер уезжает в общий `dist/chunks/`, вне области скана\n// компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grBreadcrumbsSafelist = [...new Set([\n ...Object.values(breadcrumbsSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(breadcrumbsRootClass),\n ...splitClassTokens(breadcrumbsListClass),\n ...splitClassTokens(breadcrumbsListWrapClass),\n ...splitClassTokens(breadcrumbsListNowrapClass),\n ...splitClassTokens(breadcrumbsSeparatorClass),\n ...splitClassTokens(breadcrumbsCurrentClass),\n ...splitClassTokens(breadcrumbsItemIconClass),\n ...splitClassTokens(breadcrumbsItemWrapClass),\n ...splitClassTokens(breadcrumbsLabelClass),\n ...splitClassTokens(breadcrumbsLabelHiddenClass),\n ...splitClassTokens(breadcrumbsEllipsisClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grBreadcrumbsSafelist } from './safelist'\n\nexport const grBreadcrumbsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrBreadcrumbs',\n safelist: grBreadcrumbsSafelist,\n dependencies: ['GrLink'],\n})\n"],"mappings":";;;AAgCA,IAAa,uBAAuB;AACpC,IAAa,uBAAuB;;;;;;;;;;;AAYpC,IAAa,2BAA2B;AACxC,IAAa,6BAA6B;;AAG1C,IAAa,6BAAgE;CAC3E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,4BAA4B;;AAGzC,IAAa,0BAA0B;;;;;;;;;AAUvC,IAAa,2BAA2B;AAExC,IAAa,2BAA2B;AAExC,IAAa,wBAAwB;;AAGrC,IAAa,8BAA8B;;;;;AAM3C,IAAa,2BAA2B;;;;;;;;;;;;;;;AA4BxC,SAAgB,sBAAsB,SAQ3B;CACT,MAAM,EAAE,YAAY,gBAAgB,eAAe,WAAW,qBAAqB,WAAW,MAAM;CACpG,MAAM,QAAQ,WAAW;CAEzB,IAAI,UAAU,GACZ,OAAO;CAET,MAAM,OAAO,MAAc,OACzB,WAAW,MAAM,MAAM,EAAE,CAAC,CAAC,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC;;;;;;;CAQlE,MAAM,YAAY,SAAiB,UACjC,UACE,KAAK,IAAI,GAAG,QAAQ,CAAC,IAAI,iBACzB,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI;CAEjC,IAAI,SAAS,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,WACpC,OAAO;CAET,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,qBAAqB,KAAK,CAAC;CAE/D,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,QAAQ,GAAG,SAG9C,IAAI,SAFY,IAAI,GAAG,MAAM,IAAI,gBAAgB,IAAI,QAAQ,OAAO,KAAK,GAEnD,SAAS,IAAI,KAAK,KAAK,WAC3C,OAAO;CAGX,OAAO;AACT;AAEA,SAAgB,yBAAyB,SAMV;CAC7B,MAAM,EAAE,OAAO,UAAU,qBAAqB,oBAAoB,aAAa;CAC/E,MAAM,MAAkC,MAAM,KAAK,MAAM,WAAW;EAAE,MAAM;EAAQ;EAAM;CAAM,EAAE;CAElG,IAAI,YAAY,CAAC,YAAY,WAAW,KAAK,MAAM,UAAU,UAC3D,OAAO;CAIT,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,qBAAqB,MAAM,MAAM,CAAC;CACtE,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,oBAAoB,MAAM,SAAS,MAAM,CAAC;CAC7E,MAAM,cAAc,MAAM,SAAS,SAAS;CAE5C,IAAI,eAAe,GACjB,OAAO;CAET,OAAO;EACL,GAAG,IAAI,MAAM,GAAG,MAAM;EACtB;GAAE,MAAM;GAAY;EAAY;EAChC,GAAG,IAAI,MAAM,MAAM,SAAS,KAAK;CACnC;AACF;;;AClKA,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,OAAO,OAAO,0BAA0B,CAAC,CAAC,QAAQ,gBAAgB;CACrE,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,wBAAwB;AAC9C,CAAC,CAAC;;;AC5BF,IAAa,sBAAsB,wBAAwB,OAAO,KAAK,KAAK;CAC1E,MAAM;CACN,UAAU;CACV,cAAc,CAAC,QAAQ;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-C0Eu8jpG.js","names":[],"sources":["../../src/components/GrBreadcrumbs/grBreadcrumbsStyles.ts","../../src/components/GrBreadcrumbs/safelist.ts","../../src/components/GrBreadcrumbs/config.ts"],"sourcesContent":["import type { Component } from 'vue'\n\nimport type { GrComponentSize } from '../shared/sizes'\n\nexport type GrBreadcrumbsSize = GrComponentSize\n\n/** Пункт пути. Кроме `label` всё опционально: последний пункт обычно без ссылки. */\nexport type GrBreadcrumbItem = {\n label: string\n href?: string\n /** Цель роутерной ссылки: уезжает в `GrLink` через `attrs` вместе с `as`. */\n to?: unknown\n /**\n * Иконка перед подписью — декоративна. Vue-компонент либо класс иконки вашей\n * UnoCSS-сборки (`i-lucide-*` требует вашего `presetIcons`).\n */\n icon?: string | Component\n /**\n * Показывать только иконку: подпись прячется визуально, но остаётся в\n * разметке и в дереве доступности. Классический «домик» в начале пути.\n *\n * Подпись не выбрасывается и не подменяется на `aria-label` намеренно: путь\n * читают и поиском, и диктором, и пункт без имени для незрячего пустой.\n * Без `icon` поле игнорируется — прятать подпись, ничего не показав взамен,\n * значит стереть пункт.\n */\n iconOnly?: boolean\n disabled?: boolean\n /** Доступное имя пункта, когда подписи недостаточно («Настройки» → «Настройки проекта»). */\n ariaLabel?: string\n}\n\nexport const breadcrumbsRootClass = 'w-full min-w-0'\nexport const breadcrumbsListClass = 'flex items-center gap-1 m-0 p-0 [list-style:none]'\n\n/**\n * Перенос — умолчание: длинный путь уезжает на вторую строку и остаётся читаемым.\n * В режиме `autoCollapse` строка одна, иначе переполнения не случится никогда и\n * мерить будет нечего: список просто перенесётся.\n *\n * Исключение — раскрытый вручную путь: в одну строку он бы не влез (её нехватка и\n * вызвала схлопывание), `overflow: hidden` срезал бы хвост вместе с текущей\n * страницей, а фокус на раскрытом пункте молча уводил бы скролл контейнера.\n * Поэтому раскрытие возвращает перенос.\n */\nexport const breadcrumbsListWrapClass = 'flex-wrap'\nexport const breadcrumbsListNowrapClass = 'flex-nowrap overflow-hidden'\n\n/** Кегль строки пути. Шкала общая с `GrLink`: путь — это ряд ссылок. */\nexport const breadcrumbsSizeClassBySize: Record<GrBreadcrumbsSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const breadcrumbsSeparatorClass = 'select-none text-[var(--gr-muted-fg)]'\n\n/** Текущая страница: не ссылка, но и не «выключенный» текст — обычный акцент подписи. */\nexport const breadcrumbsCurrentClass = 'inline-flex items-center gap-1 min-w-0 font-600 text-[var(--gr-fg)]'\n\n/**\n * Обёртка пункта — flex, а не блок с линейным боксом.\n *\n * Базовая линия `inline-flex` берётся от первого flex-элемента: у пункта\n * с иконкой это блочная иконка, и линейный бокс раздувается на высоту\n * подстрочных выносных. Пункт с иконкой выходил на 3px выше соседей, а при\n * `align-items: center` списка это смещало его содержимое на полтора пикселя.\n */\nexport const breadcrumbsItemWrapClass = 'flex items-center min-w-0'\n\nexport const breadcrumbsItemIconClass = 'inline-block h-4 w-4 shrink-0'\n\nexport const breadcrumbsLabelClass = 'truncate'\n\n/** Подпись пункта-иконки: не видна, но читается диктором и поиском. */\nexport const breadcrumbsLabelHiddenClass = 'sr-only'\n\n/**\n * Кнопка «…»: раскрывает схлопнутую середину пути на месте. Оформлена как\n * приглушённая ссылка, чтобы не выбиваться из ряда.\n */\nexport const breadcrumbsEllipsisClass = 'inline-flex items-center rounded-[var(--gr-radius-sm)] px-1 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport type GrBreadcrumbsLinkComponent = string | Component\n\n/**\n * Раскладка пути: какие пункты видны и где стоит кнопка раскрытия.\n *\n * Чистая функция, потому что вся её сложность — арифметика границ, и проверять\n * её монтированием компонента дороже, чем таблицей входов.\n */\nexport type GrBreadcrumbsLayoutEntry\n = | { kind: 'item', item: GrBreadcrumbItem, index: number }\n | { kind: 'ellipsis', hiddenCount: number }\n\n/**\n * Сколько пунктов хвоста влезает в доступную ширину.\n *\n * Порог по числу пунктов (`maxItems`) на узком экране предсказывает плохо: три\n * коротких пункта влезают, два длинных — нет. Здесь решение принимается по\n * измеренным ширинам.\n *\n * Голова не ужимается: `itemsBeforeCollapse` — обычно один корневой пункт, и он\n * дёшев. Хвост ужимается до упора, но **не меньше одного**: последний пункт\n * отвечает на вопрос «где я сейчас», и прятать его бессмысленно — путь\n * превратился бы в «Главная / …».\n *\n * Возврат — число пунктов хвоста; `items.length` означает «влезло всё».\n */\nexport function resolveBreadcrumbsFit(options: {\n itemWidths: number[]\n separatorWidth: number\n ellipsisWidth: number\n available: number\n itemsBeforeCollapse: number\n /** Зазор списка (`gap`). Стоит между каждой парой соседей, включая разделители. */\n gapWidth?: number\n}): number {\n const { itemWidths, separatorWidth, ellipsisWidth, available, itemsBeforeCollapse, gapWidth = 0 } = options\n const total = itemWidths.length\n\n if (total === 0)\n return 0\n\n const sum = (from: number, to: number): number =>\n itemWidths.slice(from, to).reduce((acc, width) => acc + width, 0)\n\n /**\n * Ширина строки из `parts` видимых блоков: сами блоки, разделители между ними\n * и зазоры. Элементов в списке `2 * parts - 1` (блоки и разделители вперемешку),\n * значит зазоров на один меньше — без них расчёт систематически оптимистичен и\n * путь подрезается уже после схлопывания.\n */\n const rowWidth = (content: number, parts: number): number =>\n content\n + Math.max(0, parts - 1) * separatorWidth\n + Math.max(0, 2 * parts - 2) * gapWidth\n\n if (rowWidth(sum(0, total), total) <= available)\n return total\n\n const before = Math.max(0, Math.min(itemsBeforeCollapse, total))\n\n for (let after = total - before - 1; after > 1; after--) {\n const content = sum(0, before) + ellipsisWidth + sum(total - after, total)\n\n if (rowWidth(content, before + 1 + after) <= available)\n return after\n }\n\n return 1\n}\n\nexport function resolveBreadcrumbsLayout(options: {\n items: GrBreadcrumbItem[]\n maxItems?: number\n itemsBeforeCollapse: number\n itemsAfterCollapse: number\n expanded: boolean\n}): GrBreadcrumbsLayoutEntry[] {\n const { items, maxItems, itemsBeforeCollapse, itemsAfterCollapse, expanded } = options\n const all: GrBreadcrumbsLayoutEntry[] = items.map((item, index) => ({ kind: 'item', item, index }))\n\n if (expanded || !maxItems || maxItems < 1 || items.length <= maxItems)\n return all\n\n // Хвост важнее головы: «где я сейчас» читается справа, поэтому при нехватке\n // места сначала жертвуем серединой, а не концом.\n const before = Math.max(0, Math.min(itemsBeforeCollapse, items.length))\n const after = Math.max(0, Math.min(itemsAfterCollapse, items.length - before))\n const hiddenCount = items.length - before - after\n\n if (hiddenCount <= 1)\n return all\n\n return [\n ...all.slice(0, before),\n { kind: 'ellipsis', hiddenCount },\n ...all.slice(items.length - after),\n ]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n breadcrumbsCurrentClass,\n breadcrumbsEllipsisClass,\n breadcrumbsItemIconClass,\n breadcrumbsItemWrapClass,\n breadcrumbsLabelClass,\n breadcrumbsLabelHiddenClass,\n breadcrumbsListClass,\n breadcrumbsListNowrapClass,\n breadcrumbsListWrapClass,\n breadcrumbsRootClass,\n breadcrumbsSeparatorClass,\n breadcrumbsSizeClassBySize,\n} from './grBreadcrumbsStyles'\n\n// Всё, что живёт в `grBreadcrumbsStyles.ts`: и мапа размеров, и строковые\n// литералы. Хелпер уезжает в общий `dist/chunks/`, вне области скана\n// компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grBreadcrumbsSafelist = [...new Set([\n ...Object.values(breadcrumbsSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(breadcrumbsRootClass),\n ...splitClassTokens(breadcrumbsListClass),\n ...splitClassTokens(breadcrumbsListWrapClass),\n ...splitClassTokens(breadcrumbsListNowrapClass),\n ...splitClassTokens(breadcrumbsSeparatorClass),\n ...splitClassTokens(breadcrumbsCurrentClass),\n ...splitClassTokens(breadcrumbsItemIconClass),\n ...splitClassTokens(breadcrumbsItemWrapClass),\n ...splitClassTokens(breadcrumbsLabelClass),\n ...splitClassTokens(breadcrumbsLabelHiddenClass),\n ...splitClassTokens(breadcrumbsEllipsisClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grBreadcrumbsSafelist } from './safelist'\n\nexport const grBreadcrumbsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrBreadcrumbs',\n safelist: grBreadcrumbsSafelist,\n dependencies: ['GrLink'],\n})\n"],"mappings":";;;AAgCA,IAAa,uBAAuB;AACpC,IAAa,uBAAuB;;;;;;;;;;;AAYpC,IAAa,2BAA2B;AACxC,IAAa,6BAA6B;;AAG1C,IAAa,6BAAgE;CAC3E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,4BAA4B;;AAGzC,IAAa,0BAA0B;;;;;;;;;AAUvC,IAAa,2BAA2B;AAExC,IAAa,2BAA2B;AAExC,IAAa,wBAAwB;;AAGrC,IAAa,8BAA8B;;;;;AAM3C,IAAa,2BAA2B;;;;;;;;;;;;;;;AA4BxC,SAAgB,sBAAsB,SAQ3B;CACT,MAAM,EAAE,YAAY,gBAAgB,eAAe,WAAW,qBAAqB,WAAW,MAAM;CACpG,MAAM,QAAQ,WAAW;CAEzB,IAAI,UAAU,GACZ,OAAO;CAET,MAAM,OAAO,MAAc,OACzB,WAAW,MAAM,MAAM,EAAE,CAAC,CAAC,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC;;;;;;;CAQlE,MAAM,YAAY,SAAiB,UACjC,UACE,KAAK,IAAI,GAAG,QAAQ,CAAC,IAAI,iBACzB,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI;CAEjC,IAAI,SAAS,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,WACpC,OAAO;CAET,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,qBAAqB,KAAK,CAAC;CAE/D,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,QAAQ,GAAG,SAG9C,IAAI,SAFY,IAAI,GAAG,MAAM,IAAI,gBAAgB,IAAI,QAAQ,OAAO,KAAK,GAEnD,SAAS,IAAI,KAAK,KAAK,WAC3C,OAAO;CAGX,OAAO;AACT;AAEA,SAAgB,yBAAyB,SAMV;CAC7B,MAAM,EAAE,OAAO,UAAU,qBAAqB,oBAAoB,aAAa;CAC/E,MAAM,MAAkC,MAAM,KAAK,MAAM,WAAW;EAAE,MAAM;EAAQ;EAAM;CAAM,EAAE;CAElG,IAAI,YAAY,CAAC,YAAY,WAAW,KAAK,MAAM,UAAU,UAC3D,OAAO;CAIT,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,qBAAqB,MAAM,MAAM,CAAC;CACtE,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,oBAAoB,MAAM,SAAS,MAAM,CAAC;CAC7E,MAAM,cAAc,MAAM,SAAS,SAAS;CAE5C,IAAI,eAAe,GACjB,OAAO;CAET,OAAO;EACL,GAAG,IAAI,MAAM,GAAG,MAAM;EACtB;GAAE,MAAM;GAAY;EAAY;EAChC,GAAG,IAAI,MAAM,MAAM,SAAS,KAAK;CACnC;AACF;;;AClKA,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,OAAO,OAAO,0BAA0B,CAAC,CAAC,QAAQ,gBAAgB;CACrE,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,wBAAwB;AAC9C,CAAC,CAAC;;;AC5BF,IAAa,sBAAsB,wBAAwB,YAAY,KAAK;CAC1E,MAAM;CACN,UAAU;CACV,cAAc,CAAC,QAAQ;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CDat1wXf.js","names":[],"sources":["../../src/components/GrTree/safelist.ts","../../src/components/GrTree/config.ts"],"sourcesContent":["// Иконки-пропы (`expandIcon`/`collapseIcon`/`dragHandleIcon`) приходят от\n// потребителя: их классы генерирует его сборка, а не наша. Встроенные иконки\n// компилируются в `dist` и CSS не требуют.\n// Литералы шаблона (`py-2`, `px-2`, `ml-6`, ...) не дублируем — UnoCSS находит их сканом.\nexport const grTreeSafelist = [] as const\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTreeSafelist } from './safelist'\n\nexport const grTreeConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTree',\n safelist: grTreeSafelist,\n})\n"],"mappings":";;AAIA,IAAa,iBAAiB,CAAC;;;ACA/B,IAAa,eAAe,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CDat1wXf.js","names":[],"sources":["../../src/components/GrTree/safelist.ts","../../src/components/GrTree/config.ts"],"sourcesContent":["// Иконки-пропы (`expandIcon`/`collapseIcon`/`dragHandleIcon`) приходят от\n// потребителя: их классы генерирует его сборка, а не наша. Встроенные иконки\n// компилируются в `dist` и CSS не требуют.\n// Литералы шаблона (`py-2`, `px-2`, `ml-6`, ...) не дублируем — UnoCSS находит их сканом.\nexport const grTreeSafelist = [] as const\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTreeSafelist } from './safelist'\n\nexport const grTreeConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTree',\n safelist: grTreeSafelist,\n})\n"],"mappings":";;AAIA,IAAa,iBAAiB,CAAC;;;ACA/B,IAAa,eAAe,wBAAwB,YAAY,KAAK;CACnE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CIkdsWUk.js","names":[],"sources":["../../src/components/GrInput/safelist.ts","../../src/components/GrInput/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n addonInlinePrefixClass,\n addonInlineSuffixClass,\n addonSegmentPrefixClass,\n addonSegmentSuffixClass,\n invalidClass,\n shellBaseClass,\n shellDisabledClass,\n shellEnabledClass,\n sizes,\n states,\n textAlign,\n} from './grInputStyles'\n\nexport const grInputSafelist = [...new Set([\n ...Object.values(sizes).flatMap(splitClassTokens),\n ...Object.values(textAlign).flatMap(splitClassTokens),\n ...Object.values(states).flatMap(splitClassTokens),\n ...splitClassTokens(invalidClass),\n ...splitClassTokens(shellBaseClass),\n ...splitClassTokens(shellEnabledClass),\n ...splitClassTokens(shellDisabledClass),\n ...splitClassTokens(addonSegmentPrefixClass),\n ...splitClassTokens(addonSegmentSuffixClass),\n ...splitClassTokens(addonInlinePrefixClass),\n ...splitClassTokens(addonInlineSuffixClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grInputSafelist } from './safelist'\n\nexport const grInputConfig = defineGranularComponent(import.meta.url, {\n name: 'GrInput',\n safelist: grInputSafelist,\n})\n"],"mappings":";;;;AAeA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,gBAAgB;CAChD,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,MAAM,CAAC,CAAC,QAAQ,gBAAgB;CACjD,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,sBAAsB;AAC5C,CAAC,CAAC;;;ACxBF,IAAa,gBAAgB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CIkdsWUk.js","names":[],"sources":["../../src/components/GrInput/safelist.ts","../../src/components/GrInput/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n addonInlinePrefixClass,\n addonInlineSuffixClass,\n addonSegmentPrefixClass,\n addonSegmentSuffixClass,\n invalidClass,\n shellBaseClass,\n shellDisabledClass,\n shellEnabledClass,\n sizes,\n states,\n textAlign,\n} from './grInputStyles'\n\nexport const grInputSafelist = [...new Set([\n ...Object.values(sizes).flatMap(splitClassTokens),\n ...Object.values(textAlign).flatMap(splitClassTokens),\n ...Object.values(states).flatMap(splitClassTokens),\n ...splitClassTokens(invalidClass),\n ...splitClassTokens(shellBaseClass),\n ...splitClassTokens(shellEnabledClass),\n ...splitClassTokens(shellDisabledClass),\n ...splitClassTokens(addonSegmentPrefixClass),\n ...splitClassTokens(addonSegmentSuffixClass),\n ...splitClassTokens(addonInlinePrefixClass),\n ...splitClassTokens(addonInlineSuffixClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grInputSafelist } from './safelist'\n\nexport const grInputConfig = defineGranularComponent(import.meta.url, {\n name: 'GrInput',\n safelist: grInputSafelist,\n})\n"],"mappings":";;;;AAeA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,gBAAgB;CAChD,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,MAAM,CAAC,CAAC,QAAQ,gBAAgB;CACjD,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,sBAAsB;AAC5C,CAAC,CAAC;;;ACxBF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CJzmDHfI.js","names":[],"sources":["../../src/components/GrProgressCircle/grProgressCircleStyles.ts","../../src/components/GrProgressCircle/safelist.ts","../../src/components/GrProgressCircle/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport type { GrTone } from '../shared/tones'\n\nexport type GrProgressCircleTone = GrTone\nexport type GrProgressCircleSize = GrComponentSize\n\n/**\n * Диаметр кольца по ступеням. Значение уезжает в `var(--gr-progress-circle-size, …)`,\n * то есть остаётся точкой кастомизации: геометрия дуги считается в единицах\n * `viewBox` и от диаметра не зависит.\n */\nexport const diameterBySize: Record<GrProgressCircleSize, string> = {\n xs: '2rem',\n sm: '3rem',\n md: '4rem',\n lg: '6rem',\n}\n\n/**\n * Толщина обводки в единицах `viewBox`, то есть в процентах диаметра. Мелкое\n * кольцо с той же долей выглядело бы ниткой, поэтому доля растёт вниз по шкале.\n */\nexport const thicknessBySize: Record<GrProgressCircleSize, number> = {\n xs: 12,\n sm: 11,\n md: 10,\n lg: 9,\n}\n\n/** Кегль значения в центре. Тоже с фолбэком: подпись может не влезть под свой формат. */\nexport const valueTextSizeBySize: Record<GrProgressCircleSize, string> = {\n xs: 'var(--gr-text-2xs)',\n sm: 'var(--gr-text-xs)',\n md: 'var(--gr-text-sm)',\n lg: 'var(--gr-text-lg)',\n}\n\nexport const statusIconSizeBySize: Record<GrProgressCircleSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-7 w-7',\n}\n\n/**\n * Тона берутся из темы **линейного** индикатора: слой темизации у прогресса\n * один, и потребитель, перекрасивший `--gr-progress-bg`, ждёт, что круг и\n * полоса сойдутся. Фолбэк на роль обязателен — при гранулярном импорте одного\n * круга `GrProgressBar/themes/*.css` не подключается.\n */\nexport const arcColorByTone: Record<GrProgressCircleTone, string> = {\n primary: 'var(--gr-progress-bg,var(--gr-primary))',\n neutral: 'var(--gr-progress-neutral-bg,var(--gr-secondary))',\n success: 'var(--gr-progress-success-bg,var(--gr-success))',\n warning: 'var(--gr-progress-warning-bg,var(--gr-warning))',\n danger: 'var(--gr-progress-danger-bg,var(--gr-danger))',\n info: 'var(--gr-progress-info-bg,var(--gr-info))',\n slate: 'var(--gr-progress-slate-bg,var(--gr-slate))',\n azure: 'var(--gr-progress-azure-bg,var(--gr-azure))',\n}\n\nexport const rootClass = 'relative inline-flex shrink-0 items-center justify-center'\n\nexport const svgClass = 'block h-full w-full'\n\n/**\n * Центр — сосед виджета, а не его потомок, поэтому позиционируется абсолютно и\n * сам по себе кликов не ловит: интерактив в слоте включает их себе обратно.\n */\nexport const centerClass = 'pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-0.5 text-center'\n\nexport const valueClass = 'font-600 text-[var(--gr-fg)] tabular-nums'\n\nexport function grProgressCircleArcColor(tone: GrProgressCircleTone): string {\n return arcColorByTone[tone]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n centerClass,\n rootClass,\n statusIconSizeBySize,\n svgClass,\n valueClass,\n} from './grProgressCircleStyles'\n\nexport const grProgressCircleSafelist = [...new Set([\n ...Object.values(statusIconSizeBySize).flatMap(splitClassTokens),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(svgClass),\n ...splitClassTokens(centerClass),\n ...splitClassTokens(valueClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grProgressCircleSafelist } from './safelist'\n\nexport const grProgressCircleConfig = defineGranularComponent(import.meta.url, {\n name: 'GrProgressCircle',\n safelist: grProgressCircleSafelist,\n})\n"],"mappings":";;;;;;;;AAWA,IAAa,iBAAuD;CAClE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;AAMA,IAAa,kBAAwD;CACnE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,sBAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAA6D;CACxE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;AAQA,IAAa,iBAAuD;CAClE,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,IAAa,YAAY;AAEzB,IAAa,WAAW;;;;;AAMxB,IAAa,cAAc;AAE3B,IAAa,aAAa;AAE1B,SAAgB,yBAAyB,MAAoC;CAC3E,OAAO,eAAe;AACxB;;;AClEA,IAAa,2BAA2B,CAAC,mBAAG,IAAI,IAAI;CAClD,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,QAAQ;CAC5B,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,UAAU;AAChC,CAAC,CAAC;;;ACXF,IAAa,yBAAyB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CJzmDHfI.js","names":[],"sources":["../../src/components/GrProgressCircle/grProgressCircleStyles.ts","../../src/components/GrProgressCircle/safelist.ts","../../src/components/GrProgressCircle/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport type { GrTone } from '../shared/tones'\n\nexport type GrProgressCircleTone = GrTone\nexport type GrProgressCircleSize = GrComponentSize\n\n/**\n * Диаметр кольца по ступеням. Значение уезжает в `var(--gr-progress-circle-size, …)`,\n * то есть остаётся точкой кастомизации: геометрия дуги считается в единицах\n * `viewBox` и от диаметра не зависит.\n */\nexport const diameterBySize: Record<GrProgressCircleSize, string> = {\n xs: '2rem',\n sm: '3rem',\n md: '4rem',\n lg: '6rem',\n}\n\n/**\n * Толщина обводки в единицах `viewBox`, то есть в процентах диаметра. Мелкое\n * кольцо с той же долей выглядело бы ниткой, поэтому доля растёт вниз по шкале.\n */\nexport const thicknessBySize: Record<GrProgressCircleSize, number> = {\n xs: 12,\n sm: 11,\n md: 10,\n lg: 9,\n}\n\n/** Кегль значения в центре. Тоже с фолбэком: подпись может не влезть под свой формат. */\nexport const valueTextSizeBySize: Record<GrProgressCircleSize, string> = {\n xs: 'var(--gr-text-2xs)',\n sm: 'var(--gr-text-xs)',\n md: 'var(--gr-text-sm)',\n lg: 'var(--gr-text-lg)',\n}\n\nexport const statusIconSizeBySize: Record<GrProgressCircleSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-7 w-7',\n}\n\n/**\n * Тона берутся из темы **линейного** индикатора: слой темизации у прогресса\n * один, и потребитель, перекрасивший `--gr-progress-bg`, ждёт, что круг и\n * полоса сойдутся. Фолбэк на роль обязателен — при гранулярном импорте одного\n * круга `GrProgressBar/themes/*.css` не подключается.\n */\nexport const arcColorByTone: Record<GrProgressCircleTone, string> = {\n primary: 'var(--gr-progress-bg,var(--gr-primary))',\n neutral: 'var(--gr-progress-neutral-bg,var(--gr-secondary))',\n success: 'var(--gr-progress-success-bg,var(--gr-success))',\n warning: 'var(--gr-progress-warning-bg,var(--gr-warning))',\n danger: 'var(--gr-progress-danger-bg,var(--gr-danger))',\n info: 'var(--gr-progress-info-bg,var(--gr-info))',\n slate: 'var(--gr-progress-slate-bg,var(--gr-slate))',\n azure: 'var(--gr-progress-azure-bg,var(--gr-azure))',\n}\n\nexport const rootClass = 'relative inline-flex shrink-0 items-center justify-center'\n\nexport const svgClass = 'block h-full w-full'\n\n/**\n * Центр — сосед виджета, а не его потомок, поэтому позиционируется абсолютно и\n * сам по себе кликов не ловит: интерактив в слоте включает их себе обратно.\n */\nexport const centerClass = 'pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-0.5 text-center'\n\nexport const valueClass = 'font-600 text-[var(--gr-fg)] tabular-nums'\n\nexport function grProgressCircleArcColor(tone: GrProgressCircleTone): string {\n return arcColorByTone[tone]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n centerClass,\n rootClass,\n statusIconSizeBySize,\n svgClass,\n valueClass,\n} from './grProgressCircleStyles'\n\nexport const grProgressCircleSafelist = [...new Set([\n ...Object.values(statusIconSizeBySize).flatMap(splitClassTokens),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(svgClass),\n ...splitClassTokens(centerClass),\n ...splitClassTokens(valueClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grProgressCircleSafelist } from './safelist'\n\nexport const grProgressCircleConfig = defineGranularComponent(import.meta.url, {\n name: 'GrProgressCircle',\n safelist: grProgressCircleSafelist,\n})\n"],"mappings":";;;;;;;;AAWA,IAAa,iBAAuD;CAClE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;AAMA,IAAa,kBAAwD;CACnE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,sBAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAA6D;CACxE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;AAQA,IAAa,iBAAuD;CAClE,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,IAAa,YAAY;AAEzB,IAAa,WAAW;;;;;AAMxB,IAAa,cAAc;AAE3B,IAAa,aAAa;AAE1B,SAAgB,yBAAyB,MAAoC;CAC3E,OAAO,eAAe;AACxB;;;AClEA,IAAa,2BAA2B,CAAC,mBAAG,IAAI,IAAI;CAClD,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,QAAQ;CAC5B,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,UAAU;AAChC,CAAC,CAAC;;;ACXF,IAAa,yBAAyB,wBAAwB,YAAY,KAAK;CAC7E,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CLjjjPZj.js","names":[],"sources":["../../src/components/GrSteps/grStepsStyles.ts","../../src/components/GrSteps/safelist.ts","../../src/components/GrSteps/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrStepStatus } from './stepsModel'\n\nexport type GrStepsSize = GrComponentSize\nexport type GrStepsOrientation = 'horizontal' | 'vertical'\nexport type GrStepsVariant = 'steps' | 'compact'\n\nexport const stepsRootClass = 'w-full min-w-0'\n\nexport const stepsListClass: Record<GrStepsOrientation, string> = {\n // Горизонтальная лента делит ширину поровну: шаги — равноправные этапы, и\n // разная ширина читалась бы как разный вес.\n // `[list-style:none]`, а не `list-none`: утилита не входит в документированный\n // пресет и CSS не даёт (гейт `documentedConfig`). Так же живёт `GrBreadcrumbs`.\n horizontal: 'm-0 flex [list-style:none] items-start p-0',\n vertical: 'm-0 flex [list-style:none] flex-col p-0',\n}\n\n/**\n * Пункт растёт по горизонтали и прижимается влево по вертикали.\n *\n * В горизонтальной ленте маркер стоит **над** подписью, а не слева от неё:\n * соединитель идёт от маркера к маркеру на их высоте, и подпись сбоку он бы\n * перечёркивал. В вертикальной колонке места по ширине хватает, там подпись\n * справа, а линия спускается вниз.\n */\nexport const stepsItemClass: Record<GrStepsOrientation, string> = {\n horizontal: 'relative min-w-0 flex-1',\n vertical: 'relative min-w-0',\n}\n\n/** Отступ снизу у вертикального пункта — место, по которому идёт соединитель. */\nexport const stepsItemConnectedClass: Record<GrStepsOrientation, string> = {\n horizontal: '',\n vertical: 'pb-6',\n}\n\n/**\n * Кегль и метрика маркера на ступени.\n *\n * Шкала контрольная (`--gr-control-text-*`): шаги стоят в шапке мастера рядом с\n * кнопками «Назад»/«Далее», и подпись обязана совпасть с ними, а не с меткой.\n * Диаметр маркера — покомпонентный токен, потому что ступени в общей шкале для\n * него нет: это не кегль и не радиус, а собственная метрика компонента.\n */\nexport const stepsSizeClassBySize: Record<GrStepsSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] [--gr-steps-marker-size:1.25rem]',\n sm: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)] [--gr-steps-marker-size:1.5rem]',\n md: 'text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)] [--gr-steps-marker-size:1.75rem]',\n lg: 'text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)] [--gr-steps-marker-size:2rem]',\n}\n\nexport const stepsTriggerClass = 'min-w-0 bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--gr-bg)] rounded-[var(--gr-radius-md)]'\n\nexport const stepsTriggerClassByOrientation: Record<GrStepsOrientation, string> = {\n horizontal: 'flex w-full flex-col items-center gap-1.5 text-center',\n vertical: 'flex w-full items-start gap-3 text-left',\n}\n\n/** Кликабельный шаг обязан выглядеть кликабельным — иначе о нём не догадаются. */\nexport const stepsTriggerEnabledClass = 'cursor-pointer'\n\nexport const stepsMarkerClass = 'inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-full)] border font-600 leading-none h-[var(--gr-steps-marker-size)] w-[var(--gr-steps-marker-size)] text-[length:var(--gr-control-text-2xs)]'\n\n/**\n * Маркер по статусу.\n *\n * Пройденный — сплошная заливка, текущий — обводка тем же тоном, будущий —\n * приглушённый. Различие идёт по светлоте, а не по оттенку: три соседних цвета\n * одного тона на одной ленте не читаются, а сплошное/полое — читается и в\n * монохроме. `error` — единственный, кто меняет тон, и меняет его осмысленно.\n */\nexport const stepsMarkerClassByStatus: Record<GrStepStatus, string> = {\n complete: 'border-[var(--gr-primary-solid)] bg-[var(--gr-primary-solid)] text-[var(--gr-primary-solid-fg)]',\n current: 'border-[var(--gr-primary-solid)] bg-[var(--gr-bg)] text-[var(--gr-primary-text)]',\n upcoming: 'border-[var(--gr-brd)] bg-[var(--gr-bg)] text-[var(--gr-muted-fg)]',\n error: 'border-[var(--gr-danger-solid)] bg-[var(--gr-danger-solid)] text-[var(--gr-danger-solid-fg)]',\n}\n\nexport const stepsLabelClass = 'block min-w-0 font-600'\n\nexport const stepsLabelClassByStatus: Record<GrStepStatus, string> = {\n complete: 'text-[var(--gr-fg)]',\n current: 'text-[var(--gr-fg)]',\n upcoming: 'text-[var(--gr-muted-fg)]',\n error: 'text-[var(--gr-danger-text)]',\n}\n\nexport const stepsDescriptionClass = 'block mt-0.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] text-[var(--gr-muted-fg)]'\n\n/**\n * Соединитель между шагами.\n *\n * Позиция считается от диаметра маркера, а не от жёсткой высоты: маркер растёт\n * со ступенью размера, и линия обязана оставаться на его оси. По горизонтали\n * пункты делят ширину поровну, поэтому маркер стоит ровно по центру пункта —\n * отсюда `50%` слева и `-50%` справа: линия идёт от края одного маркера до\n * края соседнего.\n */\nexport const stepsConnectorClass: Record<GrStepsOrientation, string> = {\n horizontal: 'absolute top-[calc(var(--gr-steps-marker-size)/2)] h-[var(--gr-steps-connector-size,2px)] -translate-y-1/2 left-[calc(50%+var(--gr-steps-marker-size)/2+0.5rem)] right-[calc(-50%+var(--gr-steps-marker-size)/2+0.5rem)]',\n vertical: 'absolute left-[calc(var(--gr-steps-marker-size)/2)] w-[var(--gr-steps-connector-size,2px)] -translate-x-1/2 top-[calc(var(--gr-steps-marker-size)+0.375rem)] bottom-1',\n}\n\nexport const stepsConnectorDoneClass = 'bg-[var(--gr-steps-connector-done,var(--gr-primary-solid))]'\nexport const stepsConnectorPendingClass = 'bg-[var(--gr-steps-connector-pending,var(--gr-brd))]'\n\n/** Компактный вариант: подпись и полоса вместо ленты. */\nexport const stepsCompactRowClass = 'flex items-baseline justify-between gap-3'\nexport const stepsCompactCounterClass = 'shrink-0 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] text-[var(--gr-muted-fg)]'\nexport const stepsCompactLabelClass = 'min-w-0 truncate font-600 text-[var(--gr-fg)]'\nexport const stepsCompactBarClass = 'mt-2'\n\nexport function grStepsMarkerClass(status: GrStepStatus): string {\n return `${stepsMarkerClass} ${stepsMarkerClassByStatus[status]}`\n}\n\nexport function grStepsLabelClass(status: GrStepStatus): string {\n return `${stepsLabelClass} ${stepsLabelClassByStatus[status]}`\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n stepsCompactBarClass,\n stepsCompactCounterClass,\n stepsCompactLabelClass,\n stepsCompactRowClass,\n stepsConnectorClass,\n stepsConnectorDoneClass,\n stepsConnectorPendingClass,\n stepsDescriptionClass,\n stepsItemClass,\n stepsItemConnectedClass,\n stepsLabelClass,\n stepsLabelClassByStatus,\n stepsListClass,\n stepsMarkerClass,\n stepsMarkerClassByStatus,\n stepsRootClass,\n stepsSizeClassBySize,\n stepsTriggerClass,\n stepsTriggerClassByOrientation,\n stepsTriggerEnabledClass,\n} from './grStepsStyles'\n\nexport const grStepsSafelist = [...new Set([\n ...Object.values(stepsSizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(stepsListClass).flatMap(splitClassTokens),\n ...Object.values(stepsItemClass).flatMap(splitClassTokens),\n ...Object.values(stepsItemConnectedClass).flatMap(splitClassTokens),\n ...Object.values(stepsTriggerClassByOrientation).flatMap(splitClassTokens),\n ...Object.values(stepsConnectorClass).flatMap(splitClassTokens),\n ...Object.values(stepsMarkerClassByStatus).flatMap(splitClassTokens),\n ...Object.values(stepsLabelClassByStatus).flatMap(splitClassTokens),\n ...splitClassTokens(stepsRootClass),\n ...splitClassTokens(stepsMarkerClass),\n ...splitClassTokens(stepsLabelClass),\n ...splitClassTokens(stepsDescriptionClass),\n ...splitClassTokens(stepsTriggerClass),\n ...splitClassTokens(stepsTriggerEnabledClass),\n ...splitClassTokens(stepsConnectorDoneClass),\n ...splitClassTokens(stepsConnectorPendingClass),\n ...splitClassTokens(stepsCompactRowClass),\n ...splitClassTokens(stepsCompactCounterClass),\n ...splitClassTokens(stepsCompactLabelClass),\n ...splitClassTokens(stepsCompactBarClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grStepsSafelist } from './safelist'\n\nexport const grStepsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSteps',\n // Компактный вариант рендерит полосу прогресса — это ребро графа.\n dependencies: ['GrProgressBar'],\n safelist: grStepsSafelist,\n})\n"],"mappings":";;;AAQA,IAAa,iBAAiB;AAE9B,IAAa,iBAAqD;CAKhE,YAAY;CACZ,UAAU;AACZ;;;;;;;;;AAUA,IAAa,iBAAqD;CAChE,YAAY;CACZ,UAAU;AACZ;;AAGA,IAAa,0BAA8D;CACzE,YAAY;CACZ,UAAU;AACZ;;;;;;;;;AAUA,IAAa,uBAAoD;CAC/D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,oBAAoB;AAEjC,IAAa,iCAAqE;CAChF,YAAY;CACZ,UAAU;AACZ;;AAGA,IAAa,2BAA2B;AAExC,IAAa,mBAAmB;;;;;;;;;AAUhC,IAAa,2BAAyD;CACpE,UAAU;CACV,SAAS;CACT,UAAU;CACV,OAAO;AACT;AAEA,IAAa,kBAAkB;AAE/B,IAAa,0BAAwD;CACnE,UAAU;CACV,SAAS;CACT,UAAU;CACV,OAAO;AACT;AAEA,IAAa,wBAAwB;;;;;;;;;;AAWrC,IAAa,sBAA0D;CACrE,YAAY;CACZ,UAAU;AACZ;AAEA,IAAa,0BAA0B;AACvC,IAAa,6BAA6B;;AAG1C,IAAa,uBAAuB;AACpC,IAAa,2BAA2B;AACxC,IAAa,yBAAyB;AACtC,IAAa,uBAAuB;AAEpC,SAAgB,mBAAmB,QAA8B;CAC/D,OAAO,GAAG,iBAAiB,GAAG,yBAAyB;AACzD;AAEA,SAAgB,kBAAkB,QAA8B;CAC9D,OAAO,GAAG,gBAAgB,GAAG,wBAAwB;AACvD;;;AC/FA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,OAAO,OAAO,8BAA8B,CAAC,CAAC,QAAQ,gBAAgB;CACzE,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,oBAAoB;AAC1C,CAAC,CAAC;;;AC1CF,IAAa,gBAAgB,wBAAwB,OAAO,KAAK,KAAK;CACpE,MAAM;CAEN,cAAc,CAAC,eAAe;CAC9B,UAAU;AACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-CLjjjPZj.js","names":[],"sources":["../../src/components/GrSteps/grStepsStyles.ts","../../src/components/GrSteps/safelist.ts","../../src/components/GrSteps/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrStepStatus } from './stepsModel'\n\nexport type GrStepsSize = GrComponentSize\nexport type GrStepsOrientation = 'horizontal' | 'vertical'\nexport type GrStepsVariant = 'steps' | 'compact'\n\nexport const stepsRootClass = 'w-full min-w-0'\n\nexport const stepsListClass: Record<GrStepsOrientation, string> = {\n // Горизонтальная лента делит ширину поровну: шаги — равноправные этапы, и\n // разная ширина читалась бы как разный вес.\n // `[list-style:none]`, а не `list-none`: утилита не входит в документированный\n // пресет и CSS не даёт (гейт `documentedConfig`). Так же живёт `GrBreadcrumbs`.\n horizontal: 'm-0 flex [list-style:none] items-start p-0',\n vertical: 'm-0 flex [list-style:none] flex-col p-0',\n}\n\n/**\n * Пункт растёт по горизонтали и прижимается влево по вертикали.\n *\n * В горизонтальной ленте маркер стоит **над** подписью, а не слева от неё:\n * соединитель идёт от маркера к маркеру на их высоте, и подпись сбоку он бы\n * перечёркивал. В вертикальной колонке места по ширине хватает, там подпись\n * справа, а линия спускается вниз.\n */\nexport const stepsItemClass: Record<GrStepsOrientation, string> = {\n horizontal: 'relative min-w-0 flex-1',\n vertical: 'relative min-w-0',\n}\n\n/** Отступ снизу у вертикального пункта — место, по которому идёт соединитель. */\nexport const stepsItemConnectedClass: Record<GrStepsOrientation, string> = {\n horizontal: '',\n vertical: 'pb-6',\n}\n\n/**\n * Кегль и метрика маркера на ступени.\n *\n * Шкала контрольная (`--gr-control-text-*`): шаги стоят в шапке мастера рядом с\n * кнопками «Назад»/«Далее», и подпись обязана совпасть с ними, а не с меткой.\n * Диаметр маркера — покомпонентный токен, потому что ступени в общей шкале для\n * него нет: это не кегль и не радиус, а собственная метрика компонента.\n */\nexport const stepsSizeClassBySize: Record<GrStepsSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] [--gr-steps-marker-size:1.25rem]',\n sm: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)] [--gr-steps-marker-size:1.5rem]',\n md: 'text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)] [--gr-steps-marker-size:1.75rem]',\n lg: 'text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)] [--gr-steps-marker-size:2rem]',\n}\n\nexport const stepsTriggerClass = 'min-w-0 bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--gr-bg)] rounded-[var(--gr-radius-md)]'\n\nexport const stepsTriggerClassByOrientation: Record<GrStepsOrientation, string> = {\n horizontal: 'flex w-full flex-col items-center gap-1.5 text-center',\n vertical: 'flex w-full items-start gap-3 text-left',\n}\n\n/** Кликабельный шаг обязан выглядеть кликабельным — иначе о нём не догадаются. */\nexport const stepsTriggerEnabledClass = 'cursor-pointer'\n\nexport const stepsMarkerClass = 'inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-full)] border font-600 leading-none h-[var(--gr-steps-marker-size)] w-[var(--gr-steps-marker-size)] text-[length:var(--gr-control-text-2xs)]'\n\n/**\n * Маркер по статусу.\n *\n * Пройденный — сплошная заливка, текущий — обводка тем же тоном, будущий —\n * приглушённый. Различие идёт по светлоте, а не по оттенку: три соседних цвета\n * одного тона на одной ленте не читаются, а сплошное/полое — читается и в\n * монохроме. `error` — единственный, кто меняет тон, и меняет его осмысленно.\n */\nexport const stepsMarkerClassByStatus: Record<GrStepStatus, string> = {\n complete: 'border-[var(--gr-primary-solid)] bg-[var(--gr-primary-solid)] text-[var(--gr-primary-solid-fg)]',\n current: 'border-[var(--gr-primary-solid)] bg-[var(--gr-bg)] text-[var(--gr-primary-text)]',\n upcoming: 'border-[var(--gr-brd)] bg-[var(--gr-bg)] text-[var(--gr-muted-fg)]',\n error: 'border-[var(--gr-danger-solid)] bg-[var(--gr-danger-solid)] text-[var(--gr-danger-solid-fg)]',\n}\n\nexport const stepsLabelClass = 'block min-w-0 font-600'\n\nexport const stepsLabelClassByStatus: Record<GrStepStatus, string> = {\n complete: 'text-[var(--gr-fg)]',\n current: 'text-[var(--gr-fg)]',\n upcoming: 'text-[var(--gr-muted-fg)]',\n error: 'text-[var(--gr-danger-text)]',\n}\n\nexport const stepsDescriptionClass = 'block mt-0.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] text-[var(--gr-muted-fg)]'\n\n/**\n * Соединитель между шагами.\n *\n * Позиция считается от диаметра маркера, а не от жёсткой высоты: маркер растёт\n * со ступенью размера, и линия обязана оставаться на его оси. По горизонтали\n * пункты делят ширину поровну, поэтому маркер стоит ровно по центру пункта —\n * отсюда `50%` слева и `-50%` справа: линия идёт от края одного маркера до\n * края соседнего.\n */\nexport const stepsConnectorClass: Record<GrStepsOrientation, string> = {\n horizontal: 'absolute top-[calc(var(--gr-steps-marker-size)/2)] h-[var(--gr-steps-connector-size,2px)] -translate-y-1/2 left-[calc(50%+var(--gr-steps-marker-size)/2+0.5rem)] right-[calc(-50%+var(--gr-steps-marker-size)/2+0.5rem)]',\n vertical: 'absolute left-[calc(var(--gr-steps-marker-size)/2)] w-[var(--gr-steps-connector-size,2px)] -translate-x-1/2 top-[calc(var(--gr-steps-marker-size)+0.375rem)] bottom-1',\n}\n\nexport const stepsConnectorDoneClass = 'bg-[var(--gr-steps-connector-done,var(--gr-primary-solid))]'\nexport const stepsConnectorPendingClass = 'bg-[var(--gr-steps-connector-pending,var(--gr-brd))]'\n\n/** Компактный вариант: подпись и полоса вместо ленты. */\nexport const stepsCompactRowClass = 'flex items-baseline justify-between gap-3'\nexport const stepsCompactCounterClass = 'shrink-0 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] text-[var(--gr-muted-fg)]'\nexport const stepsCompactLabelClass = 'min-w-0 truncate font-600 text-[var(--gr-fg)]'\nexport const stepsCompactBarClass = 'mt-2'\n\nexport function grStepsMarkerClass(status: GrStepStatus): string {\n return `${stepsMarkerClass} ${stepsMarkerClassByStatus[status]}`\n}\n\nexport function grStepsLabelClass(status: GrStepStatus): string {\n return `${stepsLabelClass} ${stepsLabelClassByStatus[status]}`\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n stepsCompactBarClass,\n stepsCompactCounterClass,\n stepsCompactLabelClass,\n stepsCompactRowClass,\n stepsConnectorClass,\n stepsConnectorDoneClass,\n stepsConnectorPendingClass,\n stepsDescriptionClass,\n stepsItemClass,\n stepsItemConnectedClass,\n stepsLabelClass,\n stepsLabelClassByStatus,\n stepsListClass,\n stepsMarkerClass,\n stepsMarkerClassByStatus,\n stepsRootClass,\n stepsSizeClassBySize,\n stepsTriggerClass,\n stepsTriggerClassByOrientation,\n stepsTriggerEnabledClass,\n} from './grStepsStyles'\n\nexport const grStepsSafelist = [...new Set([\n ...Object.values(stepsSizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(stepsListClass).flatMap(splitClassTokens),\n ...Object.values(stepsItemClass).flatMap(splitClassTokens),\n ...Object.values(stepsItemConnectedClass).flatMap(splitClassTokens),\n ...Object.values(stepsTriggerClassByOrientation).flatMap(splitClassTokens),\n ...Object.values(stepsConnectorClass).flatMap(splitClassTokens),\n ...Object.values(stepsMarkerClassByStatus).flatMap(splitClassTokens),\n ...Object.values(stepsLabelClassByStatus).flatMap(splitClassTokens),\n ...splitClassTokens(stepsRootClass),\n ...splitClassTokens(stepsMarkerClass),\n ...splitClassTokens(stepsLabelClass),\n ...splitClassTokens(stepsDescriptionClass),\n ...splitClassTokens(stepsTriggerClass),\n ...splitClassTokens(stepsTriggerEnabledClass),\n ...splitClassTokens(stepsConnectorDoneClass),\n ...splitClassTokens(stepsConnectorPendingClass),\n ...splitClassTokens(stepsCompactRowClass),\n ...splitClassTokens(stepsCompactCounterClass),\n ...splitClassTokens(stepsCompactLabelClass),\n ...splitClassTokens(stepsCompactBarClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grStepsSafelist } from './safelist'\n\nexport const grStepsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSteps',\n // Компактный вариант рендерит полосу прогресса — это ребро графа.\n dependencies: ['GrProgressBar'],\n safelist: grStepsSafelist,\n})\n"],"mappings":";;;AAQA,IAAa,iBAAiB;AAE9B,IAAa,iBAAqD;CAKhE,YAAY;CACZ,UAAU;AACZ;;;;;;;;;AAUA,IAAa,iBAAqD;CAChE,YAAY;CACZ,UAAU;AACZ;;AAGA,IAAa,0BAA8D;CACzE,YAAY;CACZ,UAAU;AACZ;;;;;;;;;AAUA,IAAa,uBAAoD;CAC/D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,oBAAoB;AAEjC,IAAa,iCAAqE;CAChF,YAAY;CACZ,UAAU;AACZ;;AAGA,IAAa,2BAA2B;AAExC,IAAa,mBAAmB;;;;;;;;;AAUhC,IAAa,2BAAyD;CACpE,UAAU;CACV,SAAS;CACT,UAAU;CACV,OAAO;AACT;AAEA,IAAa,kBAAkB;AAE/B,IAAa,0BAAwD;CACnE,UAAU;CACV,SAAS;CACT,UAAU;CACV,OAAO;AACT;AAEA,IAAa,wBAAwB;;;;;;;;;;AAWrC,IAAa,sBAA0D;CACrE,YAAY;CACZ,UAAU;AACZ;AAEA,IAAa,0BAA0B;AACvC,IAAa,6BAA6B;;AAG1C,IAAa,uBAAuB;AACpC,IAAa,2BAA2B;AACxC,IAAa,yBAAyB;AACtC,IAAa,uBAAuB;AAEpC,SAAgB,mBAAmB,QAA8B;CAC/D,OAAO,GAAG,iBAAiB,GAAG,yBAAyB;AACzD;AAEA,SAAgB,kBAAkB,QAA8B;CAC9D,OAAO,GAAG,gBAAgB,GAAG,wBAAwB;AACvD;;;AC/FA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,OAAO,OAAO,8BAA8B,CAAC,CAAC,QAAQ,gBAAgB;CACzE,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,oBAAoB;AAC1C,CAAC,CAAC;;;AC1CF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;CAEN,cAAc,CAAC,eAAe;CAC9B,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CMNfZO7S.js","names":[],"sources":["../../src/components/GrTabs/grTabsStyles.ts","../../src/components/GrTabs/safelist.ts","../../src/components/GrTabs/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrTabsSize = GrComponentSize\n\n/**\n * `pills` — вкладки-таблетки в общей обойме, `line` — классический ряд с\n * подчёркиванием активной. Имя `pills` общее с `GrSegmented`: у компонентов\n * одна роль, и вид с таким названием у них совпадает.\n */\nexport const GR_TABS_VARIANTS = ['pills', 'line'] as const\nexport type GrTabsVariant = typeof GR_TABS_VARIANTS[number]\n\nexport type GrTabsOrientation = 'horizontal' | 'vertical'\n\n/** Высота вкладки повторяет шкалу `GrButton`: вкладки часто стоят с ним в один ряд. */\nexport const tabSizes: Record<GrTabsSize, string> = {\n xs: 'h-7 px-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 px-2.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-10 px-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-11 px-4 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Счётчик у вкладки: на ступень мельче подписи. */\nexport const tabBadgeSizes: Record<GrTabsSize, string> = {\n xs: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1 py-0.5',\n sm: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1.5 py-0.5',\n md: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1.5 py-0.5',\n lg: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] px-2 py-0.5',\n}\n\n/** Обойма вокруг вкладок: на мелких ступенях рамка съедала бы высоту. */\nexport const tablistSizes: Record<GrTabsSize, string> = {\n xs: 'gap-0.5 p-0.5',\n sm: 'gap-1 p-1',\n md: 'gap-1 p-1',\n lg: 'gap-1 p-1.5',\n}\n\n/** `line` живёт без обоймы, поэтому и без внутренних отступов. */\nexport const tablistLineSizes: Record<GrTabsSize, string> = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-2',\n lg: 'gap-3',\n}\n\nexport const tablistBase = 'inline-flex max-w-full'\n\nexport const tablistVariants: Record<GrTabsVariant, string> = {\n pills: 'rounded-[var(--gr-radius-lg)] border border-[var(--gr-brd)] bg-[var(--gr-muted)]',\n line: 'border-b border-[var(--gr-brd)]',\n}\n\n/**\n * Вертикальный `line` подчёркивает вкладку сбоку, а не снизу: линия должна идти\n * вдоль списка, иначе она отделяет вкладки друг от друга вместо ряда целиком.\n */\nexport const tablistVerticalVariants: Record<GrTabsVariant, string> = {\n pills: '',\n line: 'border-b-0 border-r border-[var(--gr-brd)]',\n}\n\n/**\n * Переполнение прокручивается, а не переносится строкой: перенос ломает ряд и\n * уводит вкладки под панель. Полоса прокрутки скрыта — ряд ведёт клавиатура и\n * автоскролл к активной вкладке.\n */\nexport const tablistScrollClass = 'overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden'\n\n/** Вертикальный ряд — колонка; прокрутки ему не нужно: он растёт вниз. */\nexport const tablistColumnClass = 'flex-col'\n\nexport const tabBase = 'shrink-0 font-600 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\n// Цвет подчёркивания задаёт только состояние: `border-transparent` в базе имеет\n// ту же специфичность, что и цвет активной вкладки, и побеждал бы через раз —\n// по порядку правил в сгенерированном CSS, а не по порядку классов в атрибуте.\nexport const tabVariantBase: Record<GrTabsVariant, string> = {\n pills: 'rounded-[var(--gr-radius-md)]',\n line: 'rounded-[var(--gr-radius-md)] rounded-b-[var(--gr-radius-none)] border-b-2 -mb-px',\n}\n\nexport const tabStateClasses: Record<GrTabsVariant, { active: string, idle: string, disabled: string }> = {\n pills: {\n active: 'bg-[var(--gr-card)] text-[var(--gr-fg)] border border-[var(--gr-brd)]',\n idle: 'text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-card)_70%,transparent)]',\n disabled: 'cursor-not-allowed text-[var(--gr-disabled-fg)]',\n },\n line: {\n active: 'border-[var(--gr-primary)] text-[var(--gr-fg)]',\n idle: 'border-transparent text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:border-[var(--gr-brd)]',\n disabled: 'border-transparent cursor-not-allowed text-[var(--gr-disabled-fg)]',\n },\n}\n\nexport const tabIconClass = 'h-4 w-4 shrink-0'\n\nexport const tabContentClass = 'inline-flex items-center gap-2'\n\n/**\n * Крестик закрытия. Кнопкой он быть не может: `role=\"tab\"` объявляет потомков\n * презентационными, и вложенный интерактив теряется у скринридера (axe:\n * `nested-interactive`). Поэтому это `<span>`, а клик по нему разбирает\n * обработчик самой вкладки.\n *\n * Своего фокус-кольца у него нет по той же причине — в таб-порядке он не стоит,\n * с клавиатуры закрытие идёт по `Delete`/`Backspace`.\n */\nexport const tabCloseBase = 'inline-flex items-center justify-center shrink-0 rounded-[var(--gr-radius-sm)] text-[var(--gr-muted-fg)] transition-colors hover:bg-[var(--gr-muted)] hover:text-[var(--gr-fg)]'\n\nexport const tabCloseSizes: Record<GrTabsSize, string> = {\n xs: 'h-4 w-4',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-5 w-5',\n}\n\nexport const tabCloseIconSizes: Record<GrTabsSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-3 w-3',\n md: 'h-4 w-4',\n lg: 'h-4 w-4',\n}\n\n/** Пустой ряд держит высоту вкладки: иначе соседние блоки прыгают при закрытии последней. */\nexport const tabsEmptyBase = 'inline-flex items-center text-[var(--gr-muted-fg)]'\n\nexport const tabBadgeBase = 'rounded-[var(--gr-radius-full)] bg-[var(--gr-secondary)] text-[var(--gr-secondary-fg)]'\n\nexport function grTabsListClass(options: {\n variant: GrTabsVariant\n size: GrTabsSize\n orientation: GrTabsOrientation\n}): string {\n const vertical = options.orientation === 'vertical'\n\n return [\n tablistBase,\n tablistVariants[options.variant],\n vertical ? tablistVerticalVariants[options.variant] : '',\n options.variant === 'pills' ? tablistSizes[options.size] : tablistLineSizes[options.size],\n vertical ? tablistColumnClass : tablistScrollClass,\n ].filter(Boolean).join(' ')\n}\n\nexport function grTabsTabClass(options: {\n variant: GrTabsVariant\n size: GrTabsSize\n active: boolean\n disabled: boolean\n}): string {\n const state = tabStateClasses[options.variant]\n\n return [\n tabBase,\n tabVariantBase[options.variant],\n tabSizes[options.size],\n options.disabled ? state.disabled : options.active ? state.active : state.idle,\n ].join(' ')\n}\n\nexport function grTabsBadgeClass(size: GrTabsSize): string {\n return [tabBadgeBase, tabBadgeSizes[size]].join(' ')\n}\n\nexport function grTabsCloseClass(size: GrTabsSize): string {\n return [tabCloseBase, tabCloseSizes[size]].join(' ')\n}\n\nexport function grTabsEmptyClass(size: GrTabsSize): string {\n return [tabsEmptyBase, tabSizes[size]].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n tabBadgeBase,\n tabBadgeSizes,\n tabBase,\n tabCloseBase,\n tabCloseIconSizes,\n tabCloseSizes,\n tabContentClass,\n tabIconClass,\n tablistBase,\n tablistColumnClass,\n tablistLineSizes,\n tablistScrollClass,\n tablistSizes,\n tablistVariants,\n tablistVerticalVariants,\n tabsEmptyBase,\n tabSizes,\n tabStateClasses,\n tabVariantBase,\n} from './grTabsStyles'\n\nexport const grTabsSafelist = [...new Set([\n ...Object.values(tabSizes).flatMap(splitClassTokens),\n ...Object.values(tabBadgeSizes).flatMap(splitClassTokens),\n ...Object.values(tabCloseSizes).flatMap(splitClassTokens),\n ...Object.values(tabCloseIconSizes).flatMap(splitClassTokens),\n ...Object.values(tablistSizes).flatMap(splitClassTokens),\n ...Object.values(tablistLineSizes).flatMap(splitClassTokens),\n ...Object.values(tablistVariants).flatMap(splitClassTokens),\n ...Object.values(tablistVerticalVariants).flatMap(splitClassTokens),\n ...Object.values(tabVariantBase).flatMap(splitClassTokens),\n ...Object.values(tabStateClasses).flatMap(state => [\n ...splitClassTokens(state.active),\n ...splitClassTokens(state.idle),\n ...splitClassTokens(state.disabled),\n ]),\n ...splitClassTokens(tablistBase),\n ...splitClassTokens(tablistScrollClass),\n ...splitClassTokens(tablistColumnClass),\n ...splitClassTokens(tabBase),\n ...splitClassTokens(tabBadgeBase),\n ...splitClassTokens(tabContentClass),\n ...splitClassTokens(tabIconClass),\n ...splitClassTokens(tabCloseBase),\n ...splitClassTokens(tabsEmptyBase),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTabsSafelist } from './safelist'\n\nexport const grTabsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTabs',\n safelist: grTabsSafelist,\n})\n"],"mappings":";;;;AAeA,IAAa,WAAuC;CAClD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,eAA2C;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,mBAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,cAAc;AAE3B,IAAa,kBAAiD;CAC5D,OAAO;CACP,MAAM;AACR;;;;;AAMA,IAAa,0BAAyD;CACpE,OAAO;CACP,MAAM;AACR;;;;;;AAOA,IAAa,qBAAqB;;AAGlC,IAAa,qBAAqB;AAElC,IAAa,UAAU;AAKvB,IAAa,iBAAgD;CAC3D,OAAO;CACP,MAAM;AACR;AAEA,IAAa,kBAA6F;CACxG,OAAO;EACL,QAAQ;EACR,MAAM;EACN,UAAU;CACZ;CACA,MAAM;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;CACZ;AACF;AAEA,IAAa,eAAe;AAE5B,IAAa,kBAAkB;;;;;;;;;;AAW/B,IAAa,eAAe;AAE5B,IAAa,gBAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,oBAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAAgB;AAE7B,IAAa,eAAe;AAE5B,SAAgB,gBAAgB,SAIrB;CACT,MAAM,WAAW,QAAQ,gBAAgB;CAEzC,OAAO;EACL;EACA,gBAAgB,QAAQ;EACxB,WAAW,wBAAwB,QAAQ,WAAW;EACtD,QAAQ,YAAY,UAAU,aAAa,QAAQ,QAAQ,iBAAiB,QAAQ;EACpF,WAAW,qBAAqB;CAClC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,eAAe,SAKpB;CACT,MAAM,QAAQ,gBAAgB,QAAQ;CAEtC,OAAO;EACL;EACA,eAAe,QAAQ;EACvB,SAAS,QAAQ;EACjB,QAAQ,WAAW,MAAM,WAAW,QAAQ,SAAS,MAAM,SAAS,MAAM;CAC5E,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,cAAc,cAAc,KAAK,CAAC,CAAC,KAAK,GAAG;AACrD;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,cAAc,cAAc,KAAK,CAAC,CAAC,KAAK,GAAG;AACrD;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,eAAe,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG;AACjD;;;ACpJA,IAAa,iBAAiB,CAAC,mBAAG,IAAI,IAAI;CACxC,GAAG,OAAO,OAAO,QAAQ,CAAC,CAAC,QAAQ,gBAAgB;CACnD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,SAAQ,UAAS;EACjD,GAAG,iBAAiB,MAAM,MAAM;EAChC,GAAG,iBAAiB,MAAM,IAAI;EAC9B,GAAG,iBAAiB,MAAM,QAAQ;CACpC,CAAC;CACD,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,OAAO;CAC3B,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,aAAa;AACnC,CAAC,CAAC;;;AC3CF,IAAa,eAAe,wBAAwB,OAAO,KAAK,KAAK;CACnE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"config-CMNfZO7S.js","names":[],"sources":["../../src/components/GrTabs/grTabsStyles.ts","../../src/components/GrTabs/safelist.ts","../../src/components/GrTabs/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrTabsSize = GrComponentSize\n\n/**\n * `pills` — вкладки-таблетки в общей обойме, `line` — классический ряд с\n * подчёркиванием активной. Имя `pills` общее с `GrSegmented`: у компонентов\n * одна роль, и вид с таким названием у них совпадает.\n */\nexport const GR_TABS_VARIANTS = ['pills', 'line'] as const\nexport type GrTabsVariant = typeof GR_TABS_VARIANTS[number]\n\nexport type GrTabsOrientation = 'horizontal' | 'vertical'\n\n/** Высота вкладки повторяет шкалу `GrButton`: вкладки часто стоят с ним в один ряд. */\nexport const tabSizes: Record<GrTabsSize, string> = {\n xs: 'h-7 px-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 px-2.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-10 px-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-11 px-4 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Счётчик у вкладки: на ступень мельче подписи. */\nexport const tabBadgeSizes: Record<GrTabsSize, string> = {\n xs: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1 py-0.5',\n sm: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1.5 py-0.5',\n md: 'text-[length:var(--gr-text-2xs)] leading-[var(--gr-leading-2xs)] px-1.5 py-0.5',\n lg: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] px-2 py-0.5',\n}\n\n/** Обойма вокруг вкладок: на мелких ступенях рамка съедала бы высоту. */\nexport const tablistSizes: Record<GrTabsSize, string> = {\n xs: 'gap-0.5 p-0.5',\n sm: 'gap-1 p-1',\n md: 'gap-1 p-1',\n lg: 'gap-1 p-1.5',\n}\n\n/** `line` живёт без обоймы, поэтому и без внутренних отступов. */\nexport const tablistLineSizes: Record<GrTabsSize, string> = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-2',\n lg: 'gap-3',\n}\n\nexport const tablistBase = 'inline-flex max-w-full'\n\nexport const tablistVariants: Record<GrTabsVariant, string> = {\n pills: 'rounded-[var(--gr-radius-lg)] border border-[var(--gr-brd)] bg-[var(--gr-muted)]',\n line: 'border-b border-[var(--gr-brd)]',\n}\n\n/**\n * Вертикальный `line` подчёркивает вкладку сбоку, а не снизу: линия должна идти\n * вдоль списка, иначе она отделяет вкладки друг от друга вместо ряда целиком.\n */\nexport const tablistVerticalVariants: Record<GrTabsVariant, string> = {\n pills: '',\n line: 'border-b-0 border-r border-[var(--gr-brd)]',\n}\n\n/**\n * Переполнение прокручивается, а не переносится строкой: перенос ломает ряд и\n * уводит вкладки под панель. Полоса прокрутки скрыта — ряд ведёт клавиатура и\n * автоскролл к активной вкладке.\n */\nexport const tablistScrollClass = 'overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden'\n\n/** Вертикальный ряд — колонка; прокрутки ему не нужно: он растёт вниз. */\nexport const tablistColumnClass = 'flex-col'\n\nexport const tabBase = 'shrink-0 font-600 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\n// Цвет подчёркивания задаёт только состояние: `border-transparent` в базе имеет\n// ту же специфичность, что и цвет активной вкладки, и побеждал бы через раз —\n// по порядку правил в сгенерированном CSS, а не по порядку классов в атрибуте.\nexport const tabVariantBase: Record<GrTabsVariant, string> = {\n pills: 'rounded-[var(--gr-radius-md)]',\n line: 'rounded-[var(--gr-radius-md)] rounded-b-[var(--gr-radius-none)] border-b-2 -mb-px',\n}\n\nexport const tabStateClasses: Record<GrTabsVariant, { active: string, idle: string, disabled: string }> = {\n pills: {\n active: 'bg-[var(--gr-card)] text-[var(--gr-fg)] border border-[var(--gr-brd)]',\n idle: 'text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:bg-[color-mix(in_srgb,var(--gr-card)_70%,transparent)]',\n disabled: 'cursor-not-allowed text-[var(--gr-disabled-fg)]',\n },\n line: {\n active: 'border-[var(--gr-primary)] text-[var(--gr-fg)]',\n idle: 'border-transparent text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] hover:border-[var(--gr-brd)]',\n disabled: 'border-transparent cursor-not-allowed text-[var(--gr-disabled-fg)]',\n },\n}\n\nexport const tabIconClass = 'h-4 w-4 shrink-0'\n\nexport const tabContentClass = 'inline-flex items-center gap-2'\n\n/**\n * Крестик закрытия. Кнопкой он быть не может: `role=\"tab\"` объявляет потомков\n * презентационными, и вложенный интерактив теряется у скринридера (axe:\n * `nested-interactive`). Поэтому это `<span>`, а клик по нему разбирает\n * обработчик самой вкладки.\n *\n * Своего фокус-кольца у него нет по той же причине — в таб-порядке он не стоит,\n * с клавиатуры закрытие идёт по `Delete`/`Backspace`.\n */\nexport const tabCloseBase = 'inline-flex items-center justify-center shrink-0 rounded-[var(--gr-radius-sm)] text-[var(--gr-muted-fg)] transition-colors hover:bg-[var(--gr-muted)] hover:text-[var(--gr-fg)]'\n\nexport const tabCloseSizes: Record<GrTabsSize, string> = {\n xs: 'h-4 w-4',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-5 w-5',\n}\n\nexport const tabCloseIconSizes: Record<GrTabsSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-3 w-3',\n md: 'h-4 w-4',\n lg: 'h-4 w-4',\n}\n\n/** Пустой ряд держит высоту вкладки: иначе соседние блоки прыгают при закрытии последней. */\nexport const tabsEmptyBase = 'inline-flex items-center text-[var(--gr-muted-fg)]'\n\nexport const tabBadgeBase = 'rounded-[var(--gr-radius-full)] bg-[var(--gr-secondary)] text-[var(--gr-secondary-fg)]'\n\nexport function grTabsListClass(options: {\n variant: GrTabsVariant\n size: GrTabsSize\n orientation: GrTabsOrientation\n}): string {\n const vertical = options.orientation === 'vertical'\n\n return [\n tablistBase,\n tablistVariants[options.variant],\n vertical ? tablistVerticalVariants[options.variant] : '',\n options.variant === 'pills' ? tablistSizes[options.size] : tablistLineSizes[options.size],\n vertical ? tablistColumnClass : tablistScrollClass,\n ].filter(Boolean).join(' ')\n}\n\nexport function grTabsTabClass(options: {\n variant: GrTabsVariant\n size: GrTabsSize\n active: boolean\n disabled: boolean\n}): string {\n const state = tabStateClasses[options.variant]\n\n return [\n tabBase,\n tabVariantBase[options.variant],\n tabSizes[options.size],\n options.disabled ? state.disabled : options.active ? state.active : state.idle,\n ].join(' ')\n}\n\nexport function grTabsBadgeClass(size: GrTabsSize): string {\n return [tabBadgeBase, tabBadgeSizes[size]].join(' ')\n}\n\nexport function grTabsCloseClass(size: GrTabsSize): string {\n return [tabCloseBase, tabCloseSizes[size]].join(' ')\n}\n\nexport function grTabsEmptyClass(size: GrTabsSize): string {\n return [tabsEmptyBase, tabSizes[size]].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n tabBadgeBase,\n tabBadgeSizes,\n tabBase,\n tabCloseBase,\n tabCloseIconSizes,\n tabCloseSizes,\n tabContentClass,\n tabIconClass,\n tablistBase,\n tablistColumnClass,\n tablistLineSizes,\n tablistScrollClass,\n tablistSizes,\n tablistVariants,\n tablistVerticalVariants,\n tabsEmptyBase,\n tabSizes,\n tabStateClasses,\n tabVariantBase,\n} from './grTabsStyles'\n\nexport const grTabsSafelist = [...new Set([\n ...Object.values(tabSizes).flatMap(splitClassTokens),\n ...Object.values(tabBadgeSizes).flatMap(splitClassTokens),\n ...Object.values(tabCloseSizes).flatMap(splitClassTokens),\n ...Object.values(tabCloseIconSizes).flatMap(splitClassTokens),\n ...Object.values(tablistSizes).flatMap(splitClassTokens),\n ...Object.values(tablistLineSizes).flatMap(splitClassTokens),\n ...Object.values(tablistVariants).flatMap(splitClassTokens),\n ...Object.values(tablistVerticalVariants).flatMap(splitClassTokens),\n ...Object.values(tabVariantBase).flatMap(splitClassTokens),\n ...Object.values(tabStateClasses).flatMap(state => [\n ...splitClassTokens(state.active),\n ...splitClassTokens(state.idle),\n ...splitClassTokens(state.disabled),\n ]),\n ...splitClassTokens(tablistBase),\n ...splitClassTokens(tablistScrollClass),\n ...splitClassTokens(tablistColumnClass),\n ...splitClassTokens(tabBase),\n ...splitClassTokens(tabBadgeBase),\n ...splitClassTokens(tabContentClass),\n ...splitClassTokens(tabIconClass),\n ...splitClassTokens(tabCloseBase),\n ...splitClassTokens(tabsEmptyBase),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTabsSafelist } from './safelist'\n\nexport const grTabsConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTabs',\n safelist: grTabsSafelist,\n})\n"],"mappings":";;;;AAeA,IAAa,WAAuC;CAClD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,eAA2C;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,mBAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,cAAc;AAE3B,IAAa,kBAAiD;CAC5D,OAAO;CACP,MAAM;AACR;;;;;AAMA,IAAa,0BAAyD;CACpE,OAAO;CACP,MAAM;AACR;;;;;;AAOA,IAAa,qBAAqB;;AAGlC,IAAa,qBAAqB;AAElC,IAAa,UAAU;AAKvB,IAAa,iBAAgD;CAC3D,OAAO;CACP,MAAM;AACR;AAEA,IAAa,kBAA6F;CACxG,OAAO;EACL,QAAQ;EACR,MAAM;EACN,UAAU;CACZ;CACA,MAAM;EACJ,QAAQ;EACR,MAAM;EACN,UAAU;CACZ;AACF;AAEA,IAAa,eAAe;AAE5B,IAAa,kBAAkB;;;;;;;;;;AAW/B,IAAa,eAAe;AAE5B,IAAa,gBAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,oBAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAAgB;AAE7B,IAAa,eAAe;AAE5B,SAAgB,gBAAgB,SAIrB;CACT,MAAM,WAAW,QAAQ,gBAAgB;CAEzC,OAAO;EACL;EACA,gBAAgB,QAAQ;EACxB,WAAW,wBAAwB,QAAQ,WAAW;EACtD,QAAQ,YAAY,UAAU,aAAa,QAAQ,QAAQ,iBAAiB,QAAQ;EACpF,WAAW,qBAAqB;CAClC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,eAAe,SAKpB;CACT,MAAM,QAAQ,gBAAgB,QAAQ;CAEtC,OAAO;EACL;EACA,eAAe,QAAQ;EACvB,SAAS,QAAQ;EACjB,QAAQ,WAAW,MAAM,WAAW,QAAQ,SAAS,MAAM,SAAS,MAAM;CAC5E,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,cAAc,cAAc,KAAK,CAAC,CAAC,KAAK,GAAG;AACrD;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,cAAc,cAAc,KAAK,CAAC,CAAC,KAAK,GAAG;AACrD;AAEA,SAAgB,iBAAiB,MAA0B;CACzD,OAAO,CAAC,eAAe,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG;AACjD;;;ACpJA,IAAa,iBAAiB,CAAC,mBAAG,IAAI,IAAI;CACxC,GAAG,OAAO,OAAO,QAAQ,CAAC,CAAC,QAAQ,gBAAgB;CACnD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,SAAQ,UAAS;EACjD,GAAG,iBAAiB,MAAM,MAAM;EAChC,GAAG,iBAAiB,MAAM,IAAI;EAC9B,GAAG,iBAAiB,MAAM,QAAQ;CACpC,CAAC;CACD,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,OAAO;CAC3B,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,aAAa;AACnC,CAAC,CAAC;;;AC3CF,IAAa,eAAe,wBAAwB,YAAY,KAAK;CACnE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-CQLNjc9X.js","names":[],"sources":["../../src/components/GrLink/safelist.ts","../../src/components/GrLink/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n baseRootClass,\n colorClass,\n disabledStateClass,\n focusRingClass,\n sizeClassBySize,\n underlineClasses,\n} from './grLinkStyles'\n\nexport const grLinkSafelist = [...new Set([\n ...splitClassTokens(baseRootClass),\n ...splitClassTokens(focusRingClass),\n ...Object.values(sizeClassBySize).flatMap(splitClassTokens),\n ...underlineClasses.flatMap(splitClassTokens),\n ...splitClassTokens(colorClass),\n ...splitClassTokens(disabledStateClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grLinkSafelist } from './safelist'\n\nexport const grLinkConfig = defineGranularComponent(import.meta.url, {\n name: 'GrLink',\n dependencies: ['GrIcon'],\n safelist: grLinkSafelist,\n})\n"],"mappings":";;;;AAUA,IAAa,iBAAiB,CAAC,mBAAG,IAAI,IAAI;CACxC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,cAAc;CAClC,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,iBAAiB,QAAQ,gBAAgB;CAC5C,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,kBAAkB;AACxC,CAAC,CAAC;;;ACbF,IAAa,eAAe,wBAAwB,YAAY,KAAK;CACnE,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CT4lP6S4.js","names":[],"sources":["../../src/components/GrDropdown/safelist.ts","../../src/components/GrDropdown/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { overlayOriginClassByPlacement } from '../shared/overlayOrigin'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n dropdownContentBaseClass,\n} from './grDropdownStyles'\n\n// И динамические токены (`resolvedPlacement`), и литералы отделки панели:\n// `grDropdownStyles.ts` уезжает в общий `dist/chunks/`, вне области скана\n// компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grDropdownSafelist = [...new Set([\n ...Object.values(overlayOriginClassByPlacement).flatMap(splitClassTokens),\n ...splitClassTokens(dropdownContentBaseClass),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDropdownSafelist } from './safelist'\n\nexport const grDropdownConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDropdown',\n safelist: grDropdownSafelist,\n // Панель, слой и портал рисует `GrPopover`: без ребра графа потребитель,\n // выбравший одно меню, получил бы панель без поверхности и без фона.\n dependencies: ['GrPopover'],\n})\n"],"mappings":";;;;;AAUA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,OAAO,OAAO,6BAA6B,CAAC,CAAC,QAAQ,gBAAgB;CACxE,GAAG,iBAAA,KAAyC;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACbF,IAAa,mBAAmB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CT4lP6S4.js","names":[],"sources":["../../src/components/GrDropdown/safelist.ts","../../src/components/GrDropdown/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { overlayOriginClassByPlacement } from '../shared/overlayOrigin'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n dropdownContentBaseClass,\n} from './grDropdownStyles'\n\n// И динамические токены (`resolvedPlacement`), и литералы отделки панели:\n// `grDropdownStyles.ts` уезжает в общий `dist/chunks/`, вне области скана\n// компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grDropdownSafelist = [...new Set([\n ...Object.values(overlayOriginClassByPlacement).flatMap(splitClassTokens),\n ...splitClassTokens(dropdownContentBaseClass),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDropdownSafelist } from './safelist'\n\nexport const grDropdownConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDropdown',\n safelist: grDropdownSafelist,\n // Панель, слой и портал рисует `GrPopover`: без ребра графа потребитель,\n // выбравший одно меню, получил бы панель без поверхности и без фона.\n dependencies: ['GrPopover'],\n})\n"],"mappings":";;;;;AAUA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,OAAO,OAAO,6BAA6B,CAAC,CAAC,QAAQ,gBAAgB;CACxE,GAAG,iBAAA,KAAyC;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACbF,IAAa,mBAAmB,wBAAwB,YAAY,KAAK;CACvE,MAAM;CACN,UAAU;CAGV,cAAc,CAAC,WAAW;AAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CWtfxkM9.js","names":[],"sources":["../../src/components/GrEmptyState/grEmptyStateStyles.ts","../../src/components/GrEmptyState/safelist.ts","../../src/components/GrEmptyState/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrEmptyStateSize = GrComponentSize\n\n/** Поверхность карточки. `ghost` — для встраивания в уже существующую карточку. */\nexport const GR_EMPTY_STATE_VARIANTS = ['outlined', 'ghost'] as const\nexport type GrEmptyStateVariant = typeof GR_EMPTY_STATE_VARIANTS[number]\n\n/**\n * Уровень заголовка. `h1` намеренно нет: пустое состояние живёт внутри уже\n * существующей структуры страницы, а не задаёт её.\n */\nexport const GR_EMPTY_STATE_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\nexport type GrEmptyStateHeadingLevel = typeof GR_EMPTY_STATE_HEADING_LEVELS[number]\n\nexport const rootBaseClass = 'text-center'\n\nexport const variantClass: Record<GrEmptyStateVariant, string> = {\n outlined: 'rounded-[var(--gr-radius-lg)] border border-[var(--gr-brd)] bg-[var(--gr-card)]',\n // Карточка внутри карточки: вторая рамка только шумит (тот же смысл, что у `GrCard`).\n ghost: '',\n}\n\nexport const rootPaddingBySize: Record<GrEmptyStateSize, string> = {\n xs: 'p-3',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n}\n\nexport const iconBoxBaseClass = 'flex items-center justify-center border border-[var(--gr-brd)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const iconBoxBySize: Record<GrEmptyStateSize, string> = {\n xs: 'h-8 w-8 rounded-[var(--gr-radius-md)]',\n sm: 'h-10 w-10 rounded-[var(--gr-radius-md)]',\n md: 'h-12 w-12 rounded-[var(--gr-radius-lg)]',\n lg: 'h-14 w-14 rounded-[var(--gr-radius-lg)]',\n}\n\n/** Размер самой иконки в пикселях — `GrIcon` принимает число. */\nexport const iconSizeBySize: Record<GrEmptyStateSize, number> = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 28,\n}\n\n/**\n * `mb-0` гасит браузерный отступ снизу у настоящего заголовка: без сброса\n * карточка разъезжается по вертикали.\n */\nexport const titleBaseClass = 'mb-0 font-700'\n\nexport const titleBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'mt-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'mt-4 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'mt-5 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const descriptionBaseClass = 'text-[var(--gr-muted-fg)]'\n\nexport const descriptionBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-0.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'mt-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'mt-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'mt-2 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n}\n\nexport const actionsBaseClass = 'flex justify-center'\n\nexport const actionsBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2',\n sm: 'mt-3',\n md: 'mt-4',\n lg: 'mt-5',\n}\n\nexport function grEmptyStateRootClass(options: {\n variant: GrEmptyStateVariant\n size: GrEmptyStateSize\n}): string {\n return [rootBaseClass, variantClass[options.variant], rootPaddingBySize[options.size]]\n .filter(Boolean)\n .join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n actionsBaseClass,\n actionsBySize,\n descriptionBaseClass,\n descriptionBySize,\n iconBoxBaseClass,\n iconBoxBySize,\n rootBaseClass,\n rootPaddingBySize,\n titleBaseClass,\n titleBySize,\n variantClass,\n} from './grEmptyStateStyles'\n\nexport const grEmptyStateSafelist = [...new Set([\n ...splitClassTokens(rootBaseClass),\n ...splitClassTokens(iconBoxBaseClass),\n ...splitClassTokens(titleBaseClass),\n ...splitClassTokens(descriptionBaseClass),\n ...splitClassTokens(actionsBaseClass),\n ...Object.values(variantClass).flatMap(splitClassTokens),\n ...Object.values(rootPaddingBySize).flatMap(splitClassTokens),\n ...Object.values(iconBoxBySize).flatMap(splitClassTokens),\n ...Object.values(titleBySize).flatMap(splitClassTokens),\n ...Object.values(descriptionBySize).flatMap(splitClassTokens),\n ...Object.values(actionsBySize).flatMap(splitClassTokens),\n // Центрирование блока иконки живёт литералом в шаблоне.\n ...splitClassTokens('flex justify-center'),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grEmptyStateSafelist } from './safelist'\n\nexport const grEmptyStateConfig = defineGranularComponent(import.meta.url, {\n name: 'GrEmptyState',\n safelist: grEmptyStateSafelist,\n dependencies: ['GrIcon'],\n})\n"],"mappings":";;;AAeA,IAAa,gBAAgB;AAE7B,IAAa,eAAoD;CAC/D,UAAU;CAEV,OAAO;AACT;AAEA,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,iBAAmD;CAC9D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;AAMA,IAAa,iBAAiB;AAE9B,IAAa,cAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAAuB;AAEpC,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,sBAAsB,SAG3B;CACT,OAAO;EAAC;EAAe,aAAa,QAAQ;EAAU,kBAAkB,QAAQ;CAAK,CAAC,CACnF,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;ACtEA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CAExD,GAAG,iBAAiB,qBAAqB;AAC3C,CAAC,CAAC;;;ACzBF,IAAa,qBAAqB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CWtfxkM9.js","names":[],"sources":["../../src/components/GrEmptyState/grEmptyStateStyles.ts","../../src/components/GrEmptyState/safelist.ts","../../src/components/GrEmptyState/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrEmptyStateSize = GrComponentSize\n\n/** Поверхность карточки. `ghost` — для встраивания в уже существующую карточку. */\nexport const GR_EMPTY_STATE_VARIANTS = ['outlined', 'ghost'] as const\nexport type GrEmptyStateVariant = typeof GR_EMPTY_STATE_VARIANTS[number]\n\n/**\n * Уровень заголовка. `h1` намеренно нет: пустое состояние живёт внутри уже\n * существующей структуры страницы, а не задаёт её.\n */\nexport const GR_EMPTY_STATE_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\nexport type GrEmptyStateHeadingLevel = typeof GR_EMPTY_STATE_HEADING_LEVELS[number]\n\nexport const rootBaseClass = 'text-center'\n\nexport const variantClass: Record<GrEmptyStateVariant, string> = {\n outlined: 'rounded-[var(--gr-radius-lg)] border border-[var(--gr-brd)] bg-[var(--gr-card)]',\n // Карточка внутри карточки: вторая рамка только шумит (тот же смысл, что у `GrCard`).\n ghost: '',\n}\n\nexport const rootPaddingBySize: Record<GrEmptyStateSize, string> = {\n xs: 'p-3',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n}\n\nexport const iconBoxBaseClass = 'flex items-center justify-center border border-[var(--gr-brd)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const iconBoxBySize: Record<GrEmptyStateSize, string> = {\n xs: 'h-8 w-8 rounded-[var(--gr-radius-md)]',\n sm: 'h-10 w-10 rounded-[var(--gr-radius-md)]',\n md: 'h-12 w-12 rounded-[var(--gr-radius-lg)]',\n lg: 'h-14 w-14 rounded-[var(--gr-radius-lg)]',\n}\n\n/** Размер самой иконки в пикселях — `GrIcon` принимает число. */\nexport const iconSizeBySize: Record<GrEmptyStateSize, number> = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 28,\n}\n\n/**\n * `mb-0` гасит браузерный отступ снизу у настоящего заголовка: без сброса\n * карточка разъезжается по вертикали.\n */\nexport const titleBaseClass = 'mb-0 font-700'\n\nexport const titleBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'mt-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'mt-4 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'mt-5 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const descriptionBaseClass = 'text-[var(--gr-muted-fg)]'\n\nexport const descriptionBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-0.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'mt-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'mt-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'mt-2 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n}\n\nexport const actionsBaseClass = 'flex justify-center'\n\nexport const actionsBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2',\n sm: 'mt-3',\n md: 'mt-4',\n lg: 'mt-5',\n}\n\nexport function grEmptyStateRootClass(options: {\n variant: GrEmptyStateVariant\n size: GrEmptyStateSize\n}): string {\n return [rootBaseClass, variantClass[options.variant], rootPaddingBySize[options.size]]\n .filter(Boolean)\n .join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n actionsBaseClass,\n actionsBySize,\n descriptionBaseClass,\n descriptionBySize,\n iconBoxBaseClass,\n iconBoxBySize,\n rootBaseClass,\n rootPaddingBySize,\n titleBaseClass,\n titleBySize,\n variantClass,\n} from './grEmptyStateStyles'\n\nexport const grEmptyStateSafelist = [...new Set([\n ...splitClassTokens(rootBaseClass),\n ...splitClassTokens(iconBoxBaseClass),\n ...splitClassTokens(titleBaseClass),\n ...splitClassTokens(descriptionBaseClass),\n ...splitClassTokens(actionsBaseClass),\n ...Object.values(variantClass).flatMap(splitClassTokens),\n ...Object.values(rootPaddingBySize).flatMap(splitClassTokens),\n ...Object.values(iconBoxBySize).flatMap(splitClassTokens),\n ...Object.values(titleBySize).flatMap(splitClassTokens),\n ...Object.values(descriptionBySize).flatMap(splitClassTokens),\n ...Object.values(actionsBySize).flatMap(splitClassTokens),\n // Центрирование блока иконки живёт литералом в шаблоне.\n ...splitClassTokens('flex justify-center'),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grEmptyStateSafelist } from './safelist'\n\nexport const grEmptyStateConfig = defineGranularComponent(import.meta.url, {\n name: 'GrEmptyState',\n safelist: grEmptyStateSafelist,\n dependencies: ['GrIcon'],\n})\n"],"mappings":";;;AAeA,IAAa,gBAAgB;AAE7B,IAAa,eAAoD;CAC/D,UAAU;CAEV,OAAO;AACT;AAEA,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,iBAAmD;CAC9D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;AAMA,IAAa,iBAAiB;AAE9B,IAAa,cAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAAuB;AAEpC,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,sBAAsB,SAG3B;CACT,OAAO;EAAC;EAAe,aAAa,QAAQ;EAAU,kBAAkB,QAAQ;CAAK,CAAC,CACnF,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;ACtEA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CAExD,GAAG,iBAAiB,qBAAqB;AAC3C,CAAC,CAAC;;;ACzBF,IAAa,qBAAqB,wBAAwB,YAAY,KAAK;CACzE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,QAAQ;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CYthTVK2.js","names":[],"sources":["../../src/components/GrAutocomplete/grAutocompleteStyles.ts","../../src/components/GrAutocomplete/safelist.ts","../../src/components/GrAutocomplete/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nexport type GrAutocompleteSize = GrComponentSize\n/**\n * Тип значения опции — те же примитивы, что у `GrSelect`: значение должно\n * однозначно восстанавливаться из строкового представления.\n */\nexport type GrAutocompleteValue = string | number\n\n/** Опция автокомплита. Метка — строка, значение параметризуется. */\nexport type GrAutocompleteOption<TValue extends GrAutocompleteValue = string> = {\n value: TValue\n label: string\n disabled?: boolean\n}\nexport type GrAutocompleteModelValue<TValue extends GrAutocompleteValue = string> = TValue | TValue[]\n\n/**\n * Оболочка (визуально повторяет `GrInput`): бордер + focus-ring по `focus-within`,\n * т.к. фокус живёт на вложенном `<input role=\"combobox\">`. Flex-контейнер с\n * `flex-wrap` — чтобы chips в multiple-режиме переносились и коробка росла в высоту.\n */\nexport const autocompleteShellBase = 'relative flex w-full flex-wrap items-center gap-1 rounded-[var(--gr-radius-control)] border text-[var(--gr-fg)] transition-colors duration-[var(--gr-duration-fast)] focus-within:ring-2 focus-within:ring-[var(--gr-ring)]'\n\nexport const autocompleteShellEnabledClass = 'bg-[var(--gr-bg)]'\n\n/**\n * Заблокированная оболочка гасится фоном, а не `opacity` (как `GrInput`):\n * прозрачность разбавляет выверенные на AA токены текста и роняет контраст.\n * Фон взаимоисключающий с `autocompleteShellEnabledClass` — два `bg-*` одной\n * специфичности разрулил бы порядок в сгенерированном CSS, а не порядок в\n * списке классов.\n */\nexport const autocompleteShellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * тема вправе развести вердикт валидации и подсветку по решению разработчика.\n */\nexport const invalidShellClass = 'border-[var(--gr-invalid-brd)] focus-within:ring-[var(--gr-invalid-ring)]'\n\n// Размеры совпадают с `GrInput`/`GrSelect` (h → min-h, чтобы multiple мог расти).\nexport const autocompleteSizeClassBySize: Record<GrAutocompleteSize, string> = {\n xs: 'min-h-7 px-2.5 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'min-h-8 px-3 py-1 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'min-h-10 px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'min-h-11 px-4 py-2 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport function autocompleteShellClass(options: {\n size: GrAutocompleteSize\n disabled: boolean\n invalid: boolean\n}): string {\n return [\n autocompleteShellBase,\n autocompleteSizeClassBySize[options.size],\n options.invalid ? invalidShellClass : 'border-[var(--gr-brd)]',\n options.disabled ? autocompleteShellDisabledClass : autocompleteShellEnabledClass,\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/** Общая подсветка наведения и активной опции. */\nconst autocompleteOptionHighlight = 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]'\n\nexport const autocompleteOptionBaseClass = 'w-full rounded-[var(--gr-radius-md)] px-3 py-2 text-left text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\nexport const autocompleteOptionActiveClass = autocompleteOptionHighlight\nexport const autocompleteOptionEnabledClass = `hover:${autocompleteOptionHighlight}`\n/** Выключенная опция гасится токеном текста — по той же причине, что и оболочка. */\nexport const autocompleteOptionDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport function autocompleteOptionClass(options: { disabled: boolean, active: boolean }): string {\n return [\n autocompleteOptionBaseClass,\n options.disabled ? autocompleteOptionDisabledClass : autocompleteOptionEnabledClass,\n !options.disabled && options.active ? autocompleteOptionActiveClass : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/**\n * Строка состояния панели: загрузка, «введите ещё N», «ничего не найдено».\n *\n * По центру и с двойным вертикальным воздухом — как у `GrSelect` и палитры команд.\n * Слева, как у опций, она стоять не может: опции лежат внутри listbox с его `p-1`,\n * а состояние — сиблинг, и текст расходился с опциями на 4px.\n */\nexport const autocompleteStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Панель списка опций — тот же «язык» поверхностей, что у `GrSelect`\n * (card + бордер + shadow-2 + скругление). Держим локальную копию строки,\n * чтобы не тянуть зависимость от `GrSelect` (компоненты гранулярно независимы).\n */\nexport const autocompletePanelClasses = `${overlayPanelSurfaceClass} overflow-hidden`\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n autocompleteOptionActiveClass,\n autocompleteOptionBaseClass,\n autocompleteOptionDisabledClass,\n autocompleteOptionEnabledClass,\n autocompletePanelClasses,\n autocompleteShellBase,\n autocompleteShellDisabledClass,\n autocompleteShellEnabledClass,\n autocompleteSizeClassBySize,\n autocompleteStateClass,\n invalidShellClass,\n} from './grAutocompleteStyles'\n\n// Всё, что живёт в `grAutocompleteStyles.ts`: и вычисляемые мапы, и строковые\n// литералы оболочки, опций и панели (чип — это `GrBadge`, его safelist приезжает\n// зависимостью). Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grAutocompleteSafelist = [...new Set([\n ...Object.values(autocompleteSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(autocompleteShellBase),\n ...splitClassTokens(autocompleteShellEnabledClass),\n ...splitClassTokens(autocompleteShellDisabledClass),\n ...splitClassTokens(autocompletePanelClasses),\n ...splitClassTokens(autocompleteOptionBaseClass),\n ...splitClassTokens(autocompleteOptionEnabledClass),\n ...splitClassTokens(autocompleteOptionActiveClass),\n ...splitClassTokens(autocompleteOptionDisabledClass),\n ...splitClassTokens(autocompleteStateClass),\n ...splitClassTokens(invalidShellClass),\n ...splitClassTokens('border-[var(--gr-brd)]'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAutocompleteSafelist } from './safelist'\n\nexport const grAutocompleteConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAutocomplete',\n dependencies: ['GrChip'],\n safelist: grAutocompleteSafelist,\n})\n"],"mappings":";;;;;;;;;AAuBA,IAAa,wBAAwB;AAErC,IAAa,gCAAgC;;;;;;;;AAS7C,IAAa,iCAAiC;;;;;AAM9C,IAAa,oBAAoB;AAGjC,IAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,uBAAuB,SAI5B;CACT,OAAO;EACL;EACA,4BAA4B,QAAQ;EACpC,QAAQ,UAAU,oBAAoB;EACtC,QAAQ,WAAW,iCAAiC;CACtD,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;AAGA,IAAM,8BAA8B;AAEpC,IAAa,8BAA8B;AAC3C,IAAa,gCAAgC;AAC7C,IAAa,iCAAiC,SAAS;;AAEvD,IAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,SAAyD;CAC/F,OAAO;EACL;EACA,QAAQ,WAAW,kCAAkC;EACrD,CAAC,QAAQ,YAAY,QAAQ,SAAS,gCAAgC;CACxE,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;;;;;;AASA,IAAa,yBAAyB;;;;;;AAOtC,IAAa,2BAA2B,GAAG,yBAAyB;;;AC9EpE,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,2BAA2B,CAAC,CAAC,QAAQ,gBAAgB;CACtE,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,+BAA+B;CACnD,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACjCF,IAAa,uBAAuB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CYthTVK2.js","names":[],"sources":["../../src/components/GrAutocomplete/grAutocompleteStyles.ts","../../src/components/GrAutocomplete/safelist.ts","../../src/components/GrAutocomplete/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nexport type GrAutocompleteSize = GrComponentSize\n/**\n * Тип значения опции — те же примитивы, что у `GrSelect`: значение должно\n * однозначно восстанавливаться из строкового представления.\n */\nexport type GrAutocompleteValue = string | number\n\n/** Опция автокомплита. Метка — строка, значение параметризуется. */\nexport type GrAutocompleteOption<TValue extends GrAutocompleteValue = string> = {\n value: TValue\n label: string\n disabled?: boolean\n}\nexport type GrAutocompleteModelValue<TValue extends GrAutocompleteValue = string> = TValue | TValue[]\n\n/**\n * Оболочка (визуально повторяет `GrInput`): бордер + focus-ring по `focus-within`,\n * т.к. фокус живёт на вложенном `<input role=\"combobox\">`. Flex-контейнер с\n * `flex-wrap` — чтобы chips в multiple-режиме переносились и коробка росла в высоту.\n */\nexport const autocompleteShellBase = 'relative flex w-full flex-wrap items-center gap-1 rounded-[var(--gr-radius-control)] border text-[var(--gr-fg)] transition-colors duration-[var(--gr-duration-fast)] focus-within:ring-2 focus-within:ring-[var(--gr-ring)]'\n\nexport const autocompleteShellEnabledClass = 'bg-[var(--gr-bg)]'\n\n/**\n * Заблокированная оболочка гасится фоном, а не `opacity` (как `GrInput`):\n * прозрачность разбавляет выверенные на AA токены текста и роняет контраст.\n * Фон взаимоисключающий с `autocompleteShellEnabledClass` — два `bg-*` одной\n * специфичности разрулил бы порядок в сгенерированном CSS, а не порядок в\n * списке классов.\n */\nexport const autocompleteShellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * тема вправе развести вердикт валидации и подсветку по решению разработчика.\n */\nexport const invalidShellClass = 'border-[var(--gr-invalid-brd)] focus-within:ring-[var(--gr-invalid-ring)]'\n\n// Размеры совпадают с `GrInput`/`GrSelect` (h → min-h, чтобы multiple мог расти).\nexport const autocompleteSizeClassBySize: Record<GrAutocompleteSize, string> = {\n xs: 'min-h-7 px-2.5 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'min-h-8 px-3 py-1 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'min-h-10 px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'min-h-11 px-4 py-2 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport function autocompleteShellClass(options: {\n size: GrAutocompleteSize\n disabled: boolean\n invalid: boolean\n}): string {\n return [\n autocompleteShellBase,\n autocompleteSizeClassBySize[options.size],\n options.invalid ? invalidShellClass : 'border-[var(--gr-brd)]',\n options.disabled ? autocompleteShellDisabledClass : autocompleteShellEnabledClass,\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/** Общая подсветка наведения и активной опции. */\nconst autocompleteOptionHighlight = 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]'\n\nexport const autocompleteOptionBaseClass = 'w-full rounded-[var(--gr-radius-md)] px-3 py-2 text-left text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\nexport const autocompleteOptionActiveClass = autocompleteOptionHighlight\nexport const autocompleteOptionEnabledClass = `hover:${autocompleteOptionHighlight}`\n/** Выключенная опция гасится токеном текста — по той же причине, что и оболочка. */\nexport const autocompleteOptionDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport function autocompleteOptionClass(options: { disabled: boolean, active: boolean }): string {\n return [\n autocompleteOptionBaseClass,\n options.disabled ? autocompleteOptionDisabledClass : autocompleteOptionEnabledClass,\n !options.disabled && options.active ? autocompleteOptionActiveClass : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/**\n * Строка состояния панели: загрузка, «введите ещё N», «ничего не найдено».\n *\n * По центру и с двойным вертикальным воздухом — как у `GrSelect` и палитры команд.\n * Слева, как у опций, она стоять не может: опции лежат внутри listbox с его `p-1`,\n * а состояние — сиблинг, и текст расходился с опциями на 4px.\n */\nexport const autocompleteStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Панель списка опций — тот же «язык» поверхностей, что у `GrSelect`\n * (card + бордер + shadow-2 + скругление). Держим локальную копию строки,\n * чтобы не тянуть зависимость от `GrSelect` (компоненты гранулярно независимы).\n */\nexport const autocompletePanelClasses = `${overlayPanelSurfaceClass} overflow-hidden`\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n autocompleteOptionActiveClass,\n autocompleteOptionBaseClass,\n autocompleteOptionDisabledClass,\n autocompleteOptionEnabledClass,\n autocompletePanelClasses,\n autocompleteShellBase,\n autocompleteShellDisabledClass,\n autocompleteShellEnabledClass,\n autocompleteSizeClassBySize,\n autocompleteStateClass,\n invalidShellClass,\n} from './grAutocompleteStyles'\n\n// Всё, что живёт в `grAutocompleteStyles.ts`: и вычисляемые мапы, и строковые\n// литералы оболочки, опций и панели (чип — это `GrBadge`, его safelist приезжает\n// зависимостью). Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grAutocompleteSafelist = [...new Set([\n ...Object.values(autocompleteSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(autocompleteShellBase),\n ...splitClassTokens(autocompleteShellEnabledClass),\n ...splitClassTokens(autocompleteShellDisabledClass),\n ...splitClassTokens(autocompletePanelClasses),\n ...splitClassTokens(autocompleteOptionBaseClass),\n ...splitClassTokens(autocompleteOptionEnabledClass),\n ...splitClassTokens(autocompleteOptionActiveClass),\n ...splitClassTokens(autocompleteOptionDisabledClass),\n ...splitClassTokens(autocompleteStateClass),\n ...splitClassTokens(invalidShellClass),\n ...splitClassTokens('border-[var(--gr-brd)]'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAutocompleteSafelist } from './safelist'\n\nexport const grAutocompleteConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAutocomplete',\n dependencies: ['GrChip'],\n safelist: grAutocompleteSafelist,\n})\n"],"mappings":";;;;;;;;;AAuBA,IAAa,wBAAwB;AAErC,IAAa,gCAAgC;;;;;;;;AAS7C,IAAa,iCAAiC;;;;;AAM9C,IAAa,oBAAoB;AAGjC,IAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,uBAAuB,SAI5B;CACT,OAAO;EACL;EACA,4BAA4B,QAAQ;EACpC,QAAQ,UAAU,oBAAoB;EACtC,QAAQ,WAAW,iCAAiC;CACtD,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;AAGA,IAAM,8BAA8B;AAEpC,IAAa,8BAA8B;AAC3C,IAAa,gCAAgC;AAC7C,IAAa,iCAAiC,SAAS;;AAEvD,IAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,SAAyD;CAC/F,OAAO;EACL;EACA,QAAQ,WAAW,kCAAkC;EACrD,CAAC,QAAQ,YAAY,QAAQ,SAAS,gCAAgC;CACxE,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;;;;;;AASA,IAAa,yBAAyB;;;;;;AAOtC,IAAa,2BAA2B,GAAG,yBAAyB;;;AC9EpE,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,2BAA2B,CAAC,CAAC,QAAQ,gBAAgB;CACtE,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,+BAA+B;CACnD,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACjCF,IAAa,uBAAuB,wBAAwB,YAAY,KAAK;CAC3E,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CZPDPJlg.js","names":[],"sources":["../../src/components/GrChipGroup/grChipGroupStyles.ts","../../src/components/GrChipGroup/safelist.ts","../../src/components/GrChipGroup/config.ts"],"sourcesContent":["/**\n * У группы своих вариантов нет: она раскладывает чипы и ничего не красит.\n * Класс вынесен сюда, а не оставлен литералом в шаблоне, только ради safelist —\n * из `.vue` литералы попадают в скан сами, но тогда список классов группы жил\n * бы в двух местах.\n */\nexport const chipGroupRootClass = 'flex flex-wrap items-center gap-2'\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport { chipGroupRootClass } from './grChipGroupStyles'\n\nexport const grChipGroupSafelist = [...new Set([\n ...splitClassTokens(chipGroupRootClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grChipGroupSafelist } from './safelist'\n\nexport const grChipGroupConfig = defineGranularComponent(import.meta.url, {\n name: 'GrChipGroup',\n // Чипы приходят слотом — их рисует потребитель, поэтому ребра графа тут нет.\n safelist: grChipGroupSafelist,\n})\n"],"mappings":";;;;;;;;;AAMA,IAAa,qBAAqB;;;ACFlC,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI,CAC7C,GAAG,iBAAiB,kBAAkB,CACxC,CAAC,CAAC;;;ACFF,IAAa,oBAAoB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CZPDPJlg.js","names":[],"sources":["../../src/components/GrChipGroup/grChipGroupStyles.ts","../../src/components/GrChipGroup/safelist.ts","../../src/components/GrChipGroup/config.ts"],"sourcesContent":["/**\n * У группы своих вариантов нет: она раскладывает чипы и ничего не красит.\n * Класс вынесен сюда, а не оставлен литералом в шаблоне, только ради safelist —\n * из `.vue` литералы попадают в скан сами, но тогда список классов группы жил\n * бы в двух местах.\n */\nexport const chipGroupRootClass = 'flex flex-wrap items-center gap-2'\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport { chipGroupRootClass } from './grChipGroupStyles'\n\nexport const grChipGroupSafelist = [...new Set([\n ...splitClassTokens(chipGroupRootClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grChipGroupSafelist } from './safelist'\n\nexport const grChipGroupConfig = defineGranularComponent(import.meta.url, {\n name: 'GrChipGroup',\n // Чипы приходят слотом — их рисует потребитель, поэтому ребра графа тут нет.\n safelist: grChipGroupSafelist,\n})\n"],"mappings":";;;;;;;;;AAMA,IAAa,qBAAqB;;;ACFlC,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI,CAC7C,GAAG,iBAAiB,kBAAkB,CACxC,CAAC,CAAC;;;ACFF,IAAa,oBAAoB,wBAAwB,YAAY,KAAK;CACxE,MAAM;CAEN,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CbEbLyDE.js","names":[],"sources":["../../src/components/GrSortableList/grSortableListStyles.ts","../../src/components/GrSortableList/safelist.ts","../../src/components/GrSortableList/config.ts"],"sourcesContent":["export type GrSortableOrientation = 'horizontal' | 'vertical'\n\n/**\n * Классы `GrSortableList`. Единственный источник правды для шаблона и\n * `safelist.ts`: литерал, живущий только здесь, до скана UnoCSS не доходит —\n * хелпер уезжает в общий чанк `dist/chunks/`.\n */\n\nexport const listClass: Record<GrSortableOrientation, string> = {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row flex-wrap',\n}\n\nexport const rowLayoutClass = 'relative flex items-center gap-2 px-4 py-3 transition-colors duration-[var(--gr-duration-fast)]'\n\n/**\n * Строка — остановка роверного фокуса, поэтому кольцо на ней, а не на ручке:\n * с клавиатуры берут строку целиком, ручка остаётся affordance для мыши.\n */\nexport const rowFocusClass = 'focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset'\n\nexport const rowDraggingClass = 'bg-[var(--gr-sortable-row-bg-active,var(--gr-muted))]'\n\n/** Взятая с клавиатуры строка обязана отличаться от просто сфокусированной. */\nexport const rowGrabbedClass = 'bg-[var(--gr-sortable-row-bg-active,var(--gr-muted))] ring-2 ring-[var(--gr-ring)] ring-inset'\n\nexport const rowDisabledClass = 'cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const dividedClass = 'divide-y divide-[var(--gr-brd)]'\n\nexport const emptyClass = 'px-4 py-6 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Ручка не табируется: внутри роверного композита свой таб-стоп сломал бы\n * правило «один Tab на список» — тот же приём, что у ручки `GrTree`.\n */\n/**\n * `[touch-action:none]` вместо `touch-none`: утилиты нет ни в `presetMini`, ни\n * в extra-rules, класс молча не превратился бы в CSS — и вертикальный свайп по\n * ручке ушёл бы в прокрутку страницы. Тот же приём у дорожки `GrSlider`.\n */\nexport const handleClass = 'flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] text-[var(--gr-sortable-handle-color,var(--gr-muted-fg))] size-[var(--gr-sortable-handle-size,1.5rem)] cursor-grab [touch-action:none] focus:outline-none'\n\nexport const handleDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport const contentClass = 'min-w-0 flex-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\n\n/**\n * Куда встанет строка — псевдоэлемент самой строки, а не отдельный узел:\n * лишний узел между строками ломает и `divide-y`, и подсчёт позиций.\n */\nexport const indicatorBeforeClass = 'before:absolute before:inset-x-0 before:top-0 before:h-[var(--gr-sortable-indicator-width,2px)] before:bg-[var(--gr-sortable-indicator,var(--gr-primary))] before:content-empty'\n\nexport const indicatorAfterClass = 'after:absolute after:inset-x-0 after:bottom-0 after:h-[var(--gr-sortable-indicator-width,2px)] after:bg-[var(--gr-sortable-indicator,var(--gr-primary))] after:content-empty'\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n contentClass,\n dividedClass,\n emptyClass,\n handleClass,\n handleDisabledClass,\n indicatorAfterClass,\n indicatorBeforeClass,\n listClass,\n rowDisabledClass,\n rowDraggingClass,\n rowFocusClass,\n rowGrabbedClass,\n rowLayoutClass,\n} from './grSortableListStyles'\n\nexport const grSortableListSafelist = [...new Set([\n ...Object.values(listClass).flatMap(splitClassTokens),\n ...splitClassTokens(rowLayoutClass),\n ...splitClassTokens(rowFocusClass),\n ...splitClassTokens(rowDraggingClass),\n ...splitClassTokens(rowGrabbedClass),\n ...splitClassTokens(rowDisabledClass),\n ...splitClassTokens(dividedClass),\n ...splitClassTokens(emptyClass),\n ...splitClassTokens(handleClass),\n ...splitClassTokens(handleDisabledClass),\n ...splitClassTokens(contentClass),\n ...splitClassTokens(indicatorBeforeClass),\n ...splitClassTokens(indicatorAfterClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSortableListSafelist } from './safelist'\n\nexport const grSortableListConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSortableList',\n safelist: grSortableListSafelist,\n dependencies: ['GrCard'],\n})\n"],"mappings":";;;;;;;;AAQA,IAAa,YAAmD;CAC9D,UAAU;CACV,YAAY;AACd;AAEA,IAAa,iBAAiB;;;;;AAM9B,IAAa,gBAAgB;AAE7B,IAAa,mBAAmB;;AAGhC,IAAa,kBAAkB;AAE/B,IAAa,mBAAmB;AAEhC,IAAa,eAAe;AAE5B,IAAa,aAAa;;;;;;;;;;AAW1B,IAAa,cAAc;AAE3B,IAAa,sBAAsB;AAEnC,IAAa,eAAe;;;;;AAM5B,IAAa,uBAAuB;AAEpC,IAAa,sBAAsB;;;ACpCnC,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,mBAAmB;AACzC,CAAC,CAAC;;;AC3BF,IAAa,uBAAuB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CbEbLyDE.js","names":[],"sources":["../../src/components/GrSortableList/grSortableListStyles.ts","../../src/components/GrSortableList/safelist.ts","../../src/components/GrSortableList/config.ts"],"sourcesContent":["export type GrSortableOrientation = 'horizontal' | 'vertical'\n\n/**\n * Классы `GrSortableList`. Единственный источник правды для шаблона и\n * `safelist.ts`: литерал, живущий только здесь, до скана UnoCSS не доходит —\n * хелпер уезжает в общий чанк `dist/chunks/`.\n */\n\nexport const listClass: Record<GrSortableOrientation, string> = {\n vertical: 'flex flex-col',\n horizontal: 'flex flex-row flex-wrap',\n}\n\nexport const rowLayoutClass = 'relative flex items-center gap-2 px-4 py-3 transition-colors duration-[var(--gr-duration-fast)]'\n\n/**\n * Строка — остановка роверного фокуса, поэтому кольцо на ней, а не на ручке:\n * с клавиатуры берут строку целиком, ручка остаётся affordance для мыши.\n */\nexport const rowFocusClass = 'focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset'\n\nexport const rowDraggingClass = 'bg-[var(--gr-sortable-row-bg-active,var(--gr-muted))]'\n\n/** Взятая с клавиатуры строка обязана отличаться от просто сфокусированной. */\nexport const rowGrabbedClass = 'bg-[var(--gr-sortable-row-bg-active,var(--gr-muted))] ring-2 ring-[var(--gr-ring)] ring-inset'\n\nexport const rowDisabledClass = 'cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const dividedClass = 'divide-y divide-[var(--gr-brd)]'\n\nexport const emptyClass = 'px-4 py-6 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Ручка не табируется: внутри роверного композита свой таб-стоп сломал бы\n * правило «один Tab на список» — тот же приём, что у ручки `GrTree`.\n */\n/**\n * `[touch-action:none]` вместо `touch-none`: утилиты нет ни в `presetMini`, ни\n * в extra-rules, класс молча не превратился бы в CSS — и вертикальный свайп по\n * ручке ушёл бы в прокрутку страницы. Тот же приём у дорожки `GrSlider`.\n */\nexport const handleClass = 'flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] text-[var(--gr-sortable-handle-color,var(--gr-muted-fg))] size-[var(--gr-sortable-handle-size,1.5rem)] cursor-grab [touch-action:none] focus:outline-none'\n\nexport const handleDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport const contentClass = 'min-w-0 flex-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\n\n/**\n * Куда встанет строка — псевдоэлемент самой строки, а не отдельный узел:\n * лишний узел между строками ломает и `divide-y`, и подсчёт позиций.\n */\nexport const indicatorBeforeClass = 'before:absolute before:inset-x-0 before:top-0 before:h-[var(--gr-sortable-indicator-width,2px)] before:bg-[var(--gr-sortable-indicator,var(--gr-primary))] before:content-empty'\n\nexport const indicatorAfterClass = 'after:absolute after:inset-x-0 after:bottom-0 after:h-[var(--gr-sortable-indicator-width,2px)] after:bg-[var(--gr-sortable-indicator,var(--gr-primary))] after:content-empty'\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n contentClass,\n dividedClass,\n emptyClass,\n handleClass,\n handleDisabledClass,\n indicatorAfterClass,\n indicatorBeforeClass,\n listClass,\n rowDisabledClass,\n rowDraggingClass,\n rowFocusClass,\n rowGrabbedClass,\n rowLayoutClass,\n} from './grSortableListStyles'\n\nexport const grSortableListSafelist = [...new Set([\n ...Object.values(listClass).flatMap(splitClassTokens),\n ...splitClassTokens(rowLayoutClass),\n ...splitClassTokens(rowFocusClass),\n ...splitClassTokens(rowDraggingClass),\n ...splitClassTokens(rowGrabbedClass),\n ...splitClassTokens(rowDisabledClass),\n ...splitClassTokens(dividedClass),\n ...splitClassTokens(emptyClass),\n ...splitClassTokens(handleClass),\n ...splitClassTokens(handleDisabledClass),\n ...splitClassTokens(contentClass),\n ...splitClassTokens(indicatorBeforeClass),\n ...splitClassTokens(indicatorAfterClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSortableListSafelist } from './safelist'\n\nexport const grSortableListConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSortableList',\n safelist: grSortableListSafelist,\n dependencies: ['GrCard'],\n})\n"],"mappings":";;;;;;;;AAQA,IAAa,YAAmD;CAC9D,UAAU;CACV,YAAY;AACd;AAEA,IAAa,iBAAiB;;;;;AAM9B,IAAa,gBAAgB;AAE7B,IAAa,mBAAmB;;AAGhC,IAAa,kBAAkB;AAE/B,IAAa,mBAAmB;AAEhC,IAAa,eAAe;AAE5B,IAAa,aAAa;;;;;;;;;;AAW1B,IAAa,cAAc;AAE3B,IAAa,sBAAsB;AAEnC,IAAa,eAAe;;;;;AAM5B,IAAa,uBAAuB;AAEpC,IAAa,sBAAsB;;;ACpCnC,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,mBAAmB;AACzC,CAAC,CAAC;;;AC3BF,IAAa,uBAAuB,wBAAwB,YAAY,KAAK;CAC3E,MAAM;CACN,UAAU;CACV,cAAc,CAAC,QAAQ;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-ChPg-BQv.js","names":[],"sources":["../../src/components/GrDrawer/grDrawerStyles.ts","../../src/components/GrDrawer/safelist.ts","../../src/components/GrDrawer/config.ts"],"sourcesContent":["import type { GrOverlaySize } from '../shared/sizes'\n\nexport type GrDrawerSide = 'left' | 'right' | 'top' | 'bottom'\nexport type GrDrawerSize = GrOverlaySize\n\n/** Ось, по которой панель выезжает и по которой считается её размер. */\nexport type GrDrawerAxis = 'horizontal' | 'vertical'\n\nexport function grDrawerAxis(side: GrDrawerSide): GrDrawerAxis {\n return side === 'left' || side === 'right' ? 'horizontal' : 'vertical'\n}\n\n/**\n * Настройка паддингов и рамки секции. Структурно совпадает с\n * `GrDialogSectionConfig` намеренно: потребитель не должен переучиваться при\n * переходе между двумя оверлеями библиотеки. Свой тип, а не импорт из\n * `GrDialog`, — чтобы не тянуть чужой чанк ради двух полей.\n */\nexport interface GrDrawerSectionConfig {\n paddingX?: string\n paddingY?: string\n bordered?: boolean\n}\n\nexport const DEFAULT_GR_DRAWER_HEADER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport const DEFAULT_GR_DRAWER_BODY_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-5',\n bordered: false,\n}\n\nexport const DEFAULT_GR_DRAWER_FOOTER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport function resolveGrDrawerSectionConfig(\n config: GrDrawerSectionConfig | undefined,\n defaults: Required<GrDrawerSectionConfig>,\n): Required<GrDrawerSectionConfig> {\n return {\n paddingX: config?.paddingX ?? defaults.paddingX,\n paddingY: config?.paddingY ?? defaults.paddingY,\n bordered: config?.bordered ?? defaults.bordered,\n }\n}\n\n/** Слой модального класса — тот же, что у `GrModal`: бэкдроп, фокус, scroll-lock. */\nexport const rootClass = 'fixed inset-0 z-[var(--gr-z-modal)]'\n\n/**\n * Немодальная панель обязана пропускать клики мимо себя: корень растянут на весь\n * экран ради позиционирования, и без этого «немодальный» режим гасил бы всю\n * страницу — ровно то, чего он должен избегать. Панель кликабельность себе\n * возвращает.\n */\nexport const rootPassThroughClass = 'pointer-events-none'\nexport const panelInteractiveClass = 'pointer-events-auto'\n\nexport const overlayClass = 'fixed inset-0 bg-[var(--gr-overlay-bg)]'\n\n/** Ширина панели для боковых сторон. */\nexport const panelWidthBySize: Record<GrDrawerSize, string> = {\n sm: 'w-[360px] max-w-[90vw]',\n md: 'w-[420px] max-w-[92vw]',\n lg: 'w-[560px] max-w-[94vw]',\n xl: 'w-[720px] max-w-[96vw]',\n full: 'w-[100vw]',\n}\n\n/** Высота панели для верхней и нижней сторон — та же шкала, но по своей оси. */\nexport const panelHeightBySize: Record<GrDrawerSize, string> = {\n sm: 'h-[280px] max-h-[90vh]',\n md: 'h-[360px] max-h-[92vh]',\n lg: 'h-[480px] max-h-[94vh]',\n xl: 'h-[640px] max-h-[96vh]',\n full: 'h-[100vh]',\n}\n\nexport const panelSizeByAxis: Record<GrDrawerAxis, Record<GrDrawerSize, string>> = {\n horizontal: panelWidthBySize,\n vertical: panelHeightBySize,\n}\n\n/**\n * Позиция панели. Растяжка по поперечной оси живёт здесь же: у боковой панели\n * это `inset-y-0`, у верхней и нижней — `inset-x-0`, и держать их в разметке\n * значило бы иметь в шаблоне половину стороны.\n */\nexport const panelSideClass: Record<GrDrawerSide, string> = {\n left: 'inset-y-0 left-0 border-r',\n right: 'inset-y-0 right-0 border-l',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n}\n\nexport const panelTransitionClass: Record<GrDrawerSide, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full',\n}\n\nexport const panelBaseClass = 'fixed flex flex-col border-[var(--gr-brd)] bg-[var(--gr-card)] text-[var(--gr-card-fg)] shadow-[var(--gr-shadow-2)] outline-none'\n\nexport const headerBorderClass = 'border-b border-[var(--gr-brd)]'\nexport const footerBorderClass = 'border-t border-[var(--gr-brd)]'\nexport const titleClass = 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-700 min-w-0 truncate'\n\n/** Скрытый заголовок: имя слоя есть даже там, где шапки на экране нет. */\nexport const srOnlyTitleClass = 'sr-only'\n\n// Произвольный размер отменяет размерный класс: иначе `w-[420px]` из шкалы\n// спорил бы с инлайновым стилем панели.\nexport function grDrawerPanelClass(options: {\n side: GrDrawerSide\n size: GrDrawerSize\n hasCustomLength: boolean\n}): string {\n const axis = grDrawerAxis(options.side)\n\n return [\n panelBaseClass,\n panelInteractiveClass,\n panelSideClass[options.side],\n options.hasCustomLength ? '' : panelSizeByAxis[axis][options.size],\n ].filter(Boolean).join(' ')\n}\n\nexport function grDrawerPanelEnterFrom(side: GrDrawerSide): string {\n return panelTransitionClass[side]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n footerBorderClass,\n headerBorderClass,\n overlayClass,\n panelBaseClass,\n panelHeightBySize,\n panelInteractiveClass,\n panelSideClass,\n panelTransitionClass,\n panelWidthBySize,\n rootClass,\n rootPassThroughClass,\n srOnlyTitleClass,\n titleClass,\n} from './grDrawerStyles'\n\n// И динамические токены (`side`/`size`), и литералы отделки панели: `grDrawerStyles.ts`\n// бандлер волен вынести в общий `dist/chunks/`, вне области скана компонента —\n// гейт `src/__tests__/safelist.test.ts`.\nconst sectionDefaults = [\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n].flatMap(config => [config.paddingX, config.paddingY])\n\nexport const grDrawerSafelist = [...new Set([\n ...Object.values(panelSideClass).flatMap(splitClassTokens),\n ...Object.values(panelWidthBySize).flatMap(splitClassTokens),\n ...Object.values(panelHeightBySize).flatMap(splitClassTokens),\n ...Object.values(panelTransitionClass).flatMap(splitClassTokens),\n ...splitClassTokens(panelBaseClass),\n ...splitClassTokens(panelInteractiveClass),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(rootPassThroughClass),\n ...splitClassTokens(overlayClass),\n ...splitClassTokens(headerBorderClass),\n ...splitClassTokens(footerBorderClass),\n ...splitClassTokens(titleClass),\n ...splitClassTokens(srOnlyTitleClass),\n ...sectionDefaults.flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grDrawerSafelist } from './safelist'\n\nexport const grDrawerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDrawer',\n dependencies: ['GrButton', 'GrIcon'],\n safelist: grDrawerSafelist,\n})\n"],"mappings":";;;AAQA,SAAgB,aAAa,MAAkC;CAC7D,OAAO,SAAS,UAAU,SAAS,UAAU,eAAe;AAC9D;AAcA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,gCAAiE;CAC5E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,SAAgB,6BACd,QACA,UACiC;CACjC,OAAO;EACL,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;CACzC;AACF;;AAGA,IAAa,YAAY;;;;;;;AAQzB,IAAa,uBAAuB;AACpC,IAAa,wBAAwB;AAErC,IAAa,eAAe;;AAG5B,IAAa,mBAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;;AAGA,IAAa,oBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,kBAAsE;CACjF,YAAY;CACZ,UAAU;AACZ;;;;;;AAOA,IAAa,iBAA+C;CAC1D,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,uBAAqD;CAChE,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,iBAAiB;AAE9B,IAAa,oBAAoB;AACjC,IAAa,oBAAoB;AACjC,IAAa,aAAa;;AAG1B,IAAa,mBAAmB;AAIhC,SAAgB,mBAAmB,SAIxB;CACT,MAAM,OAAO,aAAa,QAAQ,IAAI;CAEtC,OAAO;EACL;EACA;EACA,eAAe,QAAQ;EACvB,QAAQ,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,QAAQ;CAC/D,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,uBAAuB,MAA4B;CACjE,OAAO,qBAAqB;AAC9B;;;AClHA,IAAM,kBAAkB;CACtB;CACA;CACA;AACF,CAAC,CAAC,SAAQ,WAAU,CAAC,OAAO,UAAU,OAAO,QAAQ,CAAC;AAEtD,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,gBAAgB,QAAQ,gBAAgB;AAC7C,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-ChPg-BQv.js","names":[],"sources":["../../src/components/GrDrawer/grDrawerStyles.ts","../../src/components/GrDrawer/safelist.ts","../../src/components/GrDrawer/config.ts"],"sourcesContent":["import type { GrOverlaySize } from '../shared/sizes'\n\nexport type GrDrawerSide = 'left' | 'right' | 'top' | 'bottom'\nexport type GrDrawerSize = GrOverlaySize\n\n/** Ось, по которой панель выезжает и по которой считается её размер. */\nexport type GrDrawerAxis = 'horizontal' | 'vertical'\n\nexport function grDrawerAxis(side: GrDrawerSide): GrDrawerAxis {\n return side === 'left' || side === 'right' ? 'horizontal' : 'vertical'\n}\n\n/**\n * Настройка паддингов и рамки секции. Структурно совпадает с\n * `GrDialogSectionConfig` намеренно: потребитель не должен переучиваться при\n * переходе между двумя оверлеями библиотеки. Свой тип, а не импорт из\n * `GrDialog`, — чтобы не тянуть чужой чанк ради двух полей.\n */\nexport interface GrDrawerSectionConfig {\n paddingX?: string\n paddingY?: string\n bordered?: boolean\n}\n\nexport const DEFAULT_GR_DRAWER_HEADER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport const DEFAULT_GR_DRAWER_BODY_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-5',\n bordered: false,\n}\n\nexport const DEFAULT_GR_DRAWER_FOOTER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport function resolveGrDrawerSectionConfig(\n config: GrDrawerSectionConfig | undefined,\n defaults: Required<GrDrawerSectionConfig>,\n): Required<GrDrawerSectionConfig> {\n return {\n paddingX: config?.paddingX ?? defaults.paddingX,\n paddingY: config?.paddingY ?? defaults.paddingY,\n bordered: config?.bordered ?? defaults.bordered,\n }\n}\n\n/** Слой модального класса — тот же, что у `GrModal`: бэкдроп, фокус, scroll-lock. */\nexport const rootClass = 'fixed inset-0 z-[var(--gr-z-modal)]'\n\n/**\n * Немодальная панель обязана пропускать клики мимо себя: корень растянут на весь\n * экран ради позиционирования, и без этого «немодальный» режим гасил бы всю\n * страницу — ровно то, чего он должен избегать. Панель кликабельность себе\n * возвращает.\n */\nexport const rootPassThroughClass = 'pointer-events-none'\nexport const panelInteractiveClass = 'pointer-events-auto'\n\nexport const overlayClass = 'fixed inset-0 bg-[var(--gr-overlay-bg)]'\n\n/** Ширина панели для боковых сторон. */\nexport const panelWidthBySize: Record<GrDrawerSize, string> = {\n sm: 'w-[360px] max-w-[90vw]',\n md: 'w-[420px] max-w-[92vw]',\n lg: 'w-[560px] max-w-[94vw]',\n xl: 'w-[720px] max-w-[96vw]',\n full: 'w-[100vw]',\n}\n\n/** Высота панели для верхней и нижней сторон — та же шкала, но по своей оси. */\nexport const panelHeightBySize: Record<GrDrawerSize, string> = {\n sm: 'h-[280px] max-h-[90vh]',\n md: 'h-[360px] max-h-[92vh]',\n lg: 'h-[480px] max-h-[94vh]',\n xl: 'h-[640px] max-h-[96vh]',\n full: 'h-[100vh]',\n}\n\nexport const panelSizeByAxis: Record<GrDrawerAxis, Record<GrDrawerSize, string>> = {\n horizontal: panelWidthBySize,\n vertical: panelHeightBySize,\n}\n\n/**\n * Позиция панели. Растяжка по поперечной оси живёт здесь же: у боковой панели\n * это `inset-y-0`, у верхней и нижней — `inset-x-0`, и держать их в разметке\n * значило бы иметь в шаблоне половину стороны.\n */\nexport const panelSideClass: Record<GrDrawerSide, string> = {\n left: 'inset-y-0 left-0 border-r',\n right: 'inset-y-0 right-0 border-l',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n}\n\nexport const panelTransitionClass: Record<GrDrawerSide, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full',\n}\n\nexport const panelBaseClass = 'fixed flex flex-col border-[var(--gr-brd)] bg-[var(--gr-card)] text-[var(--gr-card-fg)] shadow-[var(--gr-shadow-2)] outline-none'\n\nexport const headerBorderClass = 'border-b border-[var(--gr-brd)]'\nexport const footerBorderClass = 'border-t border-[var(--gr-brd)]'\nexport const titleClass = 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-700 min-w-0 truncate'\n\n/** Скрытый заголовок: имя слоя есть даже там, где шапки на экране нет. */\nexport const srOnlyTitleClass = 'sr-only'\n\n// Произвольный размер отменяет размерный класс: иначе `w-[420px]` из шкалы\n// спорил бы с инлайновым стилем панели.\nexport function grDrawerPanelClass(options: {\n side: GrDrawerSide\n size: GrDrawerSize\n hasCustomLength: boolean\n}): string {\n const axis = grDrawerAxis(options.side)\n\n return [\n panelBaseClass,\n panelInteractiveClass,\n panelSideClass[options.side],\n options.hasCustomLength ? '' : panelSizeByAxis[axis][options.size],\n ].filter(Boolean).join(' ')\n}\n\nexport function grDrawerPanelEnterFrom(side: GrDrawerSide): string {\n return panelTransitionClass[side]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n footerBorderClass,\n headerBorderClass,\n overlayClass,\n panelBaseClass,\n panelHeightBySize,\n panelInteractiveClass,\n panelSideClass,\n panelTransitionClass,\n panelWidthBySize,\n rootClass,\n rootPassThroughClass,\n srOnlyTitleClass,\n titleClass,\n} from './grDrawerStyles'\n\n// И динамические токены (`side`/`size`), и литералы отделки панели: `grDrawerStyles.ts`\n// бандлер волен вынести в общий `dist/chunks/`, вне области скана компонента —\n// гейт `src/__tests__/safelist.test.ts`.\nconst sectionDefaults = [\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n].flatMap(config => [config.paddingX, config.paddingY])\n\nexport const grDrawerSafelist = [...new Set([\n ...Object.values(panelSideClass).flatMap(splitClassTokens),\n ...Object.values(panelWidthBySize).flatMap(splitClassTokens),\n ...Object.values(panelHeightBySize).flatMap(splitClassTokens),\n ...Object.values(panelTransitionClass).flatMap(splitClassTokens),\n ...splitClassTokens(panelBaseClass),\n ...splitClassTokens(panelInteractiveClass),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(rootPassThroughClass),\n ...splitClassTokens(overlayClass),\n ...splitClassTokens(headerBorderClass),\n ...splitClassTokens(footerBorderClass),\n ...splitClassTokens(titleClass),\n ...splitClassTokens(srOnlyTitleClass),\n ...sectionDefaults.flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grDrawerSafelist } from './safelist'\n\nexport const grDrawerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDrawer',\n dependencies: ['GrButton', 'GrIcon'],\n safelist: grDrawerSafelist,\n})\n"],"mappings":";;;AAQA,SAAgB,aAAa,MAAkC;CAC7D,OAAO,SAAS,UAAU,SAAS,UAAU,eAAe;AAC9D;AAcA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,gCAAiE;CAC5E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,SAAgB,6BACd,QACA,UACiC;CACjC,OAAO;EACL,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;CACzC;AACF;;AAGA,IAAa,YAAY;;;;;;;AAQzB,IAAa,uBAAuB;AACpC,IAAa,wBAAwB;AAErC,IAAa,eAAe;;AAG5B,IAAa,mBAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;;AAGA,IAAa,oBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,kBAAsE;CACjF,YAAY;CACZ,UAAU;AACZ;;;;;;AAOA,IAAa,iBAA+C;CAC1D,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,uBAAqD;CAChE,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,iBAAiB;AAE9B,IAAa,oBAAoB;AACjC,IAAa,oBAAoB;AACjC,IAAa,aAAa;;AAG1B,IAAa,mBAAmB;AAIhC,SAAgB,mBAAmB,SAIxB;CACT,MAAM,OAAO,aAAa,QAAQ,IAAI;CAEtC,OAAO;EACL;EACA;EACA,eAAe,QAAQ;EACvB,QAAQ,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,QAAQ;CAC/D,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,uBAAuB,MAA4B;CACjE,OAAO,qBAAqB;AAC9B;;;AClHA,IAAM,kBAAkB;CACtB;CACA;CACA;AACF,CAAC,CAAC,SAAQ,WAAU,CAAC,OAAO,UAAU,OAAO,QAAQ,CAAC;AAEtD,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,gBAAgB,QAAQ,gBAAgB;AAC7C,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,QAAQ;CACnC,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CjKpUcmy.js","names":[],"sources":["../../src/components/GrPagination/grPaginationStyles.ts","../../src/components/GrPagination/safelist.ts","../../src/components/GrPagination/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrPaginationSize = GrComponentSize\n\n/** Номер страницы и многоточие: одна и та же коробка, чтобы ряд не прыгал. */\nexport const pageSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 min-w-7 px-1.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 min-w-8 px-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 min-w-8 px-2 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 min-w-10 px-3 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Коробка та же, что у номера, но поле́ уже: многоточию не нужен клик-таргет. */\nexport const ellipsisSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 min-w-7 px-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 min-w-8 px-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 min-w-8 px-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 min-w-10 px-2 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Вспомогательный текст: индикатор «текущая / всего» и подпись у поля перехода. */\nexport const labelSizes: Record<GrPaginationSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const jumperSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 w-12 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 w-14 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 w-14 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 w-16 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const rowGaps: Record<GrPaginationSize, string> = {\n xs: 'gap-2',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-3',\n}\n\nexport const pageListGaps: Record<GrPaginationSize, string> = {\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-1',\n lg: 'gap-1',\n}\n\nexport const pageSizeSelectWidths: Record<GrPaginationSize, string> = {\n xs: 'min-w-[84px]',\n sm: 'min-w-[92px]',\n md: 'min-w-[100px]',\n lg: 'min-w-[112px]',\n}\n\n/**\n * Навигационные кнопки берут размер из шкалы `GrButton`, а не из своей: они\n * обязаны стоять в один ряд с номерами страниц, а высоты у `GrButton`\n * `xs…lg` — `28/32/40/44px`. На `md` номера страниц ростом `h-8`, поэтому\n * кнопке достаётся `sm`, а не одноимённый `md`.\n */\nexport const navButtonSizes: Record<GrPaginationSize, GrComponentSize> = {\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n ellipsisSizes,\n jumperSizes,\n labelSizes,\n pageListGaps,\n pageSizes,\n pageSizeSelectWidths,\n rowGaps,\n} from './grPaginationStyles'\n\nexport const grPaginationSafelist = [...new Set([\n ...Object.values(pageSizes).flatMap(splitClassTokens),\n ...Object.values(ellipsisSizes).flatMap(splitClassTokens),\n ...Object.values(labelSizes).flatMap(splitClassTokens),\n ...Object.values(jumperSizes).flatMap(splitClassTokens),\n ...Object.values(rowGaps).flatMap(splitClassTokens),\n ...Object.values(pageListGaps).flatMap(splitClassTokens),\n ...Object.values(pageSizeSelectWidths).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPaginationSafelist } from './safelist'\n\nexport const grPaginationConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPagination',\n dependencies: ['GrButton', 'GrSelect'],\n safelist: grPaginationSafelist,\n})\n"],"mappings":";;;;AAKA,IAAa,YAA8C;CACzD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,aAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,cAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,UAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,eAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAAyD;CACpE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;AAQA,IAAa,iBAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACxDA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,QAAQ,gBAAgB;CAClD,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;AACjE,CAAC,CAAC;;;ACfF,IAAa,qBAAqB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CjKpUcmy.js","names":[],"sources":["../../src/components/GrPagination/grPaginationStyles.ts","../../src/components/GrPagination/safelist.ts","../../src/components/GrPagination/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrPaginationSize = GrComponentSize\n\n/** Номер страницы и многоточие: одна и та же коробка, чтобы ряд не прыгал. */\nexport const pageSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 min-w-7 px-1.5 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 min-w-8 px-2 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 min-w-8 px-2 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 min-w-10 px-3 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Коробка та же, что у номера, но поле́ уже: многоточию не нужен клик-таргет. */\nexport const ellipsisSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 min-w-7 px-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 min-w-8 px-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 min-w-8 px-1 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 min-w-10 px-2 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\n/** Вспомогательный текст: индикатор «текущая / всего» и подпись у поля перехода. */\nexport const labelSizes: Record<GrPaginationSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const jumperSizes: Record<GrPaginationSize, string> = {\n xs: 'h-7 w-12 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'h-8 w-14 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n md: 'h-8 w-14 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'h-10 w-16 text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport const rowGaps: Record<GrPaginationSize, string> = {\n xs: 'gap-2',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-3',\n}\n\nexport const pageListGaps: Record<GrPaginationSize, string> = {\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-1',\n lg: 'gap-1',\n}\n\nexport const pageSizeSelectWidths: Record<GrPaginationSize, string> = {\n xs: 'min-w-[84px]',\n sm: 'min-w-[92px]',\n md: 'min-w-[100px]',\n lg: 'min-w-[112px]',\n}\n\n/**\n * Навигационные кнопки берут размер из шкалы `GrButton`, а не из своей: они\n * обязаны стоять в один ряд с номерами страниц, а высоты у `GrButton`\n * `xs…lg` — `28/32/40/44px`. На `md` номера страниц ростом `h-8`, поэтому\n * кнопке достаётся `sm`, а не одноимённый `md`.\n */\nexport const navButtonSizes: Record<GrPaginationSize, GrComponentSize> = {\n xs: 'xs',\n sm: 'sm',\n md: 'sm',\n lg: 'md',\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n ellipsisSizes,\n jumperSizes,\n labelSizes,\n pageListGaps,\n pageSizes,\n pageSizeSelectWidths,\n rowGaps,\n} from './grPaginationStyles'\n\nexport const grPaginationSafelist = [...new Set([\n ...Object.values(pageSizes).flatMap(splitClassTokens),\n ...Object.values(ellipsisSizes).flatMap(splitClassTokens),\n ...Object.values(labelSizes).flatMap(splitClassTokens),\n ...Object.values(jumperSizes).flatMap(splitClassTokens),\n ...Object.values(rowGaps).flatMap(splitClassTokens),\n ...Object.values(pageListGaps).flatMap(splitClassTokens),\n ...Object.values(pageSizeSelectWidths).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPaginationSafelist } from './safelist'\n\nexport const grPaginationConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPagination',\n dependencies: ['GrButton', 'GrSelect'],\n safelist: grPaginationSafelist,\n})\n"],"mappings":";;;;AAKA,IAAa,YAA8C;CACzD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,aAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,cAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,UAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,eAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAAyD;CACpE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;AAQA,IAAa,iBAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACxDA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,QAAQ,gBAAgB;CAClD,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;AACjE,CAAC,CAAC;;;ACfF,IAAa,qBAAqB,wBAAwB,YAAY,KAAK;CACzE,MAAM;CACN,cAAc,CAAC,YAAY,UAAU;CACrC,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CjWOTgLL.js","names":[],"sources":["../../src/components/GrDelta/grDeltaStyles.ts","../../src/components/GrDelta/safelist.ts","../../src/components/GrDelta/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrDeltaTone } from './deltaTone'\n\n/**\n * Классы `GrDelta`.\n *\n * Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя (`text-[var(--gr-${tone}-text)]`)\n * уехало бы в CSS литералом.\n */\n\n/**\n * Величина стоит в строке текста, поэтому наследует её кегль и выравнивание.\n *\n * Общего `gap` нет намеренно: префикс — это валюта, и «$ 12,50» с зазором\n * читается как опечатка. Отбивку получают только стрелка и суффикс.\n */\nexport const deltaRootClass = 'inline-flex items-baseline tabular-nums'\n\n/**\n * Величина стоит **в строке текста**, и приписка при ней приглушения не\n * получает: «−15 %» набирается кеглем и цветом строки целиком, иначе процент\n * оказывается мельче окружающих слов.\n *\n * Дефолт `GrValue` рассчитан на плитку, где величина крупная и приписке есть\n * куда уменьшаться. Здесь он переопределяется — ровно теми же токенами, что\n * доступны потребителю.\n *\n * `currentColor` и `1em`, а не `inherit`: у пользовательского свойства\n * `inherit` значит «наследовать саму переменную», то есть ничего.\n */\nexport const deltaValueStyle: Record<string, string> = {\n '--gr-value-suffix-color': 'currentColor',\n '--gr-value-suffix-size': '1em',\n}\n\n/** Суффикс — единица измерения, и от числа он отбивается: «−15 %», «120 мс». */\n\n/**\n * Стрелка выравнивается по строке, а не по базовой линии: у svg её нет.\n *\n * Размер — в `em`, потому что на ступени `md` кегля у величины нет вовсе:\n * пиксельная лестница оставила бы стрелку 14-пиксельной внутри заголовка.\n * Чуть меньше единицы: стрелка декоративна, и равный вес спорил бы с самим\n * числом.\n */\nexport const deltaArrowClass = 'mr-0.5 self-center shrink-0 h-[0.875em] w-[0.875em]'\n\nexport const deltaToneClass: Record<GrDeltaTone, string> = {\n success: 'text-[var(--gr-success-text)]',\n danger: 'text-[var(--gr-danger-text)]',\n neutral: 'text-[var(--gr-muted-fg)]',\n}\n\n/** Прочерк вместо величины: тона у него нет, но и цвет основного текста ему не нужен. */\nexport const deltaEmptyClass = 'text-[var(--gr-muted-fg)]'\n\n/**\n * `md` пуст намеренно: на ступени по умолчанию величина набирается кеглем той\n * строки, в которой стоит. Фиксированные 13 px разъезжаются и вверх, и вниз —\n * внутри заголовка величина оставалась бы мелкой, в подписи под графиком\n * крупной. Ступени по краям остаются явными: они нужны, когда величина стоит\n * не в предложении, а в ряду с контролами.\n */\nexport const deltaSizeClass: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: '',\n lg: 'text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n deltaArrowClass,\n deltaEmptyClass,\n deltaRootClass,\n deltaSizeClass,\n deltaToneClass,\n} from './grDeltaStyles'\n\n// Классы из вычисляемых мап (тон, размер) UnoCSS сканом не находит — только\n// safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\nexport const grDeltaSafelist = [...new Set([\n ...splitClassTokens(deltaRootClass),\n ...splitClassTokens(deltaEmptyClass),\n ...splitClassTokens(deltaArrowClass),\n ...Object.values(deltaToneClass).flatMap(splitClassTokens),\n ...Object.values(deltaSizeClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDeltaSafelist } from './safelist'\n\nexport const grDeltaConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDelta',\n dependencies: ['GrValue'],\n safelist: grDeltaSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,IAAa,iBAAiB;;;;;;;;;;;;;AAc9B,IAAa,kBAA0C;CACrD,2BAA2B;CAC3B,0BAA0B;AAC5B;;;;;;;;;;AAYA,IAAa,kBAAkB;AAE/B,IAAa,iBAA8C;CACzD,SAAS;CACT,QAAQ;CACR,SAAS;AACX;;AAGA,IAAa,kBAAkB;;;;;;;;AAS/B,IAAa,iBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;AC1DA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,eAAe;CACnC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;ACdF,IAAa,gBAAgB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CjWOTgLL.js","names":[],"sources":["../../src/components/GrDelta/grDeltaStyles.ts","../../src/components/GrDelta/safelist.ts","../../src/components/GrDelta/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrDeltaTone } from './deltaTone'\n\n/**\n * Классы `GrDelta`.\n *\n * Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя (`text-[var(--gr-${tone}-text)]`)\n * уехало бы в CSS литералом.\n */\n\n/**\n * Величина стоит в строке текста, поэтому наследует её кегль и выравнивание.\n *\n * Общего `gap` нет намеренно: префикс — это валюта, и «$ 12,50» с зазором\n * читается как опечатка. Отбивку получают только стрелка и суффикс.\n */\nexport const deltaRootClass = 'inline-flex items-baseline tabular-nums'\n\n/**\n * Величина стоит **в строке текста**, и приписка при ней приглушения не\n * получает: «−15 %» набирается кеглем и цветом строки целиком, иначе процент\n * оказывается мельче окружающих слов.\n *\n * Дефолт `GrValue` рассчитан на плитку, где величина крупная и приписке есть\n * куда уменьшаться. Здесь он переопределяется — ровно теми же токенами, что\n * доступны потребителю.\n *\n * `currentColor` и `1em`, а не `inherit`: у пользовательского свойства\n * `inherit` значит «наследовать саму переменную», то есть ничего.\n */\nexport const deltaValueStyle: Record<string, string> = {\n '--gr-value-suffix-color': 'currentColor',\n '--gr-value-suffix-size': '1em',\n}\n\n/** Суффикс — единица измерения, и от числа он отбивается: «−15 %», «120 мс». */\n\n/**\n * Стрелка выравнивается по строке, а не по базовой линии: у svg её нет.\n *\n * Размер — в `em`, потому что на ступени `md` кегля у величины нет вовсе:\n * пиксельная лестница оставила бы стрелку 14-пиксельной внутри заголовка.\n * Чуть меньше единицы: стрелка декоративна, и равный вес спорил бы с самим\n * числом.\n */\nexport const deltaArrowClass = 'mr-0.5 self-center shrink-0 h-[0.875em] w-[0.875em]'\n\nexport const deltaToneClass: Record<GrDeltaTone, string> = {\n success: 'text-[var(--gr-success-text)]',\n danger: 'text-[var(--gr-danger-text)]',\n neutral: 'text-[var(--gr-muted-fg)]',\n}\n\n/** Прочерк вместо величины: тона у него нет, но и цвет основного текста ему не нужен. */\nexport const deltaEmptyClass = 'text-[var(--gr-muted-fg)]'\n\n/**\n * `md` пуст намеренно: на ступени по умолчанию величина набирается кеглем той\n * строки, в которой стоит. Фиксированные 13 px разъезжаются и вверх, и вниз —\n * внутри заголовка величина оставалась бы мелкой, в подписи под графиком\n * крупной. Ступени по краям остаются явными: они нужны, когда величина стоит\n * не в предложении, а в ряду с контролами.\n */\nexport const deltaSizeClass: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: '',\n lg: 'text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n deltaArrowClass,\n deltaEmptyClass,\n deltaRootClass,\n deltaSizeClass,\n deltaToneClass,\n} from './grDeltaStyles'\n\n// Классы из вычисляемых мап (тон, размер) UnoCSS сканом не находит — только\n// safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\nexport const grDeltaSafelist = [...new Set([\n ...splitClassTokens(deltaRootClass),\n ...splitClassTokens(deltaEmptyClass),\n ...splitClassTokens(deltaArrowClass),\n ...Object.values(deltaToneClass).flatMap(splitClassTokens),\n ...Object.values(deltaSizeClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDeltaSafelist } from './safelist'\n\nexport const grDeltaConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDelta',\n dependencies: ['GrValue'],\n safelist: grDeltaSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,IAAa,iBAAiB;;;;;;;;;;;;;AAc9B,IAAa,kBAA0C;CACrD,2BAA2B;CAC3B,0BAA0B;AAC5B;;;;;;;;;;AAYA,IAAa,kBAAkB;AAE/B,IAAa,iBAA8C;CACzD,SAAS;CACT,QAAQ;CACR,SAAS;AACX;;AAGA,IAAa,kBAAkB;;;;;;;;AAS/B,IAAa,iBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;AC1DA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,eAAe;CACnC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;ACdF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;CACN,cAAc,CAAC,SAAS;CACxB,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CjXjhphs.js","names":[],"sources":["../../src/components/GrDialogService/config.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grDialogServiceConfig = defineGranularComponent(import.meta.url, {\n // Совпадает с именем директории: из него пресет строит scan-glob\n // `dist/components/<name>/**`.\n name: 'GrDialogService',\n dependencies: ['GrButton', 'GrConfirmDialog', 'GrPromptDialog'],\n})\n"],"mappings":";;AAEA,IAAa,wBAAwB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CjXjhphs.js","names":[],"sources":["../../src/components/GrDialogService/config.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grDialogServiceConfig = defineGranularComponent(import.meta.url, {\n // Совпадает с именем директории: из него пресет строит scan-glob\n // `dist/components/<name>/**`.\n name: 'GrDialogService',\n dependencies: ['GrButton', 'GrConfirmDialog', 'GrPromptDialog'],\n})\n"],"mappings":";;AAEA,IAAa,wBAAwB,wBAAwB,YAAY,KAAK;CAG5E,MAAM;CACN,cAAc;EAAC;EAAY;EAAmB;CAAgB;AAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-CnYdE3HZ.js","names":[],"sources":["../../src/components/GrDescriptionList/grDescriptionListStyles.ts","../../src/components/GrDescriptionList/safelist.ts","../../src/components/GrDescriptionList/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport type { GrTone } from '../shared/tones'\n\n/**\n * Классы `GrDescriptionList`.\n *\n * Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя уехало бы в CSS литералом.\n */\n\n/**\n * `inline` — подпись колонкой слева; `stacked` — над значением; `flow` — пары\n * текут по строке с переносом.\n */\nexport type GrDescriptionLayout = 'inline' | 'stacked' | 'flow'\n\nexport type GrDescriptionDensity = 'regular' | 'compact'\n\n/** Сколько колонок пар. Длинный список читается в несколько. */\nexport type GrDescriptionColumns = 1 | 2 | 3 | 4\n\n// `m-0` — у нативного `<dl>` есть браузерные отступы, и без сброса список\n// разъезжается по вертикали. Ряды разводит `--gr-description-list-row-gap`,\n// потому что зазор здесь — точка кастомизации, а не ступень шкалы.\nexport const descriptionRootClass = 'm-0 gap-x-4 [row-gap:var(--gr-description-list-row-gap,0.375rem)]'\n\n/** Сетка колонок — раскладки `inline` и `stacked`. */\nexport const descriptionRootGridClass = 'grid'\n\n// `flow` строит строку, а не сетку: пары текут по ширине и переносятся сами,\n// поэтому колонок у неё нет.\nexport const descriptionRootFlowClass = 'flex flex-wrap items-baseline'\n\n/** Одна колонка — обычный класс: считать там нечего. */\nexport const descriptionSingleColumnClass = 'grid-cols-1'\n\n/**\n * Колонки по ширине **контейнера**, а не вьюпорта.\n *\n * Медиазапрос меряет экран, а список живёт в карточке: на широком мониторе в\n * колонке 290px включались две колонки, подпись фиксированной ширины съедала\n * почти всё место, и значение переносилось посимвольно — «30» печаталось как\n * «3» и «0» на двух строках. Показанное число становилось неверным.\n *\n * `auto-fit` решает это без медиазапросов, без JS и без замеров, то есть\n * одинаково на сервере и на клиенте. `columns` при этом становится **потолком**:\n * трек не уже `column-min`, но и не уже доли, на которую делится контейнер при\n * N колонках, — поэтому шире N штук не встанет никогда.\n *\n * `min(100%, …)` спасает совсем узкий контейнер: без него трек шириной с\n * `column-min` вылезал бы за край.\n *\n * Инлайновым стилем, а не классом: выражение зависит от N, и шкалы утилит для\n * него не существует — тот же довод, что записан у сетки `GrDashboard`.\n */\nexport function descriptionColumnsStyle(\n columns: GrDescriptionColumns,\n /**\n * Ширина колонки подписей при `inline`. В этой раскладке подпись и значение\n * стоят **рядом**, поэтому минимум колонки складывается из них двоих: колонка\n * шириной с одну подпись оставляет значению несколько пикселей, и оно\n * переносится посимвольно — тот же дефект, только в других числах.\n */\n labelWidth?: string,\n): Record<string, string> {\n const base = 'var(--gr-description-list-column-min, 12rem)'\n const min = labelWidth\n ? `max(${base}, calc(${labelWidth} + var(--gr-description-list-value-min, 5rem)))`\n : base\n\n return {\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, max(${min}, (100% - ${columns - 1} * 1rem) / ${columns})), 1fr))`,\n }\n}\n\nexport const descriptionPairInlineClass = 'flex min-w-0 items-baseline gap-2'\nexport const descriptionPairStackedClass = 'min-w-0'\n\n// Зазор уже: подпись и значение здесь читаются как одна фраза «Сообщений: 3»,\n// а пары друг от друга отбивает `gap-x-4` корня.\nexport const descriptionPairFlowClass = 'flex min-w-0 items-baseline gap-1'\n\nexport const descriptionDividedClass = 'border-b border-[var(--gr-description-list-divider,var(--gr-brd))] pb-1 last:border-b-0 last:pb-0'\n\n// `shrink-0` держит колонку подписей ровной: иначе длинное значение сжимало бы\n// подпись, и значения переставали бы стоять в колонку — ровно то, ради чего\n// раскладка `inline` и существует.\nexport const descriptionLabelInlineClass = 'shrink-0 text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]'\nexport const descriptionLabelStackedClass = 'text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]'\n\n// `break-words` обязателен: в парах живут идентификаторы, хеши и `X-Request-Id`,\n// и без переноса они выталкивают вёрстку.\nexport const descriptionValueClass = 'm-0 min-w-0 break-words'\n\n/** Тон — только у значения: красная подпись читается как «поле сломано». */\nexport const descriptionValueToneClass: Record<GrTone, string> = {\n primary: 'text-[var(--gr-primary-text)]',\n neutral: '',\n success: 'text-[var(--gr-success-text)]',\n warning: 'text-[var(--gr-warning-text)]',\n danger: 'text-[var(--gr-danger-text)]',\n info: 'text-[var(--gr-info-text)]',\n slate: 'text-[var(--gr-slate-text)]',\n azure: 'text-[var(--gr-azure-text)]',\n}\n\nexport const descriptionSizeClass: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-2xs)] leading-[var(--gr-control-leading-2xs)]',\n sm: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n md: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n lg: 'text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n}\n\nexport const descriptionDensityClass: Record<GrDescriptionDensity, string> = {\n regular: '',\n compact: '[row-gap:var(--gr-description-list-row-gap,0.125rem)]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n descriptionSingleColumnClass,\n descriptionDensityClass,\n descriptionDividedClass,\n descriptionLabelInlineClass,\n descriptionLabelStackedClass,\n descriptionPairFlowClass,\n descriptionPairInlineClass,\n descriptionPairStackedClass,\n descriptionRootClass,\n descriptionRootFlowClass,\n descriptionRootGridClass,\n descriptionSizeClass,\n descriptionValueClass,\n descriptionValueToneClass,\n} from './grDescriptionListStyles'\n\n// Классы из вычисляемых мап (тон, размер, колонки) UnoCSS сканом не находит —\n// только safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\nexport const grDescriptionListSafelist = [...new Set([\n ...splitClassTokens(descriptionRootClass),\n ...splitClassTokens(descriptionRootGridClass),\n ...splitClassTokens(descriptionRootFlowClass),\n ...splitClassTokens(descriptionPairInlineClass),\n ...splitClassTokens(descriptionPairStackedClass),\n ...splitClassTokens(descriptionPairFlowClass),\n ...splitClassTokens(descriptionDividedClass),\n ...splitClassTokens(descriptionLabelInlineClass),\n ...splitClassTokens(descriptionLabelStackedClass),\n ...splitClassTokens(descriptionValueClass),\n ...splitClassTokens(descriptionSingleColumnClass),\n ...Object.values(descriptionValueToneClass).flatMap(splitClassTokens),\n ...Object.values(descriptionSizeClass).flatMap(splitClassTokens),\n ...Object.values(descriptionDensityClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDescriptionListSafelist } from './safelist'\n\nexport const grDescriptionListConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDescriptionList',\n safelist: grDescriptionListSafelist,\n})\n"],"mappings":";;;AAwBA,IAAa,uBAAuB;;AAGpC,IAAa,2BAA2B;AAIxC,IAAa,2BAA2B;;AAGxC,IAAa,+BAA+B;;;;;;;;;;;;;;;;;;;;AAqB5C,SAAgB,wBACd,SAOA,YACwB;CACxB,MAAM,OAAO;CAKb,OAAO,EACL,qBAAqB,yCALX,aACR,OAAO,KAAK,SAAS,WAAW,mDAChC,KAGgE,YAAY,UAAU,EAAE,aAAa,QAAQ,WACjH;AACF;AAEA,IAAa,6BAA6B;AAC1C,IAAa,8BAA8B;AAI3C,IAAa,2BAA2B;AAExC,IAAa,0BAA0B;AAKvC,IAAa,8BAA8B;AAC3C,IAAa,+BAA+B;AAI5C,IAAa,wBAAwB;;AAGrC,IAAa,4BAAoD;CAC/D,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,IAAa,uBAAwD;CACnE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,0BAAgE;CAC3E,SAAS;CACT,SAAS;AACX;;;AC/FA,IAAa,4BAA4B,CAAC,mBAAG,IAAI,IAAI;CACnD,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,OAAO,OAAO,yBAAyB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;AACpE,CAAC,CAAC;;;AChCF,IAAa,0BAA0B,wBAAwB,YAAY,KAAK;CAC9E,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CsCUuukB.js","names":[],"sources":["../../src/components/GrContextMenu/config.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grContextMenuConfig = defineGranularComponent(import.meta.url, {\n name: 'GrContextMenu',\n // Хук снятия потолка ширины стоит в шаблоне литералом, но объявлен и здесь:\n // цена ошибки — меню, вылезающее за край панели, а цена строки — ноль.\n safelist: ['[--gr-popover-max-width:100vw]'],\n // Компонент рендерит и слой, и пункты: без обоих рёбер у потребителя,\n // выбравшего только контекстное меню, панель приедет без фона, а пункты — без цветов.\n dependencies: ['GrPopover', 'GrDropdownMenu'],\n})\n"],"mappings":";;AAEA,IAAa,sBAAsB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CsCUuukB.js","names":[],"sources":["../../src/components/GrContextMenu/config.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grContextMenuConfig = defineGranularComponent(import.meta.url, {\n name: 'GrContextMenu',\n // Хук снятия потолка ширины стоит в шаблоне литералом, но объявлен и здесь:\n // цена ошибки — меню, вылезающее за край панели, а цена строки — ноль.\n safelist: ['[--gr-popover-max-width:100vw]'],\n // Компонент рендерит и слой, и пункты: без обоих рёбер у потребителя,\n // выбравшего только контекстное меню, панель приедет без фона, а пункты — без цветов.\n dependencies: ['GrPopover', 'GrDropdownMenu'],\n})\n"],"mappings":";;AAEA,IAAa,sBAAsB,wBAAwB,YAAY,KAAK;CAC1E,MAAM;CAGN,UAAU,CAAC,gCAAgC;CAG3C,cAAc,CAAC,aAAa,gBAAgB;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-CvbVM4ep.js","names":[],"sources":["../../src/components/GrSplitter/grSplitterStyles.ts","../../src/components/GrSplitter/safelist.ts","../../src/components/GrSplitter/config.ts"],"sourcesContent":["/**\n * Классы `GrSplitter`. Геометрия (толщина полосы, зона захвата, курсоры)\n * зависит от ориентации и от состояния жеста, поэтому живёт в собственном\n * `<style>` компонента, а не в утилитах.\n */\n\nexport const rootClass = 'grid h-full w-full'\n\n/** Без `min-*: 0` содержимое панели распирает грид-трек и ломает раскладку. */\nexport const paneClass = 'min-h-0 min-w-0'\n\n// `touch-none` в связке presetMini + presetGranular CSS не даёт — только произвольное свойство.\nexport const separatorClass = 'relative [touch-action:none] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset'\n","import { splitClassTokens } from '../shared/classTokens'\nimport { paneClass, rootClass, separatorClass } from './grSplitterStyles'\n\nexport const grSplitterSafelist = [...new Set([\n ...splitClassTokens(rootClass),\n ...splitClassTokens(paneClass),\n ...splitClassTokens(separatorClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSplitterSafelist } from './safelist'\n\nexport const grSplitterConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSplitter',\n safelist: grSplitterSafelist,\n})\n"],"mappings":";;;;;;;;AAMA,IAAa,YAAY;;AAGzB,IAAa,YAAY;AAGzB,IAAa,iBAAiB;;;ACT9B,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,cAAc;AACpC,CAAC,CAAC;;;ACHF,IAAa,mBAAmB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"config-CvbVM4ep.js","names":[],"sources":["../../src/components/GrSplitter/grSplitterStyles.ts","../../src/components/GrSplitter/safelist.ts","../../src/components/GrSplitter/config.ts"],"sourcesContent":["/**\n * Классы `GrSplitter`. Геометрия (толщина полосы, зона захвата, курсоры)\n * зависит от ориентации и от состояния жеста, поэтому живёт в собственном\n * `<style>` компонента, а не в утилитах.\n */\n\nexport const rootClass = 'grid h-full w-full'\n\n/** Без `min-*: 0` содержимое панели распирает грид-трек и ломает раскладку. */\nexport const paneClass = 'min-h-0 min-w-0'\n\n// `touch-none` в связке presetMini + presetGranular CSS не даёт — только произвольное свойство.\nexport const separatorClass = 'relative [touch-action:none] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset'\n","import { splitClassTokens } from '../shared/classTokens'\nimport { paneClass, rootClass, separatorClass } from './grSplitterStyles'\n\nexport const grSplitterSafelist = [...new Set([\n ...splitClassTokens(rootClass),\n ...splitClassTokens(paneClass),\n ...splitClassTokens(separatorClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSplitterSafelist } from './safelist'\n\nexport const grSplitterConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSplitter',\n safelist: grSplitterSafelist,\n})\n"],"mappings":";;;;;;;;AAMA,IAAa,YAAY;;AAGzB,IAAa,YAAY;AAGzB,IAAa,iBAAiB;;;ACT9B,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,cAAc;AACpC,CAAC,CAAC;;;ACHF,IAAa,mBAAmB,wBAAwB,YAAY,KAAK;CACvE,MAAM;CACN,UAAU;AACZ,CAAC"}
|