@feugene/granularity 0.12.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 (496) 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-1uSYl98Y2.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-BX1JTrkV.js.map +1 -0
  21. package/dist/chunks/config-BXtAmU3s.js.map +1 -0
  22. package/dist/chunks/config-BZFUM3Ky.js +75 -0
  23. package/dist/chunks/config-BZFUM3Ky.js.map +1 -0
  24. package/dist/chunks/{config-DUcu1D682.js → config-BmNT0Fmx.js} +2 -2
  25. package/dist/chunks/config-BmNT0Fmx.js.map +1 -0
  26. package/dist/chunks/{config-C49QUoJL.js → config-BvVq2gbd.js} +1 -1
  27. package/dist/chunks/{config-C49QUoJL.js.map → config-BvVq2gbd.js.map} +1 -1
  28. package/dist/chunks/{config-CrG1XiE72.js → config-C4hJxXDa.js} +5 -5
  29. package/dist/chunks/config-C4hJxXDa.js.map +1 -0
  30. package/dist/chunks/config-CB4RVt9M.js +66 -0
  31. package/dist/chunks/config-CB4RVt9M.js.map +1 -0
  32. package/dist/chunks/config-CGHLoBlH2.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-BIRO0vDJ.js → config-DPDFYzIa.js} +2 -2
  38. package/dist/chunks/config-DPDFYzIa.js.map +1 -0
  39. package/dist/chunks/{config-DnvPqu4g2.js → config-DRKXJ9PW2.js} +1 -1
  40. package/dist/chunks/{config-DnvPqu4g2.js.map → config-DRKXJ9PW2.js.map} +1 -1
  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-Dqy0rPPO2.js.map +1 -0
  48. package/dist/chunks/config-Droqn55j.js +8 -0
  49. package/dist/chunks/config-Droqn55j.js.map +1 -0
  50. package/dist/chunks/config-JpHA4Xx0.js.map +1 -0
  51. package/dist/chunks/{config-C4snOIXg.js → config-KXuionN3.js} +1 -1
  52. package/dist/chunks/{config-C4snOIXg.js.map → config-KXuionN3.js.map} +1 -1
  53. package/dist/chunks/{config-DezDih8_.js → config-LqDC_rvp.js} +2 -2
  54. package/dist/chunks/config-LqDC_rvp.js.map +1 -0
  55. package/dist/chunks/config-QaIc_gRa2.js.map +1 -0
  56. package/dist/chunks/config-U4m9PSql2.js.map +1 -0
  57. package/dist/chunks/{config-B7IIWGt_2.js → config-XmTv4pnI.js} +2 -2
  58. package/dist/chunks/config-XmTv4pnI.js.map +1 -0
  59. package/dist/chunks/config-eXB87DOi.js.map +1 -0
  60. package/dist/chunks/{config-C7NpDrfO.js → config-gZWR75Bh2.js} +1 -1
  61. package/dist/chunks/config-gZWR75Bh2.js.map +1 -0
  62. package/dist/chunks/config-ipvU0lzP.js.map +1 -0
  63. package/dist/chunks/config-xR4XVmcy2.js.map +1 -0
  64. package/dist/chunks/context-Bfrgsluh.js +9 -0
  65. package/dist/chunks/context-Bfrgsluh.js.map +1 -0
  66. package/dist/chunks/context-DfWYCBB-.js +129 -0
  67. package/dist/chunks/context-DfWYCBB-.js.map +1 -0
  68. package/dist/chunks/{en-CfkDa4GX.js → en-Cr6EkG8c.js} +46 -4
  69. package/dist/chunks/en-Cr6EkG8c.js.map +1 -0
  70. package/dist/chunks/{es-CgaLnFYx.js → es-DuYb1Qju.js} +3 -3
  71. package/dist/chunks/{es-CgaLnFYx.js.map → es-DuYb1Qju.js.map} +1 -1
  72. package/dist/chunks/{es-FkgECuCm.js → es-i08e9Sdo.js} +46 -4
  73. package/dist/chunks/es-i08e9Sdo.js.map +1 -0
  74. package/dist/chunks/{grBadgeStyles-DrycBuKT.js → grBadgeStyles-D3dFjr_N.js} +12 -12
  75. package/dist/chunks/grBadgeStyles-D3dFjr_N.js.map +1 -0
  76. package/dist/chunks/{grButtonStyles-C7Yga_Q1.js → grButtonStyles-DRBgDmOp.js} +28 -28
  77. package/dist/chunks/grButtonStyles-DRBgDmOp.js.map +1 -0
  78. package/dist/chunks/{grDropdownStyles-B_-DKytw.js → grDropdownStyles-HBPkghVr.js} +2 -2
  79. package/dist/chunks/{grDropdownStyles-B_-DKytw.js.map → grDropdownStyles-HBPkghVr.js.map} +1 -1
  80. package/dist/chunks/{grModalStyles-DWd3i05Q.js → grModalStyles-D8-shx9A.js} +1 -1
  81. package/dist/chunks/grModalStyles-D8-shx9A.js.map +1 -0
  82. package/dist/chunks/{grSelectStyles-CLK5hRd3.js → grSelectStyles-CwMUQrBZ.js} +12 -12
  83. package/dist/chunks/grSelectStyles-CwMUQrBZ.js.map +1 -0
  84. package/dist/chunks/{grStyle-Blc9otAx.js → grStyle-CdvxTXPH.js} +2 -2
  85. package/dist/chunks/grStyle-CdvxTXPH.js.map +1 -0
  86. package/dist/chunks/{granularityI18n-DoV7Ca2m.js → granularityI18n-SH0I--GW.js} +1 -1
  87. package/dist/chunks/{granularityI18n-DoV7Ca2m.js.map → granularityI18n-SH0I--GW.js.map} +1 -1
  88. package/dist/chunks/{ru-Bl8CxpEa.js → ru-B5XOOYZt.js} +46 -4
  89. package/dist/chunks/ru-B5XOOYZt.js.map +1 -0
  90. package/dist/chunks/{safelist-Do2RtzLB.js → safelist-BvO8HPnE.js} +1 -1
  91. package/dist/chunks/{safelist-Do2RtzLB.js.map → safelist-BvO8HPnE.js.map} +1 -1
  92. package/dist/chunks/shared-D-v9lit0.js +188 -0
  93. package/dist/chunks/shared-D-v9lit0.js.map +1 -0
  94. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js +251 -0
  95. package/dist/components/GrAlert/chunks/GrAlert-B9gmpoPC.js.map +1 -0
  96. package/dist/components/GrAlert/index.js +2 -2
  97. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js +499 -0
  98. package/dist/components/GrAutocomplete/chunks/GrAutocomplete-BVLoQ5tZ.js.map +1 -0
  99. package/dist/components/GrAutocomplete/index.js +3 -0
  100. package/dist/components/GrAvatar/chunks/{GrAvatar-96CpTCq5.js → GrAvatar-CTOUVBF7.js} +1 -1
  101. package/dist/components/GrAvatar/chunks/GrAvatar-CTOUVBF7.js.map +1 -0
  102. package/dist/components/GrAvatar/index.js +1 -1
  103. package/dist/components/GrBadge/chunks/{GrBadge-B77XlaqE.js → GrBadge-D1jefy4S.js} +12 -8
  104. package/dist/components/GrBadge/chunks/GrBadge-D1jefy4S.js.map +1 -0
  105. package/dist/components/GrBadge/index.js +2 -2
  106. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-CcktMOdg.js → GrBadgeWrap-DWDxHdiQ.js} +1 -1
  107. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-DWDxHdiQ.js.map +1 -0
  108. package/dist/components/GrBadgeWrap/index.js +1 -1
  109. package/dist/components/GrBottomNav/chunks/{GrBottomNav-usuMgG8_.js → GrBottomNav-vSE4LXmk.js} +2 -2
  110. package/dist/components/GrBottomNav/chunks/GrBottomNav-vSE4LXmk.js.map +1 -0
  111. package/dist/components/GrBottomNav/index.js +1 -1
  112. package/dist/components/GrButton/chunks/{GrButton-BlffdeJr.js → GrButton-DCi4CUpo.js} +18 -14
  113. package/dist/components/GrButton/chunks/GrButton-DCi4CUpo.js.map +1 -0
  114. package/dist/components/GrButton/index.js +4 -4
  115. package/dist/components/GrCard/chunks/{GrCard-DUNMkuHW.js → GrCard-CxCjyHMb.js} +1 -1
  116. package/dist/components/GrCard/chunks/GrCard-CxCjyHMb.js.map +1 -0
  117. package/dist/components/GrCard/index.js +1 -1
  118. package/dist/components/GrCheckbox/chunks/{GrCheckbox-DJhzZZdO.js → GrCheckbox-BbIDRXtl.js} +5 -5
  119. package/dist/components/GrCheckbox/chunks/GrCheckbox-BbIDRXtl.js.map +1 -0
  120. package/dist/components/GrCheckbox/index.js +1 -1
  121. package/dist/components/GrCollapse/chunks/{GrCollapse-CPPLh_xU.js → GrCollapse-DApXztn8.js} +6 -6
  122. package/dist/components/GrCollapse/chunks/GrCollapse-DApXztn8.js.map +1 -0
  123. package/dist/components/GrCollapse/index.js +2 -2
  124. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js +410 -0
  125. package/dist/components/GrCommandPalette/chunks/GrCommandPalette-6OyvNbek.js.map +1 -0
  126. package/dist/components/GrCommandPalette/index.js +3 -0
  127. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js +57 -0
  128. package/dist/components/GrConfigProvider/chunks/GrConfigProvider-BtyeBGm8.js.map +1 -0
  129. package/dist/components/GrConfigProvider/index.js +4 -0
  130. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-D8CkOtqv.js → GrConfirmDialog-e4120mWw.js} +5 -5
  131. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js.map +1 -0
  132. package/dist/components/GrConfirmDialog/index.js +2 -2
  133. package/dist/components/GrDataTable/chunks/{GrDataTable-Ds5OeGat.js → GrDataTable-C1CzxV0p.js} +127 -25
  134. package/dist/components/GrDataTable/chunks/GrDataTable-C1CzxV0p.js.map +1 -0
  135. package/dist/components/GrDataTable/index.js +2 -2
  136. package/dist/components/GrDialog/chunks/{GrDialog-Ctucxju9.js → GrDialog-BPMvDHOz.js} +5 -5
  137. package/dist/components/GrDialog/chunks/GrDialog-BPMvDHOz.js.map +1 -0
  138. package/dist/components/GrDialog/index.js +1 -1
  139. package/dist/components/GrDialogService/chunks/{GrDialogService-CU1Fbonc.js → GrDialogService-CYXCTGm3.js} +36 -11
  140. package/dist/components/GrDialogService/chunks/GrDialogService-CYXCTGm3.js.map +1 -0
  141. package/dist/components/GrDialogService/index.js +2 -2
  142. package/dist/components/GrDivider/chunks/{GrDivider-5bcE-BB4.js → GrDivider-BdENZ1w0.js} +5 -5
  143. package/dist/components/GrDivider/chunks/GrDivider-BdENZ1w0.js.map +1 -0
  144. package/dist/components/GrDivider/index.js +1 -1
  145. package/dist/components/GrDrawer/chunks/{GrDrawer-SLGKCY2A.js → GrDrawer-KevdZ5BB.js} +5 -5
  146. package/dist/components/GrDrawer/chunks/GrDrawer-KevdZ5BB.js.map +1 -0
  147. package/dist/components/GrDrawer/index.js +2 -2
  148. package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js → GrDropdown-BKoy8hm-.js} +1 -1
  149. package/dist/components/GrDropdown/chunks/{GrDropdown-BnDMYP8v.js.map → GrDropdown-BKoy8hm-.js.map} +1 -1
  150. package/dist/components/GrDropdown/index.js +2 -2
  151. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu--g9Vofcq.js → GrDropdownMenu-zCatXzmt.js} +11 -11
  152. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu-zCatXzmt.js.map +1 -0
  153. package/dist/components/GrDropdownMenu/index.js +1 -1
  154. package/dist/components/GrEmptyState/chunks/{GrEmptyState-CA3BiTV7.js → GrEmptyState-CNb0BzjG.js} +3 -3
  155. package/dist/components/GrEmptyState/chunks/GrEmptyState-CNb0BzjG.js.map +1 -0
  156. package/dist/components/GrEmptyState/index.js +1 -1
  157. package/dist/components/GrFileUpload/chunks/{GrFileUpload-DvWPpiJS.js → GrFileUpload-CnLgUGDF.js} +12 -12
  158. package/dist/components/GrFileUpload/chunks/GrFileUpload-CnLgUGDF.js.map +1 -0
  159. package/dist/components/GrFileUpload/index.js +1 -1
  160. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js +234 -0
  161. package/dist/components/GrForm/chunks/GrForm-CdaFjcyl.js.map +1 -0
  162. package/dist/components/GrForm/index.js +4 -0
  163. package/dist/components/GrFormField/chunks/{GrFormField-DnfMHx_U.js → GrFormField-CXCDBd99.js} +41 -14
  164. package/dist/components/GrFormField/chunks/GrFormField-CXCDBd99.js.map +1 -0
  165. package/dist/components/GrFormField/index.js +1 -1
  166. package/dist/components/GrFormFile/chunks/{GrFormFile-CXcqqdvV.js → GrFormFile-CqacSbUl.js} +9 -9
  167. package/dist/components/GrFormFile/chunks/GrFormFile-CqacSbUl.js.map +1 -0
  168. package/dist/components/GrFormFile/index.js +1 -1
  169. package/dist/components/GrFormSection/chunks/{GrFormSection-Ce21jcgo.js → GrFormSection-C3w9DQJf.js} +1 -1
  170. package/dist/components/GrFormSection/chunks/GrFormSection-C3w9DQJf.js.map +1 -0
  171. package/dist/components/GrFormSection/index.js +1 -1
  172. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js → GrImageViewer-DDLJkvIU.js} +1 -1
  173. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dla9IBkd.js.map → GrImageViewer-DDLJkvIU.js.map} +1 -1
  174. package/dist/components/GrImageViewer/index.js +1 -1
  175. package/dist/components/GrInput/chunks/{GrInput-B8dd3JaA.js → GrInput-C1VBL0dg.js} +18 -15
  176. package/dist/components/GrInput/chunks/GrInput-C1VBL0dg.js.map +1 -0
  177. package/dist/components/GrInput/index.js +2 -2
  178. package/dist/components/GrInputTag/chunks/{GrInputTag-zMgFqp2g.js → GrInputTag-BMk9jm42.js} +6 -6
  179. package/dist/components/GrInputTag/chunks/GrInputTag-BMk9jm42.js.map +1 -0
  180. package/dist/components/GrInputTag/index.js +2 -2
  181. package/dist/components/GrKbd/chunks/{GrKbd-BEoYxWhE.js → GrKbd-DTspwtoN.js} +1 -1
  182. package/dist/components/GrKbd/chunks/GrKbd-DTspwtoN.js.map +1 -0
  183. package/dist/components/GrKbd/index.js +1 -1
  184. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js → GrLink-BP0YrnL9.js} +1 -1
  185. package/dist/components/GrLink/chunks/{GrLink-CYUe-Q8k.js.map → GrLink-BP0YrnL9.js.map} +1 -1
  186. package/dist/components/GrLink/index.js +2 -2
  187. package/dist/components/GrList/chunks/{GrList-Dx772Ns4.js → GrList-5RA-tZzE.js} +3 -3
  188. package/dist/components/GrList/chunks/GrList-5RA-tZzE.js.map +1 -0
  189. package/dist/components/GrList/index.js +1 -1
  190. package/dist/components/GrLoading/chunks/{GrLoading--X_7rdbb.js → GrLoading-fRDtVfi7.js} +3 -3
  191. package/dist/components/GrLoading/chunks/GrLoading-fRDtVfi7.js.map +1 -0
  192. package/dist/components/GrLoading/index.js +2 -2
  193. package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js → GrModal-BTu1-5eY.js} +1 -1
  194. package/dist/components/GrModal/chunks/{GrModal-C0GZrHN3.js.map → GrModal-BTu1-5eY.js.map} +1 -1
  195. package/dist/components/GrModal/index.js +3 -3
  196. package/dist/components/GrNavbar/chunks/{GrNavbar-DW3MiIIf.js → GrNavbar-keKT_mIM.js} +3 -3
  197. package/dist/components/GrNavbar/chunks/GrNavbar-keKT_mIM.js.map +1 -0
  198. package/dist/components/GrNavbar/index.js +1 -1
  199. package/dist/components/GrNumberInput/chunks/{GrNumberInput-DxCEvL7V.js → GrNumberInput-l9ZOHG9D.js} +19 -17
  200. package/dist/components/GrNumberInput/chunks/GrNumberInput-l9ZOHG9D.js.map +1 -0
  201. package/dist/components/GrNumberInput/index.js +2 -2
  202. package/dist/components/GrPagination/chunks/{GrPagination-mlyfLjQY.js → GrPagination-C5Y69CuK.js} +59 -16
  203. package/dist/components/GrPagination/chunks/GrPagination-C5Y69CuK.js.map +1 -0
  204. package/dist/components/GrPagination/index.js +2 -2
  205. package/dist/components/GrProgressBar/chunks/{GrProgressBar-CC3z-Zqp.js → GrProgressBar-Dqg4Fj9S.js} +2 -2
  206. package/dist/components/GrProgressBar/chunks/GrProgressBar-Dqg4Fj9S.js.map +1 -0
  207. package/dist/components/GrProgressBar/index.js +2 -2
  208. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-C-_BMNuY.js → GrPromptDialog-DNUjRVB9.js} +7 -7
  209. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js.map +1 -0
  210. package/dist/components/GrPromptDialog/index.js +2 -2
  211. package/dist/components/GrRadio/chunks/{GrRadio-Dr-pvs_9.js → GrRadio-DlhxPGqf.js} +5 -7
  212. package/dist/components/GrRadio/chunks/GrRadio-DlhxPGqf.js.map +1 -0
  213. package/dist/components/GrRadio/index.js +2 -2
  214. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-nOdvfV_g.js → GrRadioGroup-BXt9iw4q.js} +7 -5
  215. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BXt9iw4q.js.map +1 -0
  216. package/dist/components/GrRadioGroup/index.js +2 -2
  217. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js +241 -0
  218. package/dist/components/GrRating/chunks/GrRating-Co-3Rk4h.js.map +1 -0
  219. package/dist/components/GrRating/index.js +3 -0
  220. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js → GrResponseErrorBanner-2CvM7Z08.js} +2 -2
  221. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-BWJNe2gr.js.map → GrResponseErrorBanner-2CvM7Z08.js.map} +1 -1
  222. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js → GrResponseErrorBanner-C8NGx8pE.js} +3 -3
  223. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-Cdu9ekK9.js.map → GrResponseErrorBanner-C8NGx8pE.js.map} +1 -1
  224. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  225. package/dist/components/GrSegmented/chunks/{GrSegmented-C1y0UXpQ.js → GrSegmented-CTd3n4PA.js} +14 -11
  226. package/dist/components/GrSegmented/chunks/GrSegmented-CTd3n4PA.js.map +1 -0
  227. package/dist/components/GrSegmented/index.js +2 -2
  228. package/dist/components/GrSelect/chunks/{GrSelect-BVCmitqa.js → GrSelect-Dn3FgJ3Z.js} +161 -75
  229. package/dist/components/GrSelect/chunks/GrSelect-Dn3FgJ3Z.js.map +1 -0
  230. package/dist/components/GrSelect/index.js +2 -2
  231. package/dist/components/GrSidebar/chunks/{GrSidebar-DkWozzwA.js → GrSidebar-cvnzBfj3.js} +7 -7
  232. package/dist/components/GrSidebar/chunks/GrSidebar-cvnzBfj3.js.map +1 -0
  233. package/dist/components/GrSidebar/index.js +2 -2
  234. package/dist/components/GrSkeleton/chunks/{GrSkeleton-DsN-_CDZ.js → GrSkeleton-BucA5F4J.js} +1 -1
  235. package/dist/components/GrSkeleton/chunks/GrSkeleton-BucA5F4J.js.map +1 -0
  236. package/dist/components/GrSkeleton/index.js +2 -2
  237. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js +286 -0
  238. package/dist/components/GrSlider/chunks/GrSlider-CzzJ3bD-.js.map +1 -0
  239. package/dist/components/GrSlider/index.js +3 -0
  240. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js +128 -0
  241. package/dist/components/GrStatistic/chunks/GrStatistic-gHiAwrX5.js.map +1 -0
  242. package/dist/components/GrStatistic/index.js +3 -0
  243. package/dist/components/GrSwitch/chunks/{GrSwitch-DAioyccZ.js → GrSwitch-CJdRvS0s.js} +16 -7
  244. package/dist/components/GrSwitch/chunks/GrSwitch-CJdRvS0s.js.map +1 -0
  245. package/dist/components/GrSwitch/index.js +2 -2
  246. package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js → GrTabPanels-DeEMgb_y.js} +1 -1
  247. package/dist/components/GrTabPanels/chunks/{GrTabPanels-DbKybwe-.js.map → GrTabPanels-DeEMgb_y.js.map} +1 -1
  248. package/dist/components/GrTabPanels/index.js +2 -2
  249. package/dist/components/GrTable/chunks/{GrTable-Db3hRnKA.js → GrTable-sNvsA8wa.js} +24 -11
  250. package/dist/components/GrTable/chunks/GrTable-sNvsA8wa.js.map +1 -0
  251. package/dist/components/GrTable/index.js +2 -2
  252. package/dist/components/GrTabs/chunks/{GrTabs-DsLwWoRz.js → GrTabs-BqTak0SR.js} +3 -3
  253. package/dist/components/GrTabs/chunks/GrTabs-BqTak0SR.js.map +1 -0
  254. package/dist/components/GrTabs/index.js +2 -2
  255. package/dist/components/GrTextarea/chunks/{GrTextarea-CKukGlNl.js → GrTextarea-DIYBAPpP.js} +2 -2
  256. package/dist/components/GrTextarea/chunks/GrTextarea-DIYBAPpP.js.map +1 -0
  257. package/dist/components/GrTextarea/index.js +2 -2
  258. package/dist/components/GrToaster/chunks/{GrToaster-L2cu6cSR.js → GrToaster-BVHjIHcM.js} +51 -10
  259. package/dist/components/GrToaster/chunks/GrToaster-BVHjIHcM.js.map +1 -0
  260. package/dist/components/GrToaster/index.js +1 -1
  261. package/dist/components/GrTooltip/chunks/{GrTooltip-BeyZ8ssR.js → GrTooltip-BMKH2lIx.js} +3 -3
  262. package/dist/components/GrTooltip/chunks/GrTooltip-BMKH2lIx.js.map +1 -0
  263. package/dist/components/GrTooltip/index.js +1 -1
  264. package/dist/components/GrTree/chunks/{GrTree-B2_yW6g1.js → GrTree-_12ChXRQ.js} +3 -3
  265. package/dist/components/GrTree/chunks/GrTree-_12ChXRQ.js.map +1 -0
  266. package/dist/components/GrTree/index.js +1 -1
  267. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-0aM62xyu.js → GrTreeSelect-CdaLG7Xq.js} +10 -10
  268. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-CdaLG7Xq.js.map +1 -0
  269. package/dist/components/GrTreeSelect/index.js +2 -2
  270. package/dist/composables/useToast.js +3 -1
  271. package/dist/composables/useToast.js.map +1 -1
  272. package/dist/directives/loading.js +1 -1
  273. package/dist/granular-provider-node.js +6 -6
  274. package/dist/granular-provider-node.js.map +1 -1
  275. package/dist/granular-provider.js +1 -1
  276. package/dist/i18n/all.js +1 -1
  277. package/dist/i18n/index.js +1 -1
  278. package/dist/index.js +111 -93
  279. package/dist/index.js.map +1 -1
  280. package/dist/styles/base.css +2 -2
  281. package/dist/styles/index.css +6 -3
  282. package/dist/styles/preflight.css +3 -3
  283. package/dist/styles/themes/dark.css +52 -40
  284. package/dist/styles/themes/light.css +70 -45
  285. package/dist/styles/tokens.css +20 -20
  286. package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +26 -14
  287. package/dist/types/src/components/GrAlert/defaults.d.ts +17 -0
  288. package/dist/types/src/components/GrAlert/grAlertStyles.d.ts +55 -0
  289. package/dist/types/src/components/GrAlert/index.d.ts +4 -1
  290. package/dist/types/src/components/GrAutocomplete/GrAutocomplete.vue.d.ts +153 -0
  291. package/dist/types/src/components/GrAutocomplete/config.d.ts +1 -0
  292. package/dist/types/src/components/GrAutocomplete/defaults.d.ts +15 -0
  293. package/dist/types/src/components/GrAutocomplete/grAutocompleteStyles.d.ts +27 -0
  294. package/dist/types/src/components/GrAutocomplete/index.d.ts +6 -0
  295. package/dist/types/src/components/GrAutocomplete/safelist.d.ts +1 -0
  296. package/dist/types/src/components/GrAvatar/GrAvatar.vue.d.ts +1 -1
  297. package/dist/types/src/components/GrBadge/GrBadge.vue.d.ts +7 -7
  298. package/dist/types/src/components/GrBadge/defaults.d.ts +15 -0
  299. package/dist/types/src/components/GrBadge/index.d.ts +1 -0
  300. package/dist/types/src/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +1 -1
  301. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +12 -12
  302. package/dist/types/src/components/GrButton/defaults.d.ts +25 -0
  303. package/dist/types/src/components/GrButton/grButtonStyles.d.ts +2 -2
  304. package/dist/types/src/components/GrButton/index.d.ts +1 -0
  305. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +4 -4
  306. package/dist/types/src/components/GrCollapse/GrCollapse.vue.d.ts +2 -2
  307. package/dist/types/src/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
  308. package/dist/types/src/components/GrCommandPalette/GrCommandPalette.vue.d.ts +128 -0
  309. package/dist/types/src/components/GrCommandPalette/config.d.ts +1 -0
  310. package/dist/types/src/components/GrCommandPalette/filtering.d.ts +35 -0
  311. package/dist/types/src/components/GrCommandPalette/grCommandPaletteStyles.d.ts +20 -0
  312. package/dist/types/src/components/GrCommandPalette/hotkey.d.ts +23 -0
  313. package/dist/types/src/components/GrCommandPalette/index.d.ts +6 -0
  314. package/dist/types/src/components/GrCommandPalette/safelist.d.ts +1 -0
  315. package/dist/types/src/components/GrConfigProvider/GrConfigProvider.vue.d.ts +59 -0
  316. package/dist/types/src/components/GrConfigProvider/config.d.ts +1 -0
  317. package/dist/types/src/components/GrConfigProvider/context.d.ts +131 -0
  318. package/dist/types/src/components/GrConfigProvider/index.d.ts +5 -0
  319. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +2 -2
  320. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +20 -0
  321. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +1 -1
  322. package/dist/types/src/components/GrDialogService/store.d.ts +18 -0
  323. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
  324. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +1 -1
  325. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +1 -1
  326. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
  327. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +3 -3
  328. package/dist/types/src/components/GrForm/GrForm.vue.d.ts +93 -0
  329. package/dist/types/src/components/GrForm/config.d.ts +1 -0
  330. package/dist/types/src/components/GrForm/context.d.ts +27 -0
  331. package/dist/types/src/components/GrForm/index.d.ts +6 -0
  332. package/dist/types/src/components/GrForm/validation.d.ts +52 -0
  333. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +11 -1
  334. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +4 -4
  335. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +3 -3
  336. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +12 -12
  337. package/dist/types/src/components/GrInput/defaults.d.ts +18 -0
  338. package/dist/types/src/components/GrInput/grInputStyles.d.ts +1 -1
  339. package/dist/types/src/components/GrInput/index.d.ts +1 -0
  340. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
  341. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +3 -3
  342. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +3 -3
  343. package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
  344. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +10 -10
  345. package/dist/types/src/components/GrNumberInput/defaults.d.ts +14 -0
  346. package/dist/types/src/components/GrNumberInput/index.d.ts +1 -0
  347. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +18 -0
  348. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +4 -4
  349. package/dist/types/src/components/GrRadio/GrRadio.vue.d.ts +5 -5
  350. package/dist/types/src/components/GrRadio/defaults.d.ts +14 -0
  351. package/dist/types/src/components/GrRadio/grRadioStyles.d.ts +3 -3
  352. package/dist/types/src/components/GrRadio/index.d.ts +1 -0
  353. package/dist/types/src/components/GrRadioGroup/GrRadioGroup.vue.d.ts +4 -4
  354. package/dist/types/src/components/GrRadioGroup/defaults.d.ts +14 -0
  355. package/dist/types/src/components/GrRadioGroup/index.d.ts +1 -0
  356. package/dist/types/src/components/GrRating/GrRating.vue.d.ts +124 -0
  357. package/dist/types/src/components/GrRating/config.d.ts +1 -0
  358. package/dist/types/src/components/GrRating/defaults.d.ts +14 -0
  359. package/dist/types/src/components/GrRating/grRatingStyles.d.ts +21 -0
  360. package/dist/types/src/components/GrRating/index.d.ts +6 -0
  361. package/dist/types/src/components/GrRating/safelist.d.ts +1 -0
  362. package/dist/types/src/components/GrResponseErrorBanner/GrUploadErrorBanner.vue.d.ts +1 -1
  363. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +7 -7
  364. package/dist/types/src/components/GrSegmented/defaults.d.ts +15 -0
  365. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +1 -1
  366. package/dist/types/src/components/GrSegmented/index.d.ts +1 -0
  367. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +57 -17
  368. package/dist/types/src/components/GrSelect/defaults.d.ts +17 -0
  369. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +3 -3
  370. package/dist/types/src/components/GrSelect/index.d.ts +1 -0
  371. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +2 -2
  372. package/dist/types/src/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
  373. package/dist/types/src/components/GrSlider/GrSlider.vue.d.ts +88 -0
  374. package/dist/types/src/components/GrSlider/config.d.ts +1 -0
  375. package/dist/types/src/components/GrSlider/defaults.d.ts +14 -0
  376. package/dist/types/src/components/GrSlider/grSliderStyles.d.ts +36 -0
  377. package/dist/types/src/components/GrSlider/index.d.ts +6 -0
  378. package/dist/types/src/components/GrSlider/safelist.d.ts +1 -0
  379. package/dist/types/src/components/GrStatistic/GrStatistic.vue.d.ts +116 -0
  380. package/dist/types/src/components/GrStatistic/config.d.ts +1 -0
  381. package/dist/types/src/components/GrStatistic/formatStatisticValue.d.ts +16 -0
  382. package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +24 -0
  383. package/dist/types/src/components/GrStatistic/index.d.ts +6 -0
  384. package/dist/types/src/components/GrStatistic/safelist.d.ts +1 -0
  385. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +4 -4
  386. package/dist/types/src/components/GrSwitch/defaults.d.ts +14 -0
  387. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
  388. package/dist/types/src/components/GrSwitch/index.d.ts +1 -0
  389. package/dist/types/src/components/GrTable/GrTable.vue.d.ts +16 -0
  390. package/dist/types/src/components/GrTextarea/GrTextarea.vue.d.ts +5 -5
  391. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +19 -2
  392. package/dist/types/src/components/GrToaster/index.d.ts +1 -1
  393. package/dist/types/src/components/GrTooltip/GrTooltip.vue.d.ts +1 -1
  394. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +1 -1
  395. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  396. package/dist/types/src/composables/useToast.d.ts +24 -0
  397. package/dist/types/src/granular-provider/shared.d.ts +7 -0
  398. package/dist/types/src/i18n/messages/en.d.ts +74 -0
  399. package/dist/types/src/i18n/messages/es.d.ts +74 -0
  400. package/dist/types/src/i18n/messages/ru.d.ts +74 -0
  401. package/dist/types/src/index.d.ts +7 -0
  402. package/dist/web-types.json +1308 -271
  403. package/package.json +29 -1
  404. package/dist/chunks/config-1uSYl98Y2.js.map +0 -1
  405. package/dist/chunks/config-8Pcutu1j2.js.map +0 -1
  406. package/dist/chunks/config-B7IIWGt_2.js.map +0 -1
  407. package/dist/chunks/config-BIRO0vDJ.js.map +0 -1
  408. package/dist/chunks/config-BLHqZhy-2.js.map +0 -1
  409. package/dist/chunks/config-BOlr7qw7.js.map +0 -1
  410. package/dist/chunks/config-BUHuGBik.js.map +0 -1
  411. package/dist/chunks/config-BX1JTrkV2.js.map +0 -1
  412. package/dist/chunks/config-BXtAmU3s2.js.map +0 -1
  413. package/dist/chunks/config-C7NpDrfO.js.map +0 -1
  414. package/dist/chunks/config-CGHLoBlH.js.map +0 -1
  415. package/dist/chunks/config-ClhKPJvg.js.map +0 -1
  416. package/dist/chunks/config-Cpi9Mh2J.js.map +0 -1
  417. package/dist/chunks/config-CrG1XiE72.js.map +0 -1
  418. package/dist/chunks/config-DUcu1D682.js.map +0 -1
  419. package/dist/chunks/config-D_R56_gT.js.map +0 -1
  420. package/dist/chunks/config-DezDih8_.js.map +0 -1
  421. package/dist/chunks/config-JpHA4Xx02.js.map +0 -1
  422. package/dist/chunks/config-QaIc_gRa.js.map +0 -1
  423. package/dist/chunks/config-U4m9PSql.js.map +0 -1
  424. package/dist/chunks/config-eXB87DOi2.js.map +0 -1
  425. package/dist/chunks/config-eYLZYOUS2.js.map +0 -1
  426. package/dist/chunks/config-ipvU0lzP2.js.map +0 -1
  427. package/dist/chunks/config-xR4XVmcy.js.map +0 -1
  428. package/dist/chunks/en-CfkDa4GX.js.map +0 -1
  429. package/dist/chunks/es-FkgECuCm.js.map +0 -1
  430. package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +0 -1
  431. package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +0 -1
  432. package/dist/chunks/grModalStyles-DWd3i05Q.js.map +0 -1
  433. package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +0 -1
  434. package/dist/chunks/grStyle-Blc9otAx.js.map +0 -1
  435. package/dist/chunks/ru-Bl8CxpEa.js.map +0 -1
  436. package/dist/chunks/shared-B6Ay2081.js +0 -174
  437. package/dist/chunks/shared-B6Ay2081.js.map +0 -1
  438. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js +0 -163
  439. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +0 -1
  440. package/dist/components/GrAvatar/chunks/GrAvatar-96CpTCq5.js.map +0 -1
  441. package/dist/components/GrBadge/chunks/GrBadge-B77XlaqE.js.map +0 -1
  442. package/dist/components/GrBadgeWrap/chunks/GrBadgeWrap-CcktMOdg.js.map +0 -1
  443. package/dist/components/GrBottomNav/chunks/GrBottomNav-usuMgG8_.js.map +0 -1
  444. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +0 -1
  445. package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +0 -1
  446. package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +0 -1
  447. package/dist/components/GrCollapse/chunks/GrCollapse-CPPLh_xU.js.map +0 -1
  448. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js.map +0 -1
  449. package/dist/components/GrDataTable/chunks/GrDataTable-Ds5OeGat.js.map +0 -1
  450. package/dist/components/GrDialog/chunks/GrDialog-Ctucxju9.js.map +0 -1
  451. package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js.map +0 -1
  452. package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js.map +0 -1
  453. package/dist/components/GrDrawer/chunks/GrDrawer-SLGKCY2A.js.map +0 -1
  454. package/dist/components/GrDropdownMenu/chunks/GrDropdownMenu--g9Vofcq.js.map +0 -1
  455. package/dist/components/GrEmptyState/chunks/GrEmptyState-CA3BiTV7.js.map +0 -1
  456. package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +0 -1
  457. package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js.map +0 -1
  458. package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +0 -1
  459. package/dist/components/GrFormSection/chunks/GrFormSection-Ce21jcgo.js.map +0 -1
  460. package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js.map +0 -1
  461. package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +0 -1
  462. package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js.map +0 -1
  463. package/dist/components/GrList/chunks/GrList-Dx772Ns4.js.map +0 -1
  464. package/dist/components/GrLoading/chunks/GrLoading--X_7rdbb.js.map +0 -1
  465. package/dist/components/GrNavbar/chunks/GrNavbar-DW3MiIIf.js.map +0 -1
  466. package/dist/components/GrNumberInput/chunks/GrNumberInput-DxCEvL7V.js.map +0 -1
  467. package/dist/components/GrPagination/chunks/GrPagination-mlyfLjQY.js.map +0 -1
  468. package/dist/components/GrProgressBar/chunks/GrProgressBar-CC3z-Zqp.js.map +0 -1
  469. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js.map +0 -1
  470. package/dist/components/GrRadio/chunks/GrRadio-Dr-pvs_9.js.map +0 -1
  471. package/dist/components/GrRadioGroup/chunks/GrRadioGroup-nOdvfV_g.js.map +0 -1
  472. package/dist/components/GrSegmented/chunks/GrSegmented-C1y0UXpQ.js.map +0 -1
  473. package/dist/components/GrSelect/chunks/GrSelect-BVCmitqa.js.map +0 -1
  474. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +0 -1
  475. package/dist/components/GrSkeleton/chunks/GrSkeleton-DsN-_CDZ.js.map +0 -1
  476. package/dist/components/GrSwitch/chunks/GrSwitch-DAioyccZ.js.map +0 -1
  477. package/dist/components/GrTable/chunks/GrTable-Db3hRnKA.js.map +0 -1
  478. package/dist/components/GrTabs/chunks/GrTabs-DsLwWoRz.js.map +0 -1
  479. package/dist/components/GrTextarea/chunks/GrTextarea-CKukGlNl.js.map +0 -1
  480. package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js.map +0 -1
  481. package/dist/components/GrTooltip/chunks/GrTooltip-BeyZ8ssR.js.map +0 -1
  482. package/dist/components/GrTree/chunks/GrTree-B2_yW6g1.js.map +0 -1
  483. package/dist/components/GrTreeSelect/chunks/GrTreeSelect-0aM62xyu.js.map +0 -1
  484. package/dist/chunks/{config-8Pcutu1j2.js → config-8Pcutu1j.js} +0 -0
  485. package/dist/chunks/{config-BLHqZhy-2.js → config-BLHqZhy-.js} +0 -0
  486. package/dist/chunks/{config-BUHuGBik.js → config-BUHuGBik2.js} +0 -0
  487. package/dist/chunks/{config-BX1JTrkV2.js → config-BX1JTrkV.js} +0 -0
  488. package/dist/chunks/{config-BXtAmU3s2.js → config-BXtAmU3s.js} +0 -0
  489. package/dist/chunks/{config-CGHLoBlH.js → config-CGHLoBlH2.js} +0 -0
  490. package/dist/chunks/{config-Cpi9Mh2J.js → config-Dqy0rPPO2.js} +1 -1
  491. /package/dist/chunks/{config-JpHA4Xx02.js → config-JpHA4Xx0.js} +0 -0
  492. /package/dist/chunks/{config-QaIc_gRa.js → config-QaIc_gRa2.js} +0 -0
  493. /package/dist/chunks/{config-U4m9PSql.js → config-U4m9PSql2.js} +0 -0
  494. /package/dist/chunks/{config-eXB87DOi2.js → config-eXB87DOi.js} +0 -0
  495. /package/dist/chunks/{config-ipvU0lzP2.js → config-ipvU0lzP.js} +0 -0
  496. /package/dist/chunks/{config-xR4XVmcy.js → config-xR4XVmcy2.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrConfirmDialog-e4120mWw.js","names":[],"sources":["../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue","../../../../src/components/GrConfirmDialog/GrConfirmDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--gr-muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.\n *\n * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:\n * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,\n * `headerConfig`, `footerConfig`, `bodyConfig`, `closeLabel`.\n *\n * Клик по «Confirm»/«Cancel» эмитит одноимённое событие и закрывает диалог\n * через `update:modelValue`.\n */\nimport { computed } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrDialog from '../GrDialog/GrDialog.vue'\nimport GrResponseErrorBanner from '../GrResponseErrorBanner/GrResponseErrorBanner.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\nimport type { GrButtonSize, GrButtonTone, GrButtonVariant } from '../GrButton'\nimport type { GrDialogSectionConfig, GrDialogSize } from '../GrDialog'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nexport interface GrConfirmDialogProps {\n modelValue: boolean\n title?: string\n description?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n buttonSize?: GrButtonSize\n confirmText?: string\n cancelText?: string\n confirmVariant?: GrButtonVariant\n confirmTone?: GrButtonTone\n /**\n * Структура ошибки ответа сервера для показа в теле диалога\n * (через `GrResponseErrorBanner`). Используется императивным\n * `useDialogService` для async-`onConfirm`. `null` — блок скрыт.\n */\n error?: ResponseErrorInfo | null\n /** Состояние загрузки кнопки Confirm (async-`onConfirm` in-flight). */\n confirmLoading?: boolean\n /** Принудительно дизейблит кнопку Confirm. */\n confirmDisabled?: boolean\n /**\n * Закрывать ли диалог автоматически по клику Confirm. По умолчанию `true`\n * (историческое поведение). `false` — отдаёт управление закрытием наружу\n * (нужно `useDialogService`, который ждёт результат async-`onConfirm`).\n */\n closeOnConfirm?: boolean\n}\n\nconst props = withDefaults(defineProps<GrConfirmDialogProps>(), {\n title: undefined,\n description: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n buttonSize: undefined,\n confirmText: undefined,\n cancelText: undefined,\n confirmVariant: 'primary',\n confirmTone: 'primary',\n error: null,\n confirmLoading: false,\n confirmDisabled: false,\n closeOnConfirm: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n (e: 'confirm'): void\n (e: 'cancel'): void\n}>()\n\n// Дефолты берём из общего i18n-блока пакета (fallback — англ.), а не хардкодим.\nconst { t } = useGranularityTranslations()\nconst resolvedTitle = computed(() => props.title ?? t('gr.dialog.confirm.title', 'Confirm'))\nconst resolvedCloseLabel = computed(() => props.closeLabel ?? t('gr.common.close', 'Close'))\nconst resolvedConfirmText = computed(() => props.confirmText ?? t('gr.common.confirm', 'Confirm'))\nconst resolvedCancelText = computed(() => props.cancelText ?? t('gr.common.cancel', 'Cancel'))\n\nconst open = computed({\n get: () => props.modelValue,\n set: (value: boolean) => emit('update:modelValue', value),\n})\n\nfunction onCancel(): void {\n emit('cancel')\n emit('update:modelValue', false)\n}\n\nfunction onConfirm(): void {\n emit('confirm')\n if (props.closeOnConfirm)\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrDialog\n v-model=\"open\"\n :title=\"resolvedTitle\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n :show-header=\"showHeader\"\n :show-close-button=\"showCloseButton\"\n :header-config=\"headerConfig\"\n :footer-config=\"footerConfig\"\n :body-config=\"bodyConfig\"\n :close-label=\"resolvedCloseLabel\"\n >\n <div class=\"grid gap-4\">\n <slot>\n <div v-if=\"description\" class=\"text-[14px] text-[var(--gr-muted-fg)]\">\n {{ description }}\n </div>\n </slot>\n\n <slot name=\"error\" :error=\"error\">\n <GrResponseErrorBanner v-if=\"error\" :error=\"error\" :can-dismiss=\"false\" />\n </slot>\n </div>\n\n <template #footer>\n <slot name=\"footer\">\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton data-testid=\"gr-confirm-cancel\" variant=\"outline\" :size=\"buttonSize\" @click=\"onCancel\">\n {{ resolvedCancelText }}\n </GrButton>\n <GrButton\n data-testid=\"gr-confirm-confirm\"\n :variant=\"confirmVariant\"\n :tone=\"confirmTone\"\n :size=\"buttonSize\"\n :loading=\"confirmLoading\"\n :disabled=\"confirmDisabled\"\n @click=\"onConfirm\"\n >\n {{ resolvedConfirmText }}\n </GrButton>\n </div>\n </slot>\n </template>\n </GrDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DA,MAAM,QAAQ;EAuBd,MAAM,OAAO;EAOb,MAAM,EAAE,MAAM,2BAA2B;EACzC,MAAM,gBAAgB,eAAe,MAAM,SAAS,EAAE,2BAA2B,SAAS,CAAC;EAC3F,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,mBAAmB,OAAO,CAAC;EAC3F,MAAM,sBAAsB,eAAe,MAAM,eAAe,EAAE,qBAAqB,SAAS,CAAC;EACjG,MAAM,qBAAqB,eAAe,MAAM,cAAc,EAAE,oBAAoB,QAAQ,CAAC;EAE7F,MAAM,OAAO,SAAS;GACpB,WAAW,MAAM;GACjB,MAAM,UAAmB,KAAK,qBAAqB,KAAK;EAC1D,CAAC;EAED,SAAS,WAAiB;GACxB,KAAK,QAAQ;GACb,KAAK,qBAAqB,KAAK;EACjC;EAEA,SAAS,YAAkB;GACzB,KAAK,SAAS;GACd,IAAI,MAAM,gBACR,KAAK,qBAAqB,KAAK;EACnC;;uBAIE,YA6CW,kBAAA;gBA5CA,KAAA;sEAAI,QAAA;IACZ,OAAO,cAAA;IACP,MAAM,QAAA;IACN,qBAAmB,QAAA;IACnB,gBAAc,QAAA;IACd,eAAa,QAAA;IACb,qBAAmB,QAAA;IACnB,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,eAAa,QAAA;IACb,eAAa,mBAAA;;IAcH,QAAM,cAkBR,CAjBP,WAiBO,KAAA,QAAA,UAAA,CAAA,SAAA,CAhBL,mBAeM,OAfN,YAeM,CAdJ,YAEW,kBAAA;KAFD,eAAY;KAAoB,SAAQ;KAAW,MAAM,QAAA;KAAa,SAAO;;4BAC7D,CAAA,gBAAA,gBAArB,mBAAA,KAAkB,GAAA,CAAA,CAAA,CAAA;;qBAEvB,YAUW,kBAAA;KATT,eAAY;KACX,SAAS,QAAA;KACT,MAAM,QAAA;KACN,MAAM,QAAA;KACN,SAAS,QAAA;KACT,UAAU,QAAA;KACV,SAAO;;4BAEiB,CAAA,gBAAA,gBAAtB,oBAAA,KAAmB,GAAA,CAAA,CAAA,CAAA;;;;;;;;;2BAjBxB,CAVN,mBAUM,OAVN,YAUM,CATJ,WAIO,KAAA,QAAA,WAAA,CAAA,SAAA,CAHM,QAAA,eAAA,UAAA,GAAX,mBAEM,OAFN,YAEM,gBADD,QAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,GAIlB,WAEO,KAAA,QAAA,SAAA,EAFa,OAAO,QAAA,MAAK,SAEzB,CADwB,QAAA,SAAA,UAAA,GAA7B,YAA0E,+BAAA;;KAArC,OAAO,QAAA;KAAQ,eAAa"}
@@ -1,3 +1,3 @@
1
- import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-D8CkOtqv.js";
2
- import { t as grConfirmDialogConfig } from "../../chunks/config-BXtAmU3s2.js";
1
+ import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-e4120mWw.js";
2
+ import { t as grConfirmDialogConfig } from "../../chunks/config-BXtAmU3s.js";
3
3
  export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
@@ -1,5 +1,6 @@
1
+ import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
1
2
  import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
2
- import { t as GrTable_default } from "../../GrTable/chunks/GrTable-Db3hRnKA.js";
3
+ import { t as GrTable_default } from "../../GrTable/chunks/GrTable-sNvsA8wa.js";
3
4
  import { t as arrow_up_default } from "../../../chunks/arrow-up-C_G4jg8M.js";
4
5
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, markRaw, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
5
6
  //#region ~icons/lucide/arrow-down
@@ -25,19 +26,49 @@ var arrow_down_default = markRaw({
25
26
  //#endregion
26
27
  //#region src/components/GrDataTable/GrDataTable.vue?vue&type=script&setup=true&lang.ts
27
28
  var _hoisted_1 = { "data-gr-datatable-header": "" };
28
- var _hoisted_2 = ["aria-sort"];
29
- var _hoisted_3 = { class: "inline-flex items-center gap-2" };
30
- var _hoisted_4 = ["aria-label", "onClick"];
31
- var _hoisted_5 = { class: "inline-flex" };
32
- var _hoisted_6 = {
29
+ var _hoisted_2 = {
30
+ key: 0,
31
+ class: "w-10 px-4 py-3 text-left",
32
+ scope: "col"
33
+ };
34
+ var _hoisted_3 = [
35
+ "checked",
36
+ "indeterminate",
37
+ "aria-label",
38
+ "disabled"
39
+ ];
40
+ var _hoisted_4 = ["aria-sort"];
41
+ var _hoisted_5 = { class: "inline-flex items-center gap-2" };
42
+ var _hoisted_6 = ["aria-label", "onClick"];
43
+ var _hoisted_7 = { class: "inline-flex" };
44
+ var _hoisted_8 = {
33
45
  key: 1,
34
- class: "text-[var(--muted-fg)]"
46
+ class: "text-[var(--gr-muted-fg)]"
35
47
  };
36
- var _hoisted_7 = {
48
+ var _hoisted_9 = {
37
49
  key: 0,
50
+ "data-gr-datatable-loading": ""
51
+ };
52
+ var _hoisted_10 = ["colspan"];
53
+ var _hoisted_11 = {
54
+ class: "inline-flex items-center gap-2",
55
+ role: "status"
56
+ };
57
+ var _hoisted_12 = {
58
+ key: 1,
38
59
  "data-gr-datatable-empty": ""
39
60
  };
40
- var _hoisted_8 = ["colspan"];
61
+ var _hoisted_13 = ["colspan"];
62
+ var _hoisted_14 = ["data-selected"];
63
+ var _hoisted_15 = {
64
+ key: 0,
65
+ class: "w-10 px-4 py-3 text-left"
66
+ };
67
+ var _hoisted_16 = [
68
+ "checked",
69
+ "aria-label",
70
+ "onChange"
71
+ ];
41
72
  //#endregion
42
73
  //#region src/components/GrDataTable/GrDataTable.vue
43
74
  var GrDataTable_default = /* @__PURE__ */ defineComponent({
@@ -57,20 +88,38 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
57
88
  type: Boolean,
58
89
  default: false
59
90
  },
91
+ selectable: {
92
+ type: Boolean,
93
+ default: false
94
+ },
95
+ selected: { default: void 0 },
96
+ loading: {
97
+ type: Boolean,
98
+ default: false
99
+ },
100
+ loadingText: { default: void 0 },
60
101
  density: { default: "regular" },
61
102
  caption: { default: void 0 },
62
103
  ariaLabel: { default: void 0 },
63
104
  ariaLabelledby: { default: void 0 },
64
- regionLabel: { default: void 0 }
105
+ regionLabel: { default: void 0 },
106
+ stickyHeader: {
107
+ type: Boolean,
108
+ default: false
109
+ },
110
+ maxHeight: { default: void 0 }
65
111
  },
66
112
  emits: [
67
113
  "update:sortKey",
68
114
  "update:sortDir",
69
- "sort-change"
115
+ "sort-change",
116
+ "update:selected"
70
117
  ],
71
118
  setup(__props, { emit: __emit }) {
72
119
  const props = __props;
73
120
  const emit = __emit;
121
+ const { t } = useGranularityTranslations();
122
+ const resolvedLoadingText = computed(() => props.loadingText ?? t("gr.dataTable.loading", "Loading…"));
74
123
  const internalSortKey = ref(props.initialSortKey ?? "");
75
124
  const internalSortDir = ref(props.initialSortDir);
76
125
  const isSortKeyControlled = computed(() => props.sortKey !== void 0);
@@ -137,27 +186,66 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
137
186
  caption: props.caption,
138
187
  ariaLabel: props.ariaLabel,
139
188
  ariaLabelledby: props.ariaLabelledby,
140
- regionLabel: props.regionLabel
189
+ regionLabel: props.regionLabel,
190
+ stickyHeader: props.stickyHeader,
191
+ maxHeight: props.maxHeight
141
192
  }));
142
193
  const isEmpty = computed(() => sortedRows.value.length === 0);
194
+ const totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0));
143
195
  function cellValue(row, key) {
144
196
  return row[key];
145
197
  }
198
+ const selectedKeys = computed(() => new Set(props.selected ?? []));
199
+ function isRowSelected(row) {
200
+ return selectedKeys.value.has(rowKeyValue(row));
201
+ }
202
+ const allSelected = computed(() => sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected));
203
+ const someSelected = computed(() => sortedRows.value.some(isRowSelected) && !allSelected.value);
204
+ function emitSelected(next) {
205
+ emit("update:selected", [...next]);
206
+ }
207
+ function toggleRow(row) {
208
+ const key = rowKeyValue(row);
209
+ const next = new Set(selectedKeys.value);
210
+ if (next.has(key)) next.delete(key);
211
+ else next.add(key);
212
+ emitSelected(next);
213
+ }
214
+ function toggleAll() {
215
+ if (allSelected.value) {
216
+ const next = new Set(selectedKeys.value);
217
+ for (const row of sortedRows.value) next.delete(rowKeyValue(row));
218
+ emitSelected(next);
219
+ return;
220
+ }
221
+ const next = new Set(selectedKeys.value);
222
+ for (const row of sortedRows.value) next.add(rowKeyValue(row));
223
+ emitSelected(next);
224
+ }
146
225
  return (_ctx, _cache) => {
147
226
  return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-gr-datatable": "" }), createSlots({
148
- head: withCtx(() => [createElementVNode("tr", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
227
+ head: withCtx(() => [createElementVNode("tr", _hoisted_1, [__props.selectable ? (openBlock(), createElementBlock("th", _hoisted_2, [createElementVNode("input", {
228
+ type: "checkbox",
229
+ "data-gr-datatable-select-all": "",
230
+ class: "h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle",
231
+ checked: allSelected.value,
232
+ indeterminate: someSelected.value,
233
+ "aria-label": unref(t)("gr.dataTable.selectAll", "Select all rows"),
234
+ disabled: __props.loading || isEmpty.value,
235
+ onChange: toggleAll
236
+ }, null, 40, _hoisted_3)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
149
237
  return openBlock(), createElementBlock("th", {
150
238
  key: col.key,
151
239
  class: normalizeClass(["font-700 text-xs px-4 py-3", cellAlign(col)]),
152
240
  "aria-sort": ariaSortFor(col),
153
241
  scope: "col"
154
- }, [createElementVNode("div", _hoisted_3, [col.sortable ? (openBlock(), createElementBlock("button", {
242
+ }, [createElementVNode("div", _hoisted_5, [col.sortable ? (openBlock(), createElementBlock("button", {
155
243
  key: 0,
156
244
  type: "button",
157
- class: "inline-flex items-center gap-2 text-[var(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] rounded",
245
+ class: "inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded",
158
246
  "aria-label": sortButtonLabel(col),
159
247
  onClick: ($event) => toggleSort(col)
160
- }, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [currentSortKey.value === col.key && currentSortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
248
+ }, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_7, [currentSortKey.value === col.key && currentSortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
161
249
  key: 0,
162
250
  size: "sm",
163
251
  "aria-hidden": "true"
@@ -171,22 +259,36 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
171
259
  }, {
172
260
  default: withCtx(() => [createVNode(unref(arrow_down_default))]),
173
261
  _: 1
174
- })) : createCommentVNode("", true)])], 8, _hoisted_4)) : (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(col.label), 1))])], 10, _hoisted_2);
262
+ })) : createCommentVNode("", true)])], 8, _hoisted_6)) : (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(col.label), 1))])], 10, _hoisted_4);
175
263
  }), 128))])]),
176
- default: withCtx(() => [isEmpty.value ? (openBlock(), createElementBlock("tr", _hoisted_7, [createElementVNode("td", {
177
- colspan: __props.columns.length,
178
- class: "px-4 py-6 text-center text-[var(--muted-fg)]"
179
- }, [renderSlot(_ctx.$slots, "empty", {}, () => [_cache[0] || (_cache[0] = createTextVNode(" Нет данных ", -1))])], 8, _hoisted_8)])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(sortedRows.value, (row) => {
264
+ default: withCtx(() => [__props.loading ? (openBlock(), createElementBlock("tr", _hoisted_9, [createElementVNode("td", {
265
+ colspan: totalColumns.value,
266
+ class: "px-4 py-6 text-center text-[var(--gr-muted-fg)]"
267
+ }, [createElementVNode("span", _hoisted_11, [_cache[0] || (_cache[0] = createElementVNode("span", {
268
+ class: "i-lucide-loader-circle block h-4 w-4 animate-spin",
269
+ "aria-hidden": "true"
270
+ }, null, -1)), createElementVNode("span", null, toDisplayString(resolvedLoadingText.value), 1)])], 8, _hoisted_10)])) : isEmpty.value ? (openBlock(), createElementBlock("tr", _hoisted_12, [createElementVNode("td", {
271
+ colspan: totalColumns.value,
272
+ class: "px-4 py-6 text-center text-[var(--gr-muted-fg)]"
273
+ }, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref(t)("gr.dataTable.empty", "No data")), 1)])], 8, _hoisted_13)])) : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(sortedRows.value, (row) => {
180
274
  return openBlock(), createElementBlock("tr", {
181
275
  key: rowKeyValue(row),
182
- class: "border-t border-[var(--brd)]",
183
- "data-gr-datatable-row": ""
184
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
276
+ class: normalizeClass(["border-t border-[var(--gr-brd)]", isRowSelected(row) ? "bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]" : ""]),
277
+ "data-gr-datatable-row": "",
278
+ "data-selected": __props.selectable && isRowSelected(row) ? "true" : void 0
279
+ }, [__props.selectable ? (openBlock(), createElementBlock("td", _hoisted_15, [createElementVNode("input", {
280
+ type: "checkbox",
281
+ "data-gr-datatable-select-row": "",
282
+ class: "h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle",
283
+ checked: isRowSelected(row),
284
+ "aria-label": unref(t)("gr.dataTable.selectRow", "Select row"),
285
+ onChange: ($event) => toggleRow(row)
286
+ }, null, 40, _hoisted_16)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
185
287
  return openBlock(), createElementBlock("td", {
186
288
  key: col.key,
187
289
  class: normalizeClass(["px-4 py-3", cellAlign(col)])
188
290
  }, [renderSlot(_ctx.$slots, `cell-${col.key}`, { row }, () => [createElementVNode("span", null, toDisplayString(cellValue(row, col.key)), 1)])], 2);
189
- }), 128))]);
291
+ }), 128))], 10, _hoisted_14);
190
292
  }), 128))]),
191
293
  _: 2
192
294
  }, [_ctx.$slots.caption ? {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDataTable-C1CzxV0p.js","names":["$slots"],"sources":["../../../../src/components/GrDataTable/GrDataTable.vue","../../../../src/components/GrDataTable/GrDataTable.vue"],"sourcesContent":["\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n selectable: false,\n selected: undefined,\n loading: false,\n loadingText: undefined,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n (e: 'update:selected', value: Array<string | number>): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\n// ————— Выбор строк.\nconst selectedKeys = computed<Set<string | number>>(() => new Set(props.selected ?? []))\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\nconst allSelected = computed(() =>\n sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n sortedRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-if=\"selectable\"\n class=\"w-10 px-4 py-3 text-left\"\n scope=\"col\"\n >\n <input\n type=\"checkbox\"\n data-gr-datatable-select-all\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"allSelected\"\n :indeterminate=\"someSelected\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n :disabled=\"loading || isEmpty\"\n @change=\"toggleAll\"\n >\n </th>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <span class=\"inline-flex items-center gap-2\" role=\"status\">\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.dataTable.empty', 'No data') }}\n </slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"isRowSelected(row) ? 'bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]' : ''\"\n data-gr-datatable-row\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n >\n <td v-if=\"selectable\" class=\"w-10 px-4 py-3 text-left\">\n <input\n type=\"checkbox\"\n data-gr-datatable-select-row\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"isRowSelected(row)\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @change=\"toggleRow(row)\"\n >\n </td>\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n","\n<script setup lang=\"ts\" generic=\"TRow extends Record<string, unknown> = Record<string, unknown>\">\nimport { computed, ref } from 'vue'\n\nimport GrTable from '../GrTable/GrTable.vue'\nimport type { GrTableDensity } from '../GrTable'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\nimport IconArrowUp from '~icons/lucide/arrow-up'\nimport IconArrowDown from '~icons/lucide/arrow-down'\n\nexport type GrDataColumn = {\n key: string\n label: string\n sortable?: boolean\n align?: 'left' | 'center' | 'right'\n}\n\nexport type GrDataTableRowKey<TRow extends Record<string, unknown> = Record<string, unknown>> =\n | string\n | ((row: TRow) => string | number)\n\nexport interface GrDataTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {\n rows: TRow[]\n columns: GrDataColumn[]\n /** Ключ строки или функция-резолвер. По умолчанию — поле `'id'`. */\n rowKey?: GrDataTableRowKey<TRow>\n /** Ключ колонки для начальной сортировки (uncontrolled-режим). */\n initialSortKey?: string\n /** Направление начальной сортировки (uncontrolled-режим). */\n initialSortDir?: 'asc' | 'desc'\n /** Контролируемый ключ сортировки: `v-model:sortKey`. Задаёт controlled-режим. */\n sortKey?: string\n /** Контролируемое направление сортировки: `v-model:sortDir`. */\n sortDir?: 'asc' | 'desc'\n /**\n * Внешняя сортировка (например серверная): компонент НЕ сортирует `rows`\n * сам, а только сообщает о смене через `update:sortKey`/`update:sortDir`/\n * `sort-change`. `rows` при этом должны приходить уже отсортированными.\n */\n externalSort?: boolean\n /**\n * Выбор строк: добавляет ведущую колонку с чекбоксами (+ «выбрать все» в шапке).\n * Выбранные ключи строк — через `v-model:selected`.\n */\n selectable?: boolean\n /** Контролируемый список выбранных ключей строк: `v-model:selected`. */\n selected?: Array<string | number>\n /**\n * Состояние загрузки: тело таблицы заменяется строкой-индикатором.\n * `empty`-состояние при этом не показывается.\n */\n loading?: boolean\n /** Текст индикатора загрузки. i18n: fallback `gr.dataTable.loading`. */\n loadingText?: string\n // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\n /** Прилипающий заголовок при вертикальном скролле (нужен `maxHeight`). */\n stickyHeader?: boolean\n /** Максимальная высота таблицы (вертикальный скролл). Число — в пикселях. */\n maxHeight?: string | number\n}\n\n/**\n * `GrDataTable` — data-таблица поверх `GrTable` с сортировкой по клику\n * на заголовок и scoped-слотами ячеек (`#cell-<key>`), `#caption`, `#foot`, `#empty`.\n *\n * Сортировка: если оба значения в колонке — числа (или парсятся как числа), сравнение\n * идёт численное; иначе — локальное строковое `localeCompare` с `sensitivity: 'base'`.\n */\nconst props = withDefaults(defineProps<GrDataTableProps<TRow>>(), {\n rowKey: 'id' as never,\n initialSortKey: undefined,\n initialSortDir: 'asc',\n sortKey: undefined,\n sortDir: undefined,\n externalSort: false,\n selectable: false,\n selected: undefined,\n loading: false,\n loadingText: undefined,\n density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: undefined,\n stickyHeader: false,\n maxHeight: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:sortKey', value: string): void\n (e: 'update:sortDir', value: 'asc' | 'desc'): void\n (e: 'sort-change', value: { key: string, dir: 'asc' | 'desc' }): void\n (e: 'update:selected', value: Array<string | number>): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedLoadingText = computed(() => props.loadingText ?? t('gr.dataTable.loading', 'Loading…'))\n\n// Uncontrolled-состояние; в controlled-режиме перекрывается пропами `sortKey`/`sortDir`.\nconst internalSortKey = ref<string>(props.initialSortKey ?? '')\nconst internalSortDir = ref<'asc' | 'desc'>(props.initialSortDir)\n\nconst isSortKeyControlled = computed(() => props.sortKey !== undefined)\nconst isSortDirControlled = computed(() => props.sortDir !== undefined)\n\nconst currentSortKey = computed(() => props.sortKey ?? internalSortKey.value)\nconst currentSortDir = computed<'asc' | 'desc'>(() => props.sortDir ?? internalSortDir.value)\n\nfunction applySort(key: string, dir: 'asc' | 'desc'): void {\n if (!isSortKeyControlled.value)\n internalSortKey.value = key\n if (!isSortDirControlled.value)\n internalSortDir.value = dir\n\n emit('update:sortKey', key)\n emit('update:sortDir', dir)\n emit('sort-change', { key, dir })\n}\n\nconst sortedRows = computed(() => {\n const items = [...props.rows]\n // Внешняя сортировка: `rows` уже отсортированы потребителем — не трогаем.\n if (props.externalSort)\n return items\n\n const key = currentSortKey.value\n if (!key)\n return items\n\n const dir = currentSortDir.value\n\n items.sort((a, b) => {\n const av = (a as Record<string, unknown>)[key]\n const bv = (b as Record<string, unknown>)[key]\n\n const aNum = typeof av === 'number' ? av : Number(av)\n const bNum = typeof bv === 'number' ? bv : Number(bv)\n const bothNumbers = Number.isFinite(aNum) && Number.isFinite(bNum)\n\n const res = bothNumbers\n ? aNum - bNum\n : String(av ?? '').localeCompare(String(bv ?? ''), undefined, { sensitivity: 'base' })\n\n return dir === 'asc' ? res : -res\n })\n\n return items\n})\n\nfunction toggleSort(col: GrDataColumn): void {\n if (!col.sortable)\n return\n\n if (currentSortKey.value !== col.key) {\n applySort(col.key, 'asc')\n return\n }\n\n applySort(col.key, currentSortDir.value === 'asc' ? 'desc' : 'asc')\n}\n\nfunction cellAlign(col: GrDataColumn): string {\n if (col.align === 'right')\n return 'text-right'\n if (col.align === 'center')\n return 'text-center'\n return 'text-left'\n}\n\nfunction rowKeyValue(row: TRow): string | number {\n const rk = props.rowKey\n if (typeof rk === 'function')\n return rk(row)\n const v = (row as Record<string, unknown>)[rk as string]\n if (typeof v === 'string' || typeof v === 'number')\n return v\n return String(v ?? '')\n}\n\nfunction ariaSortFor(col: GrDataColumn): 'ascending' | 'descending' | 'none' | undefined {\n if (!col.sortable)\n return undefined\n if (currentSortKey.value !== col.key)\n return 'none'\n return currentSortDir.value === 'asc' ? 'ascending' : 'descending'\n}\n\nfunction sortButtonLabel(col: GrDataColumn): string {\n if (currentSortKey.value !== col.key)\n return `Sort by ${col.label}`\n return currentSortDir.value === 'asc'\n ? `Sorted by ${col.label} ascending, activate to sort descending`\n : `Sorted by ${col.label} descending, activate to sort ascending`\n}\n\nconst tableProps = computed(() => ({\n density: props.density,\n caption: props.caption,\n ariaLabel: props.ariaLabel,\n ariaLabelledby: props.ariaLabelledby,\n regionLabel: props.regionLabel,\n stickyHeader: props.stickyHeader,\n maxHeight: props.maxHeight,\n}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\n// Общее число колонок с учётом ведущей чекбокс-колонки — для `colspan`\n// строк loading/empty.\nconst totalColumns = computed(() => props.columns.length + (props.selectable ? 1 : 0))\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\n}\n\n// ————— Выбор строк.\nconst selectedKeys = computed<Set<string | number>>(() => new Set(props.selected ?? []))\n\nfunction isRowSelected(row: TRow): boolean {\n return selectedKeys.value.has(rowKeyValue(row))\n}\n\nconst allSelected = computed(() =>\n sortedRows.value.length > 0 && sortedRows.value.every(isRowSelected),\n)\nconst someSelected = computed(() =>\n sortedRows.value.some(isRowSelected) && !allSelected.value,\n)\n\nfunction emitSelected(next: Set<string | number>): void {\n emit('update:selected', [...next])\n}\n\nfunction toggleRow(row: TRow): void {\n const key = rowKeyValue(row)\n const next = new Set(selectedKeys.value)\n if (next.has(key))\n next.delete(key)\n else\n next.add(key)\n emitSelected(next)\n}\n\nfunction toggleAll(): void {\n if (allSelected.value) {\n // Снимаем выбор только с видимых строк, сохраняя внешние ключи.\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.delete(rowKeyValue(row))\n emitSelected(next)\n return\n }\n const next = new Set(selectedKeys.value)\n for (const row of sortedRows.value) next.add(rowKeyValue(row))\n emitSelected(next)\n}\n</script>\n\n<template>\n <GrTable v-bind=\"tableProps\" data-gr-datatable>\n <template v-if=\"$slots.caption\" #caption>\n <slot name=\"caption\" />\n </template>\n\n <template #head>\n <tr data-gr-datatable-header>\n <th\n v-if=\"selectable\"\n class=\"w-10 px-4 py-3 text-left\"\n scope=\"col\"\n >\n <input\n type=\"checkbox\"\n data-gr-datatable-select-all\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"allSelected\"\n :indeterminate=\"someSelected\"\n :aria-label=\"t('gr.dataTable.selectAll', 'Select all rows')\"\n :disabled=\"loading || isEmpty\"\n @change=\"toggleAll\"\n >\n </th>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"font-700 text-xs px-4 py-3\"\n :class=\"cellAlign(col)\"\n :aria-sort=\"ariaSortFor(col)\"\n scope=\"col\"\n >\n <div class=\"inline-flex items-center gap-2\">\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"inline-flex items-center gap-2 text-[var(--gr-muted-fg)] hover:text-[var(--gr-fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded\"\n :aria-label=\"sortButtonLabel(col)\"\n @click=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <span class=\"inline-flex\">\n <GrIcon v-if=\"currentSortKey === col.key && currentSortDir === 'asc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowUp />\n </GrIcon>\n <GrIcon v-else-if=\"currentSortKey === col.key && currentSortDir === 'desc'\" size=\"sm\" aria-hidden=\"true\">\n <IconArrowDown />\n </GrIcon>\n </span>\n </button>\n <span v-else class=\"text-[var(--gr-muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"loading\">\n <tr data-gr-datatable-loading>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <span class=\"inline-flex items-center gap-2\" role=\"status\">\n <span class=\"i-lucide-loader-circle block h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n <span>{{ resolvedLoadingText }}</span>\n </span>\n </td>\n </tr>\n </template>\n <template v-else-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"totalColumns\" class=\"px-4 py-6 text-center text-[var(--gr-muted-fg)]\">\n <slot name=\"empty\">\n {{ t('gr.dataTable.empty', 'No data') }}\n </slot>\n </td>\n </tr>\n </template>\n <tr\n v-for=\"row in sortedRows\"\n v-else\n :key=\"rowKeyValue(row)\"\n class=\"border-t border-[var(--gr-brd)]\"\n :class=\"isRowSelected(row) ? 'bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]' : ''\"\n data-gr-datatable-row\n :data-selected=\"selectable && isRowSelected(row) ? 'true' : undefined\"\n >\n <td v-if=\"selectable\" class=\"w-10 px-4 py-3 text-left\">\n <input\n type=\"checkbox\"\n data-gr-datatable-select-row\n class=\"h-4 w-4 cursor-pointer accent-[var(--gr-primary)] align-middle\"\n :checked=\"isRowSelected(row)\"\n :aria-label=\"t('gr.dataTable.selectRow', 'Select row')\"\n @change=\"toggleRow(row)\"\n >\n </td>\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"px-4 py-3\"\n :class=\"cellAlign(col)\"\n >\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\n <span>{{ cellValue(row, col.key) }}</span>\n </slot>\n </td>\n </tr>\n\n <template v-if=\"$slots.foot\" #foot>\n <slot name=\"foot\" />\n </template>\n </GrTable>\n</template>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { t as GrDataTable_default } from "./chunks/GrDataTable-Ds5OeGat.js";
2
- import { t as grDataTableConfig } from "../../chunks/config-U4m9PSql.js";
1
+ import { t as GrDataTable_default } from "./chunks/GrDataTable-C1CzxV0p.js";
2
+ import { t as grDataTableConfig } from "../../chunks/config-U4m9PSql2.js";
3
3
  export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
@@ -1,8 +1,8 @@
1
1
  import { t as x_default } from "../../../chunks/x-2KXnqxiD.js";
2
- import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
3
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
2
+ import { n as useGranularityTranslations } from "../../../chunks/granularityI18n-SH0I--GW.js";
3
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
4
4
  import { o as Ve } from "../../../chunks/useScrollLock-K7kaP2Ud.js";
5
- import { t as GrModal_default } from "../../GrModal/chunks/GrModal-C0GZrHN3.js";
5
+ import { t as GrModal_default } from "../../GrModal/chunks/GrModal-BTu1-5eY.js";
6
6
  import { a as resolveGrDialogTitle, i as resolveGrDialogSectionConfig, n as DEFAULT_GR_DIALOG_FOOTER_CONFIG, r as DEFAULT_GR_DIALOG_HEADER_CONFIG, t as DEFAULT_GR_DIALOG_BODY_CONFIG } from "../../../chunks/dialogShared-CxW62PQE.js";
7
7
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, toDisplayString, unref, useAttrs, useSlots, withCtx } from "vue";
8
8
  //#endregion
@@ -16,7 +16,7 @@ var GrDialogFooter_default = /* @__PURE__ */ defineComponent({
16
16
  const rootClass = computed(() => [
17
17
  resolvedConfig.value.paddingX,
18
18
  resolvedConfig.value.paddingY,
19
- resolvedConfig.value.bordered ? "border-t border-[var(--brd)]" : ""
19
+ resolvedConfig.value.bordered ? "border-t border-[var(--gr-brd)]" : ""
20
20
  ]);
21
21
  return (_ctx, _cache) => {
22
22
  return openBlock(), createElementBlock("div", {
@@ -86,7 +86,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
86
86
  const rootClass = computed(() => [
87
87
  resolvedConfig.value.paddingX,
88
88
  resolvedConfig.value.paddingY,
89
- resolvedConfig.value.bordered ? "border-b border-[var(--brd)]" : "",
89
+ resolvedConfig.value.bordered ? "border-b border-[var(--gr-brd)]" : "",
90
90
  "flex items-center justify-between gap-4"
91
91
  ]);
92
92
  const showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDialog-BPMvDHOz.js","names":["$emit","$emit"],"sources":["../../../../src/components/GrDialog/GrDialogFooter.vue","../../../../src/components/GrDialog/GrDialogFooter.vue","../../../../src/components/GrDialog/GrDialogCloseButton.vue","../../../../src/components/GrDialog/GrDialogCloseButton.vue","../../../../src/components/GrDialog/GrDialogHeader.vue","../../../../src/components/GrDialog/GrDialogHeader.vue","../../../../src/components/GrDialog/GrDialog.vue","../../../../src/components/GrDialog/GrDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport {\n DEFAULT_GR_DIALOG_FOOTER_CONFIG,\n resolveGrDialogSectionConfig,\n type GrDialogSectionConfig,\n} from './dialogShared'\n\nexport interface GrDialogFooterProps {\n config?: GrDialogSectionConfig\n}\n\nconst props = withDefaults(defineProps<GrDialogFooterProps>(), {\n config: undefined,\n})\n\nconst resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_FOOTER_CONFIG))\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-t border-[var(--gr-brd)]' : '',\n])\n</script>\n\n<template>\n <div data-gr-dialog-footer :class=\"rootClass\">\n <slot />\n </div>\n</template>","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport {\n DEFAULT_GR_DIALOG_FOOTER_CONFIG,\n resolveGrDialogSectionConfig,\n type GrDialogSectionConfig,\n} from './dialogShared'\n\nexport interface GrDialogFooterProps {\n config?: GrDialogSectionConfig\n}\n\nconst props = withDefaults(defineProps<GrDialogFooterProps>(), {\n config: undefined,\n})\n\nconst resolvedConfig = computed(() => resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_FOOTER_CONFIG))\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-t border-[var(--gr-brd)]' : '',\n])\n</script>\n\n<template>\n <div data-gr-dialog-footer :class=\"rootClass\">\n <slot />\n </div>\n</template>","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport IconClose from '~icons/lucide/x'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst { t } = useGranularityTranslations()\n\n// A11y-лейбл: берём из атрибутов (родитель прокидывает `:aria-label=\"closeLabel\"`)\n// или используем i18n-дефолт. Не хардкодим английское \"Close\" — GR должен быть i18n-friendly.\nconst attrs = useAttrs()\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? t('gr.common.close', 'Close'))\n\ndefineEmits<{\n (e: 'click'): void\n}>()\n</script>\n\n<template>\n <GrButton\n v-bind=\"attrs\"\n data-gr-dialog-close\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"ariaLabel\"\n @click=\"$emit('click')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </GrButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport IconClose from '~icons/lucide/x'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst { t } = useGranularityTranslations()\n\n// A11y-лейбл: берём из атрибутов (родитель прокидывает `:aria-label=\"closeLabel\"`)\n// или используем i18n-дефолт. Не хардкодим английское \"Close\" — GR должен быть i18n-friendly.\nconst attrs = useAttrs()\nconst ariaLabel = computed(() => (attrs['aria-label'] as string | undefined) ?? t('gr.common.close', 'Close'))\n\ndefineEmits<{\n (e: 'click'): void\n}>()\n</script>\n\n<template>\n <GrButton\n v-bind=\"attrs\"\n data-gr-dialog-close\n variant=\"ghost\"\n size=\"sm\"\n square\n :aria-label=\"ariaLabel\"\n @click=\"$emit('click')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </GrButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { DialogTitle } from '@headlessui/vue'\n\nimport GrDialogCloseButton from './GrDialogCloseButton.vue'\nimport {\n DEFAULT_GR_DIALOG_HEADER_CONFIG,\n type GrDialogSectionConfig,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogHeaderProps {\n title?: string\n showCloseButton?: boolean\n config?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogHeaderProps>(), {\n title: undefined,\n showCloseButton: true,\n config: undefined,\n closeLabel: undefined,\n})\n\nconst slots = defineSlots<{\n default?: (props: { title?: string }) => any\n}>()\n\ndefineEmits<{\n (e: 'close'): void\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst resolvedConfig = computed(() =>\n resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_HEADER_CONFIG),\n)\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-b border-[var(--gr-brd)]' : '',\n 'flex items-center justify-between gap-4',\n])\n\n// Видимый `DialogTitle` рендерим только когда нет пользовательского слота:\n// если слот `#header` задан, a11y-title отдаётся через `GrModal #title`\n// на уровне `GrDialog` (см. JSDoc у `GrDialog.vue`).\nconst showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value)\n</script>\n\n<template>\n <div data-gr-dialog-header :class=\"rootClass\">\n <template v-if=\"slots.default\">\n <div class=\"flex-1 min-w-0 flex items-center\">\n <slot :title=\"resolvedTitle\" />\n </div>\n </template>\n <DialogTitle\n v-else-if=\"showVisibleTitle\"\n as=\"div\"\n class=\"flex-1 min-w-0 text-[14px] font-700\"\n >\n {{ resolvedTitle }}\n </DialogTitle>\n <div v-else class=\"flex-1 min-w-0\" />\n <GrDialogCloseButton\n v-if=\"showCloseButton\"\n :aria-label=\"closeLabel\"\n @click=\"$emit('close')\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { DialogTitle } from '@headlessui/vue'\n\nimport GrDialogCloseButton from './GrDialogCloseButton.vue'\nimport {\n DEFAULT_GR_DIALOG_HEADER_CONFIG,\n type GrDialogSectionConfig,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogHeaderProps {\n title?: string\n showCloseButton?: boolean\n config?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogHeaderProps>(), {\n title: undefined,\n showCloseButton: true,\n config: undefined,\n closeLabel: undefined,\n})\n\nconst slots = defineSlots<{\n default?: (props: { title?: string }) => any\n}>()\n\ndefineEmits<{\n (e: 'close'): void\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst resolvedConfig = computed(() =>\n resolveGrDialogSectionConfig(props.config, DEFAULT_GR_DIALOG_HEADER_CONFIG),\n)\n\nconst rootClass = computed(() => [\n resolvedConfig.value.paddingX,\n resolvedConfig.value.paddingY,\n resolvedConfig.value.bordered ? 'border-b border-[var(--gr-brd)]' : '',\n 'flex items-center justify-between gap-4',\n])\n\n// Видимый `DialogTitle` рендерим только когда нет пользовательского слота:\n// если слот `#header` задан, a11y-title отдаётся через `GrModal #title`\n// на уровне `GrDialog` (см. JSDoc у `GrDialog.vue`).\nconst showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value)\n</script>\n\n<template>\n <div data-gr-dialog-header :class=\"rootClass\">\n <template v-if=\"slots.default\">\n <div class=\"flex-1 min-w-0 flex items-center\">\n <slot :title=\"resolvedTitle\" />\n </div>\n </template>\n <DialogTitle\n v-else-if=\"showVisibleTitle\"\n as=\"div\"\n class=\"flex-1 min-w-0 text-[14px] font-700\"\n >\n {{ resolvedTitle }}\n </DialogTitle>\n <div v-else class=\"flex-1 min-w-0\" />\n <GrDialogCloseButton\n v-if=\"showCloseButton\"\n :aria-label=\"closeLabel\"\n @click=\"$emit('close')\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialog — GR-примитив диалога поверх `GrModal`.\n *\n * Архитектурно:\n * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;\n * - заголовок/подвал/кнопка закрытия/паддинги секций — ответственность `GrDialog`.\n *\n * A11y: ровно один `DialogTitle` на открытое окно.\n * - Если хедер отображается без слота `#header` — видимый `DialogTitle` рендерит\n * `GrDialogHeader`.\n * - В остальных случаях (`!showHeader`, либо `showHeader` со слотом `#header`)\n * `GrDialog` отдаёт sr-only title в слот `#title` у `GrModal`, чтобы\n * HeadlessUI корректно проставил `aria-labelledby` на панель.\n */\nimport { computed } from 'vue'\n\nimport GrModal from '../GrModal/GrModal.vue'\nimport GrDialogFooter from './GrDialogFooter.vue'\nimport GrDialogHeader from './GrDialogHeader.vue'\nimport {\n DEFAULT_GR_DIALOG_BODY_CONFIG,\n type GrDialogSectionConfig,\n type GrDialogSize,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogProps {\n modelValue: boolean\n title?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogProps>(), {\n title: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n header?: (props: { title?: string }) => any\n footer?: () => any\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst bodyClass = computed(() => {\n const cfg = resolveGrDialogSectionConfig(props.bodyConfig, DEFAULT_GR_DIALOG_BODY_CONFIG)\n return [cfg.paddingX, cfg.paddingY]\n})\n\n// Нужен ли sr-only title через `GrModal #title`:\n// - `!showHeader` — вообще нет заголовка в разметке;\n// - `showHeader && $slots.header` — кастомный хедер не обязан содержать DialogTitle.\n// В обоих случаях даём HeadlessUI a11y-title, не дублируя его визуально.\nconst useModalSrOnlyTitle = computed(\n () => !!resolvedTitle.value && (!props.showHeader || !!slots.header),\n)\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template v-if=\"useModalSrOnlyTitle\" #title>\n <span class=\"sr-only\">{{ resolvedTitle }}</span>\n </template>\n\n <div class=\"overflow-hidden rounded-[inherit]\">\n <GrDialogHeader\n v-if=\"showHeader\"\n :title=\"resolvedTitle\"\n :show-close-button=\"showCloseButton\"\n :config=\"headerConfig\"\n :close-label=\"closeLabel\"\n @close=\"close\"\n >\n <template v-if=\"slots.header\" #default=\"slotProps\">\n <slot name=\"header\" v-bind=\"slotProps\" />\n </template>\n </GrDialogHeader>\n\n <div :class=\"bodyClass\">\n <slot />\n </div>\n\n <GrDialogFooter v-if=\"slots.footer\" :config=\"footerConfig\">\n <slot name=\"footer\" />\n </GrDialogFooter>\n </div>\n </GrModal>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialog — GR-примитив диалога поверх `GrModal`.\n *\n * Архитектурно:\n * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;\n * - заголовок/подвал/кнопка закрытия/паддинги секций — ответственность `GrDialog`.\n *\n * A11y: ровно один `DialogTitle` на открытое окно.\n * - Если хедер отображается без слота `#header` — видимый `DialogTitle` рендерит\n * `GrDialogHeader`.\n * - В остальных случаях (`!showHeader`, либо `showHeader` со слотом `#header`)\n * `GrDialog` отдаёт sr-only title в слот `#title` у `GrModal`, чтобы\n * HeadlessUI корректно проставил `aria-labelledby` на панель.\n */\nimport { computed } from 'vue'\n\nimport GrModal from '../GrModal/GrModal.vue'\nimport GrDialogFooter from './GrDialogFooter.vue'\nimport GrDialogHeader from './GrDialogHeader.vue'\nimport {\n DEFAULT_GR_DIALOG_BODY_CONFIG,\n type GrDialogSectionConfig,\n type GrDialogSize,\n resolveGrDialogSectionConfig,\n resolveGrDialogTitle,\n} from './dialogShared'\n\nexport interface GrDialogProps {\n modelValue: boolean\n title?: string\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n showHeader?: boolean\n showCloseButton?: boolean\n size?: GrDialogSize\n headerConfig?: GrDialogSectionConfig\n footerConfig?: GrDialogSectionConfig\n bodyConfig?: GrDialogSectionConfig\n /** A11y-лейбл кнопки закрытия (i18n). */\n closeLabel?: string\n}\n\nconst props = withDefaults(defineProps<GrDialogProps>(), {\n title: undefined,\n closeOnBackdrop: true,\n closeOnEsc: true,\n showHeader: true,\n showCloseButton: true,\n size: 'md',\n headerConfig: undefined,\n footerConfig: undefined,\n bodyConfig: undefined,\n closeLabel: undefined,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst slots = defineSlots<{\n default?: () => any\n header?: (props: { title?: string }) => any\n footer?: () => any\n}>()\n\nconst resolvedTitle = computed(() => resolveGrDialogTitle(props.title))\n\nconst bodyClass = computed(() => {\n const cfg = resolveGrDialogSectionConfig(props.bodyConfig, DEFAULT_GR_DIALOG_BODY_CONFIG)\n return [cfg.paddingX, cfg.paddingY]\n})\n\n// Нужен ли sr-only title через `GrModal #title`:\n// - `!showHeader` — вообще нет заголовка в разметке;\n// - `showHeader && $slots.header` — кастомный хедер не обязан содержать DialogTitle.\n// В обоих случаях даём HeadlessUI a11y-title, не дублируя его визуально.\nconst useModalSrOnlyTitle = computed(\n () => !!resolvedTitle.value && (!props.showHeader || !!slots.header),\n)\n\nfunction close(): void {\n emit('update:modelValue', false)\n}\n</script>\n\n<template>\n <GrModal\n :model-value=\"modelValue\"\n :size=\"size\"\n :close-on-backdrop=\"closeOnBackdrop\"\n :close-on-esc=\"closeOnEsc\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template v-if=\"useModalSrOnlyTitle\" #title>\n <span class=\"sr-only\">{{ resolvedTitle }}</span>\n </template>\n\n <div class=\"overflow-hidden rounded-[inherit]\">\n <GrDialogHeader\n v-if=\"showHeader\"\n :title=\"resolvedTitle\"\n :show-close-button=\"showCloseButton\"\n :config=\"headerConfig\"\n :close-label=\"closeLabel\"\n @close=\"close\"\n >\n <template v-if=\"slots.header\" #default=\"slotProps\">\n <slot name=\"header\" v-bind=\"slotProps\" />\n </template>\n </GrDialogHeader>\n\n <div :class=\"bodyClass\">\n <slot />\n </div>\n\n <GrDialogFooter v-if=\"slots.footer\" :config=\"footerConfig\">\n <slot name=\"footer\" />\n </GrDialogFooter>\n </div>\n </GrModal>\n</template>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { a as resolveGrDialogTitle, i as resolveGrDialogSectionConfig, n as DEFAULT_GR_DIALOG_FOOTER_CONFIG, r as DEFAULT_GR_DIALOG_HEADER_CONFIG, t as DEFAULT_GR_DIALOG_BODY_CONFIG } from "../../chunks/dialogShared-CxW62PQE.js";
2
- import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./chunks/GrDialog-Ctucxju9.js";
2
+ import { i as GrDialogFooter_default, n as GrDialogHeader_default, r as GrDialogCloseButton_default, t as GrDialog_default } from "./chunks/GrDialog-BPMvDHOz.js";
3
3
  import { t as grDialogSafelist } from "../../chunks/safelist-CkF4v7DC.js";
4
4
  export { DEFAULT_GR_DIALOG_BODY_CONFIG, DEFAULT_GR_DIALOG_FOOTER_CONFIG, DEFAULT_GR_DIALOG_HEADER_CONFIG, GrDialog_default as GrDialog, GrDialog_default as default, GrDialogCloseButton_default as GrDialogCloseButton, GrDialogFooter_default as GrDialogFooter, GrDialogHeader_default as GrDialogHeader, grDialogSafelist, resolveGrDialogSectionConfig, resolveGrDialogTitle };
@@ -1,8 +1,11 @@
1
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
2
- import { n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as responseErrorParserPresets } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-Cdu9ekK9.js";
3
- import { t as GrConfirmDialog_default } from "../../GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js";
4
- import { t as GrPromptDialog_default } from "../../GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js";
5
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, nextTick, onBeforeUnmount, openBlock, reactive, ref, render, shallowRef, toDisplayString, watch, withCtx } from "vue";
1
+ import { n as GR_CONFIG_KEY, s as useGrConfig } from "../../../chunks/context-DfWYCBB-.js";
2
+ import { t as GRANULARITY_I18N_KEY } from "../../../chunks/adapter-CAOxmn2G.js";
3
+ import { t as resolveGranularityI18n } from "../../../chunks/granularityI18n-SH0I--GW.js";
4
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-DCi4CUpo.js";
5
+ import { n as coreResponseErrorParsers, r as createResponseErrorClassifier, s as responseErrorParserPresets } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-C8NGx8pE.js";
6
+ import { t as GrConfirmDialog_default } from "../../GrConfirmDialog/chunks/GrConfirmDialog-e4120mWw.js";
7
+ import { t as GrPromptDialog_default } from "../../GrPromptDialog/chunks/GrPromptDialog-DNUjRVB9.js";
8
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, markRaw, mergeProps, nextTick, onBeforeUnmount, openBlock, provide, reactive, ref, render, shallowRef, toDisplayString, watch, withCtx } from "vue";
6
9
  //#region src/components/GrDialogService/store.ts
7
10
  /**
8
11
  * Модульный синглтон очереди диалогов: единый источник правды для всех
@@ -33,6 +36,20 @@ var GrDialogServiceHost_default = /* @__PURE__ */ defineComponent({
33
36
  * сервера через цепочку парсеров `GrResponseErrorBanner`.
34
37
  */
35
38
  const active = computed(() => dialogQueue[0] ?? null);
39
+ const EMPTY_DEFAULTS = Object.freeze({});
40
+ provide(GR_CONFIG_KEY, {
41
+ size: computed(() => active.value?.config?.size.value),
42
+ componentDefaults: computed(() => active.value?.config?.componentDefaults.value ?? EMPTY_DEFAULTS)
43
+ });
44
+ const hostI18n = resolveGranularityI18n();
45
+ provide(GRANULARITY_I18N_KEY, {
46
+ t: (key, params) => {
47
+ return (active.value?.i18n ?? hostI18n)?.t(key, params) ?? key;
48
+ },
49
+ get locale() {
50
+ return (active.value?.i18n ?? hostI18n)?.locale;
51
+ }
52
+ });
36
53
  const open = ref(false);
37
54
  const loading = ref(false);
38
55
  const currentError = shallowRef(null);
@@ -324,9 +341,10 @@ function teardownDialogService() {
324
341
  container = null;
325
342
  }
326
343
  mounted = false;
344
+ cachedAppContext = null;
327
345
  dialogQueue.splice(0, dialogQueue.length);
328
346
  }
329
- function enqueue(kind, message, options, onConfirm) {
347
+ function enqueue(kind, message, options, onConfirm, captured) {
330
348
  if (typeof window === "undefined" || typeof document === "undefined") throw new Error("[granularity] useDialogService is client-only and cannot be called during SSR (it mounts a host into document.body). Guard imperative dialog calls behind a client-side check.");
331
349
  ensureMounted(options.appContext ?? cachedAppContext);
332
350
  const id = makeDialogId();
@@ -343,7 +361,9 @@ function enqueue(kind, message, options, onConfirm) {
343
361
  message
344
362
  },
345
363
  onConfirm,
346
- resolve: resolveFn
364
+ resolve: resolveFn,
365
+ config: captured.config,
366
+ i18n: captured.i18n
347
367
  };
348
368
  dialogQueue.push(request);
349
369
  const close = () => {
@@ -388,20 +408,25 @@ function mergeErrorDefaults(defaults, options) {
388
408
  function useDialogService(defaults = {}) {
389
409
  const instance = getCurrentInstance();
390
410
  if (instance?.appContext && !cachedAppContext) cachedAppContext = instance.appContext;
411
+ const capturedI18n = instance ? resolveGranularityI18n() : null;
412
+ const captured = {
413
+ config: instance ? markRaw(useGrConfig()) : null,
414
+ i18n: capturedI18n ? markRaw(capturedI18n) : null
415
+ };
391
416
  function confirm(message, options = {}) {
392
- const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm);
417
+ const { promise, close } = enqueue("confirm", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
393
418
  return withClose(promise.then((r) => r.action === "confirm"), close);
394
419
  }
395
420
  function alert(message, options = {}) {
396
- const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm);
421
+ const { promise, close } = enqueue("alert", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
397
422
  return withClose(promise.then(() => void 0), close);
398
423
  }
399
424
  function prompt(message, options = {}) {
400
- const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm);
425
+ const { promise, close } = enqueue("prompt", message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
401
426
  return withClose(promise.then((r) => r.action === "confirm" ? r.value ?? "" : null), close);
402
427
  }
403
428
  function open(kind, message, options = {}) {
404
- const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm);
429
+ const { promise, close } = enqueue(kind, message, mergeErrorDefaults(defaults, options), options.onConfirm, captured);
405
430
  return withClose(promise, close);
406
431
  }
407
432
  function closeAll() {