@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.
Files changed (367) hide show
  1. package/dist/chunks/config-2ZHRsdOc.js.map +1 -1
  2. package/dist/chunks/config-2vrOFn2f.js.map +1 -1
  3. package/dist/chunks/config-3bQeQvqd.js.map +1 -1
  4. package/dist/chunks/config-87fszqnD.js.map +1 -1
  5. package/dist/chunks/config-8Pcutu1j.js.map +1 -1
  6. package/dist/chunks/config-A-bBiotF.js.map +1 -1
  7. package/dist/chunks/config-B0uvcTPH.js.map +1 -1
  8. package/dist/chunks/config-B3J0alyY.js.map +1 -1
  9. package/dist/chunks/config-B5SBUa6u.js.map +1 -1
  10. package/dist/chunks/config-B7W9VlZ7.js.map +1 -1
  11. package/dist/chunks/config-BDSaD-5p.js.map +1 -1
  12. package/dist/chunks/config-BEO7brpO.js.map +1 -1
  13. package/dist/chunks/config-BNu8lFQB.js.map +1 -1
  14. package/dist/chunks/config-BRESvs9g.js.map +1 -1
  15. package/dist/chunks/config-BTmfQFwi.js.map +1 -1
  16. package/dist/chunks/{config-CuQmUkMw2.js → config-BUNxHnEz.js} +1 -1
  17. package/dist/chunks/config-BUNxHnEz.js.map +1 -0
  18. package/dist/chunks/config-BaWANzzB.js.map +1 -1
  19. package/dist/chunks/config-BcXX7S7B.js.map +1 -1
  20. package/dist/chunks/config-Bd7QfiGj.js.map +1 -1
  21. package/dist/chunks/config-BhfNgyWL.js.map +1 -1
  22. package/dist/chunks/config-Bjn30smH.js.map +1 -1
  23. package/dist/chunks/config-BlJa1Mj9.js.map +1 -1
  24. package/dist/chunks/config-BoUI0t-t.js.map +1 -1
  25. package/dist/chunks/config-BqT6PMzO.js.map +1 -1
  26. package/dist/chunks/config-BscVxZR3.js.map +1 -1
  27. package/dist/chunks/config-BuGlNPE9.js.map +1 -1
  28. package/dist/chunks/config-C0Ea9ePP.js.map +1 -1
  29. package/dist/chunks/config-C0Eu8jpG.js.map +1 -1
  30. package/dist/chunks/config-CDat1wXf.js.map +1 -1
  31. package/dist/chunks/config-CIkdsWUk.js.map +1 -1
  32. package/dist/chunks/config-CJzmDHfI.js.map +1 -1
  33. package/dist/chunks/config-CLjjjPZj.js.map +1 -1
  34. package/dist/chunks/config-CMNfZO7S.js.map +1 -1
  35. package/dist/chunks/config-CQLNjc9X.js.map +1 -0
  36. package/dist/chunks/config-CT4lP6S4.js.map +1 -1
  37. package/dist/chunks/config-CWtfxkM9.js.map +1 -1
  38. package/dist/chunks/config-CYthTVK2.js.map +1 -1
  39. package/dist/chunks/config-CZPDPJlg.js.map +1 -1
  40. package/dist/chunks/config-CbEbLyDE.js.map +1 -1
  41. package/dist/chunks/config-ChPg-BQv.js.map +1 -1
  42. package/dist/chunks/config-CjKpUcmy.js.map +1 -1
  43. package/dist/chunks/config-CjWOTgLL.js.map +1 -1
  44. package/dist/chunks/config-CjXjhphs.js.map +1 -1
  45. package/dist/chunks/config-CnYdE3HZ.js.map +1 -0
  46. package/dist/chunks/config-CsCUuukB.js.map +1 -1
  47. package/dist/chunks/config-CvbVM4ep.js.map +1 -1
  48. package/dist/chunks/config-D0NzGYaE.js.map +1 -1
  49. package/dist/chunks/config-D0W8mGFD.js.map +1 -1
  50. package/dist/chunks/config-D82r782v.js.map +1 -1
  51. package/dist/chunks/config-DBi0GVce.js.map +1 -1
  52. package/dist/chunks/config-DBmdgoVf.js.map +1 -0
  53. package/dist/chunks/config-DCq4JySZ.js.map +1 -1
  54. package/dist/chunks/config-DGC00bTp.js.map +1 -1
  55. package/dist/chunks/config-DIDz_E5m.js.map +1 -1
  56. package/dist/chunks/config-DM0lsduD.js.map +1 -1
  57. package/dist/chunks/config-DNDgp9bB.js.map +1 -1
  58. package/dist/chunks/config-DOYz_SVK.js.map +1 -1
  59. package/dist/chunks/config-DRbojEzO.js.map +1 -1
  60. package/dist/chunks/config-DUNH02Fg.js.map +1 -1
  61. package/dist/chunks/config-DUbbGcfw.js.map +1 -1
  62. package/dist/chunks/config-DVCNvhIG.js.map +1 -0
  63. package/dist/chunks/config-DWL81-aM.js.map +1 -1
  64. package/dist/chunks/config-DZCUPHPU.js.map +1 -1
  65. package/dist/chunks/config-DeyT9dJl.js.map +1 -1
  66. package/dist/chunks/config-DolULhjJ.js.map +1 -1
  67. package/dist/chunks/config-DpAYidyY.js.map +1 -0
  68. package/dist/chunks/config-Droqn55j.js.map +1 -1
  69. package/dist/chunks/config-DwABJHEo.js.map +1 -1
  70. package/dist/chunks/config-E1cTyRVV.js.map +1 -1
  71. package/dist/chunks/config-MmPym-Z7.js.map +1 -0
  72. package/dist/chunks/config-QaIc_gRa.js.map +1 -1
  73. package/dist/chunks/config-Yy67uWHY.js.map +1 -1
  74. package/dist/chunks/config-Z5LeUXys.js.map +1 -1
  75. package/dist/chunks/config-_jbgsFpw.js.map +1 -1
  76. package/dist/chunks/config-eXB87DOi.js.map +1 -1
  77. package/dist/chunks/config-rLkc9Zn2.js.map +1 -1
  78. package/dist/chunks/{context-CTbuwcYs.js → context-CPMRfwVr.js} +1 -1
  79. package/dist/chunks/{context-CTbuwcYs.js.map → context-CPMRfwVr.js.map} +1 -1
  80. package/dist/chunks/devHook-CiqijpNM.js +44 -0
  81. package/dist/chunks/devHook-CiqijpNM.js.map +1 -0
  82. package/dist/chunks/{grRadioStyles-DGL2QLy6.js → grRadioStyles-BwRyCjQQ.js} +4 -2
  83. package/dist/chunks/{grRadioStyles-DGL2QLy6.js.map → grRadioStyles-BwRyCjQQ.js.map} +1 -1
  84. package/dist/chunks/{granular-provider-Bp_BCBnr.js → granular-provider-DP2gk0oa.js} +9 -8
  85. package/dist/chunks/{granular-provider-Bp_BCBnr.js.map → granular-provider-DP2gk0oa.js.map} +1 -1
  86. package/dist/chunks/{overlayStack-0CZS99Da.js → overlayStack-DH4Z7am1.js} +45 -25
  87. package/dist/chunks/overlayStack-DH4Z7am1.js.map +1 -0
  88. package/dist/chunks/{renamedProp-BwcN-SJg.js → renamedProp-Dy96tT-F.js} +1 -1
  89. package/dist/chunks/{renamedProp-BwcN-SJg.js.map → renamedProp-Dy96tT-F.js.map} +1 -1
  90. package/dist/chunks/{useModalOverlay-BnAGZpcI.js → useModalOverlay-ACRkflzx.js} +3 -3
  91. package/dist/chunks/{useModalOverlay-BnAGZpcI.js.map → useModalOverlay-ACRkflzx.js.map} +1 -1
  92. package/dist/chunks/{usePortalTarget-C0p-mhaM.js → usePortalTarget-BhrRgdqW.js} +1 -1
  93. package/dist/chunks/{usePortalTarget-C0p-mhaM.js.map → usePortalTarget-BhrRgdqW.js.map} +1 -1
  94. package/dist/chunks/{validation-5HhpanPP.js → validation-BDjqsuGB.js} +1 -1
  95. package/dist/chunks/{validation-5HhpanPP.js.map → validation-BDjqsuGB.js.map} +1 -1
  96. package/dist/components/GrAlert/chunks/{GrAlert-FAVf-ksH.js → GrAlert-D72y1IEh.js} +1 -1
  97. package/dist/components/GrAlert/chunks/{GrAlert-FAVf-ksH.js.map → GrAlert-D72y1IEh.js.map} +1 -1
  98. package/dist/components/GrAlert/index.js +1 -1
  99. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BQsSE7sj.js → GrAutocomplete-BpmFmpKs.js} +4 -6
  100. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BQsSE7sj.js.map → GrAutocomplete-BpmFmpKs.js.map} +1 -1
  101. package/dist/components/GrAutocomplete/index.js +1 -1
  102. package/dist/components/GrAvatar/chunks/{GrAvatar-CNmLmgcr.js → GrAvatar-dWEXiCJG.js} +1 -1
  103. package/dist/components/GrAvatar/chunks/{GrAvatar-CNmLmgcr.js.map → GrAvatar-dWEXiCJG.js.map} +1 -1
  104. package/dist/components/GrAvatar/index.js +1 -1
  105. package/dist/components/GrBadge/chunks/{GrBadge-DpUDXKbq.js → GrBadge-DBeQXEir.js} +2 -2
  106. package/dist/components/GrBadge/chunks/{GrBadge-DpUDXKbq.js.map → GrBadge-DBeQXEir.js.map} +1 -1
  107. package/dist/components/GrBadge/index.js +1 -1
  108. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-B-A3PRkE.js → GrBadgeWrap-wdfxaXiu.js} +3 -1
  109. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-B-A3PRkE.js.map → GrBadgeWrap-wdfxaXiu.js.map} +1 -1
  110. package/dist/components/GrBadgeWrap/index.js +1 -1
  111. package/dist/components/GrBottomNav/chunks/{GrBottomNav-wtFatLjB.js → GrBottomNav-nE08pVUJ.js} +1 -1
  112. package/dist/components/GrBottomNav/chunks/{GrBottomNav-wtFatLjB.js.map → GrBottomNav-nE08pVUJ.js.map} +1 -1
  113. package/dist/components/GrBottomNav/index.js +1 -1
  114. package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DRDNan_n.js → GrBreadcrumbs-DOpwY2EF.js} +3 -3
  115. package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DRDNan_n.js.map → GrBreadcrumbs-DOpwY2EF.js.map} +1 -1
  116. package/dist/components/GrBreadcrumbs/index.js +1 -1
  117. package/dist/components/GrButton/chunks/{GrButton-7GP0zObj.js → GrButton-CS4TqMtG.js} +1 -1
  118. package/dist/components/GrButton/chunks/{GrButton-7GP0zObj.js.map → GrButton-CS4TqMtG.js.map} +1 -1
  119. package/dist/components/GrButton/index.js +1 -1
  120. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CKyiAV8K.js.map +1 -1
  121. package/dist/components/GrButtonGroup/index.js +1 -1
  122. package/dist/components/GrCard/chunks/{GrCard-BttXz1pQ.js → GrCard-Ck5--lMF.js} +2 -2
  123. package/dist/components/GrCard/chunks/{GrCard-BttXz1pQ.js.map → GrCard-Ck5--lMF.js.map} +1 -1
  124. package/dist/components/GrCard/index.js +1 -1
  125. package/dist/components/GrCheckbox/chunks/{GrCheckbox-CEcHIsXM.js → GrCheckbox-Dp201frb.js} +1 -1
  126. package/dist/components/GrCheckbox/chunks/{GrCheckbox-CEcHIsXM.js.map → GrCheckbox-Dp201frb.js.map} +1 -1
  127. package/dist/components/GrCheckbox/index.js +1 -1
  128. package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-BOwrVcFr.js → GrCheckboxGroup-IpqG5qwm.js} +2 -2
  129. package/dist/components/GrCheckboxGroup/chunks/{GrCheckboxGroup-BOwrVcFr.js.map → GrCheckboxGroup-IpqG5qwm.js.map} +1 -1
  130. package/dist/components/GrCheckboxGroup/index.js +1 -1
  131. package/dist/components/GrChip/chunks/{GrChip-BTivtwff.js → GrChip-CKqyzYcv.js} +10 -7
  132. package/dist/components/GrChip/chunks/{GrChip-BTivtwff.js.map → GrChip-CKqyzYcv.js.map} +1 -1
  133. package/dist/components/GrChip/index.js +1 -1
  134. package/dist/components/GrChipGroup/chunks/{GrChipGroup-C78Vcwos.js → GrChipGroup-dDGwnC04.js} +1 -1
  135. package/dist/components/GrChipGroup/chunks/{GrChipGroup-C78Vcwos.js.map → GrChipGroup-dDGwnC04.js.map} +1 -1
  136. package/dist/components/GrChipGroup/index.js +1 -1
  137. package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-Dp0eEBTZ.js → GrCodeBlock-BUOwKwQE.js} +2 -2
  138. package/dist/components/GrCodeBlock/chunks/{GrCodeBlock-Dp0eEBTZ.js.map → GrCodeBlock-BUOwKwQE.js.map} +1 -1
  139. package/dist/components/GrCodeBlock/index.js +1 -1
  140. package/dist/components/GrCollapse/chunks/{GrCollapse-BlW6ybdL.js → GrCollapse-DWH3QAnU.js} +6 -5
  141. package/dist/components/GrCollapse/chunks/{GrCollapse-BlW6ybdL.js.map → GrCollapse-DWH3QAnU.js.map} +1 -1
  142. package/dist/components/GrCollapse/index.js +1 -1
  143. package/dist/components/GrColorPicker/chunks/{GrColorPicker-B-L4CWMt.js → GrColorPicker-BwzRLs-i.js} +4 -4
  144. package/dist/components/GrColorPicker/chunks/{GrColorPicker-B-L4CWMt.js.map → GrColorPicker-BwzRLs-i.js.map} +1 -1
  145. package/dist/components/GrColorPicker/index.js +1 -1
  146. package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-8HkYmMVP.js → GrCommandPalette-CnzPuoIM.js} +7 -7
  147. package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-8HkYmMVP.js.map → GrCommandPalette-CnzPuoIM.js.map} +1 -1
  148. package/dist/components/GrCommandPalette/index.js +1 -1
  149. package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BF7R3hgg.js → GrConfigProvider-t9x2UToH.js} +13 -12
  150. package/dist/components/GrConfigProvider/chunks/{GrConfigProvider-BF7R3hgg.js.map → GrConfigProvider-t9x2UToH.js.map} +1 -1
  151. package/dist/components/GrConfigProvider/index.js +2 -2
  152. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-CZEO2JR4.js → GrConfirmDialog-e15nFI8M.js} +4 -4
  153. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-CZEO2JR4.js.map → GrConfirmDialog-e15nFI8M.js.map} +1 -1
  154. package/dist/components/GrConfirmDialog/index.js +1 -1
  155. package/dist/components/GrContextMenu/chunks/{GrContextMenu-DlFWm0eW.js → GrContextMenu-RpxMHQXH.js} +1 -1
  156. package/dist/components/GrContextMenu/chunks/{GrContextMenu-DlFWm0eW.js.map → GrContextMenu-RpxMHQXH.js.map} +1 -1
  157. package/dist/components/GrContextMenu/index.js +1 -1
  158. package/dist/components/GrDataTable/chunks/{GrDataTable-4JAgOQ-7.js → GrDataTable-BYYG_XZA.js} +5 -5
  159. package/dist/components/GrDataTable/chunks/{GrDataTable-4JAgOQ-7.js.map → GrDataTable-BYYG_XZA.js.map} +1 -1
  160. package/dist/components/GrDataTable/index.js +1 -1
  161. package/dist/components/GrDelta/chunks/{GrDelta-BZwkgQW-.js → GrDelta-BpfqebEV.js} +0 -0
  162. package/dist/components/GrDelta/chunks/{GrDelta-BZwkgQW-.js.map → GrDelta-BpfqebEV.js.map} +1 -1
  163. package/dist/components/GrDelta/index.js +1 -1
  164. package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-BMeCgFV3.js → GrDescriptionList-D8ANFpn_.js} +2 -2
  165. package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-BMeCgFV3.js.map → GrDescriptionList-D8ANFpn_.js.map} +1 -1
  166. package/dist/components/GrDescriptionList/index.js +2 -2
  167. package/dist/components/GrDialog/chunks/{GrDialog-CKNbnxwO.js → GrDialog-DDz_OEhk.js} +3 -3
  168. package/dist/components/GrDialog/chunks/{GrDialog-CKNbnxwO.js.map → GrDialog-DDz_OEhk.js.map} +1 -1
  169. package/dist/components/GrDialog/index.js +1 -1
  170. package/dist/components/GrDialogService/chunks/{GrDialogService-Ut8iiBQh.js → GrDialogService-BmXiYmUp.js} +9 -8
  171. package/dist/components/GrDialogService/chunks/{GrDialogService-Ut8iiBQh.js.map → GrDialogService-BmXiYmUp.js.map} +1 -1
  172. package/dist/components/GrDialogService/index.js +1 -1
  173. package/dist/components/GrDivider/chunks/{GrDivider-BXavGcMX.js → GrDivider-DxA-zV25.js} +1 -1
  174. package/dist/components/GrDivider/chunks/{GrDivider-BXavGcMX.js.map → GrDivider-DxA-zV25.js.map} +1 -1
  175. package/dist/components/GrDivider/index.js +1 -1
  176. package/dist/components/GrDrawer/chunks/{GrDrawer-xfoy-MCj.js → GrDrawer-BRMHhvbd.js} +5 -5
  177. package/dist/components/GrDrawer/chunks/{GrDrawer-xfoy-MCj.js.map → GrDrawer-BRMHhvbd.js.map} +1 -1
  178. package/dist/components/GrDrawer/index.js +1 -1
  179. package/dist/components/GrDropdown/chunks/{GrDropdown-7r772-Cq.js → GrDropdown-cLZuZMEY.js} +6 -8
  180. package/dist/components/GrDropdown/chunks/{GrDropdown-7r772-Cq.js.map → GrDropdown-cLZuZMEY.js.map} +1 -1
  181. package/dist/components/GrDropdown/index.js +1 -1
  182. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DNurbsWc.js → GrDropdownMenu-Dxkz_ry4.js} +1 -1
  183. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DNurbsWc.js.map → GrDropdownMenu-Dxkz_ry4.js.map} +1 -1
  184. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenuList-B33ZzwfB.js.map +1 -1
  185. package/dist/components/GrDropdownMenu/index.js +1 -1
  186. package/dist/components/GrEmptyState/chunks/{GrEmptyState-RqsWvgI9.js → GrEmptyState-BbvwE-E0.js} +2 -2
  187. package/dist/components/GrEmptyState/chunks/{GrEmptyState-RqsWvgI9.js.map → GrEmptyState-BbvwE-E0.js.map} +1 -1
  188. package/dist/components/GrEmptyState/index.js +1 -1
  189. package/dist/components/GrFilePreview/chunks/{GrFilePreview-C9Z7hMK8.js → GrFilePreview-PabkLgYX.js} +1 -1
  190. package/dist/components/GrFilePreview/chunks/{GrFilePreview-C9Z7hMK8.js.map → GrFilePreview-PabkLgYX.js.map} +1 -1
  191. package/dist/components/GrFilePreview/index.js +1 -1
  192. package/dist/components/GrFileUpload/chunks/{GrFileUpload-C0ROpmOY.js → GrFileUpload-BwMR71zN.js} +4 -4
  193. package/dist/components/GrFileUpload/chunks/{GrFileUpload-C0ROpmOY.js.map → GrFileUpload-BwMR71zN.js.map} +1 -1
  194. package/dist/components/GrFileUpload/index.js +1 -1
  195. package/dist/components/GrForm/chunks/{GrForm-CrnfCsgj.js → GrForm-xTtavR-K.js} +1 -1
  196. package/dist/components/GrForm/chunks/{GrForm-CrnfCsgj.js.map → GrForm-xTtavR-K.js.map} +1 -1
  197. package/dist/components/GrForm/index.js +2 -2
  198. package/dist/components/GrFormField/chunks/{GrFormField-DSylU7IU.js → GrFormField-DO61vxpS.js} +2 -2
  199. package/dist/components/GrFormField/chunks/{GrFormField-DSylU7IU.js.map → GrFormField-DO61vxpS.js.map} +1 -1
  200. package/dist/components/GrFormField/index.js +1 -1
  201. package/dist/components/GrFormFile/chunks/{GrFormFile-B1jGZyIj.js → GrFormFile-Dlxx-9zi.js} +3 -3
  202. package/dist/components/GrFormFile/chunks/{GrFormFile-B1jGZyIj.js.map → GrFormFile-Dlxx-9zi.js.map} +1 -1
  203. package/dist/components/GrFormFile/index.js +1 -1
  204. package/dist/components/GrFormSection/chunks/{GrFormSection-ejieOg9H.js → GrFormSection-DV1S6R_N.js} +1 -1
  205. package/dist/components/GrFormSection/chunks/{GrFormSection-ejieOg9H.js.map → GrFormSection-DV1S6R_N.js.map} +1 -1
  206. package/dist/components/GrFormSection/index.js +1 -1
  207. package/dist/components/GrIcon/chunks/{GrIcon-Dmf0c9ba.js → GrIcon-DTZIgmje.js} +1 -1
  208. package/dist/components/GrIcon/chunks/{GrIcon-Dmf0c9ba.js.map → GrIcon-DTZIgmje.js.map} +1 -1
  209. package/dist/components/GrIcon/index.js +1 -1
  210. package/dist/components/GrImageViewer/chunks/{GrImageViewer--BU8yrfx.js → GrImageViewer-CcduIFsa.js} +2 -4
  211. package/dist/components/GrImageViewer/chunks/{GrImageViewer--BU8yrfx.js.map → GrImageViewer-CcduIFsa.js.map} +1 -1
  212. package/dist/components/GrImageViewer/index.js +1 -1
  213. package/dist/components/GrInput/chunks/{GrInput-CJ7eu3fR.js → GrInput-TFeBm3gQ.js} +1 -1
  214. package/dist/components/GrInput/chunks/{GrInput-CJ7eu3fR.js.map → GrInput-TFeBm3gQ.js.map} +1 -1
  215. package/dist/components/GrInput/index.js +1 -1
  216. package/dist/components/GrInputTag/chunks/{GrInputTag-ByD9NugQ.js → GrInputTag-DhfUNOA5.js} +3 -3
  217. package/dist/components/GrInputTag/chunks/{GrInputTag-ByD9NugQ.js.map → GrInputTag-DhfUNOA5.js.map} +1 -1
  218. package/dist/components/GrInputTag/index.js +1 -1
  219. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-BXG7DdTe.js → GrJsonViewer-CdtmUpZ3.js} +6 -6
  220. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-BXG7DdTe.js.map → GrJsonViewer-CdtmUpZ3.js.map} +1 -1
  221. package/dist/components/GrJsonViewer/index.js +2 -2
  222. package/dist/components/GrKbd/chunks/{GrKbd-D2ga1H9i.js → GrKbd-D_a1mPLe.js} +1 -1
  223. package/dist/components/GrKbd/chunks/{GrKbd-D2ga1H9i.js.map → GrKbd-D_a1mPLe.js.map} +1 -1
  224. package/dist/components/GrKbd/index.js +1 -1
  225. package/dist/components/GrLink/chunks/{GrLink-DYXw3W9w.js → GrLink-DwWErumU.js} +2 -2
  226. package/dist/components/GrLink/chunks/{GrLink-DYXw3W9w.js.map → GrLink-DwWErumU.js.map} +1 -1
  227. package/dist/components/GrLink/index.js +2 -2
  228. package/dist/components/GrList/chunks/{GrList-B_CRJB4c.js → GrList-Unya-LXb.js} +3 -3
  229. package/dist/components/GrList/chunks/{GrList-B_CRJB4c.js.map → GrList-Unya-LXb.js.map} +1 -1
  230. package/dist/components/GrList/index.js +1 -1
  231. package/dist/components/GrLoading/chunks/{GrLoading-CMD3Ri9P.js → GrLoading-BDrlrup_.js} +1 -1
  232. package/dist/components/GrLoading/chunks/{GrLoading-CMD3Ri9P.js.map → GrLoading-BDrlrup_.js.map} +1 -1
  233. package/dist/components/GrLoading/index.js +1 -1
  234. package/dist/components/GrModal/chunks/{GrModal-DixnhJcu.js → GrModal-Cm0mtSXk.js} +4 -4
  235. package/dist/components/GrModal/chunks/{GrModal-DixnhJcu.js.map → GrModal-Cm0mtSXk.js.map} +1 -1
  236. package/dist/components/GrModal/index.js +1 -1
  237. package/dist/components/GrNavbar/chunks/{GrNavbar-Dr8e5kW-.js → GrNavbar-BRGuksiy.js} +3 -3
  238. package/dist/components/GrNavbar/chunks/{GrNavbar-Dr8e5kW-.js.map → GrNavbar-BRGuksiy.js.map} +1 -1
  239. package/dist/components/GrNavbar/index.js +1 -1
  240. package/dist/components/GrNumberInput/chunks/{GrNumberInput-DQ59YICu.js → GrNumberInput-BqPydXpK.js} +7 -9
  241. package/dist/components/GrNumberInput/chunks/{GrNumberInput-DQ59YICu.js.map → GrNumberInput-BqPydXpK.js.map} +1 -1
  242. package/dist/components/GrNumberInput/index.js +2 -2
  243. package/dist/components/GrPagination/chunks/{GrPagination-68iyAwQz.js → GrPagination-DhbNZHEF.js} +4 -4
  244. package/dist/components/GrPagination/chunks/{GrPagination-68iyAwQz.js.map → GrPagination-DhbNZHEF.js.map} +1 -1
  245. package/dist/components/GrPagination/index.js +1 -1
  246. package/dist/components/GrPopover/chunks/{GrPopover-DEFxDffj.js → GrPopover-CcWvr1ZA.js} +3 -3
  247. package/dist/components/GrPopover/chunks/{GrPopover-DEFxDffj.js.map → GrPopover-CcWvr1ZA.js.map} +1 -1
  248. package/dist/components/GrPopover/index.js +2 -2
  249. package/dist/components/GrProgressBar/chunks/{GrProgressBar-Cd7AaJtR.js → GrProgressBar-C3NRBqIP.js} +2 -2
  250. package/dist/components/GrProgressBar/chunks/{GrProgressBar-Cd7AaJtR.js.map → GrProgressBar-C3NRBqIP.js.map} +1 -1
  251. package/dist/components/GrProgressBar/index.js +1 -1
  252. package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-D3yWXYDa.js → GrProgressCircle-CdvbINQc.js} +2 -2
  253. package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-D3yWXYDa.js.map → GrProgressCircle-CdvbINQc.js.map} +1 -1
  254. package/dist/components/GrProgressCircle/index.js +1 -1
  255. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ckeombia.js → GrPromptDialog-8RxQsOQ_.js} +8 -8
  256. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ckeombia.js.map → GrPromptDialog-8RxQsOQ_.js.map} +1 -1
  257. package/dist/components/GrPromptDialog/index.js +1 -1
  258. package/dist/components/GrRadio/chunks/{GrRadio-Aq3v8XgG.js → GrRadio-B1776V9D.js} +2 -2
  259. package/dist/components/GrRadio/chunks/{GrRadio-Aq3v8XgG.js.map → GrRadio-B1776V9D.js.map} +1 -1
  260. package/dist/components/GrRadio/index.js +2 -2
  261. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-y9LVdTWh.js → GrRadioGroup-UgitrBFl.js} +2 -2
  262. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-y9LVdTWh.js.map → GrRadioGroup-UgitrBFl.js.map} +1 -1
  263. package/dist/components/GrRadioGroup/index.js +1 -1
  264. package/dist/components/GrRating/chunks/{GrRating-IEiTOdnF.js → GrRating-DTriyyqG.js} +1 -1
  265. package/dist/components/GrRating/chunks/{GrRating-IEiTOdnF.js.map → GrRating-DTriyyqG.js.map} +1 -1
  266. package/dist/components/GrRating/index.js +1 -1
  267. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DMeOWlzj.js → GrResponseErrorBanner-NEEJZ8zi.js} +2 -2
  268. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-DMeOWlzj.js.map → GrResponseErrorBanner-NEEJZ8zi.js.map} +1 -1
  269. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CBVRpgIG.js → GrResponseErrorBanner-ZvBvEQDZ.js} +1 -1
  270. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-CBVRpgIG.js.map → GrResponseErrorBanner-ZvBvEQDZ.js.map} +1 -1
  271. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  272. package/dist/components/GrSegmented/chunks/{GrSegmented-CB-VR-yL.js → GrSegmented-NKTi9bMG.js} +1 -1
  273. package/dist/components/GrSegmented/chunks/{GrSegmented-CB-VR-yL.js.map → GrSegmented-NKTi9bMG.js.map} +1 -1
  274. package/dist/components/GrSegmented/index.js +1 -1
  275. package/dist/components/GrSelect/chunks/{GrSelect-Bm3Jugx8.js → GrSelect-Do1iAyp1.js} +6 -6
  276. package/dist/components/GrSelect/chunks/{GrSelect-Bm3Jugx8.js.map → GrSelect-Do1iAyp1.js.map} +1 -1
  277. package/dist/components/GrSelect/index.js +1 -1
  278. package/dist/components/GrSidebar/chunks/{GrSidebar-alkwBUzL.js → GrSidebar-DoKLlHSw.js} +2 -2
  279. package/dist/components/GrSidebar/chunks/{GrSidebar-alkwBUzL.js.map → GrSidebar-DoKLlHSw.js.map} +1 -1
  280. package/dist/components/GrSidebar/index.js +1 -1
  281. package/dist/components/GrSkeleton/chunks/GrSkeleton-CgfXxPQ2.js.map +1 -1
  282. package/dist/components/GrSlider/chunks/{GrSlider-DM6W6U9c.js → GrSlider-Db-jACXz.js} +6 -4
  283. package/dist/components/GrSlider/chunks/{GrSlider-DM6W6U9c.js.map → GrSlider-Db-jACXz.js.map} +1 -1
  284. package/dist/components/GrSlider/index.js +1 -1
  285. package/dist/components/GrSortableList/chunks/{GrSortableList-HyKX--rO.js → GrSortableList-CQCaWivn.js} +1 -1
  286. package/dist/components/GrSortableList/chunks/{GrSortableList-HyKX--rO.js.map → GrSortableList-CQCaWivn.js.map} +1 -1
  287. package/dist/components/GrSortableList/index.js +1 -1
  288. package/dist/components/GrSplitter/chunks/{GrSplitter-MltjaADn.js → GrSplitter-C-XQzq7q.js} +1 -1
  289. package/dist/components/GrSplitter/chunks/{GrSplitter-MltjaADn.js.map → GrSplitter-C-XQzq7q.js.map} +1 -1
  290. package/dist/components/GrSplitter/index.js +1 -1
  291. package/dist/components/GrStatistic/chunks/{GrStatistic-BoLkXw7F.js → GrStatistic-C1_nY4Gc.js} +2 -2
  292. package/dist/components/GrStatistic/chunks/{GrStatistic-BoLkXw7F.js.map → GrStatistic-C1_nY4Gc.js.map} +1 -1
  293. package/dist/components/GrStatistic/index.js +1 -1
  294. package/dist/components/GrSteps/chunks/{GrSteps-CpGHXLOc.js → GrSteps-DXj7m-WO.js} +2 -2
  295. package/dist/components/GrSteps/chunks/{GrSteps-CpGHXLOc.js.map → GrSteps-DXj7m-WO.js.map} +1 -1
  296. package/dist/components/GrSteps/index.js +1 -1
  297. package/dist/components/GrSwitch/chunks/{GrSwitch-7Oe5QfQZ.js → GrSwitch-CriHWT2A.js} +1 -1
  298. package/dist/components/GrSwitch/chunks/{GrSwitch-7Oe5QfQZ.js.map → GrSwitch-CriHWT2A.js.map} +1 -1
  299. package/dist/components/GrSwitch/index.js +1 -1
  300. package/dist/components/GrTabPanels/chunks/{GrTabPanels-BZQS8-JM.js → GrTabPanels-5zsbqS1v.js} +1 -1
  301. package/dist/components/GrTabPanels/chunks/{GrTabPanels-BZQS8-JM.js.map → GrTabPanels-5zsbqS1v.js.map} +1 -1
  302. package/dist/components/GrTabPanels/index.js +1 -1
  303. package/dist/components/GrTable/chunks/{GrTable-jhUTczjv.js → GrTable-iwzHvlMC.js} +1 -1
  304. package/dist/components/GrTable/chunks/{GrTable-jhUTczjv.js.map → GrTable-iwzHvlMC.js.map} +1 -1
  305. package/dist/components/GrTable/index.js +1 -1
  306. package/dist/components/GrTabs/chunks/{GrTabs-CT2nk_HV.js → GrTabs-DHfv67cp.js} +1 -1
  307. package/dist/components/GrTabs/chunks/{GrTabs-CT2nk_HV.js.map → GrTabs-DHfv67cp.js.map} +1 -1
  308. package/dist/components/GrTabs/index.js +1 -1
  309. package/dist/components/GrTextarea/chunks/{GrTextarea-DinXG12-.js → GrTextarea-BII3w61K.js} +1 -1
  310. package/dist/components/GrTextarea/chunks/{GrTextarea-DinXG12-.js.map → GrTextarea-BII3w61K.js.map} +1 -1
  311. package/dist/components/GrTextarea/index.js +1 -1
  312. package/dist/components/GrTimeline/chunks/{GrTimeline-BiHpArsg.js → GrTimeline-Bs60huw0.js} +2 -2
  313. package/dist/components/GrTimeline/chunks/{GrTimeline-BiHpArsg.js.map → GrTimeline-Bs60huw0.js.map} +1 -1
  314. package/dist/components/GrTimeline/index.js +1 -1
  315. package/dist/components/GrToaster/chunks/{GrToaster-COXIBKzq.js → GrToaster-D-sV-9of.js} +4 -4
  316. package/dist/components/GrToaster/chunks/{GrToaster-COXIBKzq.js.map → GrToaster-D-sV-9of.js.map} +1 -1
  317. package/dist/components/GrToaster/index.js +1 -1
  318. package/dist/components/GrTooltip/chunks/{GrTooltip-uYETdbCD.js → GrTooltip-BUiTbROv.js} +3 -3
  319. package/dist/components/GrTooltip/chunks/{GrTooltip-uYETdbCD.js.map → GrTooltip-BUiTbROv.js.map} +1 -1
  320. package/dist/components/GrTooltip/index.js +1 -1
  321. package/dist/components/GrTree/chunks/{GrTree-Ci6CZfKR.js → GrTree-CkELQwR8.js} +1 -2
  322. package/dist/components/GrTree/chunks/{GrTree-Ci6CZfKR.js.map → GrTree-CkELQwR8.js.map} +1 -1
  323. package/dist/components/GrTree/index.js +1 -1
  324. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-MGsyvkJV.js → GrTreeSelect-DurwZ7Cz.js} +4 -4
  325. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-MGsyvkJV.js.map → GrTreeSelect-DurwZ7Cz.js.map} +1 -1
  326. package/dist/components/GrTreeSelect/index.js +1 -1
  327. package/dist/components/GrValue/chunks/GrValue-ezkQM05Q.js.map +1 -1
  328. package/dist/composables/useFloating.js +1 -1
  329. package/dist/composables/useGrComponentConfig.js +1 -1
  330. package/dist/composables/useOverlayLayer.js +35 -6
  331. package/dist/composables/useOverlayLayer.js.map +1 -1
  332. package/dist/composables/usePortalTarget.js +1 -1
  333. package/dist/composables/useTheme.js +1 -1
  334. package/dist/composables/useTheme.js.map +1 -1
  335. package/dist/composables/useToast.js +1 -1
  336. package/dist/composables/useToast.js.map +1 -1
  337. package/dist/composables/useVirtualList.js +26 -6
  338. package/dist/composables/useVirtualList.js.map +1 -1
  339. package/dist/directives/loading.js +1 -1
  340. package/dist/granular-provider-node.js +1 -1
  341. package/dist/granular-provider.js +1 -1
  342. package/dist/index.js +86 -86
  343. package/dist/testing.js +1 -1
  344. package/dist/testing.js.map +1 -1
  345. package/dist/types/components/GrDialog/GrDialog.vue.d.ts +1 -1
  346. package/dist/types/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
  347. package/dist/types/components/GrModal/GrModal.vue.d.ts +1 -1
  348. package/dist/types/composables/internal/overlayStack.d.ts +11 -0
  349. package/dist/types/internal/devHook.d.ts +119 -0
  350. package/dist/vue/index.js +2 -2
  351. package/dist/vue/index.js.map +1 -1
  352. package/dist/web-types.json +1 -1
  353. package/package.json +16 -16
  354. package/dist/chunks/config-CQLNjc9X2.js.map +0 -1
  355. package/dist/chunks/config-CnYdE3HZ2.js.map +0 -1
  356. package/dist/chunks/config-CuQmUkMw2.js.map +0 -1
  357. package/dist/chunks/config-DBmdgoVf2.js.map +0 -1
  358. package/dist/chunks/config-DVCNvhIG2.js.map +0 -1
  359. package/dist/chunks/config-DpAYidyY2.js.map +0 -1
  360. package/dist/chunks/config-MmPym-Z72.js.map +0 -1
  361. package/dist/chunks/overlayStack-0CZS99Da.js.map +0 -1
  362. /package/dist/chunks/{config-CQLNjc9X2.js → config-CQLNjc9X.js} +0 -0
  363. /package/dist/chunks/{config-CnYdE3HZ2.js → config-CnYdE3HZ.js} +0 -0
  364. /package/dist/chunks/{config-DBmdgoVf2.js → config-DBmdgoVf.js} +0 -0
  365. /package/dist/chunks/{config-DVCNvhIG2.js → config-DVCNvhIG.js} +0 -0
  366. /package/dist/chunks/{config-DpAYidyY2.js → config-DpAYidyY.js} +0 -0
  367. /package/dist/chunks/{config-MmPym-Z72.js → config-MmPym-Z7.js} +0 -0
package/dist/vue/index.js CHANGED
@@ -30,7 +30,7 @@ function installComponent(app, c) {
30
30
  app.component(resolvedName, c);
31
31
  return;
32
32
  }
33
- if (!(typeof process !== "undefined" && process.env.NODE_ENV !== "production")) return;
33
+ if (!(process.env.NODE_ENV !== "production")) return;
34
34
  console.warn("[granularity] component passed to createGranularity has no `install`, `name`, or `__name` — skipped.");
35
35
  }
36
36
  function installDirective(app, d) {
@@ -42,7 +42,7 @@ function installDirective(app, d) {
42
42
  app.directive(d.name, d.directive);
43
43
  return;
44
44
  }
45
- if (!(typeof process !== "undefined" && process.env.NODE_ENV !== "production")) return;
45
+ if (!(process.env.NODE_ENV !== "production")) return;
46
46
  console.warn("[granularity] directive passed to createGranularity has no `install` or `{ name, directive }` — skipped.");
47
47
  }
48
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/vue/plugin.ts"],"sourcesContent":["import type { App, Component, Directive, Plugin } from 'vue'\n\n/**\n * Лёгкий контейнер, который может быть зарегистрирован в Vue:\n * - SFC-компонент (Vue сам компилирует `__name` из имени файла) — достаточно просто передать сам компонент,\n * - SFC-компонент с опциональным `install` (по аналогии с Element Plus / Naive UI),\n * - объект с собственным `install`,\n * - либо объект `{ name, component }`, если имя нужно задать явно.\n */\nexport type GranularityInstallableComponent\n = | (Component & { name?: string, __name?: string, install?: (app: App) => void })\n | { install: (app: App) => void }\n | { name: string, component: Component }\n\n/**\n * Директива — либо пара `{ name, directive }`, либо объект с `install`.\n */\nexport type GranularityInstallableDirective\n = | { name: string, directive: Directive }\n | { install: (app: App) => void }\n\nexport interface CreateGranularityOptions {\n /**\n * Список компонентов для глобальной регистрации.\n * Пакет сам по себе ничего не импортирует — пользователь передаёт сюда только те компоненты,\n * которые ему действительно нужны. За счёт этого tree-shaking остаётся полным.\n */\n components?: GranularityInstallableComponent[]\n /**\n * Список директив. Передавайте ровно те, что нужны, по аналогии с компонентами.\n */\n directives?: GranularityInstallableDirective[]\n /**\n * Произвольные `provide`-значения. Ключи могут быть `symbol` или строкой.\n * Пакет не навязывает конкретные ключи (например, i18n) — выбор за пользователем.\n */\n provides?: Array<{ key: string | symbol, value: unknown }>\n /**\n * Произвольные `app.config.globalProperties` — по умолчанию ничего не ставим.\n */\n globalProperties?: Record<string, unknown>\n}\n\n/**\n * Вспомогательная обёртка: превращает произвольный компонент в `GranularityInstallableComponent`\n * с явным именем регистрации.\n *\n * ```ts\n * import { GrButton } from '@feugene/granularity/components/GrButton'\n * import { defineInstallable } from '@feugene/granularity/vue'\n *\n * const installable = defineInstallable(GrButton, 'GrButton')\n * ```\n */\nexport function defineInstallable<T extends Component>(component: T, name: string): GranularityInstallableComponent {\n return {\n install(app: App) {\n app.component(name, component)\n },\n }\n}\n\nfunction installComponent(app: App, c: GranularityInstallableComponent): void {\n if (typeof (c as any).install === 'function') {\n ;(c as any).install(app)\n return\n }\n\n // Форма `{ name, component }` — явное указание имени для произвольного компонента.\n // Допускаем как object-компоненты (SFC / options), так и functional-компоненты.\n if (\n typeof (c as any).name === 'string'\n && (c as any).component\n && (typeof (c as any).component === 'object' || typeof (c as any).component === 'function')\n ) {\n const { name, component } = c as { name: string, component: Component }\n app.component(name, component)\n return\n }\n\n // SFC: Vue 3 компилирует имя компонента из имени файла в поле `__name`\n // (например, `GrButton.vue` → `__name: 'GrButton'`). Также поддерживаем явное `name`.\n const resolvedName\n = (c as Component & { name?: string }).name\n ?? (c as { __name?: string }).__name\n if (resolvedName) {\n app.component(resolvedName, c as Component)\n return\n }\n\n // Сознательно без throw — просто сообщаем в dev-режиме.\n if (!__GR_DEV__)\n return\n\n console.warn('[granularity] component passed to createGranularity has no `install`, `name`, or `__name` — skipped.')\n}\n\nfunction installDirective(app: App, d: GranularityInstallableDirective): void {\n if ('install' in d && typeof d.install === 'function') {\n d.install(app)\n return\n }\n\n if ('name' in d && 'directive' in d) {\n app.directive(d.name, d.directive)\n return\n }\n\n // Сознательно без throw — согласовано с `installComponent`.\n if (!__GR_DEV__)\n return\n\n console.warn('[granularity] directive passed to createGranularity has no `install` or `{ name, directive }` — skipped.')\n}\n\n/**\n * Применяет опции к переданному приложению. Экспортируется отдельно от фабрики —\n * удобно, когда плагин не нужен (например, в тестах).\n */\nexport function installGranularity(app: App, options: CreateGranularityOptions = {}): void {\n for (const c of options.components ?? [])\n installComponent(app, c)\n\n for (const d of options.directives ?? [])\n installDirective(app, d)\n\n for (const { key, value } of options.provides ?? [])\n app.provide(key as any, value)\n\n if (options.globalProperties) {\n for (const [key, value] of Object.entries(options.globalProperties))\n app.config.globalProperties[key] = value\n }\n}\n\n/**\n * Создаёт Vue-плагин `{ install }`, который при `app.use(...)` зарегистрирует переданные\n * компоненты, директивы и provide-значения. Сам модуль НЕ импортирует ни компонентов,\n * ни директив из пакета — всё приходит снаружи. Это сохраняет гранулярность:\n * бандлер увидит только те символы, которые вы реально передали.\n *\n * ```ts\n * import { createApp } from 'vue'\n * import { createGranularity } from '@feugene/granularity/vue'\n * import { GrButton } from '@feugene/granularity/components/GrButton'\n * import { GrInput } from '@feugene/granularity/components/GrInput'\n * import { vHotkey } from '@feugene/granularity/directives/hotkey'\n *\n * createApp(App)\n * .use(createGranularity({\n * // Достаточно передать сами компоненты — имя будет взято из `__name` (Vue SFC)\n * // или из `name`; можно также указать явно через `{ name, component }`.\n * components: [GrButton, GrInput],\n * directives: [{ name: 'hotkey', directive: vHotkey }],\n * }))\n * .mount('#app')\n * ```\n */\nexport function createGranularity(options: CreateGranularityOptions = {}): Plugin {\n return {\n install(app: App) {\n installGranularity(app, options)\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;AAsDA,SAAgB,kBAAuC,WAAc,MAA+C;CAClH,OAAO,EACL,QAAQ,KAAU;EAChB,IAAI,UAAU,MAAM,SAAS;CAC/B,EACF;AACF;AAEA,SAAS,iBAAiB,KAAU,GAA0C;CAC5E,IAAI,OAAQ,EAAU,YAAY,YAAY;EAC3C,EAAW,QAAQ,GAAG;EACvB;CACF;CAIA,IACE,OAAQ,EAAU,SAAS,YACvB,EAAU,cACV,OAAQ,EAAU,cAAc,YAAY,OAAQ,EAAU,cAAc,aAChF;EACA,MAAM,EAAE,MAAM,cAAc;EAC5B,IAAI,UAAU,MAAM,SAAS;EAC7B;CACF;CAIA,MAAM,eACD,EAAoC,QACjC,EAA0B;CAClC,IAAI,cAAc;EAChB,IAAI,UAAU,cAAc,CAAc;EAC1C;CACF;CAGA,IAAI,EAAA,OAAA,YAAA,eAAA,QAAA,IAAA,aAAA,eACF;CAEF,QAAQ,KAAK,sGAAsG;AACrH;AAEA,SAAS,iBAAiB,KAAU,GAA0C;CAC5E,IAAI,aAAa,KAAK,OAAO,EAAE,YAAY,YAAY;EACrD,EAAE,QAAQ,GAAG;EACb;CACF;CAEA,IAAI,UAAU,KAAK,eAAe,GAAG;EACnC,IAAI,UAAU,EAAE,MAAM,EAAE,SAAS;EACjC;CACF;CAGA,IAAI,EAAA,OAAA,YAAA,eAAA,QAAA,IAAA,aAAA,eACF;CAEF,QAAQ,KAAK,0GAA0G;AACzH;;;;;AAMA,SAAgB,mBAAmB,KAAU,UAAoC,CAAC,GAAS;CACzF,KAAK,MAAM,KAAK,QAAQ,cAAc,CAAC,GACrC,iBAAiB,KAAK,CAAC;CAEzB,KAAK,MAAM,KAAK,QAAQ,cAAc,CAAC,GACrC,iBAAiB,KAAK,CAAC;CAEzB,KAAK,MAAM,EAAE,KAAK,WAAW,QAAQ,YAAY,CAAC,GAChD,IAAI,QAAQ,KAAY,KAAK;CAE/B,IAAI,QAAQ,kBACV,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,gBAAgB,GAChE,IAAI,OAAO,iBAAiB,OAAO;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,kBAAkB,UAAoC,CAAC,GAAW;CAChF,OAAO,EACL,QAAQ,KAAU;EAChB,mBAAmB,KAAK,OAAO;CACjC,EACF;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/vue/plugin.ts"],"sourcesContent":["import type { App, Component, Directive, Plugin } from 'vue'\n\n/**\n * Лёгкий контейнер, который может быть зарегистрирован в Vue:\n * - SFC-компонент (Vue сам компилирует `__name` из имени файла) — достаточно просто передать сам компонент,\n * - SFC-компонент с опциональным `install` (по аналогии с Element Plus / Naive UI),\n * - объект с собственным `install`,\n * - либо объект `{ name, component }`, если имя нужно задать явно.\n */\nexport type GranularityInstallableComponent\n = | (Component & { name?: string, __name?: string, install?: (app: App) => void })\n | { install: (app: App) => void }\n | { name: string, component: Component }\n\n/**\n * Директива — либо пара `{ name, directive }`, либо объект с `install`.\n */\nexport type GranularityInstallableDirective\n = | { name: string, directive: Directive }\n | { install: (app: App) => void }\n\nexport interface CreateGranularityOptions {\n /**\n * Список компонентов для глобальной регистрации.\n * Пакет сам по себе ничего не импортирует — пользователь передаёт сюда только те компоненты,\n * которые ему действительно нужны. За счёт этого tree-shaking остаётся полным.\n */\n components?: GranularityInstallableComponent[]\n /**\n * Список директив. Передавайте ровно те, что нужны, по аналогии с компонентами.\n */\n directives?: GranularityInstallableDirective[]\n /**\n * Произвольные `provide`-значения. Ключи могут быть `symbol` или строкой.\n * Пакет не навязывает конкретные ключи (например, i18n) — выбор за пользователем.\n */\n provides?: Array<{ key: string | symbol, value: unknown }>\n /**\n * Произвольные `app.config.globalProperties` — по умолчанию ничего не ставим.\n */\n globalProperties?: Record<string, unknown>\n}\n\n/**\n * Вспомогательная обёртка: превращает произвольный компонент в `GranularityInstallableComponent`\n * с явным именем регистрации.\n *\n * ```ts\n * import { GrButton } from '@feugene/granularity/components/GrButton'\n * import { defineInstallable } from '@feugene/granularity/vue'\n *\n * const installable = defineInstallable(GrButton, 'GrButton')\n * ```\n */\nexport function defineInstallable<T extends Component>(component: T, name: string): GranularityInstallableComponent {\n return {\n install(app: App) {\n app.component(name, component)\n },\n }\n}\n\nfunction installComponent(app: App, c: GranularityInstallableComponent): void {\n if (typeof (c as any).install === 'function') {\n ;(c as any).install(app)\n return\n }\n\n // Форма `{ name, component }` — явное указание имени для произвольного компонента.\n // Допускаем как object-компоненты (SFC / options), так и functional-компоненты.\n if (\n typeof (c as any).name === 'string'\n && (c as any).component\n && (typeof (c as any).component === 'object' || typeof (c as any).component === 'function')\n ) {\n const { name, component } = c as { name: string, component: Component }\n app.component(name, component)\n return\n }\n\n // SFC: Vue 3 компилирует имя компонента из имени файла в поле `__name`\n // (например, `GrButton.vue` → `__name: 'GrButton'`). Также поддерживаем явное `name`.\n const resolvedName\n = (c as Component & { name?: string }).name\n ?? (c as { __name?: string }).__name\n if (resolvedName) {\n app.component(resolvedName, c as Component)\n return\n }\n\n // Сознательно без throw — просто сообщаем в dev-режиме.\n if (!__GR_DEV__)\n return\n\n console.warn('[granularity] component passed to createGranularity has no `install`, `name`, or `__name` — skipped.')\n}\n\nfunction installDirective(app: App, d: GranularityInstallableDirective): void {\n if ('install' in d && typeof d.install === 'function') {\n d.install(app)\n return\n }\n\n if ('name' in d && 'directive' in d) {\n app.directive(d.name, d.directive)\n return\n }\n\n // Сознательно без throw — согласовано с `installComponent`.\n if (!__GR_DEV__)\n return\n\n console.warn('[granularity] directive passed to createGranularity has no `install` or `{ name, directive }` — skipped.')\n}\n\n/**\n * Применяет опции к переданному приложению. Экспортируется отдельно от фабрики —\n * удобно, когда плагин не нужен (например, в тестах).\n */\nexport function installGranularity(app: App, options: CreateGranularityOptions = {}): void {\n for (const c of options.components ?? [])\n installComponent(app, c)\n\n for (const d of options.directives ?? [])\n installDirective(app, d)\n\n for (const { key, value } of options.provides ?? [])\n app.provide(key as any, value)\n\n if (options.globalProperties) {\n for (const [key, value] of Object.entries(options.globalProperties))\n app.config.globalProperties[key] = value\n }\n}\n\n/**\n * Создаёт Vue-плагин `{ install }`, который при `app.use(...)` зарегистрирует переданные\n * компоненты, директивы и provide-значения. Сам модуль НЕ импортирует ни компонентов,\n * ни директив из пакета — всё приходит снаружи. Это сохраняет гранулярность:\n * бандлер увидит только те символы, которые вы реально передали.\n *\n * ```ts\n * import { createApp } from 'vue'\n * import { createGranularity } from '@feugene/granularity/vue'\n * import { GrButton } from '@feugene/granularity/components/GrButton'\n * import { GrInput } from '@feugene/granularity/components/GrInput'\n * import { vHotkey } from '@feugene/granularity/directives/hotkey'\n *\n * createApp(App)\n * .use(createGranularity({\n * // Достаточно передать сами компоненты — имя будет взято из `__name` (Vue SFC)\n * // или из `name`; можно также указать явно через `{ name, component }`.\n * components: [GrButton, GrInput],\n * directives: [{ name: 'hotkey', directive: vHotkey }],\n * }))\n * .mount('#app')\n * ```\n */\nexport function createGranularity(options: CreateGranularityOptions = {}): Plugin {\n return {\n install(app: App) {\n installGranularity(app, options)\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;AAsDA,SAAgB,kBAAuC,WAAc,MAA+C;CAClH,OAAO,EACL,QAAQ,KAAU;EAChB,IAAI,UAAU,MAAM,SAAS;CAC/B,EACF;AACF;AAEA,SAAS,iBAAiB,KAAU,GAA0C;CAC5E,IAAI,OAAQ,EAAU,YAAY,YAAY;EAC3C,EAAW,QAAQ,GAAG;EACvB;CACF;CAIA,IACE,OAAQ,EAAU,SAAS,YACvB,EAAU,cACV,OAAQ,EAAU,cAAc,YAAY,OAAQ,EAAU,cAAc,aAChF;EACA,MAAM,EAAE,MAAM,cAAc;EAC5B,IAAI,UAAU,MAAM,SAAS;EAC7B;CACF;CAIA,MAAM,eACD,EAAoC,QACjC,EAA0B;CAClC,IAAI,cAAc;EAChB,IAAI,UAAU,cAAc,CAAc;EAC1C;CACF;CAGA,IAAI,EAAA,QAAA,IAAA,aAAA,eACF;CAEF,QAAQ,KAAK,sGAAsG;AACrH;AAEA,SAAS,iBAAiB,KAAU,GAA0C;CAC5E,IAAI,aAAa,KAAK,OAAO,EAAE,YAAY,YAAY;EACrD,EAAE,QAAQ,GAAG;EACb;CACF;CAEA,IAAI,UAAU,KAAK,eAAe,GAAG;EACnC,IAAI,UAAU,EAAE,MAAM,EAAE,SAAS;EACjC;CACF;CAGA,IAAI,EAAA,QAAA,IAAA,aAAA,eACF;CAEF,QAAQ,KAAK,0GAA0G;AACzH;;;;;AAMA,SAAgB,mBAAmB,KAAU,UAAoC,CAAC,GAAS;CACzF,KAAK,MAAM,KAAK,QAAQ,cAAc,CAAC,GACrC,iBAAiB,KAAK,CAAC;CAEzB,KAAK,MAAM,KAAK,QAAQ,cAAc,CAAC,GACrC,iBAAiB,KAAK,CAAC;CAEzB,KAAK,MAAM,EAAE,KAAK,WAAW,QAAQ,YAAY,CAAC,GAChD,IAAI,QAAQ,KAAY,KAAK;CAE/B,IAAI,QAAQ,kBACV,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,gBAAgB,GAChE,IAAI,OAAO,iBAAiB,OAAO;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,kBAAkB,UAAoC,CAAC,GAAW;CAChF,OAAO,EACL,QAAQ,KAAU;EAChB,mBAAmB,KAAK,OAAO;CACjC,EACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@feugene/granularity",
4
- "version": "0.36.0",
4
+ "version": "0.38.0",
5
5
  "framework": "vue",
6
6
  "js-types-syntax": "typescript",
7
7
  "description-markup": "markdown",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feugene/granularity",
3
3
  "description": "Granularity design system package with Vue 3 components, consumed via the `@feugene/unocss-preset-granular` preset.",
4
- "version": "0.36.0",
4
+ "version": "0.38.0",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
7
7
  "name": "Evgeniy Fureev",
@@ -591,8 +591,8 @@
591
591
  "./package.json": "./package.json"
592
592
  },
593
593
  "peerDependencies": {
594
- "@feugene/fint-i18n": ">=0.6.0 <1.0.0",
595
- "@feugene/unocss-preset-granular": ">=0.11.0 <1.0.0",
594
+ "@feugene/fint-i18n": ">=0.7.0 <1.0.0",
595
+ "@feugene/unocss-preset-granular": ">=0.13.0 <1.0.0",
596
596
  "@floating-ui/dom": "^1.8.0",
597
597
  "vue": "^3.5.0"
598
598
  },
@@ -605,28 +605,28 @@
605
605
  }
606
606
  },
607
607
  "devDependencies": {
608
- "@antfu/eslint-config": "^9.1.0",
608
+ "@antfu/eslint-config": "^9.3.0",
609
609
  "@feugene/fint-i18n": "^0.7.0",
610
- "@feugene/granularity-test-kit": "^0.7.0",
610
+ "@feugene/granularity-test-kit": "^0.8.1",
611
611
  "@feugene/unocss-preset-granular": "^0.13.0",
612
612
  "@floating-ui/dom": "^1.8.0",
613
- "@iconify-json/lucide": "^1.2.117",
613
+ "@iconify-json/lucide": "^1.2.126",
614
614
  "@types/node": "^25.9.5",
615
- "@unocss/eslint-plugin": "^66.7.5",
615
+ "@unocss/eslint-plugin": "^66.8.1",
616
616
  "@vitejs/plugin-vue": "^6.0.8",
617
- "@vitest/coverage-v8": "^4.1.10",
617
+ "@vitest/coverage-v8": "^4.1.11",
618
618
  "@vue/test-utils": "^2.4.11",
619
- "eslint": "^10.7.0",
620
- "globals": "^17.7.0",
619
+ "eslint": "^10.9.1",
620
+ "globals": "^17.11.0",
621
621
  "jsdom": "^29.1.1",
622
- "typescript": "^6.0.2",
623
- "unocss": "^66.7.5",
622
+ "typescript": "^6.0.3",
623
+ "unocss": "^66.8.1",
624
624
  "unplugin-icons": "^23.0.1",
625
- "vite": "^8.1.5",
625
+ "vite": "^8.2.2",
626
626
  "vite-plugin-lib-inject-css": "^2.2.2",
627
- "vitest": "^4.1.10",
628
- "vue": "^3.5.40",
629
- "vue-tsc": "^3.3.7"
627
+ "vitest": "^4.1.11",
628
+ "vue": "^3.5.42",
629
+ "vue-tsc": "^3.3.11"
630
630
  },
631
631
  "scripts": {
632
632
  "build": "vite build && gr-check-dist-dev-guard && node scripts/check-dist-no-tests.mjs && node scripts/generate-web-types.mjs && vue-tsc -p tsconfig.build.json && node scripts/check-dist-exports.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-CQLNjc9X2.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,OAAO,KAAK,KAAK;CACnE,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-CnYdE3HZ2.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,OAAO,KAAK,KAAK;CAC9E,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-CuQmUkMw2.js","names":[],"sources":["../../src/components/GrRadio/safelist.ts","../../src/components/GrRadio/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport { grButtonSafelist } from '../GrButton/safelist'\nimport {\n grRadioButtonDisabledCheckedClass,\n grRadioButtonDisabledClass,\n grRadioControlCheckedClass,\n grRadioControlDisabledClass,\n grRadioControlInvalidClass,\n grRadioControlUncheckedClass,\n grRadioControlSizes,\n grRadioDescriptionSizes,\n grRadioDotBaseClass,\n grRadioDotSizes,\n grRadioDotCheckedClass,\n grRadioDotDisabledClass,\n grRadioDotUncheckedClass,\n grRadioEnabledClass,\n grRadioLabelCheckedColorClass,\n grRadioLabelColorClass,\n grRadioLabelSizes,\n grRadioRootDisabledClass,\n grRadioRootReadonlyClass,\n grRadioRootEnabledClass,\n} from './grRadioStyles'\n\nexport const grRadioSafelist = [...new Set([\n ...grButtonSafelist,\n ...splitClassTokens(grRadioEnabledClass),\n ...splitClassTokens(grRadioButtonDisabledClass),\n ...splitClassTokens(grRadioButtonDisabledCheckedClass),\n ...splitClassTokens(grRadioRootDisabledClass),\n ...splitClassTokens(grRadioRootEnabledClass),\n ...splitClassTokens(grRadioRootReadonlyClass),\n ...splitClassTokens(grRadioControlCheckedClass),\n ...splitClassTokens(grRadioControlUncheckedClass),\n ...splitClassTokens(grRadioControlDisabledClass),\n ...splitClassTokens(grRadioControlInvalidClass),\n ...splitClassTokens(grRadioDotCheckedClass),\n ...splitClassTokens(grRadioDotUncheckedClass),\n ...splitClassTokens(grRadioDotDisabledClass),\n ...splitClassTokens(grRadioDotBaseClass),\n ...Object.values(grRadioControlSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioDotSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioLabelSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioDescriptionSizes).flatMap(splitClassTokens),\n ...splitClassTokens(grRadioLabelColorClass),\n ...splitClassTokens(grRadioLabelCheckedColorClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grRadioSafelist } from './safelist'\n\nexport const grRadioConfig = defineGranularComponent(import.meta.url, {\n name: 'GrRadio',\n dependencies: ['GrButton'],\n safelist: grRadioSafelist,\n})\n"],"mappings":";;;;;AAyBA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG;CACH,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,iCAAiC;CACrD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,6BAA6B;AACnD,CAAC,CAAC;;;AC3CF,IAAa,gBAAgB,wBAAwB,OAAO,KAAK,KAAK;CACpE,MAAM;CACN,cAAc,CAAC,UAAU;CACzB,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-DBmdgoVf2.js","names":[],"sources":["../../src/components/GrButtonGroup/config.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grButtonGroupConfig = defineGranularComponent(import.meta.url, {\n name: 'GrButtonGroup',\n})\n"],"mappings":";;AAEA,IAAa,sBAAsB,wBAAwB,OAAO,KAAK,KAAK,EAC1E,MAAM,gBACR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-DVCNvhIG2.js","names":[],"sources":["../../src/components/GrPopover/safelist.ts","../../src/components/GrPopover/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport { overlayOriginClassByPlacement } from '../shared/overlayOrigin'\nimport { panelSizes, panelSizesFlush, popoverPanelBaseClass } from './grPopoverStyles'\n\nexport const grPopoverSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(panelSizesFlush).flatMap(splitClassTokens),\n ...Object.values(overlayOriginClassByPlacement).flatMap(splitClassTokens),\n // Базовый класс живёт литералом в `grPopoverStyles.ts`, а такой хелпер на\n // сборке уезжает в общий чанк, которого скан не видит (см. gotchas.md §2).\n ...splitClassTokens(popoverPanelBaseClass),\n // Обёртка триггера: две взаимоисключающие раскладки. Обе объявлены, потому\n // что в разметке они приезжают тернарником, а не отдельными литералами.\n ...splitClassTokens('inline-block max-w-full block w-full'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPopoverSafelist } from './safelist'\n\nexport const grPopoverConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPopover',\n safelist: grPopoverSafelist,\n})\n"],"mappings":";;;;;AAKA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI;CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,6BAA6B,CAAC,CAAC,QAAQ,gBAAgB;CAGxE,GAAG,iBAAiB,qBAAqB;CAGzC,GAAG,iBAAiB,sCAAsC;CAI1D,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACfF,IAAa,kBAAkB,wBAAwB,OAAO,KAAK,KAAK;CACtE,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-DpAYidyY2.js","names":[],"sources":["../../src/components/GrJsonViewer/grJsonViewerStyles.ts","../../src/components/GrJsonViewer/safelist.ts","../../src/components/GrJsonViewer/config.ts"],"sourcesContent":["import type { GrJsonNodeKind } from './jsonToNodes'\n\n/**\n * Классы `GrJsonViewer`.\n *\n * Роли перечислены целиком, по литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя уехало бы в CSS литералом.\n */\n\n/**\n * `min-w-0` и клип — не украшение: глубокая ветка шире контейнера, и без них\n * панель растягивает раскладку страницы, вместо того чтобы прокручиваться\n * внутри себя. Горизонтальный скролл остаётся у самого дерева.\n */\nexport const jsonViewerRootClass = 'min-w-0 overflow-hidden rounded-[var(--gr-radius-md)] bg-[var(--gr-json-viewer-bg,var(--gr-muted))] text-[var(--gr-fg)]'\n\n/** Шапка с поиском и кнопками свёртки. Отбивается от дерева, а не от края. */\nexport const jsonViewerToolbarClass = 'flex items-center gap-2 border-b border-[var(--gr-brd)] p-2'\n\nexport const jsonViewerSearchClass = 'min-w-0 flex-1'\n\n/** Строка узла моноширинная: значения выравниваются по разрядам, как в блоке кода. */\nexport const jsonViewerRowClass = 'relative flex min-w-0 items-center gap-1 font-[var(--gr-font-mono)]'\n\n/** Область узла не даёт значению растянуть строку шире панели. */\nexport const jsonViewerContentClass = 'min-w-0'\n\nexport const jsonViewerKeyClass = 'shrink-0 text-[var(--gr-json-viewer-key,var(--gr-primary-text))]'\n\nexport const jsonViewerPunctuationClass = 'shrink-0 text-[var(--gr-json-viewer-punctuation,var(--gr-fg))]'\n\n/**\n * Значение обрезается по ширине строки, а не переносится: перенос превратил бы\n * дерево в простыню и сломал бы оценку высоты строки у виртуализации.\n */\nexport const jsonViewerValueClass = 'min-w-0 truncate'\n\n/** Счётчик у свёрнутой ветки и служебные подписи — тише значения. */\nexport const jsonViewerMutedClass = 'shrink-0 text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]'\n\n/**\n * Кнопка копирования узла: появляется по наведению и по фокусу внутри строки.\n *\n * Стоит в потоке сразу за значением, а не прижата к правому краю строки:\n * прижать её не к чему — область узла у `GrTree` сжата по содержимому\n * (`flex: 0 1 auto`) собственным scoped-правилом, а утилитой снаружи оно не\n * перебивается: оба класса равной специфичности, и победителя выбирает порядок\n * правил в CSS. Цена потока — 4 px высоты строки, и она дешевле этой лотереи.\n */\nexport const jsonViewerCopyClass = 'ml-2 shrink-0 opacity-0 focus-visible:opacity-100 group-hover:opacity-100'\n\n/**\n * Зацепка варианта `group-hover` у кнопки копирования. В safelist не идёт: CSS\n * из неё не порождается — правило пишет сам вариант, а гейт справедливо считал\n * бы такую запись мёртвой.\n */\nexport const jsonViewerGroupClass = 'group'\n\n/**\n * Цвет значения по виду.\n *\n * Дефолты — ссылки на `-text`-роли темы, те же, что у `GrCodeBlock`: роли\n * переключаются вместе с темой, поэтому подсветка работает в обеих без своего\n * theme-слоя, а два компонента остаются согласованными через роль, а не через\n * общую константу — импорт чужой мапы притащил бы потребителю весь CSS донора.\n *\n * Число взято от `azure`, а не от `info`: `info` — синий в двух шагах от индиго\n * `primary`, и пара «ключ ↔ число» стояла бы в одной строке неразличимой.\n */\nexport const jsonValueClass: Record<GrJsonNodeKind, string> = {\n string: 'text-[var(--gr-json-viewer-string,var(--gr-success-text))]',\n number: 'text-[var(--gr-json-viewer-number,var(--gr-azure-text))]',\n boolean: 'text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]',\n null: 'text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]',\n object: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n array: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n unsupported: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n truncation: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n jsonValueClass,\n jsonViewerContentClass,\n jsonViewerCopyClass,\n jsonViewerKeyClass,\n jsonViewerMutedClass,\n jsonViewerPunctuationClass,\n jsonViewerRootClass,\n jsonViewerRowClass,\n jsonViewerSearchClass,\n jsonViewerToolbarClass,\n jsonViewerValueClass,\n} from './grJsonViewerStyles'\n\n// Классы из вычисляемой мапы (цвет по виду значения) UnoCSS сканом не находит —\n// только safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк,\n// который скан не видит.\nexport const grJsonViewerSafelist = [...new Set([\n ...splitClassTokens(jsonViewerRootClass),\n ...splitClassTokens(jsonViewerToolbarClass),\n ...splitClassTokens(jsonViewerSearchClass),\n ...splitClassTokens(jsonViewerRowClass),\n ...splitClassTokens(jsonViewerContentClass),\n ...splitClassTokens(jsonViewerKeyClass),\n ...splitClassTokens(jsonViewerPunctuationClass),\n ...splitClassTokens(jsonViewerValueClass),\n ...splitClassTokens(jsonViewerMutedClass),\n ...splitClassTokens(jsonViewerCopyClass),\n ...Object.values(jsonValueClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grJsonViewerSafelist } from './safelist'\n\nexport const grJsonViewerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrJsonViewer',\n dependencies: ['GrTree', 'GrInput', 'GrButton'],\n safelist: grJsonViewerSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;AAcA,IAAa,sBAAsB;;AAGnC,IAAa,yBAAyB;AAEtC,IAAa,wBAAwB;;AAGrC,IAAa,qBAAqB;;AAGlC,IAAa,yBAAyB;AAEtC,IAAa,qBAAqB;AAElC,IAAa,6BAA6B;;;;;AAM1C,IAAa,uBAAuB;;AAGpC,IAAa,uBAAuB;;;;;;;;;;AAWpC,IAAa,sBAAsB;;;;;;AAOnC,IAAa,uBAAuB;;;;;;;;;;;;AAapC,IAAa,iBAAiD;CAC5D,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACP,aAAa;CACb,YAAY;AACd;;;AC3DA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;AC3BF,IAAa,qBAAqB,wBAAwB,OAAO,KAAK,KAAK;CACzE,MAAM;CACN,cAAc;EAAC;EAAU;EAAW;CAAU;CAC9C,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-MmPym-Z72.js","names":[],"sources":["../../src/components/GrNumberInput/grNumberInputStyles.ts","../../src/components/GrNumberInput/safelist.ts","../../src/components/GrNumberInput/config.ts"],"sourcesContent":["import type { GrComponentSize, GrControlState } from '../shared/sizes'\n\nexport type GrNumberInputState = GrControlState\nexport type GrNumberInputSize = GrComponentSize\nexport type GrNumberInputControlsDirection = 'vertical' | 'horizontal'\nexport type GrNumberInputTextAlign = 'left' | 'center' | 'right'\n\n// Backward-compatible type aliases.\nexport type NumberInputSize = GrNumberInputSize\nexport type NumberInputControlsDirection = GrNumberInputControlsDirection\n\nexport const sizeClassBySize: Record<GrNumberInputSize, string> = {\n xs: 'h-7 px-2.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'h-8 px-3 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'h-10 px-3 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'h-11 px-4 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport const textAlignClassByAlign: Record<GrNumberInputTextAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\nexport const borderClassByState: Record<GrNumberInputState, string> = {\n default: 'border-[var(--gr-brd)]',\n success: 'border-[var(--gr-success)] focus-within:ring-[var(--gr-success)]',\n warning: 'border-[var(--gr-warning)] focus-within:ring-[var(--gr-warning)]',\n danger: 'border-[var(--gr-danger)] focus-within:ring-[var(--gr-danger)]',\n}\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * `state=\"danger\"` — это подсветка по решению разработчика, `invalid` — вердикт\n * валидации, и тема вправе развести их по цвету.\n */\nexport const invalidBorderClass = 'border-[var(--gr-invalid-brd)] focus-within:ring-[var(--gr-invalid-ring)]'\n\n/**\n * Недоступное поле гасится токенами, а не `opacity`: прозрачность разбавляет\n * выверенные на AA токены текста и роняет контраст подписи.\n */\nexport const disabledShellClass = 'bg-[var(--gr-disabled-bg)] text-[var(--gr-disabled-fg)] cursor-not-allowed'\n\nconst stepperBaseClass = 'inline-flex items-center justify-center text-[var(--gr-muted-fg)] hover:bg-[var(--gr-muted)] active:bg-[var(--gr-muted)] disabled:cursor-not-allowed disabled:text-[var(--gr-disabled-fg)] disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\n/** Компактная кнопка вертикального стека ± . */\nexport const stepperCompactClass = `h-4 w-7 rounded-[var(--gr-radius-sm)] ${stepperBaseClass}`\n\n/** Кнопка бокового стека ± — занимает всю высоту поля. */\nexport const stepperWideClass = `h-full w-full ${stepperBaseClass}`\n\nexport const clearButtonClass = 'absolute top-1/2 -translate-y-1/2 inline-flex h-5 w-5 items-center justify-center rounded-[var(--gr-radius-full)] text-[var(--gr-muted-fg)] hover:bg-[var(--gr-muted)] hover:text-[var(--gr-fg)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport function grNumberInputShellClass(options: { disabled: boolean, state: GrNumberInputState, invalid: boolean }): string {\n return [\n options.disabled ? disabledShellClass : '',\n options.invalid ? invalidBorderClass : borderClassByState[options.state],\n ]\n .filter(Boolean)\n .join(' ')\n}\n\nexport function grNumberInputInputClass(options: { size: GrNumberInputSize, textAlign: GrNumberInputTextAlign }): string {\n return [\n sizeClassBySize[options.size],\n textAlignClassByAlign[options.textAlign],\n ].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n borderClassByState,\n clearButtonClass,\n disabledShellClass,\n invalidBorderClass,\n stepperCompactClass,\n stepperWideClass,\n sizeClassBySize,\n textAlignClassByAlign,\n} from './grNumberInputStyles'\n\n// В safelist кладём только динамические токены, выбираемые по ключам в рантайме\n// (`size`/`textAlign`/`state`/`disabled`). Литералы shell/input/controls прописаны\n// статически в шаблоне — UnoCSS находит их сканом.\nexport const grNumberInputSafelist = [...new Set([\n ...Object.values(sizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(textAlignClassByAlign).flatMap(splitClassTokens),\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n ...splitClassTokens(disabledShellClass),\n ...splitClassTokens(stepperCompactClass),\n ...splitClassTokens(stepperWideClass),\n ...splitClassTokens(clearButtonClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grNumberInputSafelist } from './safelist'\n\nexport const grNumberInputConfig = defineGranularComponent(import.meta.url, {\n name: 'GrNumberInput',\n dependencies: ['GrIcon'],\n safelist: grNumberInputSafelist,\n})\n"],"mappings":";;;AAWA,IAAa,kBAAqD;CAChE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,wBAAgE;CAC3E,MAAM;CACN,QAAQ;CACR,OAAO;AACT;AAEA,IAAa,qBAAyD;CACpE,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;AACV;;;;;;AAOA,IAAa,qBAAqB;;;;;AAMlC,IAAa,qBAAqB;AAElC,IAAM,mBAAmB;;AAGzB,IAAa,sBAAsB,yCAAyC;;AAG5E,IAAa,mBAAmB,iBAAiB;AAEjD,IAAa,mBAAmB;AAEhC,SAAgB,wBAAwB,SAAqF;CAC3H,OAAO,CACL,QAAQ,WAAW,qBAAqB,IACxC,QAAQ,UAAU,qBAAqB,mBAAmB,QAAQ,MACpE,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;AAEA,SAAgB,wBAAwB,SAAiF;CACvH,OAAO,CACL,gBAAgB,QAAQ,OACxB,sBAAsB,QAAQ,UAChC,CAAC,CAAC,KAAK,GAAG;AACZ;;;ACrDA,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;CAChE,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,gBAAgB;AACtC,CAAC,CAAC;;;ACpBF,IAAa,sBAAsB,wBAAwB,OAAO,KAAK,KAAK;CAC1E,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlayStack-0CZS99Da.js","names":[],"sources":["../../src/composables/internal/overlayStack.ts"],"sourcesContent":["/**\n * Единый стек слоёв оверлеев: модалки, drawer'ы, просмотрщик, панели селектов,\n * дропдауны, подсказки — всё, что открывается поверх страницы.\n *\n * Список один, и порядок регистрации совпадает с порядком открытия, но из него\n * выводятся **две разные вершины**:\n *\n * - **Esc** → последний слой любого рода. Дропдаун, открытый внутри модалки,\n * обязан закрыться первым — пользователь видит верхним именно его.\n * - **`inert`** → ставится на модальные слои ниже последнего **модального**.\n * Немодальный слой сверху модалку не понижает: иначе окно ушло бы в `inert`\n * вместе со своим же открытым дропдауном и перестало отвечать.\n * - **высота** → `openModalCount()` поднимает floating-панель над окном, из\n * которого её открыли: телепортированная панель лежит рядом с корнем окна,\n * и статический `z-index` дропдауна оставлял её под ним.\n *\n * Вести эти две вершины в двух независимых реестрах нельзя: реестры описывают\n * один и тот же порядок и расходятся молча — достаточно оверлея, который\n * зарегистрировался в одном и забыл про другой.\n *\n * Ловушку фокуса стек не реализует сам, но питает её (`useFocusTrap`): он\n * видит слои из **разных деревьев рендера** (диалоги `useDialogService`\n * монтируются отдельным `render()` в `body`) и знает их корни.\n */\n\nimport { isComposingEvent } from '../../internal/keyboard'\n\nexport interface OverlayLayer {\n /** Уникальный id зарегистрированного слоя. */\n id: number\n /**\n * Модальный слой: блокирует страницу и участвует в вычислении `inert`.\n * Немодальные (поповеры, меню, подсказки) — только в очереди Esc.\n */\n modal: boolean\n /** Закрывать ли слой по Esc (реактивный геттер: `closeOnEsc` и подобные). */\n shouldClose: () => boolean\n /** Закрыть слой. */\n close: () => void\n /** Уведомление «этот модальный слой сейчас верхний». Только для `modal`. */\n setTopmost?: (isTopmost: boolean) => void\n /**\n * Позиция слоя среди модальных, от нуля. Только для `modal`.\n *\n * От неё считается высота: у всех модальных слоёв один токен\n * (`--gr-z-modal`), и без этой прибавки порядок отрисовки решал бы порядок\n * узлов в портале, а он задаётся **созданием** телепорта, а не открытием\n * слоя. Диалог, объявленный в шаблоне статически, вставал бы под окном,\n * открытым позже, — и получал бы `inert` от стека, оставаясь видимым.\n */\n setDepth?: (depth: number) => void\n /**\n * Корень слоя. Ловушка фокуса нижнего слоя обязана считать его своим:\n * панель селекта, открытого внутри модалки, телепортирована в `body` и лежит\n * вне DOM-поддерева окна, но для пользователя это тот же слой.\n */\n root?: () => HTMLElement | null\n}\n\nconst stack: OverlayLayer[] = []\nlet listening = false\nlet nextId = 1\n\n/**\n * Пересчитывает состояние модальных слоёв: кто верхний и на какой высоте.\n *\n * Обе величины выводятся из одного порядка, поэтому и считаются в одном месте:\n * разъедься они — «верхний» для `inert` и «верхний» для отрисовки перестали бы\n * совпадать, а это ровно тот дефект, из-за которого высота и заведена.\n */\nfunction syncModalLayers(): void {\n const modals = stack.filter(layer => layer.modal)\n const top = modals[modals.length - 1]\n\n modals.forEach((layer, index) => {\n layer.setTopmost?.(layer === top)\n layer.setDepth?.(index)\n })\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape')\n return\n // Esc во время IME-композиции отменяет её, а не закрывает слой.\n if (isComposingEvent(event))\n return\n if (stack.length === 0)\n return\n\n const top = stack[stack.length - 1]\n\n // Гасим всегда, даже если верхний слой не закрывается по Esc: иначе нажатие\n // «провалится» на слой ниже и закроет не то, что видит пользователь.\n event.preventDefault()\n event.stopPropagation()\n if (typeof event.stopImmediatePropagation === 'function')\n event.stopImmediatePropagation()\n\n if (top.shouldClose())\n top.close()\n}\n\nfunction startListening(): void {\n if (listening)\n return\n if (typeof window === 'undefined')\n return\n // Capture-фаза опережает любые локальные обработчики: Esc обязан достаться\n // верхнему слою, а не тому, кто первым подписался.\n window.addEventListener('keydown', handleKeydown, true)\n listening = true\n}\n\nfunction stopListening(): void {\n if (!listening)\n return\n if (typeof window === 'undefined')\n return\n window.removeEventListener('keydown', handleKeydown, true)\n listening = false\n}\n\n/** Регистрирует слой как верхний и возвращает его id. */\nexport function pushOverlayLayer(layer: Omit<OverlayLayer, 'id'>): number {\n const id = nextId++\n stack.push({ ...layer, id })\n startListening()\n syncModalLayers()\n return id\n}\n\n/** Снимает слой со стека (при закрытии или размонтировании). */\nexport function removeOverlayLayer(id: number): void {\n const index = stack.findIndex(item => item.id === id)\n if (index >= 0)\n stack.splice(index, 1)\n if (stack.length === 0)\n stopListening()\n syncModalLayers()\n}\n\n/**\n * Корни слоёв, открытых **поверх** данного.\n *\n * Ими ловушка фокуса дополняет свой контейнер: всё, что открыто изнутри слоя\n * (панель селекта, меню, подсказка), лежит в `body` отдельным поддеревом, и\n * без этого списка ловушка утаскивала бы из него фокус обратно в окно.\n */\nexport function layerRootsAbove(id: number): HTMLElement[] {\n const index = stack.findIndex(layer => layer.id === id)\n if (index < 0)\n return []\n\n return stack\n .slice(index + 1)\n .map(layer => layer.root?.() ?? null)\n .filter((root): root is HTMLElement => root !== null)\n}\n\n/** Корни всех зарегистрированных слоёв. */\nexport function allLayerRoots(): HTMLElement[] {\n return stack\n .map(layer => layer.root?.() ?? null)\n .filter((root): root is HTMLElement => root !== null)\n}\n\n/** Сколько слоёв открыто. Для тестов и диагностики. */\nexport function overlayStackSize(): number {\n return stack.length\n}\n\n/**\n * Сколько **модальных** слоёв открыто прямо сейчас.\n *\n * Читает `useFloating`, когда считает высоту панели: панель телепортирована в\n * общий портал и лежит рядом с корнем окна, а не внутри него, поэтому свой\n * стек-контекст её не спасает — высоту приходится брать из порядка слоёв.\n */\nexport function openModalCount(): number {\n return stack.reduce((count, layer) => count + (layer.modal ? 1 : 0), 0)\n}\n\n/**\n * Высота слоя, лежащего внутри открытого окна.\n *\n * Панель телепортирована в общий портал и становится **соседом** корня окна, а\n * не его потомком: собственный stacking-контекст окна её не накрывает, и\n * статический `--gr-z-dropdown` (1000) оставлял её под окном (1100). Слагаемое —\n * число модальных слоёв, поэтому панель встаёт над самым верхним из них, а\n * полноэкранная загрузка (1150) и тосты (1200) остаются сверху.\n *\n * Обратный случай — «поповер снаружи не должен перекрывать окно» — не страдает:\n * пока окно открыто, страница под ним в `inert`, и открыть там поповер нечем.\n */\nexport function floatingLayerZIndex(zIndexVar: string): string {\n const modals = openModalCount()\n\n return modals > 0 ? `calc(var(--gr-z-modal) + ${modals})` : `var(${zIndexVar})`\n}\n\n/**\n * Высота самого модального слоя: базовый токен плюс его позиция в стеке.\n *\n * Нулевая глубина оставляет чистый `var(...)` — у единственного окна на экране\n * в стилях не появляется лишней арифметики.\n */\nexport function modalLayerZIndex(depth: number, zIndexVar = '--gr-z-modal'): string {\n return depth > 0 ? `calc(var(${zIndexVar}) + ${depth})` : `var(${zIndexVar})`\n}\n\n/** Тестовая/служебная очистка стека. */\nexport function resetOverlayStack(): void {\n stack.splice(0, stack.length)\n stopListening()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,IAAM,QAAwB,CAAC;AAC/B,IAAI,YAAY;AAChB,IAAI,SAAS;;;;;;;;AASb,SAAS,kBAAwB;CAC/B,MAAM,SAAS,MAAM,QAAO,UAAS,MAAM,KAAK;CAChD,MAAM,MAAM,OAAO,OAAO,SAAS;CAEnC,OAAO,SAAS,OAAO,UAAU;EAC/B,MAAM,aAAa,UAAU,GAAG;EAChC,MAAM,WAAW,KAAK;CACxB,CAAC;AACH;AAEA,SAAS,cAAc,OAA4B;CACjD,IAAI,MAAM,QAAQ,UAChB;CAEF,IAAI,iBAAiB,KAAK,GACxB;CACF,IAAI,MAAM,WAAW,GACnB;CAEF,MAAM,MAAM,MAAM,MAAM,SAAS;CAIjC,MAAM,eAAe;CACrB,MAAM,gBAAgB;CACtB,IAAI,OAAO,MAAM,6BAA6B,YAC5C,MAAM,yBAAyB;CAEjC,IAAI,IAAI,YAAY,GAClB,IAAI,MAAM;AACd;AAEA,SAAS,iBAAuB;CAC9B,IAAI,WACF;CACF,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,iBAAiB,WAAW,eAAe,IAAI;CACtD,YAAY;AACd;AAEA,SAAS,gBAAsB;CAC7B,IAAI,CAAC,WACH;CACF,IAAI,OAAO,WAAW,aACpB;CACF,OAAO,oBAAoB,WAAW,eAAe,IAAI;CACzD,YAAY;AACd;;AAGA,SAAgB,iBAAiB,OAAyC;CACxE,MAAM,KAAK;CACX,MAAM,KAAK;EAAE,GAAG;EAAO;CAAG,CAAC;CAC3B,eAAe;CACf,gBAAgB;CAChB,OAAO;AACT;;AAGA,SAAgB,mBAAmB,IAAkB;CACnD,MAAM,QAAQ,MAAM,WAAU,SAAQ,KAAK,OAAO,EAAE;CACpD,IAAI,SAAS,GACX,MAAM,OAAO,OAAO,CAAC;CACvB,IAAI,MAAM,WAAW,GACnB,cAAc;CAChB,gBAAgB;AAClB;;;;;;;;AASA,SAAgB,gBAAgB,IAA2B;CACzD,MAAM,QAAQ,MAAM,WAAU,UAAS,MAAM,OAAO,EAAE;CACtD,IAAI,QAAQ,GACV,OAAO,CAAC;CAEV,OAAO,MACJ,MAAM,QAAQ,CAAC,CAAC,CAChB,KAAI,UAAS,MAAM,OAAO,KAAK,IAAI,CAAC,CACpC,QAAQ,SAA8B,SAAS,IAAI;AACxD;;;;;;;;AAqBA,SAAgB,iBAAyB;CACvC,OAAO,MAAM,QAAQ,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,IAAI,CAAC;AACxE;;;;;;;;;;;;;AAcA,SAAgB,oBAAoB,WAA2B;CAC7D,MAAM,SAAS,eAAe;CAE9B,OAAO,SAAS,IAAI,4BAA4B,OAAO,KAAK,OAAO,UAAU;AAC/E;;;;;;;AAQA,SAAgB,iBAAiB,OAAe,YAAY,gBAAwB;CAClF,OAAO,QAAQ,IAAI,YAAY,UAAU,MAAM,MAAM,KAAK,OAAO,UAAU;AAC7E"}