@feugene/granularity 0.11.0 → 0.13.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 (527) hide show
  1. package/dist/GrBadge.css +1 -1
  2. package/dist/GrFormFile.css +1 -1
  3. package/dist/GrToaster.css +1 -1
  4. package/dist/GrTree.css +1 -1
  5. package/dist/chunks/{config-ClhKPJvg.js → config-23WtUiAL.js} +1 -1
  6. package/dist/chunks/config-23WtUiAL.js.map +1 -0
  7. package/dist/chunks/config-8Pcutu1j.js.map +1 -0
  8. package/dist/chunks/{config-1uSYl98Y.js → config-B0i5r8kH.js} +1 -1
  9. package/dist/chunks/config-B0i5r8kH.js.map +1 -0
  10. package/dist/chunks/{config-BOlr7qw7.js → config-B5Rknzkd.js} +33 -39
  11. package/dist/chunks/config-B5Rknzkd.js.map +1 -0
  12. package/dist/chunks/config-B7W9VlZ7.js +5 -0
  13. package/dist/chunks/config-B7W9VlZ7.js.map +1 -0
  14. package/dist/chunks/config-BDSHekVC.js +84 -0
  15. package/dist/chunks/config-BDSHekVC.js.map +1 -0
  16. package/dist/chunks/config-BLHqZhy-.js.map +1 -0
  17. package/dist/chunks/{config-eYLZYOUS2.js → config-BMKNHFMD2.js} +15 -15
  18. package/dist/chunks/config-BMKNHFMD2.js.map +1 -0
  19. package/dist/chunks/config-BUHuGBik2.js.map +1 -0
  20. package/dist/chunks/config-BWiPnygb.js +5 -0
  21. package/dist/chunks/config-BWiPnygb.js.map +1 -0
  22. package/dist/chunks/config-BX1JTrkV.js.map +1 -0
  23. package/dist/chunks/config-BZFUM3Ky.js +75 -0
  24. package/dist/chunks/config-BZFUM3Ky.js.map +1 -0
  25. package/dist/chunks/{config-DUcu1D68.js → config-BmNT0Fmx.js} +2 -2
  26. package/dist/chunks/config-BmNT0Fmx.js.map +1 -0
  27. package/dist/chunks/{config-C49QUoJL.js → config-BvVq2gbd.js} +1 -1
  28. package/dist/chunks/{config-C49QUoJL.js.map → config-BvVq2gbd.js.map} +1 -1
  29. package/dist/chunks/{config-CrG1XiE7.js → config-C4hJxXDa.js} +5 -5
  30. package/dist/chunks/config-C4hJxXDa.js.map +1 -0
  31. package/dist/chunks/config-CB4RVt9M.js +66 -0
  32. package/dist/chunks/config-CB4RVt9M.js.map +1 -0
  33. package/dist/chunks/config-COE_vZ-l.js +52 -0
  34. package/dist/chunks/config-COE_vZ-l.js.map +1 -0
  35. package/dist/chunks/{config-CziwTDDL.js → config-CPdmr7tC.js} +1 -1
  36. package/dist/chunks/{config-CziwTDDL.js.map → config-CPdmr7tC.js.map} +1 -1
  37. package/dist/chunks/{config-BIRO0vDJ2.js → config-DPDFYzIa.js} +2 -2
  38. package/dist/chunks/config-DPDFYzIa.js.map +1 -0
  39. package/dist/chunks/{config-DnvPqu4g.js → config-DRKXJ9PW2.js} +1 -1
  40. package/dist/chunks/config-DRKXJ9PW2.js.map +1 -0
  41. package/dist/chunks/config-DToHb81g.js +45 -0
  42. package/dist/chunks/config-DToHb81g.js.map +1 -0
  43. package/dist/chunks/{config-jBp9wVv-.js → config-D_myOZbA.js} +1 -1
  44. package/dist/chunks/{config-jBp9wVv-.js.map → config-D_myOZbA.js.map} +1 -1
  45. package/dist/chunks/{config-D_R56_gT.js → config-Dg_6FTvJ.js} +1 -1
  46. package/dist/chunks/config-Dg_6FTvJ.js.map +1 -0
  47. package/dist/chunks/config-Dlm49Jp5.js +5 -0
  48. package/dist/chunks/config-Dlm49Jp5.js.map +1 -0
  49. package/dist/chunks/config-DpqOnJiz.js.map +1 -0
  50. package/dist/chunks/config-Dqy0rPPO2.js.map +1 -0
  51. package/dist/chunks/config-Droqn55j.js +8 -0
  52. package/dist/chunks/config-Droqn55j.js.map +1 -0
  53. package/dist/chunks/{config-C4snOIXg.js → config-KXuionN3.js} +1 -1
  54. package/dist/chunks/{config-C4snOIXg.js.map → config-KXuionN3.js.map} +1 -1
  55. package/dist/chunks/config-LGrZIdaZ.js.map +1 -0
  56. package/dist/chunks/{config-DezDih8_.js → config-LqDC_rvp.js} +2 -2
  57. package/dist/chunks/config-LqDC_rvp.js.map +1 -0
  58. package/dist/chunks/config-QaIc_gRa2.js.map +1 -0
  59. package/dist/chunks/config-U4m9PSql2.js.map +1 -0
  60. package/dist/chunks/{config-B7IIWGt_2.js → config-XmTv4pnI.js} +2 -2
  61. package/dist/chunks/config-XmTv4pnI.js.map +1 -0
  62. package/dist/chunks/config-eXB87DOi.js +9 -0
  63. package/dist/chunks/config-eXB87DOi.js.map +1 -0
  64. package/dist/chunks/{config-C7NpDrfO.js → config-gZWR75Bh2.js} +1 -1
  65. package/dist/chunks/config-gZWR75Bh2.js.map +1 -0
  66. package/dist/chunks/config-ipvU0lzP.js.map +1 -0
  67. package/dist/chunks/config-xR4XVmcy2.js.map +1 -0
  68. package/dist/chunks/context-Bfrgsluh.js +9 -0
  69. package/dist/chunks/context-Bfrgsluh.js.map +1 -0
  70. package/dist/chunks/context-DdNIxa1w.js +9 -0
  71. package/dist/chunks/context-DdNIxa1w.js.map +1 -0
  72. package/dist/chunks/context-DfWYCBB-.js +129 -0
  73. package/dist/chunks/context-DfWYCBB-.js.map +1 -0
  74. package/dist/chunks/{en-BdtiS2d3.js → en-Cr6EkG8c.js} +52 -4
  75. package/dist/chunks/en-Cr6EkG8c.js.map +1 -0
  76. package/dist/chunks/{es-DBhctWg-.js → es-DuYb1Qju.js} +3 -3
  77. package/dist/chunks/{es-DBhctWg-.js.map → es-DuYb1Qju.js.map} +1 -1
  78. package/dist/chunks/{es-BGRMZbe9.js → es-i08e9Sdo.js} +52 -4
  79. package/dist/chunks/es-i08e9Sdo.js.map +1 -0
  80. package/dist/chunks/{grBadgeStyles-DrycBuKT.js → grBadgeStyles-D3dFjr_N.js} +12 -12
  81. package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +1 -0
  82. package/dist/chunks/{grButtonStyles-C7Yga_Q1.js → grButtonStyles-DRBgDmOp.js} +28 -28
  83. package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +1 -0
  84. package/dist/chunks/{grDropdownStyles-B_-DKytw.js → grDropdownStyles-HBPkghVr.js} +2 -2
  85. package/dist/chunks/{grDropdownStyles-B_-DKytw.js.map → grDropdownStyles-HBPkghVr.js.map} +1 -1
  86. package/dist/chunks/grModalEscStack-BXk-9mv7.js +43 -0
  87. package/dist/chunks/grModalEscStack-BXk-9mv7.js.map +1 -0
  88. package/dist/chunks/{grModalStyles-DWd3i05Q.js → grModalStyles-D8-shx9A.js} +1 -1
  89. package/dist/chunks/grModalStyles-D8-shx9A.js.map +1 -0
  90. package/dist/chunks/{grSelectStyles-CLK5hRd3.js → grSelectStyles-CwMUQrBZ.js} +12 -12
  91. package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +1 -0
  92. package/dist/chunks/{grStyle-Blc9otAx.js → grStyle-CdvxTXPH.js} +2 -2
  93. package/dist/chunks/grStyle-CdvxTXPH.js.map +1 -0
  94. package/dist/chunks/{granularityI18n-DoV7Ca2m.js → granularityI18n-SH0I--GW.js} +1 -1
  95. package/dist/chunks/{granularityI18n-DoV7Ca2m.js.map → granularityI18n-SH0I--GW.js.map} +1 -1
  96. package/dist/chunks/{ru-BFCnOiML.js → ru-B5XOOYZt.js} +52 -4
  97. package/dist/chunks/ru-B5XOOYZt.js.map +1 -0
  98. package/dist/chunks/{safelist-Do2RtzLB.js → safelist-BvO8HPnE.js} +1 -1
  99. package/dist/chunks/{safelist-Do2RtzLB.js.map → safelist-BvO8HPnE.js.map} +1 -1
  100. package/dist/chunks/shared-D-v9lit0.js +188 -0
  101. package/dist/chunks/shared-D-v9lit0.js.map +1 -0
  102. package/dist/chunks/{transition-TLFw4KBn.js → useScrollLock-K7kaP2Ud.js} +52 -1
  103. package/dist/chunks/useScrollLock-K7kaP2Ud.js.map +1 -0
  104. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +251 -0
  105. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +1 -0
  106. package/dist/components/GrAlert/index.js +2 -2
  107. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +499 -0
  108. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +1 -0
  109. package/dist/components/GrAutocomplete/index.js +3 -0
  110. package/dist/components/GrAvatar/chunks/{GrAvatar-96CpTCq5.js → GrAvatar-CTOUVBF7.js} +1 -1
  111. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +1 -0
  112. package/dist/components/GrAvatar/index.js +1 -1
  113. package/dist/components/GrBadge/chunks/{GrBadge-B77XlaqE.js → GrBadge-D1jefy4S.js} +12 -8
  114. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +1 -0
  115. package/dist/components/GrBadge/index.js +2 -2
  116. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CcktMOdg.js → GrBadgeWrap-DWDxHdiQ.js} +1 -1
  117. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +1 -0
  118. package/dist/components/GrBadgeWrap/index.js +1 -1
  119. package/dist/components/GrBottomNav/chunks/{GrBottomNav-usuMgG8_.js → GrBottomNav-vSE4LXmk.js} +2 -2
  120. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +1 -0
  121. package/dist/components/GrBottomNav/index.js +1 -1
  122. package/dist/components/GrButton/chunks/{GrButton-BlffdeJr.js → GrButton-DCi4CUpo.js} +18 -14
  123. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +1 -0
  124. package/dist/components/GrButton/index.js +4 -4
  125. package/dist/components/GrCard/chunks/{GrCard-DUNMkuHW.js → GrCard-CxCjyHMb.js} +1 -1
  126. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +1 -0
  127. package/dist/components/GrCard/index.js +1 -1
  128. package/dist/components/GrCheckbox/chunks/{GrCheckbox-DJhzZZdO.js → GrCheckbox-BbIDRXtl.js} +5 -5
  129. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +1 -0
  130. package/dist/components/GrCheckbox/index.js +1 -1
  131. package/dist/components/GrCollapse/chunks/{GrCollapse-CPPLh_xU.js → GrCollapse-DApXztn8.js} +6 -6
  132. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +1 -0
  133. package/dist/components/GrCollapse/index.js +2 -2
  134. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +410 -0
  135. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +1 -0
  136. package/dist/components/GrCommandPalette/index.js +3 -0
  137. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +57 -0
  138. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +1 -0
  139. package/dist/components/GrConfigProvider/index.js +4 -0
  140. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-BWYKCsHd.js → GrConfirmDialog-e4120mWw.js} +5 -5
  141. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +1 -0
  142. package/dist/components/GrConfirmDialog/index.js +1 -1
  143. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js +307 -0
  144. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +1 -0
  145. package/dist/components/GrDataTable/index.js +2 -2
  146. package/dist/components/GrDialog/chunks/{GrDialog-5DAS-1Lb.js → GrDialog-BPMvDHOz.js} +6 -6
  147. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +1 -0
  148. package/dist/components/GrDialog/index.js +1 -1
  149. package/dist/components/GrDialogService/chunks/{GrDialogService-DY_fmaMu.js → GrDialogService-CYXCTGm3.js} +36 -11
  150. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +1 -0
  151. package/dist/components/GrDialogService/index.js +2 -2
  152. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js +54 -0
  153. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +1 -0
  154. package/dist/components/GrDivider/index.js +3 -0
  155. package/dist/components/GrDrawer/chunks/{GrDrawer-D1kzsjXN.js → GrDrawer-KevdZ5BB.js} +41 -17
  156. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +1 -0
  157. package/dist/components/GrDrawer/index.js +2 -2
  158. package/dist/components/GrDropdown/chunks/{GrDropdown-BXb5Cxxf.js → GrDropdown-BKoy8hm-.js} +91 -5
  159. package/dist/components/GrDropdown/chunks/GrDropdown-BKoy8hm-.js.map +1 -0
  160. package/dist/components/GrDropdown/index.js +2 -2
  161. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-DFEJLPcV.js → GrDropdownMenu-zCatXzmt.js} +11 -11
  162. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +1 -0
  163. package/dist/components/GrDropdownMenu/index.js +1 -1
  164. package/dist/components/GrEmptyState/chunks/{GrEmptyState-CA3BiTV7.js → GrEmptyState-CNb0BzjG.js} +3 -3
  165. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +1 -0
  166. package/dist/components/GrEmptyState/index.js +1 -1
  167. package/dist/components/GrFileUpload/chunks/{GrFileUpload-DvWPpiJS.js → GrFileUpload-CnLgUGDF.js} +12 -12
  168. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +1 -0
  169. package/dist/components/GrFileUpload/index.js +1 -1
  170. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +234 -0
  171. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +1 -0
  172. package/dist/components/GrForm/index.js +4 -0
  173. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js +100 -0
  174. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +1 -0
  175. package/dist/components/GrFormField/index.js +3 -2
  176. package/dist/components/GrFormFile/chunks/{GrFormFile-CXcqqdvV.js → GrFormFile-CqacSbUl.js} +9 -9
  177. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +1 -0
  178. package/dist/components/GrFormFile/index.js +1 -1
  179. package/dist/components/GrFormSection/chunks/{GrFormSection-Ce21jcgo.js → GrFormSection-C3w9DQJf.js} +1 -1
  180. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +1 -0
  181. package/dist/components/GrFormSection/index.js +1 -1
  182. package/dist/components/GrImageViewer/chunks/{GrImageViewer-OCUIrNh2.js → GrImageViewer-DDLJkvIU.js} +312 -223
  183. package/dist/components/GrImageViewer/chunks/GrImageViewer-DDLJkvIU.js.map +1 -0
  184. package/dist/components/GrImageViewer/index.js +1 -1
  185. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js +337 -0
  186. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +1 -0
  187. package/dist/components/GrInput/index.js +2 -2
  188. package/dist/components/GrInputTag/chunks/{GrInputTag-zMgFqp2g.js → GrInputTag-BMk9jm42.js} +6 -6
  189. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +1 -0
  190. package/dist/components/GrInputTag/index.js +2 -2
  191. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js +22 -0
  192. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +1 -0
  193. package/dist/components/GrKbd/index.js +3 -0
  194. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js → GrLink-BP0YrnL9.js} +1 -1
  195. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js.map → GrLink-BP0YrnL9.js.map} +1 -1
  196. package/dist/components/GrLink/index.js +2 -2
  197. package/dist/components/GrList/chunks/{GrList-Dx772Ns4.js → GrList-5RA-tZzE.js} +3 -3
  198. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +1 -0
  199. package/dist/components/GrList/index.js +1 -1
  200. package/dist/components/GrLoading/chunks/{GrLoading--X_7rdbb.js → GrLoading-fRDtVfi7.js} +3 -3
  201. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +1 -0
  202. package/dist/components/GrLoading/index.js +2 -2
  203. package/dist/components/GrModal/chunks/{GrModal-BkjW9jZS.js → GrModal-BTu1-5eY.js} +4 -57
  204. package/dist/components/GrModal/chunks/GrModal-BTu1-5eY.js.map +1 -0
  205. package/dist/components/GrModal/index.js +3 -3
  206. package/dist/components/GrNavbar/chunks/{GrNavbar-DW3MiIIf.js → GrNavbar-keKT_mIM.js} +3 -3
  207. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +1 -0
  208. package/dist/components/GrNavbar/index.js +1 -1
  209. package/dist/components/GrNumberInput/chunks/{GrNumberInput-CldPIWQx.js → GrNumberInput-l9ZOHG9D.js} +112 -28
  210. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +1 -0
  211. package/dist/components/GrNumberInput/index.js +2 -2
  212. package/dist/components/GrPagination/chunks/{GrPagination-Bu9wv6it.js → GrPagination-C5Y69CuK.js} +59 -16
  213. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +1 -0
  214. package/dist/components/GrPagination/index.js +1 -1
  215. package/dist/components/GrProgressBar/chunks/{GrProgressBar-CC3z-Zqp.js → GrProgressBar-Dqg4Fj9S.js} +2 -2
  216. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +1 -0
  217. package/dist/components/GrProgressBar/index.js +2 -2
  218. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-TmWXbpEP.js → GrPromptDialog-DNUjRVB9.js} +7 -7
  219. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +1 -0
  220. package/dist/components/GrPromptDialog/index.js +2 -2
  221. package/dist/components/GrRadio/chunks/{GrRadio-CPTixXaY.js → GrRadio-DlhxPGqf.js} +5 -7
  222. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +1 -0
  223. package/dist/components/GrRadio/index.js +2 -2
  224. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-vKZCbkCp.js → GrRadioGroup-BXt9iw4q.js} +7 -5
  225. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +1 -0
  226. package/dist/components/GrRadioGroup/index.js +2 -2
  227. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +241 -0
  228. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +1 -0
  229. package/dist/components/GrRating/index.js +3 -0
  230. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js → GrResponseErrorBanner-2CvM7Z08.js} +2 -2
  231. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js.map → GrResponseErrorBanner-2CvM7Z08.js.map} +1 -1
  232. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js → GrResponseErrorBanner-C8NGx8pE.js} +3 -3
  233. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js.map → GrResponseErrorBanner-C8NGx8pE.js.map} +1 -1
  234. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  235. package/dist/components/GrSegmented/chunks/{GrSegmented-C1y0UXpQ.js → GrSegmented-CTd3n4PA.js} +14 -11
  236. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +1 -0
  237. package/dist/components/GrSegmented/index.js +2 -2
  238. package/dist/components/GrSelect/chunks/{GrSelect-RShK21lK.js → GrSelect-Dn3FgJ3Z.js} +293 -87
  239. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +1 -0
  240. package/dist/components/GrSelect/index.js +2 -2
  241. package/dist/components/GrSidebar/chunks/{GrSidebar-DkWozzwA.js → GrSidebar-cvnzBfj3.js} +7 -7
  242. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +1 -0
  243. package/dist/components/GrSidebar/index.js +1 -1
  244. package/dist/components/GrSkeleton/chunks/{GrSkeleton-DsN-_CDZ.js → GrSkeleton-BucA5F4J.js} +1 -1
  245. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +1 -0
  246. package/dist/components/GrSkeleton/index.js +2 -2
  247. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +286 -0
  248. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +1 -0
  249. package/dist/components/GrSlider/index.js +3 -0
  250. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +128 -0
  251. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +1 -0
  252. package/dist/components/GrStatistic/index.js +3 -0
  253. package/dist/components/GrSwitch/chunks/{GrSwitch-DAioyccZ.js → GrSwitch-CJdRvS0s.js} +16 -7
  254. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +1 -0
  255. package/dist/components/GrSwitch/index.js +2 -2
  256. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js +68 -0
  257. package/dist/components/GrTabPanels/chunks/GrTabPanels-DeEMgb_y.js.map +1 -0
  258. package/dist/components/GrTabPanels/index.js +3 -0
  259. package/dist/components/GrTable/chunks/{GrTable-Db3hRnKA.js → GrTable-sNvsA8wa.js} +24 -11
  260. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +1 -0
  261. package/dist/components/GrTable/index.js +2 -2
  262. package/dist/components/GrTabs/chunks/{GrTabs-Z-FDJUr_.js → GrTabs-BqTak0SR.js} +9 -4
  263. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +1 -0
  264. package/dist/components/GrTabs/index.js +2 -2
  265. package/dist/components/GrTextarea/chunks/{GrTextarea-D56YxhKq.js → GrTextarea-DIYBAPpP.js} +16 -6
  266. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +1 -0
  267. package/dist/components/GrTextarea/index.js +2 -2
  268. package/dist/components/GrToaster/chunks/{GrToaster-eI8YvnIo.js → GrToaster-BVHjIHcM.js} +52 -11
  269. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +1 -0
  270. package/dist/components/GrToaster/index.js +2 -2
  271. package/dist/components/GrTooltip/chunks/{GrTooltip-BeyZ8ssR.js → GrTooltip-BMKH2lIx.js} +3 -3
  272. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +1 -0
  273. package/dist/components/GrTooltip/index.js +1 -1
  274. package/dist/components/GrTree/chunks/{GrTree-D3ODe2dB.js → GrTree-_12ChXRQ.js} +108 -9
  275. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +1 -0
  276. package/dist/components/GrTree/index.js +2 -2
  277. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-B2xBKs5Q.js → GrTreeSelect-CdaLG7Xq.js} +10 -10
  278. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +1 -0
  279. package/dist/components/GrTreeSelect/index.js +2 -2
  280. package/dist/composables/useToast.js +3 -1
  281. package/dist/composables/useToast.js.map +1 -1
  282. package/dist/directives/loading.js +1 -1
  283. package/dist/granular-provider-node.js +6 -6
  284. package/dist/granular-provider-node.js.map +1 -1
  285. package/dist/granular-provider.js +1 -1
  286. package/dist/i18n/all.js +1 -1
  287. package/dist/i18n/index.js +1 -1
  288. package/dist/index.js +112 -87
  289. package/dist/index.js.map +1 -1
  290. package/dist/styles/base.css +30 -8
  291. package/dist/styles/index.css +6 -3
  292. package/dist/styles/preflight.css +8 -4
  293. package/dist/styles/themes/dark.css +52 -40
  294. package/dist/styles/themes/light.css +70 -45
  295. package/dist/styles/tokens.css +20 -20
  296. package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +26 -14
  297. package/dist/types/src/components/GrAlert/defaults.d.ts +17 -0
  298. package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +55 -0
  299. package/dist/types/src/components/GrAlert/index.d.ts +4 -1
  300. package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +153 -0
  301. package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -0
  302. package/dist/types/src/components/GrAutocomplete/defaults.d.ts +15 -0
  303. package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +27 -0
  304. package/dist/types/src/components/GrAutocomplete/index.d.ts +6 -0
  305. package/dist/types/src/components/GrAutocomplete/safelist.d.ts +1 -0
  306. package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +1 -1
  307. package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +7 -7
  308. package/dist/types/src/components/GrBadge/defaults.d.ts +15 -0
  309. package/dist/types/src/components/GrBadge/index.d.ts +1 -0
  310. package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +1 -1
  311. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +12 -12
  312. package/dist/types/src/components/GrButton/defaults.d.ts +25 -0
  313. package/dist/types/src/components/GrButton/grButtonStyles.d.ts +2 -2
  314. package/dist/types/src/components/GrButton/index.d.ts +1 -0
  315. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +4 -4
  316. package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +2 -2
  317. package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
  318. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +128 -0
  319. package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -0
  320. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +35 -0
  321. package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +20 -0
  322. package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +23 -0
  323. package/dist/types/src/components/GrCommandPalette/index.d.ts +6 -0
  324. package/dist/types/src/components/GrCommandPalette/safelist.d.ts +1 -0
  325. package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +59 -0
  326. package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -0
  327. package/dist/types/src/components/GrConfigProvider/context.d.ts +131 -0
  328. package/dist/types/src/components/GrConfigProvider/index.d.ts +5 -0
  329. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +2 -2
  330. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +48 -4
  331. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +1 -1
  332. package/dist/types/src/components/GrDialogService/store.d.ts +18 -0
  333. package/dist/types/src/components/GrDivider/GrDivider.vue.d.ts +58 -0
  334. package/dist/types/src/components/GrDivider/config.d.ts +1 -0
  335. package/dist/types/src/components/GrDivider/index.d.ts +4 -0
  336. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +5 -5
  337. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +8 -1
  338. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +7 -1
  339. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
  340. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +3 -3
  341. package/dist/types/src/components/GrForm/GrForm.vue.d.ts +93 -0
  342. package/dist/types/src/components/GrForm/config.d.ts +1 -0
  343. package/dist/types/src/components/GrForm/context.d.ts +27 -0
  344. package/dist/types/src/components/GrForm/index.d.ts +6 -0
  345. package/dist/types/src/components/GrForm/validation.d.ts +52 -0
  346. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +25 -2
  347. package/dist/types/src/components/GrFormField/context.d.ts +20 -0
  348. package/dist/types/src/components/GrFormField/index.d.ts +1 -0
  349. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +4 -4
  350. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +7 -3
  351. package/dist/types/src/components/GrImageViewer/composables/useViewerKeyboard.d.ts +20 -0
  352. package/dist/types/src/components/GrImageViewer/composables/useWheelGesture.d.ts +16 -0
  353. package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +50 -0
  354. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +49 -10
  355. package/dist/types/src/components/GrInput/defaults.d.ts +18 -0
  356. package/dist/types/src/components/GrInput/grInputStyles.d.ts +1 -1
  357. package/dist/types/src/components/GrInput/index.d.ts +1 -0
  358. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
  359. package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +46 -0
  360. package/dist/types/src/components/GrKbd/config.d.ts +1 -0
  361. package/dist/types/src/components/GrKbd/index.d.ts +4 -0
  362. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +3 -3
  363. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +3 -3
  364. package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
  365. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +25 -9
  366. package/dist/types/src/components/GrNumberInput/defaults.d.ts +14 -0
  367. package/dist/types/src/components/GrNumberInput/index.d.ts +1 -0
  368. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +18 -0
  369. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +4 -4
  370. package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +5 -5
  371. package/dist/types/src/components/GrRadio/defaults.d.ts +14 -0
  372. package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +3 -3
  373. package/dist/types/src/components/GrRadio/index.d.ts +1 -0
  374. package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +4 -4
  375. package/dist/types/src/components/GrRadioGroup/defaults.d.ts +14 -0
  376. package/dist/types/src/components/GrRadioGroup/index.d.ts +1 -0
  377. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +124 -0
  378. package/dist/types/src/components/GrRating/config.d.ts +1 -0
  379. package/dist/types/src/components/GrRating/defaults.d.ts +14 -0
  380. package/dist/types/src/components/GrRating/grRatingStyles.d.ts +21 -0
  381. package/dist/types/src/components/GrRating/index.d.ts +6 -0
  382. package/dist/types/src/components/GrRating/safelist.d.ts +1 -0
  383. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +1 -1
  384. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +7 -7
  385. package/dist/types/src/components/GrSegmented/defaults.d.ts +15 -0
  386. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +1 -1
  387. package/dist/types/src/components/GrSegmented/index.d.ts +1 -0
  388. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +57 -17
  389. package/dist/types/src/components/GrSelect/defaults.d.ts +17 -0
  390. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +3 -3
  391. package/dist/types/src/components/GrSelect/index.d.ts +1 -0
  392. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +2 -2
  393. package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
  394. package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +88 -0
  395. package/dist/types/src/components/GrSlider/config.d.ts +1 -0
  396. package/dist/types/src/components/GrSlider/defaults.d.ts +14 -0
  397. package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +36 -0
  398. package/dist/types/src/components/GrSlider/index.d.ts +6 -0
  399. package/dist/types/src/components/GrSlider/safelist.d.ts +1 -0
  400. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +116 -0
  401. package/dist/types/src/components/GrStatistic/config.d.ts +1 -0
  402. package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +16 -0
  403. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +24 -0
  404. package/dist/types/src/components/GrStatistic/index.d.ts +6 -0
  405. package/dist/types/src/components/GrStatistic/safelist.d.ts +1 -0
  406. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +4 -4
  407. package/dist/types/src/components/GrSwitch/defaults.d.ts +14 -0
  408. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
  409. package/dist/types/src/components/GrSwitch/index.d.ts +1 -0
  410. package/dist/types/src/components/GrTabPanels/GrTabPanel.vue.d.ts +46 -0
  411. package/dist/types/src/components/GrTabPanels/GrTabPanels.vue.d.ts +51 -0
  412. package/dist/types/src/components/GrTabPanels/config.d.ts +5 -0
  413. package/dist/types/src/components/GrTabPanels/context.d.ts +9 -0
  414. package/dist/types/src/components/GrTabPanels/index.d.ts +6 -0
  415. package/dist/types/src/components/GrTable/GrTable.vue.d.ts +16 -0
  416. package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +6 -0
  417. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +5 -5
  418. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +19 -2
  419. package/dist/types/src/components/GrToaster/index.d.ts +1 -1
  420. package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +1 -1
  421. package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +2 -0
  422. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +1 -1
  423. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  424. package/dist/types/src/composables/internal/useScrollLock.d.ts +24 -0
  425. package/dist/types/src/composables/useToast.d.ts +24 -0
  426. package/dist/types/src/granular-provider/shared.d.ts +10 -0
  427. package/dist/types/src/i18n/messages/en.d.ts +84 -0
  428. package/dist/types/src/i18n/messages/es.d.ts +84 -0
  429. package/dist/types/src/i18n/messages/ru.d.ts +84 -0
  430. package/dist/types/src/index.d.ts +10 -0
  431. package/dist/web-types.json +1642 -356
  432. package/package.json +41 -1
  433. package/dist/chunks/config-1uSYl98Y.js.map +0 -1
  434. package/dist/chunks/config-8Pcutu1j2.js.map +0 -1
  435. package/dist/chunks/config-B7IIWGt_2.js.map +0 -1
  436. package/dist/chunks/config-BIRO0vDJ2.js.map +0 -1
  437. package/dist/chunks/config-BLHqZhy-2.js.map +0 -1
  438. package/dist/chunks/config-BOlr7qw7.js.map +0 -1
  439. package/dist/chunks/config-BUHuGBik.js.map +0 -1
  440. package/dist/chunks/config-BX1JTrkV2.js.map +0 -1
  441. package/dist/chunks/config-C7NpDrfO.js.map +0 -1
  442. package/dist/chunks/config-ClhKPJvg.js.map +0 -1
  443. package/dist/chunks/config-Cpi9Mh2J.js.map +0 -1
  444. package/dist/chunks/config-CrG1XiE7.js.map +0 -1
  445. package/dist/chunks/config-DUcu1D68.js.map +0 -1
  446. package/dist/chunks/config-D_R56_gT.js.map +0 -1
  447. package/dist/chunks/config-DezDih8_.js.map +0 -1
  448. package/dist/chunks/config-DnvPqu4g.js.map +0 -1
  449. package/dist/chunks/config-DpqOnJiz2.js.map +0 -1
  450. package/dist/chunks/config-LGrZIdaZ2.js.map +0 -1
  451. package/dist/chunks/config-QaIc_gRa.js.map +0 -1
  452. package/dist/chunks/config-U4m9PSql.js.map +0 -1
  453. package/dist/chunks/config-eYLZYOUS2.js.map +0 -1
  454. package/dist/chunks/config-ipvU0lzP2.js.map +0 -1
  455. package/dist/chunks/config-xR4XVmcy.js.map +0 -1
  456. package/dist/chunks/en-BdtiS2d3.js.map +0 -1
  457. package/dist/chunks/es-BGRMZbe9.js.map +0 -1
  458. package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +0 -1
  459. package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +0 -1
  460. package/dist/chunks/grModalStyles-DWd3i05Q.js.map +0 -1
  461. package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +0 -1
  462. package/dist/chunks/grStyle-Blc9otAx.js.map +0 -1
  463. package/dist/chunks/ru-BFCnOiML.js.map +0 -1
  464. package/dist/chunks/shared-ChvcQgDl.js +0 -168
  465. package/dist/chunks/shared-ChvcQgDl.js.map +0 -1
  466. package/dist/chunks/transition-TLFw4KBn.js.map +0 -1
  467. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js +0 -163
  468. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +0 -1
  469. package/dist/components/GrAvatar/chunks/GrAvatar-96CpTCq5.js.map +0 -1
  470. package/dist/components/GrBadge/chunks/GrBadge-B77XlaqE.js.map +0 -1
  471. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CcktMOdg.js.map +0 -1
  472. package/dist/components/GrBottomNav/chunks/GrBottomNav-usuMgG8_.js.map +0 -1
  473. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +0 -1
  474. package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +0 -1
  475. package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +0 -1
  476. package/dist/components/GrCollapse/chunks/GrCollapse-CPPLh_xU.js.map +0 -1
  477. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-BWYKCsHd.js.map +0 -1
  478. package/dist/components/GrDataTable/chunks/GrDataTable-ptbARmJ3.js +0 -179
  479. package/dist/components/GrDataTable/chunks/GrDataTable-ptbARmJ3.js.map +0 -1
  480. package/dist/components/GrDialog/chunks/GrDialog-5DAS-1Lb.js.map +0 -1
  481. package/dist/components/GrDialogService/chunks/GrDialogService-DY_fmaMu.js.map +0 -1
  482. package/dist/components/GrDrawer/chunks/GrDrawer-D1kzsjXN.js.map +0 -1
  483. package/dist/components/GrDropdown/chunks/GrDropdown-BXb5Cxxf.js.map +0 -1
  484. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-DFEJLPcV.js.map +0 -1
  485. package/dist/components/GrEmptyState/chunks/GrEmptyState-CA3BiTV7.js.map +0 -1
  486. package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +0 -1
  487. package/dist/components/GrFormField/chunks/GrFormField-BujNQrw8.js +0 -35
  488. package/dist/components/GrFormField/chunks/GrFormField-BujNQrw8.js.map +0 -1
  489. package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +0 -1
  490. package/dist/components/GrFormSection/chunks/GrFormSection-Ce21jcgo.js.map +0 -1
  491. package/dist/components/GrImageViewer/chunks/GrImageViewer-OCUIrNh2.js.map +0 -1
  492. package/dist/components/GrInput/chunks/GrInput-C8pOJgCi.js +0 -188
  493. package/dist/components/GrInput/chunks/GrInput-C8pOJgCi.js.map +0 -1
  494. package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +0 -1
  495. package/dist/components/GrList/chunks/GrList-Dx772Ns4.js.map +0 -1
  496. package/dist/components/GrLoading/chunks/GrLoading--X_7rdbb.js.map +0 -1
  497. package/dist/components/GrModal/chunks/GrModal-BkjW9jZS.js.map +0 -1
  498. package/dist/components/GrNavbar/chunks/GrNavbar-DW3MiIIf.js.map +0 -1
  499. package/dist/components/GrNumberInput/chunks/GrNumberInput-CldPIWQx.js.map +0 -1
  500. package/dist/components/GrPagination/chunks/GrPagination-Bu9wv6it.js.map +0 -1
  501. package/dist/components/GrProgressBar/chunks/GrProgressBar-CC3z-Zqp.js.map +0 -1
  502. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-TmWXbpEP.js.map +0 -1
  503. package/dist/components/GrRadio/chunks/GrRadio-CPTixXaY.js.map +0 -1
  504. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-vKZCbkCp.js.map +0 -1
  505. package/dist/components/GrSegmented/chunks/GrSegmented-C1y0UXpQ.js.map +0 -1
  506. package/dist/components/GrSelect/chunks/GrSelect-RShK21lK.js.map +0 -1
  507. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +0 -1
  508. package/dist/components/GrSkeleton/chunks/GrSkeleton-DsN-_CDZ.js.map +0 -1
  509. package/dist/components/GrSwitch/chunks/GrSwitch-DAioyccZ.js.map +0 -1
  510. package/dist/components/GrTable/chunks/GrTable-Db3hRnKA.js.map +0 -1
  511. package/dist/components/GrTabs/chunks/GrTabs-Z-FDJUr_.js.map +0 -1
  512. package/dist/components/GrTextarea/chunks/GrTextarea-D56YxhKq.js.map +0 -1
  513. package/dist/components/GrToaster/chunks/GrToaster-eI8YvnIo.js.map +0 -1
  514. package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js.map +0 -1
  515. package/dist/components/GrTree/chunks/GrTree-D3ODe2dB.js.map +0 -1
  516. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-B2xBKs5Q.js.map +0 -1
  517. package/dist/chunks/{config-8Pcutu1j2.js → config-8Pcutu1j.js} +0 -0
  518. package/dist/chunks/{config-BLHqZhy-2.js → config-BLHqZhy-.js} +0 -0
  519. package/dist/chunks/{config-BUHuGBik.js → config-BUHuGBik2.js} +0 -0
  520. package/dist/chunks/{config-BX1JTrkV2.js → config-BX1JTrkV.js} +0 -0
  521. package/dist/chunks/{config-DpqOnJiz2.js → config-DpqOnJiz.js} +0 -0
  522. package/dist/chunks/{config-Cpi9Mh2J.js → config-Dqy0rPPO2.js} +1 -1
  523. /package/dist/chunks/{config-LGrZIdaZ2.js → config-LGrZIdaZ.js} +0 -0
  524. /package/dist/chunks/{config-QaIc_gRa.js → config-QaIc_gRa2.js} +0 -0
  525. /package/dist/chunks/{config-U4m9PSql.js → config-U4m9PSql2.js} +0 -0
  526. /package/dist/chunks/{config-ipvU0lzP2.js → config-ipvU0lzP.js} +0 -0
  527. /package/dist/chunks/{config-xR4XVmcy.js → config-xR4XVmcy2.js} +0 -0
@@ -0,0 +1,286 @@
1
+ import { o as useGrComponentSize } from "../../../chunks/context-DfWYCBB-.js";
2
+ import { n as useGrFormFieldContext } from "../../../chunks/context-DdNIxa1w.js";
3
+ import { a as sliderMarkTickClass, c as sliderThumbClass, i as sliderMarkLabelClassFor, l as sliderTooltipClass, o as sliderRailClass, r as sliderFillClass, s as sliderRootClass, u as sliderTrackHeightBySize } from "../../../chunks/config-BZFUM3Ky.js";
4
+ import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, ref, renderList, toDisplayString, unref } from "vue";
5
+ //#region src/components/GrSlider/GrSlider.vue?vue&type=script&setup=true&lang.ts
6
+ var _hoisted_1 = [
7
+ "id",
8
+ "data-testid",
9
+ "tabindex",
10
+ "aria-valuemin",
11
+ "aria-valuemax",
12
+ "aria-valuenow",
13
+ "aria-label",
14
+ "aria-disabled",
15
+ "aria-invalid",
16
+ "aria-describedby",
17
+ "aria-required",
18
+ "onKeydown",
19
+ "onMouseenter",
20
+ "onFocus"
21
+ ];
22
+ //#endregion
23
+ //#region src/components/GrSlider/GrSlider.vue
24
+ var GrSlider_default = /* @__PURE__ */ defineComponent({
25
+ __name: "GrSlider",
26
+ props: {
27
+ modelValue: {},
28
+ min: { default: 0 },
29
+ max: { default: 100 },
30
+ step: { default: 1 },
31
+ range: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ disabled: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ size: { default: void 0 },
40
+ marks: { default: void 0 },
41
+ showTooltip: {
42
+ type: [Boolean, String],
43
+ default: false
44
+ },
45
+ formatTooltip: {
46
+ type: Function,
47
+ default: void 0
48
+ },
49
+ ariaLabel: { default: void 0 }
50
+ },
51
+ emits: ["update:modelValue", "change"],
52
+ setup(__props, { emit: __emit }) {
53
+ const props = __props;
54
+ const resolvedSize = useGrComponentSize(() => props.size, {
55
+ component: "GrSlider",
56
+ supported: [
57
+ "sm",
58
+ "md",
59
+ "lg"
60
+ ]
61
+ });
62
+ const emit = __emit;
63
+ const field = useGrFormFieldContext();
64
+ const resolvedId = computed(() => field?.id.value);
65
+ const isInvalid = computed(() => Boolean(field?.invalid.value));
66
+ const describedBy = computed(() => field?.describedById.value);
67
+ const isRequired = computed(() => Boolean(field?.required.value));
68
+ const trackEl = ref(null);
69
+ const thumbEls = ref([]);
70
+ const span = computed(() => props.max > props.min ? props.max - props.min : 1);
71
+ const stepDecimals = computed(() => {
72
+ const s = String(props.step);
73
+ const dot = s.indexOf(".");
74
+ return dot >= 0 ? s.length - dot - 1 : 0;
75
+ });
76
+ function clamp(value) {
77
+ return Math.min(props.max, Math.max(props.min, value));
78
+ }
79
+ function snap(value) {
80
+ const stepped = Math.round((value - props.min) / props.step) * props.step + props.min;
81
+ return Number(clamp(stepped).toFixed(stepDecimals.value));
82
+ }
83
+ function percent(value) {
84
+ return (clamp(value) - props.min) / span.value * 100;
85
+ }
86
+ const values = computed(() => {
87
+ if (props.range) {
88
+ const v = Array.isArray(props.modelValue) ? props.modelValue : [props.min, props.min];
89
+ return [snap(v[0] ?? props.min), snap(v[1] ?? props.min)];
90
+ }
91
+ return [snap(Array.isArray(props.modelValue) ? props.modelValue[0] ?? props.min : props.modelValue)];
92
+ });
93
+ const fillStyle = computed(() => {
94
+ if (props.range) {
95
+ const lo = Math.min(percent(values.value[0]), percent(values.value[1]));
96
+ const hi = Math.max(percent(values.value[0]), percent(values.value[1]));
97
+ return {
98
+ left: `${lo}%`,
99
+ right: `${100 - hi}%`
100
+ };
101
+ }
102
+ return {
103
+ left: "0%",
104
+ right: `${100 - percent(values.value[0])}%`
105
+ };
106
+ });
107
+ const normalizedMarks = computed(() => {
108
+ if (!props.marks) return [];
109
+ if (Array.isArray(props.marks)) return props.marks.map((v) => ({
110
+ value: v,
111
+ label: String(v)
112
+ }));
113
+ return Object.entries(props.marks).map(([value, label]) => ({
114
+ value: Number(value),
115
+ label
116
+ }));
117
+ });
118
+ function tooltipText(value) {
119
+ return props.formatTooltip ? props.formatTooltip(value) : String(value);
120
+ }
121
+ function emitValue(next, commit) {
122
+ const payload = props.range ? [next[0], next[1]] : next[0];
123
+ emit("update:modelValue", payload);
124
+ if (commit) emit("change", payload);
125
+ }
126
+ function setThumb(index, value, commit) {
127
+ const next = values.value.slice();
128
+ next[index] = snap(value);
129
+ if (props.range) if (index === 0) next[0] = Math.min(next[0], next[1]);
130
+ else next[1] = Math.max(next[1], next[0]);
131
+ emitValue(next, commit);
132
+ }
133
+ const activeThumb = ref(null);
134
+ const hoveredThumb = ref(null);
135
+ function valueFromClientX(clientX) {
136
+ const rect = trackEl.value?.getBoundingClientRect();
137
+ if (!rect || rect.width === 0) return props.min;
138
+ const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width));
139
+ return props.min + ratio * span.value;
140
+ }
141
+ function nearestThumb(value) {
142
+ if (!props.range) return 0;
143
+ return Math.abs(value - values.value[0]) <= Math.abs(value - values.value[1]) ? 0 : 1;
144
+ }
145
+ function onTrackPointerDown(event) {
146
+ if (props.disabled) return;
147
+ const value = valueFromClientX(event.clientX);
148
+ const index = nearestThumb(value);
149
+ activeThumb.value = index;
150
+ thumbEls.value[index]?.focus();
151
+ setThumb(index, value, false);
152
+ window.addEventListener("pointermove", onPointerMove);
153
+ window.addEventListener("pointerup", onPointerUp);
154
+ }
155
+ function onPointerMove(event) {
156
+ if (activeThumb.value === null) return;
157
+ event.preventDefault();
158
+ setThumb(activeThumb.value, valueFromClientX(event.clientX), false);
159
+ }
160
+ function onPointerUp() {
161
+ if (activeThumb.value !== null) emitValue(values.value.slice(), true);
162
+ activeThumb.value = null;
163
+ window.removeEventListener("pointermove", onPointerMove);
164
+ window.removeEventListener("pointerup", onPointerUp);
165
+ }
166
+ onBeforeUnmount(() => {
167
+ window.removeEventListener("pointermove", onPointerMove);
168
+ window.removeEventListener("pointerup", onPointerUp);
169
+ });
170
+ function bigStep() {
171
+ return Math.max(props.step * 10, Math.round(span.value / 10 / props.step) * props.step || props.step);
172
+ }
173
+ function onThumbKeydown(event, index) {
174
+ if (props.disabled) return;
175
+ const current = values.value[index];
176
+ let next = null;
177
+ switch (event.key) {
178
+ case "ArrowRight":
179
+ case "ArrowUp":
180
+ next = current + props.step;
181
+ break;
182
+ case "ArrowLeft":
183
+ case "ArrowDown":
184
+ next = current - props.step;
185
+ break;
186
+ case "PageUp":
187
+ next = current + bigStep();
188
+ break;
189
+ case "PageDown":
190
+ next = current - bigStep();
191
+ break;
192
+ case "Home":
193
+ next = props.min;
194
+ break;
195
+ case "End":
196
+ next = props.max;
197
+ break;
198
+ default: return;
199
+ }
200
+ event.preventDefault();
201
+ setThumb(index, next, true);
202
+ }
203
+ const showTooltipFor = (index) => {
204
+ if (props.showTooltip === "always") return true;
205
+ if (!props.showTooltip) return false;
206
+ return activeThumb.value === index || hoveredThumb.value === index;
207
+ };
208
+ function thumbAriaLabel(index) {
209
+ if (props.ariaLabel) return props.range ? `${props.ariaLabel} (${index === 0 ? "min" : "max"})` : props.ariaLabel;
210
+ }
211
+ return (_ctx, _cache) => {
212
+ return openBlock(), createElementBlock("div", {
213
+ "data-gr-slider": "",
214
+ class: normalizeClass(unref(sliderRootClass)({
215
+ size: unref(resolvedSize),
216
+ disabled: __props.disabled,
217
+ hasMarks: normalizedMarks.value.length > 0
218
+ }))
219
+ }, [createElementVNode("div", {
220
+ ref_key: "trackEl",
221
+ ref: trackEl,
222
+ "data-gr-slider-track": "",
223
+ class: normalizeClass(["relative w-full", unref(sliderTrackHeightBySize)[unref(resolvedSize)]]),
224
+ onPointerdown: onTrackPointerDown
225
+ }, [
226
+ createElementVNode("div", { class: normalizeClass(unref(sliderRailClass)) }, null, 2),
227
+ createElementVNode("div", {
228
+ "data-gr-slider-fill": "",
229
+ class: normalizeClass(unref(sliderFillClass)),
230
+ style: normalizeStyle(fillStyle.value)
231
+ }, null, 6),
232
+ (openBlock(true), createElementBlock(Fragment, null, renderList(normalizedMarks.value, (mark) => {
233
+ return openBlock(), createElementBlock(Fragment, { key: mark.value }, [createElementVNode("span", {
234
+ "data-gr-slider-mark": "",
235
+ class: normalizeClass(unref(sliderMarkTickClass)),
236
+ style: normalizeStyle({ left: `${percent(mark.value)}%` }),
237
+ "aria-hidden": "true"
238
+ }, null, 6), createElementVNode("span", {
239
+ "data-gr-slider-mark-label": "",
240
+ class: normalizeClass(unref(sliderMarkLabelClassFor)(percent(mark.value))),
241
+ style: normalizeStyle({ left: `${percent(mark.value)}%` })
242
+ }, toDisplayString(mark.label), 7)], 64);
243
+ }), 128)),
244
+ (openBlock(true), createElementBlock(Fragment, null, renderList(values.value, (value, index) => {
245
+ return openBlock(), createElementBlock("div", {
246
+ id: index === 0 ? resolvedId.value : void 0,
247
+ key: index,
248
+ ref_for: true,
249
+ ref: (el) => {
250
+ if (el) thumbEls.value[index] = el;
251
+ },
252
+ "data-gr-slider-thumb": "",
253
+ "data-testid": `gr-slider-thumb-${index}`,
254
+ class: normalizeClass(unref(sliderThumbClass)({
255
+ size: unref(resolvedSize),
256
+ disabled: __props.disabled
257
+ })),
258
+ style: normalizeStyle({ left: `${percent(value)}%` }),
259
+ role: "slider",
260
+ tabindex: __props.disabled ? -1 : 0,
261
+ "aria-valuemin": __props.range && index === 1 ? values.value[0] : __props.min,
262
+ "aria-valuemax": __props.range && index === 0 ? values.value[1] : __props.max,
263
+ "aria-valuenow": value,
264
+ "aria-orientation": "horizontal",
265
+ "aria-label": thumbAriaLabel(index),
266
+ "aria-disabled": __props.disabled ? "true" : void 0,
267
+ "aria-invalid": isInvalid.value ? "true" : void 0,
268
+ "aria-describedby": index === 0 ? describedBy.value : void 0,
269
+ "aria-required": isRequired.value && index === 0 ? "true" : void 0,
270
+ onKeydown: ($event) => onThumbKeydown($event, index),
271
+ onMouseenter: ($event) => hoveredThumb.value = index,
272
+ onMouseleave: _cache[0] || (_cache[0] = ($event) => hoveredThumb.value = null),
273
+ onFocus: ($event) => hoveredThumb.value = index,
274
+ onBlur: _cache[1] || (_cache[1] = ($event) => hoveredThumb.value = null)
275
+ }, [showTooltipFor(index) ? (openBlock(), createElementBlock("span", {
276
+ key: 0,
277
+ "data-gr-slider-tooltip": "",
278
+ class: normalizeClass(unref(sliderTooltipClass))
279
+ }, toDisplayString(tooltipText(value)), 3)) : createCommentVNode("", true)], 46, _hoisted_1);
280
+ }), 128))
281
+ ], 34)], 2);
282
+ };
283
+ }
284
+ });
285
+ //#endregion
286
+ export { GrSlider_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrSlider-CzzJ3bD-.js","names":[],"sources":["../../../../src/components/GrSlider/GrSlider.vue","../../../../src/components/GrSlider/GrSlider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\n\nimport { useGrFormFieldContext } from '../GrFormField/context'\n\nimport {\n sliderFillClass,\n sliderMarkLabelClassFor,\n sliderMarkTickClass,\n sliderRailClass,\n sliderRootClass,\n sliderThumbClass,\n sliderTooltipClass,\n sliderTrackHeightBySize,\n type GrSliderMarks,\n type GrSliderModelValue,\n type GrSliderSize,\n} from './grSliderStyles'\n\nexport type {\n GrSliderMarks,\n GrSliderModelValue,\n GrSliderSize,\n} from './grSliderStyles'\n\n/**\n * Публичный GR-примитив «Slider» (WAI-ARIA slider pattern).\n *\n * Поддерживает одиночное значение и диапазон (`range` — два бегунка), шаг, метки\n * делений, всплывающее значение (tooltip), полную клавиатурную навигацию\n * (стрелки / PageUp/Down / Home / End) и `role=\"slider\"` с\n * `aria-valuemin`/`max`/`now` на каждом бегунке.\n */\nexport interface GrSliderProps {\n /** `number` — одиночное значение; `[lo, hi]` — диапазон (при `range=true`). */\n modelValue: GrSliderModelValue\n min?: number\n max?: number\n step?: number\n /** Диапазон с двумя бегунками; модель — кортеж `[lo, hi]`. */\n range?: boolean\n disabled?: boolean\n size?: GrSliderSize\n /** Метки делений: `{ [value]: label }` или массив значений. */\n marks?: GrSliderMarks\n /** Всплывающее значение над бегунком: `true`/`'hover'` — при hover/drag/focus, `'always'` — всегда. */\n showTooltip?: boolean | 'always' | 'hover'\n /** Форматирование значения в tooltip. */\n formatTooltip?: (value: number) => string\n ariaLabel?: string\n}\n\nconst props = withDefaults(\n defineProps<GrSliderProps>(),\n {\n min: 0,\n max: 100,\n step: 1,\n range: false,\n disabled: false,\n size: undefined,\n marks: undefined,\n showTooltip: false,\n formatTooltip: undefined,\n ariaLabel: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, {\n component: 'GrSlider',\n supported: ['sm', 'md', 'lg'],\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrSliderModelValue): void\n /** Значение зафиксировано (отпущен бегунок / клавиша). */\n (e: 'change', value: GrSliderModelValue): void\n}>()\n\n// Контекст `GrFormField`: id/aria-describedby/invalid/required как fallback.\nconst field = useGrFormFieldContext()\nconst resolvedId = computed(() => field?.id.value)\nconst isInvalid = computed(() => Boolean(field?.invalid.value))\nconst describedBy = computed(() => field?.describedById.value)\nconst isRequired = computed(() => Boolean(field?.required.value))\n\nconst trackEl = ref<HTMLElement | null>(null)\nconst thumbEls = ref<HTMLElement[]>([])\n\n// Нормализованные границы (гард от max<=min).\nconst span = computed(() => (props.max > props.min ? props.max - props.min : 1))\n\nconst stepDecimals = computed(() => {\n const s = String(props.step)\n const dot = s.indexOf('.')\n return dot >= 0 ? s.length - dot - 1 : 0\n})\n\nfunction clamp(value: number): number {\n return Math.min(props.max, Math.max(props.min, value))\n}\n\nfunction snap(value: number): number {\n const stepped = Math.round((value - props.min) / props.step) * props.step + props.min\n return Number(clamp(stepped).toFixed(stepDecimals.value))\n}\n\nfunction percent(value: number): number {\n return ((clamp(value) - props.min) / span.value) * 100\n}\n\n// ————— Значения бегунков как массив (single = один бегунок).\nconst values = computed<number[]>(() => {\n if (props.range) {\n const v = Array.isArray(props.modelValue) ? props.modelValue : [props.min, props.min]\n return [snap(v[0] ?? props.min), snap(v[1] ?? props.min)]\n }\n const v = Array.isArray(props.modelValue) ? (props.modelValue[0] ?? props.min) : props.modelValue\n return [snap(v)]\n})\n\nconst fillStyle = computed(() => {\n if (props.range) {\n const lo = Math.min(percent(values.value[0]), percent(values.value[1]))\n const hi = Math.max(percent(values.value[0]), percent(values.value[1]))\n return { left: `${lo}%`, right: `${100 - hi}%` }\n }\n return { left: '0%', right: `${100 - percent(values.value[0])}%` }\n})\n\n// ————— Метки делений.\ntype SliderMark = { value: number, label: string }\nconst normalizedMarks = computed<SliderMark[]>(() => {\n if (!props.marks) return []\n if (Array.isArray(props.marks)) return props.marks.map(v => ({ value: v, label: String(v) }))\n return Object.entries(props.marks).map(([value, label]) => ({ value: Number(value), label }))\n})\n\nfunction tooltipText(value: number): string {\n return props.formatTooltip ? props.formatTooltip(value) : String(value)\n}\n\n// ————— Обновление значения конкретного бегунка.\nfunction emitValue(next: number[], commit: boolean): void {\n const payload: GrSliderModelValue = props.range ? [next[0], next[1]] : next[0]\n emit('update:modelValue', payload)\n if (commit) emit('change', payload)\n}\n\nfunction setThumb(index: number, value: number, commit: boolean): void {\n const next = values.value.slice()\n next[index] = snap(value)\n\n // range: не даём бегункам «перепрыгнуть» друг друга.\n if (props.range) {\n if (index === 0) next[0] = Math.min(next[0], next[1])\n else next[1] = Math.max(next[1], next[0])\n }\n\n emitValue(next, commit)\n}\n\n// ————— Pointer-драг.\nconst activeThumb = ref<number | null>(null)\nconst hoveredThumb = ref<number | null>(null)\n\nfunction valueFromClientX(clientX: number): number {\n const rect = trackEl.value?.getBoundingClientRect()\n if (!rect || rect.width === 0) return props.min\n const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width))\n return props.min + ratio * span.value\n}\n\nfunction nearestThumb(value: number): number {\n if (!props.range) return 0\n return Math.abs(value - values.value[0]) <= Math.abs(value - values.value[1]) ? 0 : 1\n}\n\nfunction onTrackPointerDown(event: PointerEvent): void {\n if (props.disabled) return\n const value = valueFromClientX(event.clientX)\n const index = nearestThumb(value)\n activeThumb.value = index\n // Фокусируем активный бегунок сразу — чтобы клавиатура работала после клика по\n // дорожке (div не получает фокус по клику автоматически, только через `.focus()`).\n thumbEls.value[index]?.focus()\n setThumb(index, value, false)\n\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n}\n\nfunction onPointerMove(event: PointerEvent): void {\n if (activeThumb.value === null) return\n event.preventDefault()\n setThumb(activeThumb.value, valueFromClientX(event.clientX), false)\n}\n\nfunction onPointerUp(): void {\n if (activeThumb.value !== null) {\n // Финальный commit значения.\n emitValue(values.value.slice(), true)\n }\n activeThumb.value = null\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n}\n\nonBeforeUnmount(() => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n})\n\n// ————— Клавиатура.\nfunction bigStep(): number {\n // PageUp/Down: 10 шагов либо 10% диапазона (что крупнее).\n return Math.max(props.step * 10, Math.round((span.value / 10) / props.step) * props.step || props.step)\n}\n\nfunction onThumbKeydown(event: KeyboardEvent, index: number): void {\n if (props.disabled) return\n const current = values.value[index]\n let next: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = current + props.step\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = current - props.step\n break\n case 'PageUp':\n next = current + bigStep()\n break\n case 'PageDown':\n next = current - bigStep()\n break\n case 'Home':\n next = props.min\n break\n case 'End':\n next = props.max\n break\n default:\n return\n }\n\n event.preventDefault()\n setThumb(index, next, true)\n}\n\nconst showTooltipFor = (index: number): boolean => {\n if (props.showTooltip === 'always') return true\n if (!props.showTooltip) return false\n return activeThumb.value === index || hoveredThumb.value === index\n}\n\nfunction thumbAriaLabel(index: number): string | undefined {\n if (props.ariaLabel) return props.range ? `${props.ariaLabel} (${index === 0 ? 'min' : 'max'})` : props.ariaLabel\n return undefined\n}\n</script>\n\n<template>\n <div\n data-gr-slider\n :class=\"sliderRootClass({ size: resolvedSize, disabled, hasMarks: normalizedMarks.length > 0 })\"\n >\n <div\n ref=\"trackEl\"\n data-gr-slider-track\n class=\"relative w-full\"\n :class=\"sliderTrackHeightBySize[resolvedSize]\"\n @pointerdown=\"onTrackPointerDown\"\n >\n <div :class=\"sliderRailClass\" />\n <div data-gr-slider-fill :class=\"sliderFillClass\" :style=\"fillStyle\" />\n\n <!-- Метки делений. -->\n <template v-for=\"mark in normalizedMarks\" :key=\"mark.value\">\n <span\n data-gr-slider-mark\n :class=\"sliderMarkTickClass\"\n :style=\"{ left: `${percent(mark.value)}%` }\"\n aria-hidden=\"true\"\n />\n <span\n data-gr-slider-mark-label\n :class=\"sliderMarkLabelClassFor(percent(mark.value))\"\n :style=\"{ left: `${percent(mark.value)}%` }\"\n >\n {{ mark.label }}\n </span>\n </template>\n\n <!-- Бегунки. -->\n <div\n v-for=\"(value, index) in values\"\n :id=\"index === 0 ? resolvedId : undefined\"\n :key=\"index\"\n :ref=\"(el) => { if (el) thumbEls[index] = el as HTMLElement }\"\n data-gr-slider-thumb\n :data-testid=\"`gr-slider-thumb-${index}`\"\n :class=\"sliderThumbClass({ size: resolvedSize, disabled })\"\n :style=\"{ left: `${percent(value)}%` }\"\n role=\"slider\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-valuemin=\"range && index === 1 ? values[0] : min\"\n :aria-valuemax=\"range && index === 0 ? values[1] : max\"\n :aria-valuenow=\"value\"\n :aria-orientation=\"'horizontal'\"\n :aria-label=\"thumbAriaLabel(index)\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"index === 0 ? describedBy : undefined\"\n :aria-required=\"isRequired && index === 0 ? 'true' : undefined\"\n @keydown=\"onThumbKeydown($event, index)\"\n @mouseenter=\"hoveredThumb = index\"\n @mouseleave=\"hoveredThumb = null\"\n @focus=\"hoveredThumb = index\"\n @blur=\"hoveredThumb = null\"\n >\n <span\n v-if=\"showTooltipFor(index)\"\n data-gr-slider-tooltip\n :class=\"sliderTooltipClass\"\n >\n {{ tooltipText(value) }}\n </span>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\n\nimport { useGrFormFieldContext } from '../GrFormField/context'\n\nimport {\n sliderFillClass,\n sliderMarkLabelClassFor,\n sliderMarkTickClass,\n sliderRailClass,\n sliderRootClass,\n sliderThumbClass,\n sliderTooltipClass,\n sliderTrackHeightBySize,\n type GrSliderMarks,\n type GrSliderModelValue,\n type GrSliderSize,\n} from './grSliderStyles'\n\nexport type {\n GrSliderMarks,\n GrSliderModelValue,\n GrSliderSize,\n} from './grSliderStyles'\n\n/**\n * Публичный GR-примитив «Slider» (WAI-ARIA slider pattern).\n *\n * Поддерживает одиночное значение и диапазон (`range` — два бегунка), шаг, метки\n * делений, всплывающее значение (tooltip), полную клавиатурную навигацию\n * (стрелки / PageUp/Down / Home / End) и `role=\"slider\"` с\n * `aria-valuemin`/`max`/`now` на каждом бегунке.\n */\nexport interface GrSliderProps {\n /** `number` — одиночное значение; `[lo, hi]` — диапазон (при `range=true`). */\n modelValue: GrSliderModelValue\n min?: number\n max?: number\n step?: number\n /** Диапазон с двумя бегунками; модель — кортеж `[lo, hi]`. */\n range?: boolean\n disabled?: boolean\n size?: GrSliderSize\n /** Метки делений: `{ [value]: label }` или массив значений. */\n marks?: GrSliderMarks\n /** Всплывающее значение над бегунком: `true`/`'hover'` — при hover/drag/focus, `'always'` — всегда. */\n showTooltip?: boolean | 'always' | 'hover'\n /** Форматирование значения в tooltip. */\n formatTooltip?: (value: number) => string\n ariaLabel?: string\n}\n\nconst props = withDefaults(\n defineProps<GrSliderProps>(),\n {\n min: 0,\n max: 100,\n step: 1,\n range: false,\n disabled: false,\n size: undefined,\n marks: undefined,\n showTooltip: false,\n formatTooltip: undefined,\n ariaLabel: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, {\n component: 'GrSlider',\n supported: ['sm', 'md', 'lg'],\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrSliderModelValue): void\n /** Значение зафиксировано (отпущен бегунок / клавиша). */\n (e: 'change', value: GrSliderModelValue): void\n}>()\n\n// Контекст `GrFormField`: id/aria-describedby/invalid/required как fallback.\nconst field = useGrFormFieldContext()\nconst resolvedId = computed(() => field?.id.value)\nconst isInvalid = computed(() => Boolean(field?.invalid.value))\nconst describedBy = computed(() => field?.describedById.value)\nconst isRequired = computed(() => Boolean(field?.required.value))\n\nconst trackEl = ref<HTMLElement | null>(null)\nconst thumbEls = ref<HTMLElement[]>([])\n\n// Нормализованные границы (гард от max<=min).\nconst span = computed(() => (props.max > props.min ? props.max - props.min : 1))\n\nconst stepDecimals = computed(() => {\n const s = String(props.step)\n const dot = s.indexOf('.')\n return dot >= 0 ? s.length - dot - 1 : 0\n})\n\nfunction clamp(value: number): number {\n return Math.min(props.max, Math.max(props.min, value))\n}\n\nfunction snap(value: number): number {\n const stepped = Math.round((value - props.min) / props.step) * props.step + props.min\n return Number(clamp(stepped).toFixed(stepDecimals.value))\n}\n\nfunction percent(value: number): number {\n return ((clamp(value) - props.min) / span.value) * 100\n}\n\n// ————— Значения бегунков как массив (single = один бегунок).\nconst values = computed<number[]>(() => {\n if (props.range) {\n const v = Array.isArray(props.modelValue) ? props.modelValue : [props.min, props.min]\n return [snap(v[0] ?? props.min), snap(v[1] ?? props.min)]\n }\n const v = Array.isArray(props.modelValue) ? (props.modelValue[0] ?? props.min) : props.modelValue\n return [snap(v)]\n})\n\nconst fillStyle = computed(() => {\n if (props.range) {\n const lo = Math.min(percent(values.value[0]), percent(values.value[1]))\n const hi = Math.max(percent(values.value[0]), percent(values.value[1]))\n return { left: `${lo}%`, right: `${100 - hi}%` }\n }\n return { left: '0%', right: `${100 - percent(values.value[0])}%` }\n})\n\n// ————— Метки делений.\ntype SliderMark = { value: number, label: string }\nconst normalizedMarks = computed<SliderMark[]>(() => {\n if (!props.marks) return []\n if (Array.isArray(props.marks)) return props.marks.map(v => ({ value: v, label: String(v) }))\n return Object.entries(props.marks).map(([value, label]) => ({ value: Number(value), label }))\n})\n\nfunction tooltipText(value: number): string {\n return props.formatTooltip ? props.formatTooltip(value) : String(value)\n}\n\n// ————— Обновление значения конкретного бегунка.\nfunction emitValue(next: number[], commit: boolean): void {\n const payload: GrSliderModelValue = props.range ? [next[0], next[1]] : next[0]\n emit('update:modelValue', payload)\n if (commit) emit('change', payload)\n}\n\nfunction setThumb(index: number, value: number, commit: boolean): void {\n const next = values.value.slice()\n next[index] = snap(value)\n\n // range: не даём бегункам «перепрыгнуть» друг друга.\n if (props.range) {\n if (index === 0) next[0] = Math.min(next[0], next[1])\n else next[1] = Math.max(next[1], next[0])\n }\n\n emitValue(next, commit)\n}\n\n// ————— Pointer-драг.\nconst activeThumb = ref<number | null>(null)\nconst hoveredThumb = ref<number | null>(null)\n\nfunction valueFromClientX(clientX: number): number {\n const rect = trackEl.value?.getBoundingClientRect()\n if (!rect || rect.width === 0) return props.min\n const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width))\n return props.min + ratio * span.value\n}\n\nfunction nearestThumb(value: number): number {\n if (!props.range) return 0\n return Math.abs(value - values.value[0]) <= Math.abs(value - values.value[1]) ? 0 : 1\n}\n\nfunction onTrackPointerDown(event: PointerEvent): void {\n if (props.disabled) return\n const value = valueFromClientX(event.clientX)\n const index = nearestThumb(value)\n activeThumb.value = index\n // Фокусируем активный бегунок сразу — чтобы клавиатура работала после клика по\n // дорожке (div не получает фокус по клику автоматически, только через `.focus()`).\n thumbEls.value[index]?.focus()\n setThumb(index, value, false)\n\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n}\n\nfunction onPointerMove(event: PointerEvent): void {\n if (activeThumb.value === null) return\n event.preventDefault()\n setThumb(activeThumb.value, valueFromClientX(event.clientX), false)\n}\n\nfunction onPointerUp(): void {\n if (activeThumb.value !== null) {\n // Финальный commit значения.\n emitValue(values.value.slice(), true)\n }\n activeThumb.value = null\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n}\n\nonBeforeUnmount(() => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n})\n\n// ————— Клавиатура.\nfunction bigStep(): number {\n // PageUp/Down: 10 шагов либо 10% диапазона (что крупнее).\n return Math.max(props.step * 10, Math.round((span.value / 10) / props.step) * props.step || props.step)\n}\n\nfunction onThumbKeydown(event: KeyboardEvent, index: number): void {\n if (props.disabled) return\n const current = values.value[index]\n let next: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = current + props.step\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = current - props.step\n break\n case 'PageUp':\n next = current + bigStep()\n break\n case 'PageDown':\n next = current - bigStep()\n break\n case 'Home':\n next = props.min\n break\n case 'End':\n next = props.max\n break\n default:\n return\n }\n\n event.preventDefault()\n setThumb(index, next, true)\n}\n\nconst showTooltipFor = (index: number): boolean => {\n if (props.showTooltip === 'always') return true\n if (!props.showTooltip) return false\n return activeThumb.value === index || hoveredThumb.value === index\n}\n\nfunction thumbAriaLabel(index: number): string | undefined {\n if (props.ariaLabel) return props.range ? `${props.ariaLabel} (${index === 0 ? 'min' : 'max'})` : props.ariaLabel\n return undefined\n}\n</script>\n\n<template>\n <div\n data-gr-slider\n :class=\"sliderRootClass({ size: resolvedSize, disabled, hasMarks: normalizedMarks.length > 0 })\"\n >\n <div\n ref=\"trackEl\"\n data-gr-slider-track\n class=\"relative w-full\"\n :class=\"sliderTrackHeightBySize[resolvedSize]\"\n @pointerdown=\"onTrackPointerDown\"\n >\n <div :class=\"sliderRailClass\" />\n <div data-gr-slider-fill :class=\"sliderFillClass\" :style=\"fillStyle\" />\n\n <!-- Метки делений. -->\n <template v-for=\"mark in normalizedMarks\" :key=\"mark.value\">\n <span\n data-gr-slider-mark\n :class=\"sliderMarkTickClass\"\n :style=\"{ left: `${percent(mark.value)}%` }\"\n aria-hidden=\"true\"\n />\n <span\n data-gr-slider-mark-label\n :class=\"sliderMarkLabelClassFor(percent(mark.value))\"\n :style=\"{ left: `${percent(mark.value)}%` }\"\n >\n {{ mark.label }}\n </span>\n </template>\n\n <!-- Бегунки. -->\n <div\n v-for=\"(value, index) in values\"\n :id=\"index === 0 ? resolvedId : undefined\"\n :key=\"index\"\n :ref=\"(el) => { if (el) thumbEls[index] = el as HTMLElement }\"\n data-gr-slider-thumb\n :data-testid=\"`gr-slider-thumb-${index}`\"\n :class=\"sliderThumbClass({ size: resolvedSize, disabled })\"\n :style=\"{ left: `${percent(value)}%` }\"\n role=\"slider\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-valuemin=\"range && index === 1 ? values[0] : min\"\n :aria-valuemax=\"range && index === 0 ? values[1] : max\"\n :aria-valuenow=\"value\"\n :aria-orientation=\"'horizontal'\"\n :aria-label=\"thumbAriaLabel(index)\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :aria-invalid=\"isInvalid ? 'true' : undefined\"\n :aria-describedby=\"index === 0 ? describedBy : undefined\"\n :aria-required=\"isRequired && index === 0 ? 'true' : undefined\"\n @keydown=\"onThumbKeydown($event, index)\"\n @mouseenter=\"hoveredThumb = index\"\n @mouseleave=\"hoveredThumb = null\"\n @focus=\"hoveredThumb = index\"\n @blur=\"hoveredThumb = null\"\n >\n <span\n v-if=\"showTooltipFor(index)\"\n data-gr-slider-tooltip\n :class=\"sliderTooltipClass\"\n >\n {{ tooltipText(value) }}\n </span>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { n as grSliderSafelist, t as grSliderConfig } from "../../chunks/config-BZFUM3Ky.js";
2
+ import { t as GrSlider_default } from "./chunks/GrSlider-CzzJ3bD-.js";
3
+ export { GrSlider_default as GrSlider, GrSlider_default as default, grSliderConfig, grSliderSafelist };
@@ -0,0 +1,128 @@
1
+ import { t as GrSkeleton_default } from "../../GrSkeleton/chunks/GrSkeleton-BucA5F4J.js";
2
+ import { a as statisticTitleClass, c as statisticTrendIconByTrend, i as statisticPlaceholderHeightBySize, l as statisticTrendSizeBySize, o as statisticTitleSizeBySize, r as statisticAffixSizeBySize, s as statisticTrendClassByTrend, u as statisticValueClass } from "../../../chunks/config-BDSHekVC.js";
3
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref } from "vue";
4
+ //#region src/components/GrStatistic/formatStatisticValue.ts
5
+ /**
6
+ * Форматирует значение показателя: фиксирует точность и расставляет разделители.
7
+ *
8
+ * Нечисловые значения возвращаются без изменений — это позволяет показывать в
9
+ * `GrStatistic` уже готовые строки («2 ч 15 мин», «—») без обходных пропов.
10
+ * Вынесено из SFC отдельным модулем, чтобы тестировалось без монтирования.
11
+ */
12
+ function formatStatisticValue(value, options = {}) {
13
+ const { precision, groupSeparator = " ", decimalSeparator = "." } = options;
14
+ const numeric = typeof value === "number" ? value : Number(value);
15
+ if (typeof value === "string" && (value.trim() === "" || !Number.isFinite(numeric))) return value;
16
+ if (!Number.isFinite(numeric)) return String(value);
17
+ const fixed = precision === void 0 ? String(numeric) : numeric.toFixed(precision);
18
+ if (fixed.includes("e") || fixed.includes("E")) return fixed;
19
+ const negative = fixed.startsWith("-");
20
+ const [intPart, fracPart] = (negative ? fixed.slice(1) : fixed).split(".");
21
+ const grouped = groupSeparator ? intPart.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator) : intPart;
22
+ return [
23
+ negative ? "-" : "",
24
+ grouped,
25
+ fracPart ? `${decimalSeparator}${fracPart}` : ""
26
+ ].join("");
27
+ }
28
+ //#endregion
29
+ //#region src/components/GrStatistic/GrStatistic.vue?vue&type=script&setup=true&lang.ts
30
+ var _hoisted_1 = {
31
+ "data-gr-statistic": "",
32
+ class: "flex items-start gap-3"
33
+ };
34
+ var _hoisted_2 = {
35
+ key: 0,
36
+ "data-gr-statistic-icon": "",
37
+ class: "mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--gr-radius-lg)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]"
38
+ };
39
+ var _hoisted_3 = { class: "min-w-0" };
40
+ var _hoisted_4 = {
41
+ key: 1,
42
+ "data-gr-statistic-placeholder": "",
43
+ "data-testid": "gr-statistic-placeholder",
44
+ class: "mt-1",
45
+ role: "status",
46
+ "aria-busy": "true"
47
+ };
48
+ var _hoisted_5 = {
49
+ key: 2,
50
+ "data-gr-statistic-value": "",
51
+ "data-testid": "gr-statistic-value",
52
+ class: "mt-0.5 flex items-baseline gap-1"
53
+ };
54
+ //#endregion
55
+ //#region src/components/GrStatistic/GrStatistic.vue
56
+ var GrStatistic_default = /* @__PURE__ */ defineComponent({
57
+ __name: "GrStatistic",
58
+ props: {
59
+ value: {},
60
+ title: { default: void 0 },
61
+ precision: { default: void 0 },
62
+ groupSeparator: { default: " " },
63
+ decimalSeparator: { default: "." },
64
+ prefix: { default: void 0 },
65
+ suffix: { default: void 0 },
66
+ icon: { default: void 0 },
67
+ size: { default: "md" },
68
+ tone: { default: "neutral" },
69
+ trend: { default: void 0 },
70
+ trendText: { default: void 0 },
71
+ loading: {
72
+ type: Boolean,
73
+ default: false
74
+ }
75
+ },
76
+ setup(__props) {
77
+ const props = __props;
78
+ const formatted = computed(() => formatStatisticValue(props.value, {
79
+ precision: props.precision,
80
+ groupSeparator: props.groupSeparator,
81
+ decimalSeparator: props.decimalSeparator
82
+ }));
83
+ return (_ctx, _cache) => {
84
+ return openBlock(), createElementBlock("div", _hoisted_1, [__props.icon || _ctx.$slots.icon ? (openBlock(), createElementBlock("span", _hoisted_2, [renderSlot(_ctx.$slots, "icon", {}, () => [createElementVNode("span", {
85
+ class: normalizeClass(["block h-4 w-4", __props.icon]),
86
+ "aria-hidden": "true"
87
+ }, null, 2)])])) : createCommentVNode("", true), createElementVNode("div", _hoisted_3, [
88
+ __props.title || _ctx.$slots.title ? (openBlock(), createElementBlock("div", {
89
+ key: 0,
90
+ "data-gr-statistic-title": "",
91
+ class: normalizeClass([unref(statisticTitleClass), unref(statisticTitleSizeBySize)[__props.size]])
92
+ }, [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(__props.title), 1)])], 2)) : createCommentVNode("", true),
93
+ __props.loading ? (openBlock(), createElementBlock("div", _hoisted_4, [createVNode(GrSkeleton_default, {
94
+ width: "6rem",
95
+ height: unref(statisticPlaceholderHeightBySize)[__props.size],
96
+ rounded: "var(--gr-radius-md)"
97
+ }, null, 8, ["height"])])) : (openBlock(), createElementBlock("div", _hoisted_5, [
98
+ __props.prefix || _ctx.$slots.prefix ? (openBlock(), createElementBlock("span", {
99
+ key: 0,
100
+ "data-gr-statistic-prefix": "",
101
+ class: normalizeClass(["text-[var(--gr-muted-fg)]", unref(statisticAffixSizeBySize)[__props.size]])
102
+ }, [renderSlot(_ctx.$slots, "prefix", {}, () => [createTextVNode(toDisplayString(__props.prefix), 1)])], 2)) : createCommentVNode("", true),
103
+ createElementVNode("span", { class: normalizeClass(unref(statisticValueClass)({
104
+ size: __props.size,
105
+ tone: __props.tone
106
+ })) }, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(formatted.value), 1)])], 2),
107
+ __props.suffix || _ctx.$slots.suffix ? (openBlock(), createElementBlock("span", {
108
+ key: 1,
109
+ "data-gr-statistic-suffix": "",
110
+ class: normalizeClass(["text-[var(--gr-muted-fg)]", unref(statisticAffixSizeBySize)[__props.size]])
111
+ }, [renderSlot(_ctx.$slots, "suffix", {}, () => [createTextVNode(toDisplayString(__props.suffix), 1)])], 2)) : createCommentVNode("", true)
112
+ ])),
113
+ __props.trend || __props.trendText || _ctx.$slots.trend ? (openBlock(), createElementBlock("div", {
114
+ key: 3,
115
+ "data-gr-statistic-trend": "",
116
+ "data-testid": "gr-statistic-trend",
117
+ class: normalizeClass(["mt-1 inline-flex items-center gap-1", [unref(statisticTrendSizeBySize)[__props.size], unref(statisticTrendClassByTrend)[__props.trend ?? "flat"]]])
118
+ }, [renderSlot(_ctx.$slots, "trend", {}, () => [__props.trend ? (openBlock(), createElementBlock("span", {
119
+ key: 0,
120
+ class: normalizeClass(["block h-3.5 w-3.5", unref(statisticTrendIconByTrend)[__props.trend]]),
121
+ "aria-hidden": "true"
122
+ }, null, 2)) : createCommentVNode("", true), createElementVNode("span", null, toDisplayString(__props.trendText), 1)])], 2)) : createCommentVNode("", true)
123
+ ])]);
124
+ };
125
+ }
126
+ });
127
+ //#endregion
128
+ export { formatStatisticValue as n, GrStatistic_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrStatistic-gHiAwrX5.js","names":["$slots"],"sources":["../../../../src/components/GrStatistic/formatStatisticValue.ts","../../../../src/components/GrStatistic/GrStatistic.vue","../../../../src/components/GrStatistic/GrStatistic.vue"],"sourcesContent":["export type GrStatisticFormatOptions = {\n /** Число знаков после запятой. `undefined` — оставить как есть. */\n precision?: number\n /** Разделитель групп разрядов. */\n groupSeparator?: string\n /** Десятичный разделитель. */\n decimalSeparator?: string\n}\n\n/**\n * Форматирует значение показателя: фиксирует точность и расставляет разделители.\n *\n * Нечисловые значения возвращаются без изменений — это позволяет показывать в\n * `GrStatistic` уже готовые строки («2 ч 15 мин», «—») без обходных пропов.\n * Вынесено из SFC отдельным модулем, чтобы тестировалось без монтирования.\n */\nexport function formatStatisticValue(\n value: number | string,\n options: GrStatisticFormatOptions = {},\n): string {\n const { precision, groupSeparator = ' ', decimalSeparator = '.' } = options\n\n const numeric = typeof value === 'number' ? value : Number(value)\n if (typeof value === 'string' && (value.trim() === '' || !Number.isFinite(numeric))) {\n return value\n }\n if (!Number.isFinite(numeric)) return String(value)\n\n const fixed = precision === undefined ? String(numeric) : numeric.toFixed(precision)\n // `toFixed` не даёт экспоненциальной записи, а `String(число)` — может (1e21+).\n // В таком случае группировать нечего: возвращаем как есть.\n if (fixed.includes('e') || fixed.includes('E')) return fixed\n\n const negative = fixed.startsWith('-')\n const [intPart, fracPart] = (negative ? fixed.slice(1) : fixed).split('.')\n\n const grouped = groupSeparator\n ? intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, groupSeparator)\n : intPart\n\n return [\n negative ? '-' : '',\n grouped,\n fracPart ? `${decimalSeparator}${fracPart}` : '',\n ].join('')\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport GrSkeleton from '../GrSkeleton/GrSkeleton.vue'\n\nimport { formatStatisticValue } from './formatStatisticValue'\n\nimport {\n statisticAffixSizeBySize,\n statisticPlaceholderHeightBySize,\n statisticTitleClass,\n statisticTitleSizeBySize,\n statisticTrendClassByTrend,\n statisticTrendIconByTrend,\n statisticTrendSizeBySize,\n statisticValueClass,\n type GrStatisticSize,\n type GrStatisticTone,\n type GrStatisticTrend,\n} from './grStatisticStyles'\n\nexport type {\n GrStatisticSize,\n GrStatisticTone,\n GrStatisticTrend,\n} from './grStatisticStyles'\nexport type { GrStatisticFormatOptions } from './formatStatisticValue'\n\n/**\n * Публичный GR-примитив «Statistic» — крупный числовой показатель с подписью,\n * префиксом/суффиксом и строкой динамики.\n *\n * Компонент презентационный: не грузит данные и не считает дельту, только\n * форматирует и подаёт. Форматирование — чистая функция `formatStatisticValue`.\n */\nexport interface GrStatisticProps {\n /** Значение показателя. Нечисловая строка выводится как есть. */\n value: number | string\n /** Подпись над значением. */\n title?: string\n /** Число знаков после запятой. */\n precision?: number\n /** Разделитель разрядов (по умолчанию — узкий пробел). */\n groupSeparator?: string\n decimalSeparator?: string\n /** Приписка перед значением (валюта, знак). */\n prefix?: string\n /** Приписка после значения (единица измерения, `%`). */\n suffix?: string\n /** UnoCSS-класс иконки слева от блока (например `i-lucide-users`). */\n icon?: string\n size?: GrStatisticSize\n /** Тон значения; точечно перекрывается `--gr-statistic-value-color`. */\n tone?: GrStatisticTone\n /** Направление динамики — задаёт цвет и иконку строки под значением. */\n trend?: GrStatisticTrend\n /** Текст динамики (например `+12,5% к прошлой неделе`). */\n trendText?: string\n /** Состояние загрузки: вместо значения — плейсхолдер. */\n loading?: boolean\n}\n\nconst props = withDefaults(\n defineProps<GrStatisticProps>(),\n {\n title: undefined,\n precision: undefined,\n groupSeparator: ' ',\n decimalSeparator: '.',\n prefix: undefined,\n suffix: undefined,\n icon: undefined,\n size: 'md',\n tone: 'neutral',\n trend: undefined,\n trendText: undefined,\n loading: false,\n },\n)\n\nconst formatted = computed(() => formatStatisticValue(props.value, {\n precision: props.precision,\n groupSeparator: props.groupSeparator,\n decimalSeparator: props.decimalSeparator,\n}))\n</script>\n\n<template>\n <div data-gr-statistic class=\"flex items-start gap-3\">\n <span\n v-if=\"icon || $slots.icon\"\n data-gr-statistic-icon\n class=\"mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--gr-radius-lg)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]\"\n >\n <slot name=\"icon\">\n <span class=\"block h-4 w-4\" :class=\"icon\" aria-hidden=\"true\" />\n </slot>\n </span>\n\n <div class=\"min-w-0\">\n <div\n v-if=\"title || $slots.title\"\n data-gr-statistic-title\n :class=\"[statisticTitleClass, statisticTitleSizeBySize[size]]\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n\n <!-- Плейсхолдер загрузки повторяет высоту строки значения, чтобы блок не прыгал. -->\n <div\n v-if=\"loading\"\n data-gr-statistic-placeholder\n data-testid=\"gr-statistic-placeholder\"\n class=\"mt-1\"\n role=\"status\"\n aria-busy=\"true\"\n >\n <GrSkeleton\n width=\"6rem\"\n :height=\"statisticPlaceholderHeightBySize[size]\"\n rounded=\"var(--gr-radius-md)\"\n />\n </div>\n\n <div\n v-else\n data-gr-statistic-value\n data-testid=\"gr-statistic-value\"\n class=\"mt-0.5 flex items-baseline gap-1\"\n >\n <span\n v-if=\"prefix || $slots.prefix\"\n data-gr-statistic-prefix\n class=\"text-[var(--gr-muted-fg)]\"\n :class=\"statisticAffixSizeBySize[size]\"\n >\n <slot name=\"prefix\">{{ prefix }}</slot>\n </span>\n\n <span :class=\"statisticValueClass({ size, tone })\">\n <slot>{{ formatted }}</slot>\n </span>\n\n <span\n v-if=\"suffix || $slots.suffix\"\n data-gr-statistic-suffix\n class=\"text-[var(--gr-muted-fg)]\"\n :class=\"statisticAffixSizeBySize[size]\"\n >\n <slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n </div>\n\n <div\n v-if=\"trend || trendText || $slots.trend\"\n data-gr-statistic-trend\n data-testid=\"gr-statistic-trend\"\n class=\"mt-1 inline-flex items-center gap-1\"\n :class=\"[statisticTrendSizeBySize[size], statisticTrendClassByTrend[trend ?? 'flat']]\"\n >\n <slot name=\"trend\">\n <span\n v-if=\"trend\"\n class=\"block h-3.5 w-3.5\"\n :class=\"statisticTrendIconByTrend[trend]\"\n aria-hidden=\"true\"\n />\n <span>{{ trendText }}</span>\n </slot>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport GrSkeleton from '../GrSkeleton/GrSkeleton.vue'\n\nimport { formatStatisticValue } from './formatStatisticValue'\n\nimport {\n statisticAffixSizeBySize,\n statisticPlaceholderHeightBySize,\n statisticTitleClass,\n statisticTitleSizeBySize,\n statisticTrendClassByTrend,\n statisticTrendIconByTrend,\n statisticTrendSizeBySize,\n statisticValueClass,\n type GrStatisticSize,\n type GrStatisticTone,\n type GrStatisticTrend,\n} from './grStatisticStyles'\n\nexport type {\n GrStatisticSize,\n GrStatisticTone,\n GrStatisticTrend,\n} from './grStatisticStyles'\nexport type { GrStatisticFormatOptions } from './formatStatisticValue'\n\n/**\n * Публичный GR-примитив «Statistic» — крупный числовой показатель с подписью,\n * префиксом/суффиксом и строкой динамики.\n *\n * Компонент презентационный: не грузит данные и не считает дельту, только\n * форматирует и подаёт. Форматирование — чистая функция `formatStatisticValue`.\n */\nexport interface GrStatisticProps {\n /** Значение показателя. Нечисловая строка выводится как есть. */\n value: number | string\n /** Подпись над значением. */\n title?: string\n /** Число знаков после запятой. */\n precision?: number\n /** Разделитель разрядов (по умолчанию — узкий пробел). */\n groupSeparator?: string\n decimalSeparator?: string\n /** Приписка перед значением (валюта, знак). */\n prefix?: string\n /** Приписка после значения (единица измерения, `%`). */\n suffix?: string\n /** UnoCSS-класс иконки слева от блока (например `i-lucide-users`). */\n icon?: string\n size?: GrStatisticSize\n /** Тон значения; точечно перекрывается `--gr-statistic-value-color`. */\n tone?: GrStatisticTone\n /** Направление динамики — задаёт цвет и иконку строки под значением. */\n trend?: GrStatisticTrend\n /** Текст динамики (например `+12,5% к прошлой неделе`). */\n trendText?: string\n /** Состояние загрузки: вместо значения — плейсхолдер. */\n loading?: boolean\n}\n\nconst props = withDefaults(\n defineProps<GrStatisticProps>(),\n {\n title: undefined,\n precision: undefined,\n groupSeparator: ' ',\n decimalSeparator: '.',\n prefix: undefined,\n suffix: undefined,\n icon: undefined,\n size: 'md',\n tone: 'neutral',\n trend: undefined,\n trendText: undefined,\n loading: false,\n },\n)\n\nconst formatted = computed(() => formatStatisticValue(props.value, {\n precision: props.precision,\n groupSeparator: props.groupSeparator,\n decimalSeparator: props.decimalSeparator,\n}))\n</script>\n\n<template>\n <div data-gr-statistic class=\"flex items-start gap-3\">\n <span\n v-if=\"icon || $slots.icon\"\n data-gr-statistic-icon\n class=\"mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--gr-radius-lg)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]\"\n >\n <slot name=\"icon\">\n <span class=\"block h-4 w-4\" :class=\"icon\" aria-hidden=\"true\" />\n </slot>\n </span>\n\n <div class=\"min-w-0\">\n <div\n v-if=\"title || $slots.title\"\n data-gr-statistic-title\n :class=\"[statisticTitleClass, statisticTitleSizeBySize[size]]\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n\n <!-- Плейсхолдер загрузки повторяет высоту строки значения, чтобы блок не прыгал. -->\n <div\n v-if=\"loading\"\n data-gr-statistic-placeholder\n data-testid=\"gr-statistic-placeholder\"\n class=\"mt-1\"\n role=\"status\"\n aria-busy=\"true\"\n >\n <GrSkeleton\n width=\"6rem\"\n :height=\"statisticPlaceholderHeightBySize[size]\"\n rounded=\"var(--gr-radius-md)\"\n />\n </div>\n\n <div\n v-else\n data-gr-statistic-value\n data-testid=\"gr-statistic-value\"\n class=\"mt-0.5 flex items-baseline gap-1\"\n >\n <span\n v-if=\"prefix || $slots.prefix\"\n data-gr-statistic-prefix\n class=\"text-[var(--gr-muted-fg)]\"\n :class=\"statisticAffixSizeBySize[size]\"\n >\n <slot name=\"prefix\">{{ prefix }}</slot>\n </span>\n\n <span :class=\"statisticValueClass({ size, tone })\">\n <slot>{{ formatted }}</slot>\n </span>\n\n <span\n v-if=\"suffix || $slots.suffix\"\n data-gr-statistic-suffix\n class=\"text-[var(--gr-muted-fg)]\"\n :class=\"statisticAffixSizeBySize[size]\"\n >\n <slot name=\"suffix\">{{ suffix }}</slot>\n </span>\n </div>\n\n <div\n v-if=\"trend || trendText || $slots.trend\"\n data-gr-statistic-trend\n data-testid=\"gr-statistic-trend\"\n class=\"mt-1 inline-flex items-center gap-1\"\n :class=\"[statisticTrendSizeBySize[size], statisticTrendClassByTrend[trend ?? 'flat']]\"\n >\n <slot name=\"trend\">\n <span\n v-if=\"trend\"\n class=\"block h-3.5 w-3.5\"\n :class=\"statisticTrendIconByTrend[trend]\"\n aria-hidden=\"true\"\n />\n <span>{{ trendText }}</span>\n </slot>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { n as formatStatisticValue, t as GrStatistic_default } from "./chunks/GrStatistic-gHiAwrX5.js";
2
+ import { n as grStatisticSafelist, t as grStatisticConfig } from "../../chunks/config-BDSHekVC.js";
3
+ export { GrStatistic_default as GrStatistic, GrStatistic_default as default, formatStatisticValue, grStatisticConfig, grStatisticSafelist };
@@ -1,4 +1,5 @@
1
- import { a as grSwitchTrackClass, i as grSwitchThumbClass, r as grSwitchLabelClass } from "../../../chunks/config-DezDih8_.js";
1
+ import { o as useGrComponentSize } from "../../../chunks/context-DfWYCBB-.js";
2
+ import { a as grSwitchTrackClass, i as grSwitchThumbClass, r as grSwitchLabelClass } from "../../../chunks/config-LqDC_rvp.js";
2
3
  import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot } from "vue";
3
4
  //#region src/components/GrSwitch/GrSwitch.vue?vue&type=script&setup=true&lang.ts
4
5
  var _hoisted_1 = [
@@ -17,7 +18,7 @@ var GrSwitch_default = /* @__PURE__ */ defineComponent({
17
18
  default: false
18
19
  },
19
20
  ariaLabel: { default: void 0 },
20
- size: { default: "md" },
21
+ size: { default: void 0 },
21
22
  activeBackgroundColor: { default: void 0 },
22
23
  inactiveBackgroundColor: { default: void 0 }
23
24
  },
@@ -25,24 +26,32 @@ var GrSwitch_default = /* @__PURE__ */ defineComponent({
25
26
  setup(__props, { emit: __emit }) {
26
27
  const getCustomColor = (value) => value?.trim() || void 0;
27
28
  const props = __props;
29
+ const resolvedSize = useGrComponentSize(() => props.size, {
30
+ component: "GrSwitch",
31
+ supported: [
32
+ "sm",
33
+ "md",
34
+ "lg"
35
+ ]
36
+ });
28
37
  const emit = __emit;
29
- const trackClass = computed(() => grSwitchTrackClass(props.size));
38
+ const trackClass = computed(() => grSwitchTrackClass(resolvedSize.value));
30
39
  const trackStyle = computed(() => {
31
40
  const isChecked = props.modelValue;
32
- const defaultBackgroundColor = isChecked ? "var(--primary)" : "var(--muted)";
41
+ const defaultBackgroundColor = isChecked ? "var(--gr-primary)" : "var(--gr-muted)";
33
42
  const customBackgroundColor = getCustomColor(isChecked ? props.activeBackgroundColor : props.inactiveBackgroundColor);
34
43
  const backgroundColor = customBackgroundColor ?? defaultBackgroundColor;
35
44
  return {
36
45
  "--gr-switch-track-bg": backgroundColor,
37
- "--gr-switch-track-brd": customBackgroundColor ? backgroundColor : isChecked ? "var(--primary)" : "var(--brd)",
46
+ "--gr-switch-track-brd": customBackgroundColor ? backgroundColor : isChecked ? "var(--gr-primary)" : "var(--gr-brd)",
38
47
  backgroundColor: "var(--gr-switch-track-bg)"
39
48
  };
40
49
  });
41
50
  const thumbClass = computed(() => grSwitchThumbClass({
42
- size: props.size,
51
+ size: resolvedSize.value,
43
52
  checked: props.modelValue
44
53
  }));
45
- const labelClass = computed(() => grSwitchLabelClass(props.size));
54
+ const labelClass = computed(() => grSwitchLabelClass(resolvedSize.value));
46
55
  function toggle() {
47
56
  if (props.disabled) return;
48
57
  emit("update:modelValue", !props.modelValue);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrSwitch-CJdRvS0s.js","names":["$slots"],"sources":["../../../../src/components/GrSwitch/GrSwitch.vue","../../../../src/components/GrSwitch/GrSwitch.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\n\nimport {\n grSwitchLabelClass,\n grSwitchThumbClass,\n grSwitchTrackClass,\n type GrSwitchSize,\n} from './grSwitchStyles'\n\nexport type {GrSwitchSize} from './grSwitchStyles'\n\n/**\n * Пропсы публичного GR-примитива «Switch».\n */\nexport interface GrSwitchProps {\n modelValue: boolean\n disabled?: boolean\n ariaLabel?: string\n size?: GrSwitchSize\n /** Кастомный цвет фона в активном состоянии. Если не задан — `var(--gr-primary)`. */\n activeBackgroundColor?: string\n /** Кастомный цвет фона в неактивном состоянии. Если не задан — `var(--gr-muted)`. */\n inactiveBackgroundColor?: string\n}\n\nconst getCustomColor = (value?: string) => value?.trim() || undefined\n\nconst props = withDefaults(\n defineProps<GrSwitchProps>(),\n {\n disabled: false,\n ariaLabel: undefined,\n size: undefined,\n activeBackgroundColor: undefined,\n inactiveBackgroundColor: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, {\n component: 'GrSwitch',\n supported: ['sm', 'md', 'lg'],\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst trackClass = computed(() => grSwitchTrackClass(resolvedSize.value))\n\nconst trackStyle = computed(() => {\n const isChecked = props.modelValue\n const defaultBackgroundColor = isChecked ? 'var(--gr-primary)' : 'var(--gr-muted)'\n const customBackgroundColor = getCustomColor(\n isChecked ? props.activeBackgroundColor : props.inactiveBackgroundColor,\n )\n const backgroundColor = customBackgroundColor ?? defaultBackgroundColor\n\n return {\n '--gr-switch-track-bg': backgroundColor,\n '--gr-switch-track-brd': customBackgroundColor\n ? backgroundColor\n : isChecked\n ? 'var(--gr-primary)'\n : 'var(--gr-brd)',\n backgroundColor: 'var(--gr-switch-track-bg)',\n }\n})\n\nconst thumbClass = computed(() => grSwitchThumbClass({size: resolvedSize.value, checked: props.modelValue}))\n\nconst labelClass = computed(() => grSwitchLabelClass(resolvedSize.value))\n\nfunction toggle(): void {\n if (props.disabled) {\n return\n }\n\n emit('update:modelValue', !props.modelValue)\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n role=\"switch\"\n data-gr-switch\n :aria-checked=\"modelValue ? 'true' : 'false'\"\n :aria-label=\"ariaLabel\"\n :disabled=\"disabled\"\n class=\"inline-flex items-center gap-2 select-none disabled:opacity-50 disabled:cursor-not-allowed\"\n @click=\"toggle\"\n >\n <span\n data-testid=\"gr-switch-track\"\n data-gr-switch-track\n :class=\"trackClass\"\n :style=\"trackStyle\"\n >\n <span\n data-testid=\"gr-switch-thumb\"\n data-gr-switch-thumb\n :class=\"thumbClass\"\n aria-hidden=\"true\"\n />\n </span>\n <span\n v-if=\"$slots.default\"\n data-gr-switch-label\n :class=\"labelClass\"\n >\n <slot />\n </span>\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nimport { useGrComponentSize } from '../GrConfigProvider/context'\n\nimport {\n grSwitchLabelClass,\n grSwitchThumbClass,\n grSwitchTrackClass,\n type GrSwitchSize,\n} from './grSwitchStyles'\n\nexport type {GrSwitchSize} from './grSwitchStyles'\n\n/**\n * Пропсы публичного GR-примитива «Switch».\n */\nexport interface GrSwitchProps {\n modelValue: boolean\n disabled?: boolean\n ariaLabel?: string\n size?: GrSwitchSize\n /** Кастомный цвет фона в активном состоянии. Если не задан — `var(--gr-primary)`. */\n activeBackgroundColor?: string\n /** Кастомный цвет фона в неактивном состоянии. Если не задан — `var(--gr-muted)`. */\n inactiveBackgroundColor?: string\n}\n\nconst getCustomColor = (value?: string) => value?.trim() || undefined\n\nconst props = withDefaults(\n defineProps<GrSwitchProps>(),\n {\n disabled: false,\n ariaLabel: undefined,\n size: undefined,\n activeBackgroundColor: undefined,\n inactiveBackgroundColor: undefined,\n },\n)\n\n// Эффективный размер: локальный проп → `GrConfigProvider` → дефолт компонента.\nconst resolvedSize = useGrComponentSize(() => props.size, {\n component: 'GrSwitch',\n supported: ['sm', 'md', 'lg'],\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst trackClass = computed(() => grSwitchTrackClass(resolvedSize.value))\n\nconst trackStyle = computed(() => {\n const isChecked = props.modelValue\n const defaultBackgroundColor = isChecked ? 'var(--gr-primary)' : 'var(--gr-muted)'\n const customBackgroundColor = getCustomColor(\n isChecked ? props.activeBackgroundColor : props.inactiveBackgroundColor,\n )\n const backgroundColor = customBackgroundColor ?? defaultBackgroundColor\n\n return {\n '--gr-switch-track-bg': backgroundColor,\n '--gr-switch-track-brd': customBackgroundColor\n ? backgroundColor\n : isChecked\n ? 'var(--gr-primary)'\n : 'var(--gr-brd)',\n backgroundColor: 'var(--gr-switch-track-bg)',\n }\n})\n\nconst thumbClass = computed(() => grSwitchThumbClass({size: resolvedSize.value, checked: props.modelValue}))\n\nconst labelClass = computed(() => grSwitchLabelClass(resolvedSize.value))\n\nfunction toggle(): void {\n if (props.disabled) {\n return\n }\n\n emit('update:modelValue', !props.modelValue)\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n role=\"switch\"\n data-gr-switch\n :aria-checked=\"modelValue ? 'true' : 'false'\"\n :aria-label=\"ariaLabel\"\n :disabled=\"disabled\"\n class=\"inline-flex items-center gap-2 select-none disabled:opacity-50 disabled:cursor-not-allowed\"\n @click=\"toggle\"\n >\n <span\n data-testid=\"gr-switch-track\"\n data-gr-switch-track\n :class=\"trackClass\"\n :style=\"trackStyle\"\n >\n <span\n data-testid=\"gr-switch-thumb\"\n data-gr-switch-thumb\n :class=\"thumbClass\"\n aria-hidden=\"true\"\n />\n </span>\n <span\n v-if=\"$slots.default\"\n data-gr-switch-label\n :class=\"labelClass\"\n >\n <slot />\n </span>\n </button>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EA4BA,MAAM,kBAAkB,UAAmB,OAAO,KAAK,KAAK,KAAA;EAE5D,MAAM,QAAQ;EAYd,MAAM,eAAe,yBAAyB,MAAM,MAAM;GACxD,WAAW;GACX,WAAW;IAAC;IAAM;IAAM;GAAI;EAC9B,CAAC;EAED,MAAM,OAAO;EAIb,MAAM,aAAa,eAAe,mBAAmB,aAAa,KAAK,CAAC;EAExE,MAAM,aAAa,eAAe;GAChC,MAAM,YAAY,MAAM;GACxB,MAAM,yBAAyB,YAAY,sBAAsB;GACjE,MAAM,wBAAwB,eAC1B,YAAY,MAAM,wBAAwB,MAAM,uBACpD;GACA,MAAM,kBAAkB,yBAAyB;GAEjD,OAAO;IACL,wBAAwB;IACxB,yBAAyB,wBACnB,kBACA,YACI,sBACA;IACV,iBAAiB;GACnB;EACF,CAAC;EAED,MAAM,aAAa,eAAe,mBAAmB;GAAC,MAAM,aAAa;GAAO,SAAS,MAAM;EAAU,CAAC,CAAC;EAE3G,MAAM,aAAa,eAAe,mBAAmB,aAAa,KAAK,CAAC;EAExE,SAAS,SAAe;GACtB,IAAI,MAAM,UACR;GAGF,KAAK,qBAAqB,CAAC,MAAM,UAAU;EAC7C;;uBAIE,mBA8BS,UAAA;IA7BL,MAAK;IACL,MAAK;IACL,kBAAA;IACC,gBAAc,QAAA,aAAU,SAAA;IACxB,cAAY,QAAA;IACZ,UAAU,QAAA;IACX,OAAM;IACL,SAAO;OAEV,mBAYO,QAAA;IAXH,eAAY;IACZ,wBAAA;IACC,OAAK,eAAE,WAAA,KAAU;IACjB,OAAK,eAAE,WAAA,KAAU;OAEpB,mBAKE,QAAA;IAJE,eAAY;IACZ,wBAAA;IACC,OAAK,eAAE,WAAA,KAAU;IAClB,eAAY;qBAIRA,KAAAA,OAAO,WAAA,UAAA,GADjB,mBAMO,QAAA;;IAJH,wBAAA;IACC,OAAK,eAAE,WAAA,KAAU;OAEpB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,GAAA,UAAA"}
@@ -1,3 +1,3 @@
1
- import { n as grSwitchSafelist, t as grSwitchConfig } from "../../chunks/config-DezDih8_.js";
2
- import { t as GrSwitch_default } from "./chunks/GrSwitch-DAioyccZ.js";
1
+ import { n as grSwitchSafelist, t as grSwitchConfig } from "../../chunks/config-LqDC_rvp.js";
2
+ import { t as GrSwitch_default } from "./chunks/GrSwitch-CJdRvS0s.js";
3
3
  export { GrSwitch_default as GrSwitch, GrSwitch_default as default, grSwitchConfig, grSwitchSafelist };