@feugene/granularity 0.10.0 → 0.12.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 (501) hide show
  1. package/README.md +44 -45
  2. package/dist/GrButtonGroup.css +1 -1
  3. package/dist/GrFormFile.css +1 -1
  4. package/dist/GrIcon.css +1 -1
  5. package/dist/GrLoading.css +1 -1
  6. package/dist/GrSkeleton.css +1 -1
  7. package/dist/GrToaster.css +1 -0
  8. package/dist/GrTree.css +1 -1
  9. package/dist/chunks/{adapter-BqqjEZGU.js.map → adapter-CAOxmn2G.js.map} +1 -1
  10. package/dist/chunks/arrow-up-C_G4jg8M.js.map +1 -0
  11. package/dist/chunks/{classTokens-BPeBXNzu.js.map → classTokens-BzazaERD.js.map} +1 -1
  12. package/dist/chunks/{config-A-iei0Ux.js → config-1uSYl98Y2.js} +5 -5
  13. package/dist/chunks/config-1uSYl98Y2.js.map +1 -0
  14. package/dist/chunks/{config-DZrlovR42.js.map → config-8Pcutu1j2.js.map} +1 -1
  15. package/dist/chunks/{config-VJuoznpH.js.map → config-B0qIpo8m.js.map} +1 -1
  16. package/dist/chunks/{config-C8MM2Dg0.js → config-B7IIWGt_2.js} +3 -3
  17. package/dist/chunks/config-B7IIWGt_2.js.map +1 -0
  18. package/dist/chunks/{config-DbghHyY_.js.map → config-BEegFP74.js.map} +1 -1
  19. package/dist/chunks/{config-D_Pafsjq2.js → config-BIRO0vDJ.js} +6 -6
  20. package/dist/chunks/config-BIRO0vDJ.js.map +1 -0
  21. package/dist/chunks/{config-BeBsN0c12.js.map → config-BLHqZhy-2.js.map} +1 -1
  22. package/dist/chunks/{config-BV4vBzdm.js.map → config-BNu8lFQB.js.map} +1 -1
  23. package/dist/chunks/config-BOlr7qw7.js +106 -0
  24. package/dist/chunks/config-BOlr7qw7.js.map +1 -0
  25. package/dist/chunks/{config-DhQc1TRY.js.map → config-BUHuGBik.js.map} +1 -1
  26. package/dist/chunks/{config-CPSdAjUi.js.map → config-BWGGp7uV.js.map} +1 -1
  27. package/dist/chunks/config-BWiPnygb.js +5 -0
  28. package/dist/chunks/config-BWiPnygb.js.map +1 -0
  29. package/dist/chunks/config-BX1JTrkV2.js +14 -0
  30. package/dist/chunks/config-BX1JTrkV2.js.map +1 -0
  31. package/dist/chunks/config-BXtAmU3s2.js.map +1 -0
  32. package/dist/chunks/{config-CzgNEHKi.js.map → config-Bah4oHwL.js.map} +1 -1
  33. package/dist/chunks/{config-C_egzT_K.js → config-C49QUoJL.js} +3 -3
  34. package/dist/chunks/{config-C_egzT_K.js.map → config-C49QUoJL.js.map} +1 -1
  35. package/dist/chunks/{config-3I3vqDW4.js → config-C4snOIXg.js} +1 -1
  36. package/dist/chunks/{config-3I3vqDW4.js.map → config-C4snOIXg.js.map} +1 -1
  37. package/dist/chunks/{config-DvDNney3.js → config-C7NpDrfO.js} +5 -5
  38. package/dist/chunks/{config-DvDNney3.js.map → config-C7NpDrfO.js.map} +1 -1
  39. package/dist/chunks/{config-lMDE_8A5.js.map → config-C86UzUYf.js.map} +1 -1
  40. package/dist/chunks/{config-BgBWt9-A.js.map → config-C9AcVDkv.js.map} +1 -1
  41. package/dist/chunks/config-CGHLoBlH.js.map +1 -0
  42. package/dist/chunks/{config-ChQxl75m.js.map → config-CThzliFi.js.map} +1 -1
  43. package/dist/chunks/{config-DDwBSoc_.js.map → config-Cb2PAlSD.js.map} +1 -1
  44. package/dist/chunks/{config-XspHtPsU.js → config-ClhKPJvg.js} +5 -5
  45. package/dist/chunks/{config-XspHtPsU.js.map → config-ClhKPJvg.js.map} +1 -1
  46. package/dist/chunks/{config-58Mj2rGH.js → config-Cpi9Mh2J.js} +3 -3
  47. package/dist/chunks/{config-58Mj2rGH.js.map → config-Cpi9Mh2J.js.map} +1 -1
  48. package/dist/chunks/{config-nrOj9p6I.js → config-CrG1XiE72.js} +4 -4
  49. package/dist/chunks/config-CrG1XiE72.js.map +1 -0
  50. package/dist/chunks/{config-DRpkoSvq.js → config-CziwTDDL.js} +3 -3
  51. package/dist/chunks/{config-DRpkoSvq.js.map → config-CziwTDDL.js.map} +1 -1
  52. package/dist/chunks/{config-C5-ujXCI.js.map → config-D7GZO-Dx.js.map} +1 -1
  53. package/dist/chunks/{config-CUwF4E4R.js.map → config-DBmdgoVf.js.map} +1 -1
  54. package/dist/chunks/{config-C9MblwGq.js.map → config-DICOd-2X.js.map} +1 -1
  55. package/dist/chunks/{config-C6zT56Jc2.js → config-DUcu1D682.js} +3 -3
  56. package/dist/chunks/{config-C6zT56Jc2.js.map → config-DUcu1D682.js.map} +1 -1
  57. package/dist/chunks/{config-8f8624RN.js → config-D_R56_gT.js} +5 -5
  58. package/dist/chunks/{config-8f8624RN.js.map → config-D_R56_gT.js.map} +1 -1
  59. package/dist/chunks/{config-RjfJFv1Y.js → config-DezDih8_.js} +4 -4
  60. package/dist/chunks/config-DezDih8_.js.map +1 -0
  61. package/dist/chunks/config-Dlm49Jp5.js +5 -0
  62. package/dist/chunks/config-Dlm49Jp5.js.map +1 -0
  63. package/dist/chunks/{config-B0uUCaJW.js → config-DnvPqu4g2.js} +3 -3
  64. package/dist/chunks/config-DnvPqu4g2.js.map +1 -0
  65. package/dist/chunks/config-DpqOnJiz.js.map +1 -0
  66. package/dist/chunks/{config-V3LF-b_F.js.map → config-Dxuwwepq.js.map} +1 -1
  67. package/dist/chunks/{config-Doa_gU40.js.map → config-HZto2PVy.js.map} +1 -1
  68. package/dist/chunks/{config-Dl5aZ5VR.js.map → config-JOtB4mzs.js.map} +1 -1
  69. package/dist/chunks/config-JpHA4Xx02.js.map +1 -0
  70. package/dist/chunks/{config-DkeLkzxj2.js → config-LGrZIdaZ.js} +1 -1
  71. package/dist/chunks/config-LGrZIdaZ.js.map +1 -0
  72. package/dist/chunks/{config-B3dn-gdC.js.map → config-PFg39mYo.js.map} +1 -1
  73. package/dist/chunks/{config-CU_CBd0k.js → config-QYGvEBu5.js} +2 -2
  74. package/dist/chunks/{config-CU_CBd0k.js.map → config-QYGvEBu5.js.map} +1 -1
  75. package/dist/chunks/{config-Bh4NWWsQ.js.map → config-QaIc_gRa.js.map} +1 -1
  76. package/dist/chunks/{config-vcDVCYXo.js.map → config-U4m9PSql.js.map} +1 -1
  77. package/dist/chunks/{config-C_q_4FrU.js.map → config-ZiXWIRBX.js.map} +1 -1
  78. package/dist/chunks/config-eXB87DOi2.js +9 -0
  79. package/dist/chunks/config-eXB87DOi2.js.map +1 -0
  80. package/dist/chunks/{config-hSlCXHoG.js → config-eYLZYOUS2.js} +63 -63
  81. package/dist/chunks/config-eYLZYOUS2.js.map +1 -0
  82. package/dist/chunks/{config-DDUPnue12.js.map → config-ipvU0lzP2.js.map} +1 -1
  83. package/dist/chunks/{config-B61cX08u.js → config-jBp9wVv-.js} +4 -4
  84. package/dist/chunks/{config-B61cX08u.js.map → config-jBp9wVv-.js.map} +1 -1
  85. package/dist/chunks/{config-D5ek7VSi.js.map → config-xR4XVmcy.js.map} +1 -1
  86. package/dist/chunks/context-DdNIxa1w.js +9 -0
  87. package/dist/chunks/context-DdNIxa1w.js.map +1 -0
  88. package/dist/chunks/{dialogShared-BtXUk6Zc.js.map → dialogShared-CxW62PQE.js.map} +1 -1
  89. package/dist/chunks/en-CfkDa4GX.js +144 -0
  90. package/dist/chunks/en-CfkDa4GX.js.map +1 -0
  91. package/dist/chunks/{es-CISK11Nv.js → es-CgaLnFYx.js} +3 -3
  92. package/dist/chunks/{es-CISK11Nv.js.map → es-CgaLnFYx.js.map} +1 -1
  93. package/dist/chunks/es-FkgECuCm.js +144 -0
  94. package/dist/chunks/es-FkgECuCm.js.map +1 -0
  95. package/dist/chunks/{fileValidation-c_iBg74s.js → fileValidation-C3WFaWU2.js} +2 -1
  96. package/dist/chunks/{fileValidation-c_iBg74s.js.map → fileValidation-C3WFaWU2.js.map} +1 -1
  97. package/dist/chunks/{grBadgeStyles-Cq0hH2Ls.js → grBadgeStyles-DrycBuKT.js} +13 -13
  98. package/dist/chunks/grBadgeStyles-DrycBuKT.js.map +1 -0
  99. package/dist/chunks/grButtonStyles-C7Yga_Q1.js +191 -0
  100. package/dist/chunks/grButtonStyles-C7Yga_Q1.js.map +1 -0
  101. package/dist/chunks/{grDropdownStyles-Bqx9hOzU.js → grDropdownStyles-B_-DKytw.js} +2 -2
  102. package/dist/chunks/{grDropdownStyles-Bqx9hOzU.js.map → grDropdownStyles-B_-DKytw.js.map} +1 -1
  103. package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js.map → grLoadingStyles-R5sreH__.js.map} +1 -1
  104. package/dist/chunks/grModalEscStack-BXk-9mv7.js +43 -0
  105. package/dist/chunks/grModalEscStack-BXk-9mv7.js.map +1 -0
  106. package/dist/chunks/{grModalStyles-FgaKqx50.js → grModalStyles-DWd3i05Q.js} +6 -6
  107. package/dist/chunks/{grModalStyles-FgaKqx50.js.map → grModalStyles-DWd3i05Q.js.map} +1 -1
  108. package/dist/chunks/{grSelectStyles-AjWWl007.js → grSelectStyles-CLK5hRd3.js} +3 -3
  109. package/dist/chunks/grSelectStyles-CLK5hRd3.js.map +1 -0
  110. package/dist/chunks/{grStyle-D-gPHdyW.js → grStyle-Blc9otAx.js} +6 -6
  111. package/dist/chunks/grStyle-Blc9otAx.js.map +1 -0
  112. package/dist/chunks/{granularityI18n-D_7jowK2.js → granularityI18n-DoV7Ca2m.js} +1 -1
  113. package/dist/chunks/{granularityI18n-D_7jowK2.js.map → granularityI18n-DoV7Ca2m.js.map} +1 -1
  114. package/dist/chunks/info-Be2OccTu.js.map +1 -0
  115. package/dist/chunks/loader-circle-CfVLz7lb.js.map +1 -0
  116. package/dist/chunks/ru-Bl8CxpEa.js +144 -0
  117. package/dist/chunks/ru-Bl8CxpEa.js.map +1 -0
  118. package/dist/chunks/{safelist-_UVzJrgE2.js → safelist-CkF4v7DC.js} +3 -3
  119. package/dist/chunks/safelist-CkF4v7DC.js.map +1 -0
  120. package/dist/chunks/{safelist-DccvJqCE.js → safelist-Do2RtzLB.js} +3 -3
  121. package/dist/chunks/{safelist-DccvJqCE.js.map → safelist-Do2RtzLB.js.map} +1 -1
  122. package/dist/chunks/shared-B6Ay2081.js +174 -0
  123. package/dist/chunks/shared-B6Ay2081.js.map +1 -0
  124. package/dist/chunks/useAddonMeasurement-DM0akF4C.js +65 -0
  125. package/dist/chunks/useAddonMeasurement-DM0akF4C.js.map +1 -0
  126. package/dist/chunks/useEscapeToClose-C2t_S1gh.js +27 -0
  127. package/dist/chunks/useEscapeToClose-C2t_S1gh.js.map +1 -0
  128. package/dist/chunks/{useFloating-CLtbU7eD.js → useFloating-DtM6TyE4.js} +19 -4
  129. package/dist/chunks/{useFloating-CLtbU7eD.js.map → useFloating-DtM6TyE4.js.map} +1 -1
  130. package/dist/chunks/{transition-mJ3PZCHH.js → useScrollLock-K7kaP2Ud.js} +78 -13
  131. package/dist/chunks/useScrollLock-K7kaP2Ud.js.map +1 -0
  132. package/dist/chunks/x-2KXnqxiD.js.map +1 -0
  133. package/dist/chunks/x-circle-BCBURwyX.js.map +1 -0
  134. package/dist/components/GrAlert/chunks/{GrAlert-HyCjYJeL.js → GrAlert-DPJSU_fG.js} +40 -37
  135. package/dist/components/GrAlert/chunks/GrAlert-DPJSU_fG.js.map +1 -0
  136. package/dist/components/GrAlert/index.js +2 -2
  137. package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js → GrAvatar-96CpTCq5.js} +2 -2
  138. package/dist/components/GrAvatar/chunks/{GrAvatar-BjnPKNAL.js.map → GrAvatar-96CpTCq5.js.map} +1 -1
  139. package/dist/components/GrAvatar/index.js +2 -2
  140. package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js → GrBadge-B77XlaqE.js} +3 -3
  141. package/dist/components/GrBadge/chunks/{GrBadge-Cs_cVfuO.js.map → GrBadge-B77XlaqE.js.map} +1 -1
  142. package/dist/components/GrBadge/index.js +2 -2
  143. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js → GrBadgeWrap-CcktMOdg.js} +2 -2
  144. package/dist/components/GrBadgeWrap/chunks/{GrBadgeWrap-BEnE9DyJ.js.map → GrBadgeWrap-CcktMOdg.js.map} +1 -1
  145. package/dist/components/GrBadgeWrap/index.js +2 -2
  146. package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js.map → GrBottomNav-usuMgG8_.js.map} +1 -1
  147. package/dist/components/GrBottomNav/index.js +2 -2
  148. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js +124 -0
  149. package/dist/components/GrButton/chunks/GrButton-BlffdeJr.js.map +1 -0
  150. package/dist/components/GrButton/index.js +4 -4
  151. package/dist/components/GrButtonGroup/chunks/{GrButtonGroup-CPOH6V-P.js → GrButtonGroup-Bs9dEKfA.js} +1 -1
  152. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-Bs9dEKfA.js.map +1 -0
  153. package/dist/components/GrButtonGroup/index.js +2 -2
  154. package/dist/components/GrCard/chunks/{GrCard-6yk1RRAQ.js → GrCard-DUNMkuHW.js} +3 -3
  155. package/dist/components/GrCard/chunks/GrCard-DUNMkuHW.js.map +1 -0
  156. package/dist/components/GrCard/index.js +2 -2
  157. package/dist/components/GrCheckbox/chunks/{GrCheckbox-Bt3d7ckE.js → GrCheckbox-DJhzZZdO.js} +66 -18
  158. package/dist/components/GrCheckbox/chunks/GrCheckbox-DJhzZZdO.js.map +1 -0
  159. package/dist/components/GrCheckbox/index.js +2 -2
  160. package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js → GrCollapse-CPPLh_xU.js} +12 -12
  161. package/dist/components/GrCollapse/chunks/{GrCollapse-CU94BTAR.js.map → GrCollapse-CPPLh_xU.js.map} +1 -1
  162. package/dist/components/GrCollapse/index.js +2 -2
  163. package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-Bi2KLumL.js → GrConfirmDialog-D8CkOtqv.js} +20 -14
  164. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-D8CkOtqv.js.map +1 -0
  165. package/dist/components/GrConfirmDialog/index.js +2 -2
  166. package/dist/components/GrDataTable/chunks/{GrDataTable-ClcYiyc8.js → GrDataTable-Ds5OeGat.js} +49 -23
  167. package/dist/components/GrDataTable/chunks/GrDataTable-Ds5OeGat.js.map +1 -0
  168. package/dist/components/GrDataTable/index.js +2 -2
  169. package/dist/components/GrDialog/chunks/{GrDialog-CxK4Lj4F.js → GrDialog-Ctucxju9.js} +14 -12
  170. package/dist/components/GrDialog/chunks/GrDialog-Ctucxju9.js.map +1 -0
  171. package/dist/components/GrDialog/index.js +3 -3
  172. package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js +425 -0
  173. package/dist/components/GrDialogService/chunks/GrDialogService-CU1Fbonc.js.map +1 -0
  174. package/dist/components/GrDialogService/index.js +3 -0
  175. package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js +54 -0
  176. package/dist/components/GrDivider/chunks/GrDivider-5bcE-BB4.js.map +1 -0
  177. package/dist/components/GrDivider/index.js +3 -0
  178. package/dist/components/GrDrawer/chunks/{GrDrawer-BW3wtI7h.js → GrDrawer-SLGKCY2A.js} +54 -26
  179. package/dist/components/GrDrawer/chunks/GrDrawer-SLGKCY2A.js.map +1 -0
  180. package/dist/components/GrDrawer/index.js +2 -2
  181. package/dist/components/GrDropdown/chunks/GrDropdown-BnDMYP8v.js +181 -0
  182. package/dist/components/GrDropdown/chunks/GrDropdown-BnDMYP8v.js.map +1 -0
  183. package/dist/components/GrDropdown/index.js +2 -2
  184. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CJom_-c2.js → GrDropdownMenu--g9Vofcq.js} +10 -10
  185. package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-CJom_-c2.js.map → GrDropdownMenu--g9Vofcq.js.map} +1 -1
  186. package/dist/components/GrDropdownMenu/index.js +2 -2
  187. package/dist/components/GrEmptyState/chunks/{GrEmptyState-yOuZW7-t.js → GrEmptyState-CA3BiTV7.js} +3 -3
  188. package/dist/components/GrEmptyState/chunks/{GrEmptyState-yOuZW7-t.js.map → GrEmptyState-CA3BiTV7.js.map} +1 -1
  189. package/dist/components/GrEmptyState/index.js +2 -2
  190. package/dist/components/GrFileUpload/chunks/{GrFileUpload-CBKK3dgC.js → GrFileUpload-DvWPpiJS.js} +26 -23
  191. package/dist/components/GrFileUpload/chunks/GrFileUpload-DvWPpiJS.js.map +1 -0
  192. package/dist/components/GrFileUpload/index.js +3 -3
  193. package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js +73 -0
  194. package/dist/components/GrFormField/chunks/GrFormField-DnfMHx_U.js.map +1 -0
  195. package/dist/components/GrFormField/index.js +4 -3
  196. package/dist/components/GrFormFile/chunks/{GrFormFile-CkR6cYqf.js → GrFormFile-CXcqqdvV.js} +38 -31
  197. package/dist/components/GrFormFile/chunks/GrFormFile-CXcqqdvV.js.map +1 -0
  198. package/dist/components/GrFormFile/index.js +2 -2
  199. package/dist/components/GrFormSection/chunks/{GrFormSection-dbyzqxYk.js → GrFormSection-Ce21jcgo.js} +1 -1
  200. package/dist/components/GrFormSection/chunks/{GrFormSection-dbyzqxYk.js.map → GrFormSection-Ce21jcgo.js.map} +1 -1
  201. package/dist/components/GrFormSection/index.js +2 -2
  202. package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js → GrIcon-D9AWQLk2.js} +3 -3
  203. package/dist/components/GrIcon/chunks/{GrIcon-BV7RBU_0.js.map → GrIcon-D9AWQLk2.js.map} +1 -1
  204. package/dist/components/GrIcon/index.js +2 -2
  205. package/dist/components/GrImageViewer/chunks/GrImageViewer-Dla9IBkd.js +650 -0
  206. package/dist/components/GrImageViewer/chunks/GrImageViewer-Dla9IBkd.js.map +1 -0
  207. package/dist/components/GrImageViewer/index.js +2 -2
  208. package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js +334 -0
  209. package/dist/components/GrInput/chunks/GrInput-B8dd3JaA.js.map +1 -0
  210. package/dist/components/GrInput/index.js +2 -2
  211. package/dist/components/GrInputTag/chunks/{GrInputTag-g-KdUI_Z.js → GrInputTag-zMgFqp2g.js} +27 -24
  212. package/dist/components/GrInputTag/chunks/GrInputTag-zMgFqp2g.js.map +1 -0
  213. package/dist/components/GrInputTag/index.js +2 -2
  214. package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js +22 -0
  215. package/dist/components/GrKbd/chunks/GrKbd-BEoYxWhE.js.map +1 -0
  216. package/dist/components/GrKbd/index.js +3 -0
  217. package/dist/components/GrLink/chunks/{GrLink-KSTmk9Yq.js → GrLink-CYUe-Q8k.js} +14 -7
  218. package/dist/components/GrLink/chunks/GrLink-CYUe-Q8k.js.map +1 -0
  219. package/dist/components/GrLink/index.js +2 -2
  220. package/dist/components/GrList/chunks/{GrList-CUW2sRm_.js → GrList-Dx772Ns4.js} +1 -1
  221. package/dist/components/GrList/chunks/{GrList-CUW2sRm_.js.map → GrList-Dx772Ns4.js.map} +1 -1
  222. package/dist/components/GrList/index.js +2 -2
  223. package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js → GrLoading--X_7rdbb.js} +7 -7
  224. package/dist/components/GrLoading/chunks/{GrLoading-mfyfghxs.js.map → GrLoading--X_7rdbb.js.map} +1 -1
  225. package/dist/components/GrLoading/index.js +2 -2
  226. package/dist/components/GrModal/chunks/{GrModal-CSOL3fHQ.js → GrModal-C0GZrHN3.js} +9 -62
  227. package/dist/components/GrModal/chunks/GrModal-C0GZrHN3.js.map +1 -0
  228. package/dist/components/GrModal/index.js +3 -3
  229. package/dist/components/GrNavbar/chunks/{GrNavbar-CHxwtFIR.js → GrNavbar-DW3MiIIf.js} +6 -6
  230. package/dist/components/GrNavbar/chunks/{GrNavbar-CHxwtFIR.js.map → GrNavbar-DW3MiIIf.js.map} +1 -1
  231. package/dist/components/GrNavbar/index.js +2 -2
  232. package/dist/components/GrNumberInput/chunks/{GrNumberInput-ClPBwkxx.js → GrNumberInput-DxCEvL7V.js} +144 -72
  233. package/dist/components/GrNumberInput/chunks/GrNumberInput-DxCEvL7V.js.map +1 -0
  234. package/dist/components/GrNumberInput/index.js +2 -2
  235. package/dist/components/GrPagination/chunks/{GrPagination-D2GS0ShQ.js → GrPagination-mlyfLjQY.js} +76 -25
  236. package/dist/components/GrPagination/chunks/GrPagination-mlyfLjQY.js.map +1 -0
  237. package/dist/components/GrPagination/index.js +2 -2
  238. package/dist/components/GrProgressBar/chunks/{GrProgressBar-BBSFpVEq.js → GrProgressBar-CC3z-Zqp.js} +3 -3
  239. package/dist/components/GrProgressBar/chunks/{GrProgressBar-BBSFpVEq.js.map → GrProgressBar-CC3z-Zqp.js.map} +1 -1
  240. package/dist/components/GrProgressBar/index.js +2 -2
  241. package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-D_TFqKsF.js → GrPromptDialog-C-_BMNuY.js} +31 -23
  242. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-C-_BMNuY.js.map +1 -0
  243. package/dist/components/GrPromptDialog/index.js +2 -2
  244. package/dist/components/GrRadio/chunks/{GrRadio-CSbTnrom.js → GrRadio-Dr-pvs_9.js} +6 -6
  245. package/dist/components/GrRadio/chunks/{GrRadio-CSbTnrom.js.map → GrRadio-Dr-pvs_9.js.map} +1 -1
  246. package/dist/components/GrRadio/index.js +2 -2
  247. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-DsrnTygR.js → GrRadioGroup-nOdvfV_g.js} +3 -3
  248. package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-DsrnTygR.js.map → GrRadioGroup-nOdvfV_g.js.map} +1 -1
  249. package/dist/components/GrRadioGroup/index.js +2 -2
  250. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-K1uZ1mYD.js → GrResponseErrorBanner-BWJNe2gr.js} +21 -18
  251. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-BWJNe2gr.js.map +1 -0
  252. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-bM8FC_Bw.js → GrResponseErrorBanner-Cdu9ekK9.js} +5 -5
  253. package/dist/components/GrResponseErrorBanner/chunks/{GrResponseErrorBanner-bM8FC_Bw.js.map → GrResponseErrorBanner-Cdu9ekK9.js.map} +1 -1
  254. package/dist/components/GrResponseErrorBanner/index.js +2 -2
  255. package/dist/components/GrSegmented/chunks/{GrSegmented-DpZGs4VX.js → GrSegmented-C1y0UXpQ.js} +5 -5
  256. package/dist/components/GrSegmented/chunks/{GrSegmented-DpZGs4VX.js.map → GrSegmented-C1y0UXpQ.js.map} +1 -1
  257. package/dist/components/GrSegmented/index.js +2 -2
  258. package/dist/components/GrSelect/chunks/{GrSelect-DSz7jvUb.js → GrSelect-BVCmitqa.js} +227 -87
  259. package/dist/components/GrSelect/chunks/GrSelect-BVCmitqa.js.map +1 -0
  260. package/dist/components/GrSelect/index.js +2 -2
  261. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js +238 -0
  262. package/dist/components/GrSidebar/chunks/GrSidebar-DkWozzwA.js.map +1 -0
  263. package/dist/components/GrSidebar/index.js +3 -3
  264. package/dist/components/GrSkeleton/chunks/{GrSkeleton-B05K0QKh.js → GrSkeleton-DsN-_CDZ.js} +1 -1
  265. package/dist/components/GrSkeleton/chunks/{GrSkeleton-B05K0QKh.js.map → GrSkeleton-DsN-_CDZ.js.map} +1 -1
  266. package/dist/components/GrSkeleton/index.js +2 -2
  267. package/dist/components/GrSwitch/chunks/{GrSwitch-CSRtcN5-.js → GrSwitch-DAioyccZ.js} +10 -10
  268. package/dist/components/GrSwitch/chunks/{GrSwitch-CSRtcN5-.js.map → GrSwitch-DAioyccZ.js.map} +1 -1
  269. package/dist/components/GrSwitch/index.js +2 -2
  270. package/dist/components/GrTabPanels/chunks/GrTabPanels-DbKybwe-.js +68 -0
  271. package/dist/components/GrTabPanels/chunks/GrTabPanels-DbKybwe-.js.map +1 -0
  272. package/dist/components/GrTabPanels/index.js +3 -0
  273. package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js → GrTable-Db3hRnKA.js} +3 -3
  274. package/dist/components/GrTable/chunks/{GrTable-dTWUxzRm.js.map → GrTable-Db3hRnKA.js.map} +1 -1
  275. package/dist/components/GrTable/index.js +2 -2
  276. package/dist/components/GrTabs/chunks/{GrTabs-BfeVNMFJ.js → GrTabs-DsLwWoRz.js} +9 -4
  277. package/dist/components/GrTabs/chunks/GrTabs-DsLwWoRz.js.map +1 -0
  278. package/dist/components/GrTabs/index.js +2 -2
  279. package/dist/components/GrTextarea/chunks/{GrTextarea-CBBzpF2S.js → GrTextarea-CKukGlNl.js} +17 -7
  280. package/dist/components/GrTextarea/chunks/GrTextarea-CKukGlNl.js.map +1 -0
  281. package/dist/components/GrTextarea/index.js +2 -2
  282. package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js +189 -0
  283. package/dist/components/GrToaster/chunks/GrToaster-L2cu6cSR.js.map +1 -0
  284. package/dist/components/GrToaster/index.js +2 -2
  285. package/dist/components/GrTooltip/chunks/{GrTooltip-BC-40SA5.js → GrTooltip-BeyZ8ssR.js} +10 -10
  286. package/dist/components/GrTooltip/chunks/{GrTooltip-BC-40SA5.js.map → GrTooltip-BeyZ8ssR.js.map} +1 -1
  287. package/dist/components/GrTooltip/index.js +2 -2
  288. package/dist/components/GrTree/chunks/{GrTree-uZr5SyQI.js → GrTree-B2_yW6g1.js} +145 -41
  289. package/dist/components/GrTree/chunks/GrTree-B2_yW6g1.js.map +1 -0
  290. package/dist/components/GrTree/index.js +2 -2
  291. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-CytivcCa.js → GrTreeSelect-0aM62xyu.js} +16 -16
  292. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-CytivcCa.js.map → GrTreeSelect-0aM62xyu.js.map} +1 -1
  293. package/dist/components/GrTreeSelect/index.js +2 -2
  294. package/dist/composables/useTheme.js +48 -8
  295. package/dist/composables/useTheme.js.map +1 -1
  296. package/dist/composables/useToast.js +88 -26
  297. package/dist/composables/useToast.js.map +1 -1
  298. package/dist/directives/autofocus.js.map +1 -1
  299. package/dist/directives/autosize.js.map +1 -1
  300. package/dist/directives/clickOutside.js.map +1 -1
  301. package/dist/directives/dropzone.js +6 -5
  302. package/dist/directives/dropzone.js.map +1 -1
  303. package/dist/directives/hotkey.js +24 -7
  304. package/dist/directives/hotkey.js.map +1 -1
  305. package/dist/directives/loading.js +2 -2
  306. package/dist/directives/loading.js.map +1 -1
  307. package/dist/fileValidation/index.js +1 -1
  308. package/dist/granular-provider-node.js +7 -7
  309. package/dist/granular-provider-node.js.map +1 -1
  310. package/dist/granular-provider.js +1 -1
  311. package/dist/granular-provider.js.map +1 -1
  312. package/dist/i18n/all.js +1 -1
  313. package/dist/i18n/all.js.map +1 -1
  314. package/dist/i18n/index.js +2 -2
  315. package/dist/index.js +116 -534
  316. package/dist/index.js.map +1 -1
  317. package/dist/styles/base.css +54 -0
  318. package/dist/styles/index.css +15 -0
  319. package/dist/styles/preflight.css +33 -0
  320. package/dist/styles/themes/dark.css +107 -0
  321. package/dist/styles/themes/light.css +98 -0
  322. package/dist/styles/tokens.css +135 -0
  323. package/dist/types/src/components/GrButton/GrButton.vue.d.ts +25 -2
  324. package/dist/types/src/components/GrCheckbox/GrCheckbox.vue.d.ts +7 -2
  325. package/dist/types/src/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +8 -8
  326. package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +29 -5
  327. package/dist/types/src/components/GrDialog/GrDialog.vue.d.ts +2 -2
  328. package/dist/types/src/components/GrDialog/GrDialogHeader.vue.d.ts +2 -2
  329. package/dist/types/src/components/GrDivider/GrDivider.vue.d.ts +58 -0
  330. package/dist/types/src/components/GrDivider/config.d.ts +1 -0
  331. package/dist/types/src/components/GrDivider/index.d.ts +4 -0
  332. package/dist/types/src/components/GrDrawer/GrDrawer.vue.d.ts +6 -6
  333. package/dist/types/src/components/GrDropdown/GrDropdown.vue.d.ts +7 -0
  334. package/dist/types/src/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +6 -0
  335. package/dist/types/src/components/GrFileUpload/GrFileUpload.vue.d.ts +4 -4
  336. package/dist/types/src/components/GrFormField/GrFormField.vue.d.ts +15 -2
  337. package/dist/types/src/components/GrFormField/context.d.ts +20 -0
  338. package/dist/types/src/components/GrFormField/index.d.ts +1 -0
  339. package/dist/types/src/components/GrFormFile/GrFormFile.vue.d.ts +11 -11
  340. package/dist/types/src/components/GrImageViewer/GrImageViewer.vue.d.ts +22 -18
  341. package/dist/types/src/components/GrImageViewer/composables/useViewerKeyboard.d.ts +20 -0
  342. package/dist/types/src/components/GrImageViewer/composables/useWheelGesture.d.ts +16 -0
  343. package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +50 -0
  344. package/dist/types/src/components/GrInput/GrInput.vue.d.ts +55 -2
  345. package/dist/types/src/components/GrInput/grInputStyles.d.ts +3 -3
  346. package/dist/types/src/components/GrInputTag/GrInputTag.vue.d.ts +2 -2
  347. package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +46 -0
  348. package/dist/types/src/components/GrKbd/config.d.ts +1 -0
  349. package/dist/types/src/components/GrKbd/index.d.ts +4 -0
  350. package/dist/types/src/components/GrLink/GrLink.vue.d.ts +12 -6
  351. package/dist/types/src/components/GrLink/grLinkStyles.d.ts +31 -3
  352. package/dist/types/src/components/GrLink/index.d.ts +1 -1
  353. package/dist/types/src/components/GrLoading/GrLoading.vue.d.ts +1 -1
  354. package/dist/types/src/components/GrModal/grModalStyles.d.ts +1 -1
  355. package/dist/types/src/components/GrNumberInput/GrNumberInput.vue.d.ts +33 -4
  356. package/dist/types/src/components/GrPagination/GrPagination.vue.d.ts +13 -1
  357. package/dist/types/src/components/GrPromptDialog/GrPromptDialog.vue.d.ts +12 -12
  358. package/dist/types/src/components/GrSegmented/GrSegmented.vue.d.ts +1 -1
  359. package/dist/types/src/components/GrSegmented/grSegmentedStyles.d.ts +5 -5
  360. package/dist/types/src/components/GrSelect/GrSelect.vue.d.ts +3 -3
  361. package/dist/types/src/components/GrSelect/grSelectStyles.d.ts +2 -1
  362. package/dist/types/src/components/GrSidebar/GrSidebar.vue.d.ts +33 -10
  363. package/dist/types/src/components/GrSidebar/GrSidebarItem.vue.d.ts +64 -0
  364. package/dist/types/src/components/GrSidebar/index.d.ts +1 -0
  365. package/dist/types/src/components/GrSidebar/sidebarContext.d.ts +9 -0
  366. package/dist/types/src/components/GrSwitch/GrSwitch.vue.d.ts +1 -1
  367. package/dist/types/src/components/GrSwitch/grSwitchStyles.d.ts +2 -2
  368. package/dist/types/src/components/GrTabPanels/GrTabPanel.vue.d.ts +46 -0
  369. package/dist/types/src/components/GrTabPanels/GrTabPanels.vue.d.ts +51 -0
  370. package/dist/types/src/components/GrTabPanels/config.d.ts +5 -0
  371. package/dist/types/src/components/GrTabPanels/context.d.ts +9 -0
  372. package/dist/types/src/components/GrTabPanels/index.d.ts +6 -0
  373. package/dist/types/src/components/GrTabs/GrTabs.vue.d.ts +6 -0
  374. package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +9 -4
  375. package/dist/types/src/components/GrTree/GrTree.vue.d.ts +1 -1
  376. package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +2 -0
  377. package/dist/types/src/components/GrTreeSelect/GrTreeSelect.vue.d.ts +2 -2
  378. package/dist/types/src/components/GrTreeSelect/grTreeSelectStyles.d.ts +1 -1
  379. package/dist/types/src/components/GrTreeSelect/grTreeSelectTypes.d.ts +1 -1
  380. package/dist/types/src/composables/internal/useAddonMeasurement.d.ts +18 -0
  381. package/dist/types/src/composables/internal/useEscapeToClose.d.ts +11 -0
  382. package/dist/types/src/composables/internal/useScrollLock.d.ts +24 -0
  383. package/dist/types/src/composables/useTheme.d.ts +5 -2
  384. package/dist/types/src/composables/useToast.d.ts +33 -1
  385. package/dist/types/src/directives/hotkey.d.ts +14 -0
  386. package/dist/types/src/granular-provider/shared.d.ts +4 -3
  387. package/dist/types/src/i18n/messages/en.d.ts +130 -0
  388. package/dist/types/src/i18n/messages/es.d.ts +130 -0
  389. package/dist/types/src/i18n/messages/ru.d.ts +130 -0
  390. package/dist/types/src/index.d.ts +5 -2
  391. package/dist/vue/index.js.map +1 -1
  392. package/dist/web-types.json +4922 -0
  393. package/package.json +38 -20
  394. package/dist/chunks/arrow-up-DZdIrpaF.js.map +0 -1
  395. package/dist/chunks/config-A-iei0Ux.js.map +0 -1
  396. package/dist/chunks/config-B0uUCaJW.js.map +0 -1
  397. package/dist/chunks/config-BLa1TEGm2.js.map +0 -1
  398. package/dist/chunks/config-BduXEXjt.js.map +0 -1
  399. package/dist/chunks/config-BuoIngj32.js.map +0 -1
  400. package/dist/chunks/config-C8MM2Dg0.js.map +0 -1
  401. package/dist/chunks/config-CWTfyPNI.js.map +0 -1
  402. package/dist/chunks/config-D_Pafsjq2.js.map +0 -1
  403. package/dist/chunks/config-DkeLkzxj2.js.map +0 -1
  404. package/dist/chunks/config-NkbzVFZo.js +0 -59
  405. package/dist/chunks/config-NkbzVFZo.js.map +0 -1
  406. package/dist/chunks/config-RjfJFv1Y.js.map +0 -1
  407. package/dist/chunks/config-hSlCXHoG.js.map +0 -1
  408. package/dist/chunks/config-nrOj9p6I.js.map +0 -1
  409. package/dist/chunks/en-B_fSdoTi.js +0 -72
  410. package/dist/chunks/en-B_fSdoTi.js.map +0 -1
  411. package/dist/chunks/es-DKP6fLir.js +0 -72
  412. package/dist/chunks/es-DKP6fLir.js.map +0 -1
  413. package/dist/chunks/grBadgeStyles-Cq0hH2Ls.js.map +0 -1
  414. package/dist/chunks/grButtonStyles-DKuXUemw.js +0 -191
  415. package/dist/chunks/grButtonStyles-DKuXUemw.js.map +0 -1
  416. package/dist/chunks/grSelectStyles-AjWWl007.js.map +0 -1
  417. package/dist/chunks/grStyle-D-gPHdyW.js.map +0 -1
  418. package/dist/chunks/info-C0bHmdZq.js.map +0 -1
  419. package/dist/chunks/loader-circle-BUntgosj.js.map +0 -1
  420. package/dist/chunks/ru-S6VlnurJ.js +0 -72
  421. package/dist/chunks/ru-S6VlnurJ.js.map +0 -1
  422. package/dist/chunks/safelist-_UVzJrgE2.js.map +0 -1
  423. package/dist/chunks/shared-DpjTvFno.js +0 -169
  424. package/dist/chunks/shared-DpjTvFno.js.map +0 -1
  425. package/dist/chunks/transition-mJ3PZCHH.js.map +0 -1
  426. package/dist/chunks/x-Pa6C2hwi.js.map +0 -1
  427. package/dist/chunks/x-circle-DQSlBLmX.js.map +0 -1
  428. package/dist/components/GrAlert/chunks/GrAlert-HyCjYJeL.js.map +0 -1
  429. package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js +0 -83
  430. package/dist/components/GrButton/chunks/GrButton-CPDKonoB.js.map +0 -1
  431. package/dist/components/GrButtonGroup/chunks/GrButtonGroup-CPOH6V-P.js.map +0 -1
  432. package/dist/components/GrCard/chunks/GrCard-6yk1RRAQ.js.map +0 -1
  433. package/dist/components/GrCheckbox/chunks/GrCheckbox-Bt3d7ckE.js.map +0 -1
  434. package/dist/components/GrConfirmDialog/chunks/GrConfirmDialog-Bi2KLumL.js.map +0 -1
  435. package/dist/components/GrDataTable/chunks/GrDataTable-ClcYiyc8.js.map +0 -1
  436. package/dist/components/GrDialog/chunks/GrDialog-CxK4Lj4F.js.map +0 -1
  437. package/dist/components/GrDrawer/chunks/GrDrawer-BW3wtI7h.js.map +0 -1
  438. package/dist/components/GrDropdown/chunks/GrDropdown-BGKeEfZ1.js +0 -105
  439. package/dist/components/GrDropdown/chunks/GrDropdown-BGKeEfZ1.js.map +0 -1
  440. package/dist/components/GrFileUpload/chunks/GrFileUpload-CBKK3dgC.js.map +0 -1
  441. package/dist/components/GrFormField/chunks/GrFormField-U7c_aDPJ.js +0 -35
  442. package/dist/components/GrFormField/chunks/GrFormField-U7c_aDPJ.js.map +0 -1
  443. package/dist/components/GrFormFile/chunks/GrFormFile-CkR6cYqf.js.map +0 -1
  444. package/dist/components/GrImageViewer/chunks/GrImageViewer-BG40DsHa.js +0 -550
  445. package/dist/components/GrImageViewer/chunks/GrImageViewer-BG40DsHa.js.map +0 -1
  446. package/dist/components/GrInput/chunks/GrInput-gwFQ1sk4.js +0 -211
  447. package/dist/components/GrInput/chunks/GrInput-gwFQ1sk4.js.map +0 -1
  448. package/dist/components/GrInputTag/chunks/GrInputTag-g-KdUI_Z.js.map +0 -1
  449. package/dist/components/GrLink/chunks/GrLink-KSTmk9Yq.js.map +0 -1
  450. package/dist/components/GrModal/chunks/GrModal-CSOL3fHQ.js.map +0 -1
  451. package/dist/components/GrNumberInput/chunks/GrNumberInput-ClPBwkxx.js.map +0 -1
  452. package/dist/components/GrPagination/chunks/GrPagination-D2GS0ShQ.js.map +0 -1
  453. package/dist/components/GrPromptDialog/chunks/GrPromptDialog-D_TFqKsF.js.map +0 -1
  454. package/dist/components/GrResponseErrorBanner/chunks/GrResponseErrorBanner-K1uZ1mYD.js.map +0 -1
  455. package/dist/components/GrSelect/chunks/GrSelect-DSz7jvUb.js.map +0 -1
  456. package/dist/components/GrSidebar/chunks/GrSidebar-BW8LRMZ-.js +0 -44
  457. package/dist/components/GrSidebar/chunks/GrSidebar-BW8LRMZ-.js.map +0 -1
  458. package/dist/components/GrTabs/chunks/GrTabs-BfeVNMFJ.js.map +0 -1
  459. package/dist/components/GrTextarea/chunks/GrTextarea-CBBzpF2S.js.map +0 -1
  460. package/dist/components/GrToaster/chunks/GrToaster-C6_iHk2J.js +0 -172
  461. package/dist/components/GrToaster/chunks/GrToaster-C6_iHk2J.js.map +0 -1
  462. package/dist/components/GrTree/chunks/GrTree-uZr5SyQI.js.map +0 -1
  463. /package/dist/chunks/{_plugin-vue_export-helper-DQR7Sy7Q.js → _plugin-vue_export-helper-BOaGB7Aw.js} +0 -0
  464. /package/dist/chunks/{adapter-BqqjEZGU.js → adapter-CAOxmn2G.js} +0 -0
  465. /package/dist/chunks/{arrow-up-DZdIrpaF.js → arrow-up-C_G4jg8M.js} +0 -0
  466. /package/dist/chunks/{classTokens-BPeBXNzu.js → classTokens-BzazaERD.js} +0 -0
  467. /package/dist/chunks/{config-DZrlovR42.js → config-8Pcutu1j2.js} +0 -0
  468. /package/dist/chunks/{config-VJuoznpH.js → config-B0qIpo8m.js} +0 -0
  469. /package/dist/chunks/{config-DbghHyY_.js → config-BEegFP74.js} +0 -0
  470. /package/dist/chunks/{config-BeBsN0c12.js → config-BLHqZhy-2.js} +0 -0
  471. /package/dist/chunks/{config-BV4vBzdm.js → config-BNu8lFQB.js} +0 -0
  472. /package/dist/chunks/{config-DhQc1TRY.js → config-BUHuGBik.js} +0 -0
  473. /package/dist/chunks/{config-CPSdAjUi.js → config-BWGGp7uV.js} +0 -0
  474. /package/dist/chunks/{config-BduXEXjt.js → config-BXtAmU3s2.js} +0 -0
  475. /package/dist/chunks/{config-CzgNEHKi.js → config-Bah4oHwL.js} +0 -0
  476. /package/dist/chunks/{config-lMDE_8A5.js → config-C86UzUYf.js} +0 -0
  477. /package/dist/chunks/{config-BgBWt9-A.js → config-C9AcVDkv.js} +0 -0
  478. /package/dist/chunks/{config-BuoIngj32.js → config-CGHLoBlH.js} +0 -0
  479. /package/dist/chunks/{config-ChQxl75m.js → config-CThzliFi.js} +0 -0
  480. /package/dist/chunks/{config-DDwBSoc_.js → config-Cb2PAlSD.js} +0 -0
  481. /package/dist/chunks/{config-C5-ujXCI.js → config-D7GZO-Dx.js} +0 -0
  482. /package/dist/chunks/{config-CUwF4E4R.js → config-DBmdgoVf.js} +0 -0
  483. /package/dist/chunks/{config-C9MblwGq.js → config-DICOd-2X.js} +0 -0
  484. /package/dist/chunks/{config-BLa1TEGm2.js → config-DpqOnJiz.js} +0 -0
  485. /package/dist/chunks/{config-V3LF-b_F.js → config-Dxuwwepq.js} +0 -0
  486. /package/dist/chunks/{config-Doa_gU40.js → config-HZto2PVy.js} +0 -0
  487. /package/dist/chunks/{config-Dl5aZ5VR.js → config-JOtB4mzs.js} +0 -0
  488. /package/dist/chunks/{config-CWTfyPNI.js → config-JpHA4Xx02.js} +0 -0
  489. /package/dist/chunks/{config-B3dn-gdC.js → config-PFg39mYo.js} +0 -0
  490. /package/dist/chunks/{config-Bh4NWWsQ.js → config-QaIc_gRa.js} +0 -0
  491. /package/dist/chunks/{config-vcDVCYXo.js → config-U4m9PSql.js} +0 -0
  492. /package/dist/chunks/{config-C_q_4FrU.js → config-ZiXWIRBX.js} +0 -0
  493. /package/dist/chunks/{config-DDUPnue12.js → config-ipvU0lzP2.js} +0 -0
  494. /package/dist/chunks/{config-D5ek7VSi.js → config-xR4XVmcy.js} +0 -0
  495. /package/dist/chunks/{dialogShared-BtXUk6Zc.js → dialogShared-CxW62PQE.js} +0 -0
  496. /package/dist/chunks/{grLoadingStyles-DmI-SJ3i.js → grLoadingStyles-R5sreH__.js} +0 -0
  497. /package/dist/chunks/{info-C0bHmdZq.js → info-Be2OccTu.js} +0 -0
  498. /package/dist/chunks/{loader-circle-BUntgosj.js → loader-circle-CfVLz7lb.js} +0 -0
  499. /package/dist/chunks/{x-Pa6C2hwi.js → x-2KXnqxiD.js} +0 -0
  500. /package/dist/chunks/{x-circle-DQSlBLmX.js → x-circle-BCBURwyX.js} +0 -0
  501. /package/dist/components/GrBottomNav/chunks/{GrBottomNav-XPHwd7UQ.js → GrBottomNav-usuMgG8_.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { t as GrCard_default } from "../../GrCard/chunks/GrCard-6yk1RRAQ.js";
2
- import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-BV7RBU_0.js";
1
+ import { t as GrCard_default } from "../../GrCard/chunks/GrCard-DUNMkuHW.js";
2
+ import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
3
3
  import { computed, createBlock, createElementBlock, createElementVNode, createVNode, defineComponent, getCurrentInstance, inject, markRaw, normalizeClass, openBlock, provide, ref, renderSlot, toDisplayString, unref, withCtx } from "vue";
4
4
  //#region src/components/GrCollapse/grCollapseContext.ts
5
5
  var GR_COLLAPSE_CONTEXT = Symbol("GR_COLLAPSE_CONTEXT");
@@ -29,11 +29,11 @@ var GrCollapse_default = /* @__PURE__ */ defineComponent({
29
29
  const activeSet = computed(() => {
30
30
  const value = props.modelValue;
31
31
  if (props.accordion) {
32
- if (typeof value === "string" || typeof value === "number") return new Set([value]);
32
+ if (typeof value === "string" || typeof value === "number") return /* @__PURE__ */ new Set([value]);
33
33
  return /* @__PURE__ */ new Set();
34
34
  }
35
35
  if (Array.isArray(value)) return new Set(value);
36
- if (typeof value === "string" || typeof value === "number") return new Set([value]);
36
+ if (typeof value === "string" || typeof value === "number") return /* @__PURE__ */ new Set([value]);
37
37
  return /* @__PURE__ */ new Set();
38
38
  });
39
39
  function setModelValue(next) {
@@ -56,7 +56,7 @@ var GrCollapse_default = /* @__PURE__ */ defineComponent({
56
56
  toggle
57
57
  });
58
58
  return (_ctx, _cache) => {
59
- return openBlock(), createBlock(unref(GrCard_default), { "data-ds-collapse": "" }, {
59
+ return openBlock(), createBlock(unref(GrCard_default), { "data-gr-collapse": "" }, {
60
60
  default: withCtx(() => [createElementVNode("div", { class: normalizeClass(__props.divided ? "divide-y divide-[var(--brd)]" : "") }, [renderSlot(_ctx.$slots, "default")], 2)]),
61
61
  _: 3
62
62
  });
@@ -87,7 +87,7 @@ var chevron_down_default = markRaw({
87
87
  //#endregion
88
88
  //#region src/components/GrCollapse/GrCollapseItem.vue?vue&type=script&setup=true&lang.ts
89
89
  var _hoisted_1 = {
90
- "data-ds-collapse-item": "",
90
+ "data-gr-collapse-item": "",
91
91
  class: "text-[var(--fg)]"
92
92
  };
93
93
  var _hoisted_2 = { class: "m-0" };
@@ -120,17 +120,17 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
120
120
  });
121
121
  const resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled);
122
122
  const expanded = computed(() => collapseContext.isActive(resolvedName.value));
123
- const headerId = `ds-collapse-header-${uid}`;
124
- const panelId = `ds-collapse-panel-${uid}`;
123
+ const headerId = `gr-collapse-header-${uid}`;
124
+ const panelId = `gr-collapse-panel-${uid}`;
125
125
  const triggerEl = ref(null);
126
126
  function onToggle() {
127
127
  if (resolvedDisabled.value) return;
128
128
  collapseContext.toggle(resolvedName.value);
129
129
  }
130
130
  function getAllTriggers() {
131
- const root = triggerEl.value?.closest("[data-ds-collapse]");
131
+ const root = triggerEl.value?.closest("[data-gr-collapse]");
132
132
  if (!root) return [];
133
- return Array.prototype.slice.call(root.querySelectorAll("[data-ds-collapse-trigger]"));
133
+ return Array.prototype.slice.call(root.querySelectorAll("[data-gr-collapse-trigger]"));
134
134
  }
135
135
  function focusRelative(direction) {
136
136
  const current = triggerEl.value;
@@ -176,7 +176,7 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
176
176
  id: headerId,
177
177
  ref_key: "triggerEl",
178
178
  ref: triggerEl,
179
- "data-ds-collapse-trigger": "",
179
+ "data-gr-collapse-trigger": "",
180
180
  type: "button",
181
181
  "aria-expanded": expanded.value ? "true" : "false",
182
182
  "aria-controls": panelId,
@@ -187,7 +187,7 @@ var GrCollapseItem_default = /* @__PURE__ */ defineComponent({
187
187
  }, [createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_5, toDisplayString(__props.title), 1)])]), createVNode(unref(GrIcon_default), {
188
188
  size: "sm",
189
189
  "aria-hidden": "true",
190
- "data-ds-collapse-chevron": "",
190
+ "data-gr-collapse-chevron": "",
191
191
  class: normalizeClass(["shrink-0 transition-transform duration-150 text-[var(--muted-fg)]", expanded.value ? "rotate-180" : ""])
192
192
  }, {
193
193
  default: withCtx(() => [createVNode(unref(chevron_down_default))]),
@@ -1 +1 @@
1
- {"version":3,"file":"GrCollapse-CU94BTAR.js","names":[],"sources":["../../../../src/components/GrCollapse/grCollapseContext.ts","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-ds-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `ds-collapse-header-${uid}`\nconst panelId = `ds-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-ds-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-ds-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-ds-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-ds-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-ds-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>"],"mappings":"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"}
1
+ {"version":3,"file":"GrCollapse-CPPLh_xU.js","names":[],"sources":["../../../../src/components/GrCollapse/grCollapseContext.ts","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapse.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue","../../../../src/components/GrCollapse/GrCollapseItem.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\n\nexport type GrCollapseValue = string | number\n\nexport type GrCollapseModelValue = GrCollapseValue | GrCollapseValue[] | undefined\n\nexport type GrCollapseContext = {\n accordion: ComputedRef<boolean>\n disabled: ComputedRef<boolean>\n isActive: (name: GrCollapseValue) => boolean\n toggle: (name: GrCollapseValue) => void\n}\n\nexport const GR_COLLAPSE_CONTEXT: InjectionKey<GrCollapseContext> = Symbol('GR_COLLAPSE_CONTEXT')","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-gr-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\nimport GrCard from '../GrCard'\n\nimport {\n GR_COLLAPSE_CONTEXT,\n type GrCollapseContext,\n type GrCollapseModelValue,\n type GrCollapseValue,\n} from './grCollapseContext'\n\n/**\n * GrCollapse — контейнер секций `GrCollapseItem`.\n *\n * @prop modelValue — открытые секции. В `accordion`-режиме — `string|number|undefined`, иначе — массив значений.\n * @prop accordion — режим, когда одновременно может быть открыта только одна секция.\n * @prop disabled — блокирует взаимодействие со всеми секциями.\n * @prop divided — разделители между секциями.\n */\nexport interface GrCollapseProps {\n modelValue?: GrCollapseModelValue\n accordion?: boolean\n disabled?: boolean\n divided?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseProps>(), {\n modelValue: undefined,\n accordion: false,\n disabled: false,\n divided: true,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: GrCollapseModelValue): void\n (e: 'change', value: GrCollapseModelValue): void\n}>()\n\nconst activeSet = computed(() => {\n const value = props.modelValue\n\n if (props.accordion) {\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n }\n\n if (Array.isArray(value)) {\n return new Set<GrCollapseValue>(value)\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return new Set<GrCollapseValue>([value])\n }\n\n return new Set<GrCollapseValue>()\n})\n\nfunction setModelValue(next: GrCollapseModelValue): void {\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction toggle(name: GrCollapseValue): void {\n if (props.disabled)\n return\n\n if (props.accordion) {\n const next = activeSet.value.has(name) ? undefined : name\n setModelValue(next)\n return\n }\n\n const current = Array.isArray(props.modelValue)\n ? [...props.modelValue]\n : typeof props.modelValue === 'string' || typeof props.modelValue === 'number'\n ? [props.modelValue]\n : []\n\n const exists = current.includes(name)\n const next = exists\n ? current.filter(x => x !== name)\n : [...current, name]\n\n setModelValue(next)\n}\n\nconst context: GrCollapseContext = {\n accordion: computed(() => props.accordion),\n disabled: computed(() => props.disabled),\n isActive: name => activeSet.value.has(name),\n toggle,\n}\n\nprovide(GR_COLLAPSE_CONTEXT, context)\n</script>\n\n<template>\n <GrCard data-gr-collapse>\n <div :class=\"divided ? 'divide-y divide-[var(--brd)]' : ''\">\n <slot />\n </div>\n </GrCard>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-gr-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-gr-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport ChevronDownIcon from '~icons/lucide/chevron-down'\nimport { computed, getCurrentInstance, inject, ref } from 'vue'\n\nimport GrIcon from '../GrIcon'\n\nimport { GR_COLLAPSE_CONTEXT, type GrCollapseValue } from './grCollapseContext'\n\n/**\n * GrCollapseItem — одна секция `GrCollapse`. Должна использоваться строго внутри `GrCollapse`.\n *\n * @prop name — уникальный идентификатор секции (для `v-model` у `GrCollapse`); по умолчанию генерируется из `uid`.\n * @prop title — текст заголовка; можно заменить слотом `#title`.\n * @prop disabled — запрещает раскрытие/сворачивание секции.\n */\nexport interface GrCollapseItemProps {\n name?: GrCollapseValue\n title?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<GrCollapseItemProps>(), {\n name: undefined,\n title: undefined,\n disabled: false,\n})\n\nconst collapse = inject(GR_COLLAPSE_CONTEXT)\n\nif (!collapse) {\n throw new Error('GrCollapseItem must be used inside GrCollapse')\n}\n\nconst collapseContext = collapse\n\nconst instance = getCurrentInstance()\nconst uid = instance?.uid ?? Math.random()\n\nconst resolvedName = computed<GrCollapseValue>(() => {\n if (typeof props.name === 'string' || typeof props.name === 'number')\n return props.name\n\n return uid\n})\n\nconst resolvedDisabled = computed(() => collapseContext.disabled.value || props.disabled)\nconst expanded = computed(() => collapseContext.isActive(resolvedName.value))\n\nconst headerId = `gr-collapse-header-${uid}`\nconst panelId = `gr-collapse-panel-${uid}`\n\nconst triggerEl = ref<HTMLElement | null>(null)\n\nfunction onToggle(): void {\n if (resolvedDisabled.value)\n return\n\n collapseContext.toggle(resolvedName.value)\n}\n\nfunction getAllTriggers(): HTMLElement[] {\n const root = triggerEl.value?.closest('[data-gr-collapse]')\n if (!root)\n return []\n\n return Array.prototype.slice.call(root.querySelectorAll<HTMLElement>('[data-gr-collapse-trigger]')) as HTMLElement[]\n}\n\nfunction focusRelative(direction: 1 | -1): void {\n const current = triggerEl.value\n if (!current)\n return\n\n const triggers = getAllTriggers()\n const index = triggers.indexOf(current)\n if (index === -1 || triggers.length === 0)\n return\n\n const nextIndex = (index + direction + triggers.length) % triggers.length\n triggers[nextIndex]?.focus()\n}\n\nfunction focusEdge(edge: 'start' | 'end'): void {\n const triggers = getAllTriggers()\n if (triggers.length === 0)\n return\n\n ;(edge === 'start' ? triggers[0] : triggers.at(-1))?.focus()\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n focusRelative(1)\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n focusRelative(-1)\n return\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n focusEdge('start')\n return\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n focusEdge('end')\n return\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n onToggle()\n }\n}\n</script>\n\n<template>\n <div\n data-gr-collapse-item\n class=\"text-[var(--fg)]\"\n >\n <h3 class=\"m-0\">\n <button\n :id=\"headerId\"\n ref=\"triggerEl\"\n data-gr-collapse-trigger\n type=\"button\"\n :aria-expanded=\"expanded ? 'true' : 'false'\"\n :aria-controls=\"panelId\"\n :disabled=\"resolvedDisabled\"\n class=\"w-full px-4 py-3 flex items-center justify-between gap-4 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:opacity-50 disabled:cursor-not-allowed\"\n :class=\"resolvedDisabled ? '' : 'hover:bg-[var(--muted)]'\"\n @click=\"onToggle\"\n @keydown=\"onKeydown\"\n >\n <span class=\"min-w-0\">\n <slot name=\"title\">\n <span class=\"text-sm font-600\">\n {{ title }}\n </span>\n </slot>\n </span>\n\n <GrIcon\n size=\"sm\"\n aria-hidden=\"true\"\n data-gr-collapse-chevron\n class=\"shrink-0 transition-transform duration-150 text-[var(--muted-fg)]\"\n :class=\"expanded ? 'rotate-180' : ''\"\n >\n <ChevronDownIcon />\n </GrIcon>\n </button>\n </h3>\n\n <div\n :id=\"panelId\"\n role=\"region\"\n :aria-labelledby=\"headerId\"\n class=\"grid transition-[grid-template-rows] duration-200\"\n :class=\"expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\"\n >\n <div class=\"overflow-hidden\">\n <div class=\"px-4 pb-4 text-sm text-[var(--muted-fg)]\">\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-CU94BTAR.js";
2
- import { t as grCollapseConfig } from "../../chunks/config-D5ek7VSi.js";
1
+ import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-CPPLh_xU.js";
2
+ import { t as grCollapseConfig } from "../../chunks/config-xR4XVmcy.js";
3
3
  export { GR_COLLAPSE_CONTEXT, GrCollapse_default as GrCollapse, GrCollapse_default as default, GrCollapseItem_default as GrCollapseItem, grCollapseConfig };
@@ -1,6 +1,7 @@
1
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-CPDKonoB.js";
2
- import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-CxK4Lj4F.js";
3
- import { t as GrResponseErrorBanner_default } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-bM8FC_Bw.js";
1
+ import { t as useGranularityTranslations } from "../../../chunks/granularityI18n-DoV7Ca2m.js";
2
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
3
+ import { t as GrDialog_default } from "../../GrDialog/chunks/GrDialog-Ctucxju9.js";
4
+ import { t as GrResponseErrorBanner_default } from "../../GrResponseErrorBanner/chunks/GrResponseErrorBanner-Cdu9ekK9.js";
4
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderSlot, toDisplayString, withCtx } from "vue";
5
6
  //#region src/components/GrConfirmDialog/GrConfirmDialog.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = { class: "grid gap-4" };
@@ -15,7 +16,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
15
16
  __name: "GrConfirmDialog",
16
17
  props: {
17
18
  modelValue: { type: Boolean },
18
- title: { default: "Confirm" },
19
+ title: { default: void 0 },
19
20
  description: { default: void 0 },
20
21
  closeOnBackdrop: {
21
22
  type: Boolean,
@@ -37,10 +38,10 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
37
38
  headerConfig: { default: void 0 },
38
39
  footerConfig: { default: void 0 },
39
40
  bodyConfig: { default: void 0 },
40
- closeLabel: { default: "Close" },
41
+ closeLabel: { default: void 0 },
41
42
  buttonSize: { default: void 0 },
42
- confirmText: { default: "Confirm" },
43
- cancelText: { default: "Cancel" },
43
+ confirmText: { default: void 0 },
44
+ cancelText: { default: void 0 },
44
45
  confirmVariant: { default: "primary" },
45
46
  confirmTone: { default: "primary" },
46
47
  error: { default: null },
@@ -64,7 +65,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
64
65
  ],
65
66
  setup(__props, { emit: __emit }) {
66
67
  /**
67
- * GrConfirmDialog — DS-примитив диалога подтверждения поверх `GrDialog`.
68
+ * GrConfirmDialog — GR-примитив диалога подтверждения поверх `GrDialog`.
68
69
  *
69
70
  * Синхронизирован с `GrDialog`/`GrPromptDialog` по набору проп-проксирования:
70
71
  * `size`, `closeOnBackdrop`, `closeOnEsc`, `showHeader`, `showCloseButton`,
@@ -75,6 +76,11 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
75
76
  */
76
77
  const props = __props;
77
78
  const emit = __emit;
79
+ const { t } = useGranularityTranslations();
80
+ const resolvedTitle = computed(() => props.title ?? t("gr.dialog.confirm.title", "Confirm"));
81
+ const resolvedCloseLabel = computed(() => props.closeLabel ?? t("gr.common.close", "Close"));
82
+ const resolvedConfirmText = computed(() => props.confirmText ?? t("gr.common.confirm", "Confirm"));
83
+ const resolvedCancelText = computed(() => props.cancelText ?? t("gr.common.cancel", "Cancel"));
78
84
  const open = computed({
79
85
  get: () => props.modelValue,
80
86
  set: (value) => emit("update:modelValue", value)
@@ -91,7 +97,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
91
97
  return openBlock(), createBlock(GrDialog_default, {
92
98
  modelValue: open.value,
93
99
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => open.value = $event),
94
- title: __props.title,
100
+ title: resolvedTitle.value,
95
101
  size: __props.size,
96
102
  "close-on-backdrop": __props.closeOnBackdrop,
97
103
  "close-on-esc": __props.closeOnEsc,
@@ -100,18 +106,18 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
100
106
  "header-config": __props.headerConfig,
101
107
  "footer-config": __props.footerConfig,
102
108
  "body-config": __props.bodyConfig,
103
- "close-label": __props.closeLabel
109
+ "close-label": resolvedCloseLabel.value
104
110
  }, {
105
111
  footer: withCtx(() => [renderSlot(_ctx.$slots, "footer", {}, () => [createElementVNode("div", _hoisted_3, [createVNode(GrButton_default, {
106
- "data-testid": "ds-confirm-cancel",
112
+ "data-testid": "gr-confirm-cancel",
107
113
  variant: "outline",
108
114
  size: __props.buttonSize,
109
115
  onClick: onCancel
110
116
  }, {
111
- default: withCtx(() => [createTextVNode(toDisplayString(__props.cancelText), 1)]),
117
+ default: withCtx(() => [createTextVNode(toDisplayString(resolvedCancelText.value), 1)]),
112
118
  _: 1
113
119
  }, 8, ["size"]), createVNode(GrButton_default, {
114
- "data-testid": "ds-confirm-confirm",
120
+ "data-testid": "gr-confirm-confirm",
115
121
  variant: __props.confirmVariant,
116
122
  tone: __props.confirmTone,
117
123
  size: __props.buttonSize,
@@ -119,7 +125,7 @@ var GrConfirmDialog_default = /* @__PURE__ */ defineComponent({
119
125
  disabled: __props.confirmDisabled,
120
126
  onClick: onConfirm
121
127
  }, {
122
- default: withCtx(() => [createTextVNode(toDisplayString(__props.confirmText), 1)]),
128
+ default: withCtx(() => [createTextVNode(toDisplayString(resolvedConfirmText.value), 1)]),
123
129
  _: 1
124
130
  }, 8, [
125
131
  "variant",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrConfirmDialog-D8CkOtqv.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(--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(--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-Bi2KLumL.js";
2
- import { t as grConfirmDialogConfig } from "../../chunks/config-BduXEXjt.js";
1
+ import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-D8CkOtqv.js";
2
+ import { t as grConfirmDialogConfig } from "../../chunks/config-BXtAmU3s2.js";
3
3
  export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
@@ -1,6 +1,6 @@
1
- import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-BV7RBU_0.js";
2
- import { t as GrTable_default } from "../../GrTable/chunks/GrTable-dTWUxzRm.js";
3
- import { t as arrow_up_default } from "../../../chunks/arrow-up-DZdIrpaF.js";
1
+ 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 arrow_up_default } from "../../../chunks/arrow-up-C_G4jg8M.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, markRaw, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, withCtx } from "vue";
5
5
  //#region ~icons/lucide/arrow-down
6
6
  var _hoisted_1$1 = {
@@ -24,7 +24,7 @@ var arrow_down_default = markRaw({
24
24
  });
25
25
  //#endregion
26
26
  //#region src/components/GrDataTable/GrDataTable.vue?vue&type=script&setup=true&lang.ts
27
- var _hoisted_1 = { "data-ds-datatable-header": "" };
27
+ var _hoisted_1 = { "data-gr-datatable-header": "" };
28
28
  var _hoisted_2 = ["aria-sort"];
29
29
  var _hoisted_3 = { class: "inline-flex items-center gap-2" };
30
30
  var _hoisted_4 = ["aria-label", "onClick"];
@@ -35,7 +35,7 @@ var _hoisted_6 = {
35
35
  };
36
36
  var _hoisted_7 = {
37
37
  key: 0,
38
- "data-ds-datatable-empty": ""
38
+ "data-gr-datatable-empty": ""
39
39
  };
40
40
  var _hoisted_8 = ["colspan"];
41
41
  //#endregion
@@ -51,21 +51,48 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
51
51
  },
52
52
  initialSortKey: { default: void 0 },
53
53
  initialSortDir: { default: "asc" },
54
+ sortKey: { default: void 0 },
55
+ sortDir: { default: void 0 },
56
+ externalSort: {
57
+ type: Boolean,
58
+ default: false
59
+ },
54
60
  density: { default: "regular" },
55
61
  caption: { default: void 0 },
56
62
  ariaLabel: { default: void 0 },
57
63
  ariaLabelledby: { default: void 0 },
58
64
  regionLabel: { default: void 0 }
59
65
  },
60
- setup(__props) {
66
+ emits: [
67
+ "update:sortKey",
68
+ "update:sortDir",
69
+ "sort-change"
70
+ ],
71
+ setup(__props, { emit: __emit }) {
61
72
  const props = __props;
62
- const sortKey = ref(props.initialSortKey ?? "");
63
- const sortDir = ref(props.initialSortDir);
73
+ const emit = __emit;
74
+ const internalSortKey = ref(props.initialSortKey ?? "");
75
+ const internalSortDir = ref(props.initialSortDir);
76
+ const isSortKeyControlled = computed(() => props.sortKey !== void 0);
77
+ const isSortDirControlled = computed(() => props.sortDir !== void 0);
78
+ const currentSortKey = computed(() => props.sortKey ?? internalSortKey.value);
79
+ const currentSortDir = computed(() => props.sortDir ?? internalSortDir.value);
80
+ function applySort(key, dir) {
81
+ if (!isSortKeyControlled.value) internalSortKey.value = key;
82
+ if (!isSortDirControlled.value) internalSortDir.value = dir;
83
+ emit("update:sortKey", key);
84
+ emit("update:sortDir", dir);
85
+ emit("sort-change", {
86
+ key,
87
+ dir
88
+ });
89
+ }
64
90
  const sortedRows = computed(() => {
65
91
  const items = [...props.rows];
66
- if (!sortKey.value) return items;
67
- const key = sortKey.value;
68
- const dir = sortDir.value;
92
+ if (props.externalSort) return items;
93
+ const key = currentSortKey.value;
94
+ if (!key) return items;
95
+ const dir = currentSortDir.value;
69
96
  items.sort((a, b) => {
70
97
  const av = a[key];
71
98
  const bv = b[key];
@@ -78,12 +105,11 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
78
105
  });
79
106
  function toggleSort(col) {
80
107
  if (!col.sortable) return;
81
- if (sortKey.value !== col.key) {
82
- sortKey.value = col.key;
83
- sortDir.value = "asc";
108
+ if (currentSortKey.value !== col.key) {
109
+ applySort(col.key, "asc");
84
110
  return;
85
111
  }
86
- sortDir.value = sortDir.value === "asc" ? "desc" : "asc";
112
+ applySort(col.key, currentSortDir.value === "asc" ? "desc" : "asc");
87
113
  }
88
114
  function cellAlign(col) {
89
115
  if (col.align === "right") return "text-right";
@@ -99,12 +125,12 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
99
125
  }
100
126
  function ariaSortFor(col) {
101
127
  if (!col.sortable) return void 0;
102
- if (sortKey.value !== col.key) return "none";
103
- return sortDir.value === "asc" ? "ascending" : "descending";
128
+ if (currentSortKey.value !== col.key) return "none";
129
+ return currentSortDir.value === "asc" ? "ascending" : "descending";
104
130
  }
105
131
  function sortButtonLabel(col) {
106
- if (sortKey.value !== col.key) return `Sort by ${col.label}`;
107
- return sortDir.value === "asc" ? `Sorted by ${col.label} ascending, activate to sort descending` : `Sorted by ${col.label} descending, activate to sort ascending`;
132
+ if (currentSortKey.value !== col.key) return `Sort by ${col.label}`;
133
+ return currentSortDir.value === "asc" ? `Sorted by ${col.label} ascending, activate to sort descending` : `Sorted by ${col.label} descending, activate to sort ascending`;
108
134
  }
109
135
  const tableProps = computed(() => ({
110
136
  density: props.density,
@@ -118,7 +144,7 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
118
144
  return row[key];
119
145
  }
120
146
  return (_ctx, _cache) => {
121
- return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-ds-datatable": "" }), createSlots({
147
+ return openBlock(), createBlock(GrTable_default, mergeProps(tableProps.value, { "data-gr-datatable": "" }), createSlots({
122
148
  head: withCtx(() => [createElementVNode("tr", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
123
149
  return openBlock(), createElementBlock("th", {
124
150
  key: col.key,
@@ -131,14 +157,14 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
131
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",
132
158
  "aria-label": sortButtonLabel(col),
133
159
  onClick: ($event) => toggleSort(col)
134
- }, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [sortKey.value === col.key && sortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
160
+ }, [createElementVNode("span", null, toDisplayString(col.label), 1), createElementVNode("span", _hoisted_5, [currentSortKey.value === col.key && currentSortDir.value === "asc" ? (openBlock(), createBlock(GrIcon_default, {
135
161
  key: 0,
136
162
  size: "sm",
137
163
  "aria-hidden": "true"
138
164
  }, {
139
165
  default: withCtx(() => [createVNode(unref(arrow_up_default))]),
140
166
  _: 1
141
- })) : sortKey.value === col.key && sortDir.value === "desc" ? (openBlock(), createBlock(GrIcon_default, {
167
+ })) : currentSortKey.value === col.key && currentSortDir.value === "desc" ? (openBlock(), createBlock(GrIcon_default, {
142
168
  key: 1,
143
169
  size: "sm",
144
170
  "aria-hidden": "true"
@@ -154,7 +180,7 @@ var GrDataTable_default = /* @__PURE__ */ defineComponent({
154
180
  return openBlock(), createElementBlock("tr", {
155
181
  key: rowKeyValue(row),
156
182
  class: "border-t border-[var(--brd)]",
157
- "data-ds-datatable-row": ""
183
+ "data-gr-datatable-row": ""
158
184
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
159
185
  return openBlock(), createElementBlock("td", {
160
186
  key: col.key,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrDataTable-Ds5OeGat.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'\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 // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\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 density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: 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}>()\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}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\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-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(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--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(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\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(--brd)]\"\n data-gr-datatable-row\n >\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'\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 // Прокси к GrTable:\n density?: GrTableDensity\n caption?: string\n ariaLabel?: string\n ariaLabelledby?: string\n regionLabel?: string\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 density: 'regular',\n caption: undefined,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n regionLabel: 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}>()\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}))\n\nconst isEmpty = computed(() => sortedRows.value.length === 0)\n\nfunction cellValue(row: TRow, key: string): unknown {\n return (row as Record<string, unknown>)[key]\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-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(--muted-fg)] hover:text-[var(--fg)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--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(--muted-fg)]\">{{ col.label }}</span>\n </div>\n </th>\n </tr>\n </template>\n\n <template v-if=\"isEmpty\">\n <tr data-gr-datatable-empty>\n <td :colspan=\"columns.length\" class=\"px-4 py-6 text-center text-[var(--muted-fg)]\">\n <slot name=\"empty\">\nНет данных\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(--brd)]\"\n data-gr-datatable-row\n >\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-ClcYiyc8.js";
2
- import { t as grDataTableConfig } from "../../chunks/config-vcDVCYXo.js";
1
+ import { t as GrDataTable_default } from "./chunks/GrDataTable-Ds5OeGat.js";
2
+ import { t as grDataTableConfig } from "../../chunks/config-U4m9PSql.js";
3
3
  export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
@@ -1,8 +1,9 @@
1
- import { t as x_default } from "../../../chunks/x-Pa6C2hwi.js";
2
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-CPDKonoB.js";
3
- import { a as Ve } from "../../../chunks/transition-mJ3PZCHH.js";
4
- import { t as GrModal_default } from "../../GrModal/chunks/GrModal-CSOL3fHQ.js";
5
- 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-BtXUk6Zc.js";
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";
4
+ import { o as Ve } from "../../../chunks/useScrollLock-K7kaP2Ud.js";
5
+ import { t as GrModal_default } from "../../GrModal/chunks/GrModal-C0GZrHN3.js";
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";
6
7
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, toDisplayString, unref, useAttrs, useSlots, withCtx } from "vue";
7
8
  //#endregion
8
9
  //#region src/components/GrDialog/GrDialogFooter.vue
@@ -19,7 +20,7 @@ var GrDialogFooter_default = /* @__PURE__ */ defineComponent({
19
20
  ]);
20
21
  return (_ctx, _cache) => {
21
22
  return openBlock(), createElementBlock("div", {
22
- "data-ds-dialog-footer": "",
23
+ "data-gr-dialog-footer": "",
23
24
  class: normalizeClass(rootClass.value)
24
25
  }, [renderSlot(_ctx.$slots, "default")], 2);
25
26
  };
@@ -32,11 +33,12 @@ var GrDialogCloseButton_default = /* @__PURE__ */ defineComponent({
32
33
  __name: "GrDialogCloseButton",
33
34
  emits: ["click"],
34
35
  setup(__props) {
36
+ const { t } = useGranularityTranslations();
35
37
  const attrs = useAttrs();
36
- const ariaLabel = computed(() => attrs["aria-label"] ?? "Close");
38
+ const ariaLabel = computed(() => attrs["aria-label"] ?? t("gr.common.close", "Close"));
37
39
  return (_ctx, _cache) => {
38
40
  return openBlock(), createBlock(GrButton_default, mergeProps(unref(attrs), {
39
- "data-ds-dialog-close": "",
41
+ "data-gr-dialog-close": "",
40
42
  variant: "ghost",
41
43
  size: "sm",
42
44
  square: "",
@@ -73,7 +75,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
73
75
  default: true
74
76
  },
75
77
  config: { default: void 0 },
76
- closeLabel: { default: "Close" }
78
+ closeLabel: { default: void 0 }
77
79
  },
78
80
  emits: ["close"],
79
81
  setup(__props) {
@@ -90,7 +92,7 @@ var GrDialogHeader_default = /* @__PURE__ */ defineComponent({
90
92
  const showVisibleTitle = computed(() => !slots.default && !!resolvedTitle.value);
91
93
  return (_ctx, _cache) => {
92
94
  return openBlock(), createElementBlock("div", {
93
- "data-ds-dialog-header": "",
95
+ "data-gr-dialog-header": "",
94
96
  class: normalizeClass(rootClass.value)
95
97
  }, [slots.default ? (openBlock(), createElementBlock("div", _hoisted_1$1, [renderSlot(_ctx.$slots, "default", { title: resolvedTitle.value })])) : showVisibleTitle.value ? (openBlock(), createBlock(unref(Ve), {
96
98
  key: 1,
@@ -138,12 +140,12 @@ var GrDialog_default = /* @__PURE__ */ defineComponent({
138
140
  headerConfig: { default: void 0 },
139
141
  footerConfig: { default: void 0 },
140
142
  bodyConfig: { default: void 0 },
141
- closeLabel: { default: "Close" }
143
+ closeLabel: { default: void 0 }
142
144
  },
143
145
  emits: ["update:modelValue"],
144
146
  setup(__props, { emit: __emit }) {
145
147
  /**
146
- * GrDialog — DS-примитив диалога поверх `GrModal`.
148
+ * GrDialog — GR-примитив диалога поверх `GrModal`.
147
149
  *
148
150
  * Архитектурно:
149
151
  * - ширина/радиус/скролл-лок/Esc/бэкдроп — ответственность `GrModal`;