@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
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/components/GrDialogService/store.ts","../src/components/GrDialogService/GrDialogServiceHost.vue","../src/components/GrDialogService/GrDialogServiceHost.vue","../src/components/GrDialogService/useDialogService.ts","../src/components/GrDialogService/config.ts","../src/components/shared/tones.ts"],"sourcesContent":["import { reactive } from 'vue'\n\nimport type {\n DialogBaseOptions,\n DialogKind,\n DialogOnConfirm,\n DialogResult,\n} from './types'\n\n/**\n * Внутреннее описание одного запроса диалога в очереди. Создаётся методами\n * сервиса (`confirm`/`alert`/`prompt`/`open`) и потребляется хостом\n * (`GrDialogServiceHost`), который рендерит «голову» очереди (FIFO).\n */\nexport interface DialogRequest {\n id: string\n kind: DialogKind\n message: string\n options: DialogBaseOptions\n onConfirm?: DialogOnConfirm<any>\n /** Резолвит промис вызова детальным результатом `{ action, value }`. */\n resolve: (result: DialogResult<any>) => void\n}\n\n/**\n * Модульный синглтон очереди диалогов: единый источник правды для всех\n * вызовов сервиса. Хост-компонент рендерит только `queue[0]` — это\n * сериализует диалоги (FIFO) и исключает конкуренцию за фокус-трап.\n */\nexport const dialogQueue = reactive<DialogRequest[]>([])\n\nlet counter = 0\n\nexport function makeDialogId(): string {\n counter += 1\n return `gr-dialog-${Date.now()}-${counter}`\n}\n","<script setup lang=\"ts\">\n/**\n * GrDialogServiceHost — внутренний компонент-оркестратор императивного\n * `useDialogService`. Не предназначен для прямого использования в шаблонах.\n *\n * Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя\n * декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием\n * загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы\n * сервера через цепочку парсеров `GrResponseErrorBanner`.\n */\nimport { computed, nextTick, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrConfirmDialog from '../GrConfirmDialog/GrConfirmDialog.vue'\nimport GrPromptDialog from '../GrPromptDialog/GrPromptDialog.vue'\nimport {\n coreResponseErrorParsers,\n createResponseErrorClassifier,\n responseErrorParserPresets,\n} from '../GrResponseErrorBanner'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nimport { dialogQueue } from './store'\nimport type { DialogRequest } from './store'\nimport type { DialogCloseAction, DialogConfirmContext } from './types'\n\nconst active = computed<DialogRequest | null>(() => dialogQueue[0] ?? null)\n\nconst open = ref(false)\nconst loading = ref(false)\nconst currentError = shallowRef<ResponseErrorInfo | null>(null)\nconst fieldError = ref<string | null>(null)\nconst promptValue = ref('')\n\nlet controller: AbortController | null = null\nlet finishing = false\nlet externalAbortCleanup: (() => void) | null = null\n\nfunction resetState(): void {\n loading.value = false\n currentError.value = null\n fieldError.value = null\n finishing = false\n}\n\nfunction buildClassifier(req: DialogRequest) {\n const opts = req.options\n const parsers = typeof opts.errorParsers === 'function'\n ? opts.errorParsers(responseErrorParserPresets)\n : opts.errorParsers ?? coreResponseErrorParsers\n\n return createResponseErrorClassifier({\n parsers,\n texts: opts.errorTexts,\n messageKey: opts.errorMessageKey,\n })\n}\n\nwatch(\n () => active.value?.id,\n (id) => {\n cleanupExternalAbort()\n resetState()\n\n const req = active.value\n if (!req || !id) {\n open.value = false\n return\n }\n\n promptValue.value = req.options && 'value' in req.options\n ? ((req.options as { value?: string }).value ?? '')\n : ''\n\n controller = new AbortController()\n\n // Внешний AbortSignal закрывает диалог как `close`.\n const sig = req.options.signal\n if (sig) {\n if (sig.aborted) {\n finish('close')\n return\n }\n const onAbort = () => finish('close')\n sig.addEventListener('abort', onAbort)\n externalAbortCleanup = () => sig.removeEventListener('abort', onAbort)\n }\n\n void nextTick(() => {\n open.value = true\n })\n },\n)\n\nfunction cleanupExternalAbort(): void {\n externalAbortCleanup?.()\n externalAbortCleanup = null\n}\n\nfunction finish(action: DialogCloseAction, value?: unknown): void {\n const req = active.value\n if (!req || finishing) return\n finishing = true\n\n open.value = false\n controller?.abort()\n controller = null\n cleanupExternalAbort()\n\n req.resolve({ action, value })\n\n // Снимаем «голову» очереди на следующем тике — watch откроет следующий диалог.\n void nextTick(() => {\n const index = dialogQueue.findIndex(item => item.id === req.id)\n if (index >= 0) dialogQueue.splice(index, 1)\n })\n}\n\nfunction buildContext(req: DialogRequest, value: unknown): DialogConfirmContext<any> & { _errorSet: () => boolean } {\n let errorSet = false\n\n const setError = (message: string | null): void => {\n if (message == null) {\n currentError.value = null\n return\n }\n errorSet = true\n currentError.value = { kind: 'unknown', message, raw: message }\n }\n\n const setFieldError = (field: string, message: string | null): void => {\n if (message == null) {\n fieldError.value = null\n return\n }\n errorSet = true\n fieldError.value = message\n }\n\n const clearErrors = (): void => {\n currentError.value = null\n fieldError.value = null\n }\n\n const setRawError = async (raw: unknown, meta?: Record<string, unknown>): Promise<ResponseErrorInfo | null> => {\n const info = await buildClassifier(req)(raw, meta)\n if (req.kind === 'prompt' && info.fieldErrors?.length) {\n const match = info.fieldErrors.find(f => f.field === 'value') ?? info.fieldErrors[0]\n fieldError.value = match.messages.join(' ')\n }\n currentError.value = info\n errorSet = true\n return info\n }\n\n return {\n value,\n signal: controller!.signal,\n setError,\n setRawError,\n setFieldError,\n clearErrors,\n setLoading: (v: boolean) => { loading.value = v },\n close: (action: DialogCloseAction = 'close') => finish(action),\n _errorSet: () => errorSet,\n }\n}\n\nasync function handleConfirm(): Promise<void> {\n const req = active.value\n if (!req) return\n\n const value = req.kind === 'prompt' ? promptValue.value : undefined\n\n if (!req.onConfirm) {\n finish('confirm', value)\n return\n }\n\n currentError.value = null\n fieldError.value = null\n loading.value = true\n\n const ctx = buildContext(req, value)\n\n try {\n const result = await req.onConfirm(ctx)\n loading.value = false\n if (finishing) return // ctx.close уже завершил диалог\n if (result === false) return // оставить открытым без ошибки\n if (currentError.value || fieldError.value || ctx._errorSet()) return // есть ошибка — не закрывать\n finish('confirm', value)\n }\n catch (error) {\n loading.value = false\n if (finishing) return\n if (!ctx._errorSet()) await ctx.setRawError(error)\n // оставить диалог открытым с показанной ошибкой\n }\n}\n\nfunction handleCancel(): void {\n finish('cancel')\n}\n\nfunction handleModelUpdate(value: boolean): void {\n if (!value) finish('close')\n}\n\nonBeforeUnmount(() => {\n cleanupExternalAbort()\n controller?.abort()\n})\n\n// Прокидываемые в дочерний диалог общие пропы.\nconst sharedProps = computed(() => {\n const o = active.value?.options ?? {}\n return {\n title: o.title,\n size: o.size,\n closeOnBackdrop: o.closeOnBackdrop,\n closeOnEsc: o.closeOnEsc,\n showHeader: o.showHeader,\n showCloseButton: o.showCloseButton,\n headerConfig: o.headerConfig,\n footerConfig: o.footerConfig,\n bodyConfig: o.bodyConfig,\n closeLabel: o.closeLabel,\n buttonSize: o.buttonSize,\n confirmText: o.confirmText,\n confirmVariant: o.confirmVariant,\n confirmTone: o.confirmTone,\n }\n})\n</script>\n\n<template>\n <template v-if=\"active\">\n <!-- prompt -->\n <GrPromptDialog\n v-if=\"active.kind === 'prompt'\"\n v-bind=\"sharedProps\"\n v-model:value=\"promptValue\"\n :model-value=\"open\"\n :description=\"active.options.message ?? active.options.description\"\n :label=\"(active.options as any).label\"\n :placeholder=\"(active.options as any).placeholder\"\n :required=\"(active.options as any).required ?? false\"\n :required-error-text=\"(active.options as any).requiredErrorText\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :field-error=\"fieldError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n\n <!-- alert: confirm-диалог без кнопки Cancel -->\n <GrConfirmDialog\n v-else-if=\"active.kind === 'alert'\"\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n >\n <template #footer>\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton\n data-testid=\"ds-alert-confirm\"\n :variant=\"sharedProps.confirmVariant ?? 'primary'\"\n :tone=\"sharedProps.confirmTone ?? 'primary'\"\n :size=\"sharedProps.buttonSize\"\n :loading=\"loading\"\n @click=\"handleConfirm\"\n >\n {{ sharedProps.confirmText ?? 'OK' }}\n </GrButton>\n </div>\n </template>\n </GrConfirmDialog>\n\n <!-- confirm -->\n <GrConfirmDialog\n v-else\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n </template>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GrDialogServiceHost — внутренний компонент-оркестратор императивного\n * `useDialogService`. Не предназначен для прямого использования в шаблонах.\n *\n * Рендерит «голову» очереди `dialogQueue` (FIFO-сериализация), переиспользуя\n * декларативные `GrConfirmDialog`/`GrPromptDialog`. Управляет состоянием\n * загрузки и ошибок во время async-`onConfirm`, прогоняя «сырые» ответы\n * сервера через цепочку парсеров `GrResponseErrorBanner`.\n */\nimport { computed, nextTick, onBeforeUnmount, ref, shallowRef, watch } from 'vue'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrConfirmDialog from '../GrConfirmDialog/GrConfirmDialog.vue'\nimport GrPromptDialog from '../GrPromptDialog/GrPromptDialog.vue'\nimport {\n coreResponseErrorParsers,\n createResponseErrorClassifier,\n responseErrorParserPresets,\n} from '../GrResponseErrorBanner'\nimport type { ResponseErrorInfo } from '../GrResponseErrorBanner'\n\nimport { dialogQueue } from './store'\nimport type { DialogRequest } from './store'\nimport type { DialogCloseAction, DialogConfirmContext } from './types'\n\nconst active = computed<DialogRequest | null>(() => dialogQueue[0] ?? null)\n\nconst open = ref(false)\nconst loading = ref(false)\nconst currentError = shallowRef<ResponseErrorInfo | null>(null)\nconst fieldError = ref<string | null>(null)\nconst promptValue = ref('')\n\nlet controller: AbortController | null = null\nlet finishing = false\nlet externalAbortCleanup: (() => void) | null = null\n\nfunction resetState(): void {\n loading.value = false\n currentError.value = null\n fieldError.value = null\n finishing = false\n}\n\nfunction buildClassifier(req: DialogRequest) {\n const opts = req.options\n const parsers = typeof opts.errorParsers === 'function'\n ? opts.errorParsers(responseErrorParserPresets)\n : opts.errorParsers ?? coreResponseErrorParsers\n\n return createResponseErrorClassifier({\n parsers,\n texts: opts.errorTexts,\n messageKey: opts.errorMessageKey,\n })\n}\n\nwatch(\n () => active.value?.id,\n (id) => {\n cleanupExternalAbort()\n resetState()\n\n const req = active.value\n if (!req || !id) {\n open.value = false\n return\n }\n\n promptValue.value = req.options && 'value' in req.options\n ? ((req.options as { value?: string }).value ?? '')\n : ''\n\n controller = new AbortController()\n\n // Внешний AbortSignal закрывает диалог как `close`.\n const sig = req.options.signal\n if (sig) {\n if (sig.aborted) {\n finish('close')\n return\n }\n const onAbort = () => finish('close')\n sig.addEventListener('abort', onAbort)\n externalAbortCleanup = () => sig.removeEventListener('abort', onAbort)\n }\n\n void nextTick(() => {\n open.value = true\n })\n },\n)\n\nfunction cleanupExternalAbort(): void {\n externalAbortCleanup?.()\n externalAbortCleanup = null\n}\n\nfunction finish(action: DialogCloseAction, value?: unknown): void {\n const req = active.value\n if (!req || finishing) return\n finishing = true\n\n open.value = false\n controller?.abort()\n controller = null\n cleanupExternalAbort()\n\n req.resolve({ action, value })\n\n // Снимаем «голову» очереди на следующем тике — watch откроет следующий диалог.\n void nextTick(() => {\n const index = dialogQueue.findIndex(item => item.id === req.id)\n if (index >= 0) dialogQueue.splice(index, 1)\n })\n}\n\nfunction buildContext(req: DialogRequest, value: unknown): DialogConfirmContext<any> & { _errorSet: () => boolean } {\n let errorSet = false\n\n const setError = (message: string | null): void => {\n if (message == null) {\n currentError.value = null\n return\n }\n errorSet = true\n currentError.value = { kind: 'unknown', message, raw: message }\n }\n\n const setFieldError = (field: string, message: string | null): void => {\n if (message == null) {\n fieldError.value = null\n return\n }\n errorSet = true\n fieldError.value = message\n }\n\n const clearErrors = (): void => {\n currentError.value = null\n fieldError.value = null\n }\n\n const setRawError = async (raw: unknown, meta?: Record<string, unknown>): Promise<ResponseErrorInfo | null> => {\n const info = await buildClassifier(req)(raw, meta)\n if (req.kind === 'prompt' && info.fieldErrors?.length) {\n const match = info.fieldErrors.find(f => f.field === 'value') ?? info.fieldErrors[0]\n fieldError.value = match.messages.join(' ')\n }\n currentError.value = info\n errorSet = true\n return info\n }\n\n return {\n value,\n signal: controller!.signal,\n setError,\n setRawError,\n setFieldError,\n clearErrors,\n setLoading: (v: boolean) => { loading.value = v },\n close: (action: DialogCloseAction = 'close') => finish(action),\n _errorSet: () => errorSet,\n }\n}\n\nasync function handleConfirm(): Promise<void> {\n const req = active.value\n if (!req) return\n\n const value = req.kind === 'prompt' ? promptValue.value : undefined\n\n if (!req.onConfirm) {\n finish('confirm', value)\n return\n }\n\n currentError.value = null\n fieldError.value = null\n loading.value = true\n\n const ctx = buildContext(req, value)\n\n try {\n const result = await req.onConfirm(ctx)\n loading.value = false\n if (finishing) return // ctx.close уже завершил диалог\n if (result === false) return // оставить открытым без ошибки\n if (currentError.value || fieldError.value || ctx._errorSet()) return // есть ошибка — не закрывать\n finish('confirm', value)\n }\n catch (error) {\n loading.value = false\n if (finishing) return\n if (!ctx._errorSet()) await ctx.setRawError(error)\n // оставить диалог открытым с показанной ошибкой\n }\n}\n\nfunction handleCancel(): void {\n finish('cancel')\n}\n\nfunction handleModelUpdate(value: boolean): void {\n if (!value) finish('close')\n}\n\nonBeforeUnmount(() => {\n cleanupExternalAbort()\n controller?.abort()\n})\n\n// Прокидываемые в дочерний диалог общие пропы.\nconst sharedProps = computed(() => {\n const o = active.value?.options ?? {}\n return {\n title: o.title,\n size: o.size,\n closeOnBackdrop: o.closeOnBackdrop,\n closeOnEsc: o.closeOnEsc,\n showHeader: o.showHeader,\n showCloseButton: o.showCloseButton,\n headerConfig: o.headerConfig,\n footerConfig: o.footerConfig,\n bodyConfig: o.bodyConfig,\n closeLabel: o.closeLabel,\n buttonSize: o.buttonSize,\n confirmText: o.confirmText,\n confirmVariant: o.confirmVariant,\n confirmTone: o.confirmTone,\n }\n})\n</script>\n\n<template>\n <template v-if=\"active\">\n <!-- prompt -->\n <GrPromptDialog\n v-if=\"active.kind === 'prompt'\"\n v-bind=\"sharedProps\"\n v-model:value=\"promptValue\"\n :model-value=\"open\"\n :description=\"active.options.message ?? active.options.description\"\n :label=\"(active.options as any).label\"\n :placeholder=\"(active.options as any).placeholder\"\n :required=\"(active.options as any).required ?? false\"\n :required-error-text=\"(active.options as any).requiredErrorText\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :field-error=\"fieldError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n\n <!-- alert: confirm-диалог без кнопки Cancel -->\n <GrConfirmDialog\n v-else-if=\"active.kind === 'alert'\"\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n >\n <template #footer>\n <div class=\"flex items-center justify-end gap-3\">\n <GrButton\n data-testid=\"ds-alert-confirm\"\n :variant=\"sharedProps.confirmVariant ?? 'primary'\"\n :tone=\"sharedProps.confirmTone ?? 'primary'\"\n :size=\"sharedProps.buttonSize\"\n :loading=\"loading\"\n @click=\"handleConfirm\"\n >\n {{ sharedProps.confirmText ?? 'OK' }}\n </GrButton>\n </div>\n </template>\n </GrConfirmDialog>\n\n <!-- confirm -->\n <GrConfirmDialog\n v-else\n :model-value=\"open\"\n v-bind=\"sharedProps\"\n :description=\"active.options.message ?? active.options.description\"\n :cancel-text=\"(active.options as any).cancelText\"\n :error=\"currentError\"\n :confirm-loading=\"loading\"\n :close-on-confirm=\"false\"\n @update:model-value=\"handleModelUpdate\"\n @confirm=\"handleConfirm\"\n @cancel=\"handleCancel\"\n />\n </template>\n</template>\n","import { createVNode, getCurrentInstance, render } from 'vue'\nimport type { AppContext } from 'vue'\n\nimport GrDialogServiceHost from './GrDialogServiceHost.vue'\nimport { dialogQueue, makeDialogId } from './store'\nimport type { DialogRequest } from './store'\nimport type {\n DialogAlertOptions,\n DialogBaseOptions,\n DialogConfirmOptions,\n DialogKind,\n DialogOnConfirm,\n DialogPromise,\n DialogPromptOptions,\n DialogResult,\n DialogService,\n DialogServiceDefaults,\n} from './types'\n\n/**\n * `useDialogService` — императивный сервис диалогов (в духе Element Plus\n * `ElMessageBox`). Позволяет вызывать `confirm`/`alert`/`prompt` из `<script>`\n * или `.ts` без вставки компонента в шаблон.\n *\n * Поверх существующих `GrConfirmDialog`/`GrPromptDialog`: лениво монтирует\n * единый хост (`GrDialogServiceHost`) в `document.body`, наследуя контекст\n * приложения (i18n / тема / `granular-provider`). Диалоги сериализуются\n * очередью FIFO.\n */\n\nlet mounted = false\nlet container: HTMLElement | null = null\nlet cachedAppContext: AppContext | null = null\n\nfunction ensureMounted(appContext?: AppContext | null): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') return\n\n if (appContext) cachedAppContext = appContext\n if (mounted) return\n\n container = document.createElement('div')\n container.setAttribute('data-gr-dialog-service-host', '')\n document.body.appendChild(container)\n\n const vnode = createVNode(GrDialogServiceHost)\n vnode.appContext = cachedAppContext ?? null\n render(vnode, container)\n mounted = true\n}\n\n/** Тестовая/служебная очистка смонтированного хоста. */\nexport function teardownDialogService(): void {\n if (container) {\n render(null, container)\n container.remove()\n container = null\n }\n mounted = false\n dialogQueue.splice(0, dialogQueue.length)\n}\n\nfunction enqueue(\n kind: DialogKind,\n message: string,\n options: DialogBaseOptions,\n onConfirm: DialogOnConfirm<any> | undefined,\n): { promise: Promise<DialogResult<any>>, close: () => void } {\n ensureMounted(options.appContext ?? cachedAppContext)\n\n const id = makeDialogId()\n let resolveFn!: (result: DialogResult<any>) => void\n const promise = new Promise<DialogResult<any>>((resolve) => {\n resolveFn = resolve\n })\n\n const request: DialogRequest = {\n id,\n kind,\n message,\n options: { ...options, message },\n onConfirm,\n resolve: resolveFn,\n }\n\n dialogQueue.push(request)\n\n const close = (): void => {\n const index = dialogQueue.findIndex(item => item.id === id)\n if (index < 0) return\n dialogQueue.splice(index, 1)\n resolveFn({ action: 'close' })\n }\n\n return { promise, close }\n}\n\nfunction withClose<T>(promise: Promise<T>, close: () => void): DialogPromise<T> {\n const result = promise as DialogPromise<T>\n result.close = close\n return result\n}\n\nfunction mergeErrorDefaults(\n defaults: DialogServiceDefaults,\n options: DialogBaseOptions,\n): DialogBaseOptions {\n return {\n size: defaults.size,\n confirmText: defaults.confirmText,\n confirmVariant: defaults.confirmVariant,\n confirmTone: defaults.confirmTone,\n buttonSize: defaults.buttonSize,\n closeOnBackdrop: defaults.closeOnBackdrop,\n closeOnEsc: defaults.closeOnEsc,\n errorParsers: defaults.errorParsers,\n errorTexts: defaults.errorTexts,\n errorMessageKey: defaults.errorMessageKey,\n fieldLabels: defaults.fieldLabels,\n ...options,\n }\n}\n\n/**\n * Создаёт сервис диалогов. Опциональные `defaults` применяются ко всем\n * вызовам (можно переопределить в каждом конкретном вызове).\n *\n * Контекст приложения кэшируется автоматически при первом вызове внутри\n * `setup`. Для вызовов вне компонента используйте `setAppContext`.\n */\nexport function useDialogService(defaults: DialogServiceDefaults = {}): DialogService {\n // Авто-кэш appContext из текущего компонента (если вызвано в setup).\n const instance = getCurrentInstance()\n if (instance?.appContext && !cachedAppContext) {\n cachedAppContext = instance.appContext\n }\n\n function confirm(message: string, options: DialogConfirmOptions = {}): DialogPromise<boolean> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('confirm', message, merged, options.onConfirm)\n return withClose(promise.then(r => r.action === 'confirm'), close)\n }\n\n function alert(message: string, options: DialogAlertOptions = {}): DialogPromise<void> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('alert', message, merged, options.onConfirm)\n return withClose(promise.then(() => undefined), close)\n }\n\n function prompt(message: string, options: DialogPromptOptions = {}): DialogPromise<string | null> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue('prompt', message, merged, options.onConfirm)\n return withClose(\n promise.then(r => (r.action === 'confirm' ? ((r.value as string) ?? '') : null)),\n close,\n )\n }\n\n function open<V = unknown>(\n kind: DialogKind,\n message: string,\n options: DialogBaseOptions = {},\n ): DialogPromise<DialogResult<V>> {\n const merged = mergeErrorDefaults(defaults, options)\n const { promise, close } = enqueue(kind, message, merged, (options as DialogConfirmOptions).onConfirm)\n return withClose(promise as Promise<DialogResult<V>>, close)\n }\n\n function closeAll(): void {\n while (dialogQueue.length > 0) {\n const request = dialogQueue.pop()!\n request.resolve({ action: 'close' })\n }\n }\n\n function setAppContext(ctx: AppContext | null): void {\n cachedAppContext = ctx\n }\n\n return { confirm, alert, prompt, open, closeAll, setAppContext }\n}\n\n/** Готовый синглтон-сервис с дефолтными настройками. */\nexport const dialogService: DialogService = useDialogService()\n","import {defineGranularComponent} from '@feugene/unocss-preset-granular/contract'\n\nexport const grDialogServiceConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDialogServiceHost',\n dependencies: ['GrButton', 'GrDialog', 'GrConfirmDialog', 'GrPromptDialog', 'GrResponseErrorBanner'],\n})\n","/**\n * Единый перечень дизайн-тонов для всех компонентов библиотеки.\n *\n * Источник истины: список объявлен как `as const`-кортеж, из которого\n * автоматически выводится тип `GrTone`. Это позволяет использовать\n * `GR_TONES` в рантайме (валидация, итерация, safelist) и `GrTone`\n * в типах одновременно, без расхождений.\n */\nexport const GR_TONES = [\n 'primary',\n 'neutral',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'slate',\n 'azure',\n] as const\n\nexport type GrTone = typeof GR_TONES[number]\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/components/shared/tones.ts"],"sourcesContent":["/**\n * Единый перечень дизайн-тонов для всех компонентов библиотеки.\n *\n * Источник истины: список объявлен как `as const`-кортеж, из которого\n * автоматически выводится тип `GrTone`. Это позволяет использовать\n * `GR_TONES` в рантайме (валидация, итерация, safelist) и `GrTone`\n * в типах одновременно, без расхождений.\n */\nexport const GR_TONES = [\n 'primary',\n 'neutral',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'slate',\n 'azure',\n] as const\n\nexport type GrTone = typeof GR_TONES[number]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,IAAa,WAAW;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -0,0 +1,54 @@
1
+ /*
2
+ * GR-базовый слой.
3
+ *
4
+ * Глобальный сброс страницы (`body`, `box-sizing`) продублирован из
5
+ * `preflight.css` НАПРЯМУЮ (а не через `@import`). Причина: granular-provider
6
+ * встраивает содержимое `base.css` как base64 `data:`-URL на этапе сборки пакета
7
+ * и отдаёт его в UnoCSS как preflight-строку. Вложенный `@import` в такой строке
8
+ * (а) не резолвится (относительный путь внутри data-URL) и (б) оказывается НЕ в
9
+ * начале финального CSS → PostCSS падает: «@import must precede all other
10
+ * statements». Поэтому reset инлайнится сюда. `preflight.css` остаётся отдельным
11
+ * публичным файлом (`./styles/preflight.css`) для standalone-потребителей —
12
+ * держите оба блока синхронными.
13
+ *
14
+ * Потребитель, которому глобальные сайд-эффекты не нужны, может подключить
15
+ * `tokens.css` + тему и пропустить `base.css`/`preflight.css`.
16
+ *
17
+ * Ниже, помимо reset, — низкоспецифичные (`:where()`) дефолты самой GR, которые
18
+ * безопасно накладываются на приложение и легко переопределяются.
19
+ */
20
+
21
+ /* --- reset (синхронизировано с preflight.css) --- */
22
+ html,
23
+ body {
24
+ height: 100%;
25
+ }
26
+
27
+ body {
28
+ margin: 0;
29
+ font-family: var(--gr-font-ui);
30
+ background: var(--bg);
31
+ color: var(--fg);
32
+ }
33
+
34
+ * {
35
+ box-sizing: border-box;
36
+ }
37
+
38
+ /*
39
+ * UnoCSS tailwind-compat reset intentionally does not force `background-color: transparent` for buttons
40
+ * (to avoid breaking component libraries). In our GR we want plain buttons/links to be transparent by default.
41
+ */
42
+ :where(a, button) {
43
+ background-color: transparent;
44
+ }
45
+
46
+ :where(input[type='button'], input[type='submit'], input[type='reset']) {
47
+ background-color: transparent;
48
+ }
49
+
50
+ code,
51
+ pre,
52
+ kbd {
53
+ font-family: var(--gr-font-mono);
54
+ }
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Полный бандл стилей GR для потребителей без UnoCSS-провайдера:
3
+ * `import '@feugene/granularity/styles/index.css'`.
4
+ *
5
+ * Порядок подключения важен и здесь ЗАФИКСИРОВАН:
6
+ * 1. темы объявляют семантические роли (`--bg`, `--fg`, `--primary`, `--gr-*`…);
7
+ * 2. `tokens.css` объявляет примитивы и ПРОИЗВОДНЫЕ формулы
8
+ * (`--primary-hover: color-mix(var(--primary), var(--fg))` и т.п.),
9
+ * которым нужны роли из тем;
10
+ * 3. `base.css` (+ `preflight.css`) — глобальный слой, которому нужны и роли, и примитивы.
11
+ */
12
+ @import './themes/light.css';
13
+ @import './themes/dark.css';
14
+ @import './tokens.css';
15
+ @import './base.css';
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Опциональный глобальный preflight дизайн-системы.
3
+ *
4
+ * Здесь собраны ГЛОБАЛЬНЫЕ сайд-эффекты уровня всей страницы (сброс `body`:
5
+ * margin/типографика/цвета + `box-sizing`). Раньше они лежали в `base.css` и
6
+ * применялись всегда, из-за чего библиотека молча меняла вид всего приложения.
7
+ *
8
+ * Теперь это отдельный файл: подключайте `tokens.css` + тему БЕЗ него, если не
9
+ * хотите глобального сброса. `index.css` и granular-provider (через `base.css`)
10
+ * включают этот же reset по умолчанию для обратной совместимости.
11
+ *
12
+ * ВНИМАНИЕ: те же правила продублированы в `base.css` НАПРЯМУЮ (не через
13
+ * `@import`) — см. комментарий там о data-URL/preflight. Держите оба блока
14
+ * синхронными.
15
+ *
16
+ * Требует переменных из `tokens.css` (`--gr-font-ui`) и темы (`--bg`, `--fg`),
17
+ * поэтому подключается ПОСЛЕ них.
18
+ */
19
+ html,
20
+ body {
21
+ height: 100%;
22
+ }
23
+
24
+ body {
25
+ margin: 0;
26
+ font-family: var(--gr-font-ui);
27
+ background: var(--bg);
28
+ color: var(--fg);
29
+ }
30
+
31
+ * {
32
+ box-sizing: border-box;
33
+ }
@@ -0,0 +1,107 @@
1
+ /*
2
+ * Тёмная тема. Канон — атрибут `[data-theme='dark']` на `<html>` (его ставит
3
+ * `useTheme`/`initThemeEarly`). Селекторы `.theme-dark` и `.dark` — DEPRECATED-алиасы
4
+ * для обратной совместимости; в новом коде используйте `[data-theme]`.
5
+ */
6
+ [data-theme='dark'],
7
+ .theme-dark,
8
+ .dark {
9
+ /* Surface roles */
10
+ --bg: #0f172a;
11
+ --fg: #f8fafc;
12
+ --card: #1e293b;
13
+ --card-fg: #f8fafc;
14
+ --popover: #1e293b;
15
+ --popover-fg: #f8fafc;
16
+ --muted: #334155;
17
+ --muted-fg: #94a3b8;
18
+ --secondary: #334155;
19
+ --secondary-fg: #f1f5f9;
20
+ --brd: #334155;
21
+ --input: #334155;
22
+ --ring: #818cf8;
23
+
24
+ /* Action roles */
25
+ --primary: #6366f1;
26
+ --primary-fg: #ffffff;
27
+ --accent: #1e1b4b;
28
+ --accent-fg: #c7d2fe;
29
+ --destructive: #ef4444;
30
+ --destructive-fg: #ffffff;
31
+
32
+ /* Status roles */
33
+ --gr-success: #34d399;
34
+ --gr-success-light: #064e3b;
35
+ --gr-success-fg: #0f172a;
36
+ --gr-success-text: #6ee7b7;
37
+ --gr-warning: #fb923c;
38
+ --gr-warning-light: #7c2d12;
39
+ --gr-warning-fg: #0f172a;
40
+ --gr-warning-text: #fdba74;
41
+ --gr-danger: #f87171;
42
+ --gr-danger-light: #7f1d1d;
43
+ --gr-danger-fg: #0f172a;
44
+ --gr-danger-text: #fca5a5;
45
+ --gr-info: #818cf8;
46
+ --gr-info-light: #312e81;
47
+ --gr-info-fg: #0f172a;
48
+ --gr-info-text: #c7d2fe;
49
+ --gr-slate: #94a3b8;
50
+ --gr-slate-light: #334155;
51
+ --gr-slate-fg: #0f172a;
52
+ --gr-slate-text: #cbd5e1;
53
+ --gr-azure: #38bdf8;
54
+ --gr-azure-light: #0c4a6e;
55
+ --gr-azure-fg: #0f172a;
56
+ --gr-azure-text: #bae6fd;
57
+
58
+ /* Data visualization roles */
59
+ --chart-1: #6366f1;
60
+ --chart-2: #34d399;
61
+ --chart-3: #fb923c;
62
+ --chart-4: #818cf8;
63
+ --chart-5: #a78bfa;
64
+
65
+ /* Navigation roles */
66
+ --sidebar: #1e293b;
67
+ --sidebar-fg: #f8fafc;
68
+ --sidebar-primary: #6366f1;
69
+ --sidebar-primary-fg: #ffffff;
70
+ --sidebar-accent: #334155;
71
+ --sidebar-accent-fg: #f1f5f9;
72
+ --sidebar-brd: #334155;
73
+ --sidebar-ring: #818cf8;
74
+ }
75
+
76
+ @supports not (color: color-mix(in srgb, #000 50%, #fff)) {
77
+ .theme-dark,
78
+ .dark,
79
+ [data-theme='dark'] {
80
+ /* Action role fallbacks */
81
+ --primary-hover: #6f72f2;
82
+ --primary-active: #7b7ef3;
83
+ --secondary-hover: #435062;
84
+ --secondary-active: #535f70;
85
+ --brd-hover: #6e7987;
86
+ --brd-active: #8c94a0;
87
+ --destructive-hover: #f05353;
88
+ --destructive-active: #f06161;
89
+
90
+ /* Status role fallbacks */
91
+ --gr-success-hover: #44d6a1;
92
+ --gr-success-active: #53d9a9;
93
+ --gr-warning-hover: #fb9a4b;
94
+ --gr-warning-active: #fba35b;
95
+ --gr-danger-hover: #f87c7c;
96
+ --gr-danger-active: #f88787;
97
+ --gr-info-hover: #8b95f8;
98
+ --gr-info-active: #949ef9;
99
+ --gr-slate-hover: #9faec0;
100
+ --gr-slate-active: #aab7c8;
101
+ --gr-azure-hover: #4bc3f9;
102
+ --gr-azure-active: #5dcbf9;
103
+
104
+ /* Component semantic fallbacks */
105
+ /*--gr-category-tree-branch-line-active-color: #505b8c;*/
106
+ }
107
+ }
@@ -0,0 +1,98 @@
1
+ :root {
2
+ /* Surface roles */
3
+ --bg: #f8fafc;
4
+ --fg: #0f172a;
5
+ --card: #ffffff;
6
+ --card-fg: #0f172a;
7
+ --popover: #ffffff;
8
+ --popover-fg: #0f172a;
9
+ --muted: #f1f5f9;
10
+ --muted-fg: #64748b;
11
+ --secondary: #e2e8f0;
12
+ --secondary-fg: #1e293b;
13
+ --brd: #e2e8f0;
14
+ --input: #e2e8f0;
15
+ --ring: #6366f1;
16
+
17
+ /* Action roles */
18
+ --primary: #4f46e5;
19
+ --primary-fg: #ffffff;
20
+ --accent: #eef2ff;
21
+ --accent-fg: #3730a3;
22
+ --destructive: #dc2626;
23
+ --destructive-fg: #ffffff;
24
+
25
+ /* Status roles */
26
+ --gr-success: #10b981;
27
+ --gr-success-light: #d1fae5;
28
+ --gr-success-fg: #ffffff;
29
+ --gr-success-text: #065f46;
30
+ --gr-warning: #f97316;
31
+ --gr-warning-light: #ffedd5;
32
+ --gr-warning-fg: #ffffff;
33
+ --gr-warning-text: #7c2d12;
34
+ --gr-danger: #dc2626;
35
+ --gr-danger-light: #fee2e2;
36
+ --gr-danger-fg: #ffffff;
37
+ --gr-danger-text: #991b1b;
38
+ --gr-info: #5850ec;
39
+ --gr-info-light: #e0e7ff;
40
+ --gr-info-fg: #ffffff;
41
+ --gr-info-text: #3730a3;
42
+ --gr-slate: #475569;
43
+ --gr-slate-light: #e2e8f0;
44
+ --gr-slate-fg: #ffffff;
45
+ --gr-slate-text: #334155;
46
+ --gr-azure: #0ea5e9;
47
+ --gr-azure-light: #e0f2fe;
48
+ --gr-azure-fg: #ffffff;
49
+ --gr-azure-text: #075985;
50
+
51
+ /* Data visualization roles */
52
+ --chart-1: #4f46e5;
53
+ --chart-2: #10b981;
54
+ --chart-3: #f97316;
55
+ --chart-4: #6366f1;
56
+ --chart-5: #8b5cf6;
57
+
58
+ /* Navigation roles */
59
+ --sidebar: #ffffff;
60
+ --sidebar-fg: #0f172a;
61
+ --sidebar-primary: #4f46e5;
62
+ --sidebar-primary-fg: #ffffff;
63
+ --sidebar-accent: #f1f5f9;
64
+ --sidebar-accent-fg: #1e293b;
65
+ --sidebar-brd: #e2e8f0;
66
+ --sidebar-ring: #6366f1;
67
+ }
68
+
69
+ @supports not (color: color-mix(in srgb, #000 50%, #fff)) {
70
+ :root {
71
+ /* Action role fallbacks */
72
+ --primary-hover: #4a42d6;
73
+ --primary-active: #453ec7;
74
+ --secondary-hover: #d1d7e0;
75
+ --secondary-active: #c0c7d0;
76
+ --brd-hover: #a3a9b5;
77
+ --brd-active: #838a97;
78
+ --destructive-hover: #cc2526;
79
+ --destructive-active: #bb2427;
80
+
81
+ /* Status role fallbacks */
82
+ --gr-success-hover: #10ac7a;
83
+ --gr-success-active: #109f73;
84
+ --gr-warning-hover: #e66c18;
85
+ --gr-warning-active: #d46419;
86
+ --gr-danger-hover: #cc2526;
87
+ --gr-danger-active: #bb2427;
88
+ --gr-info-hover: #5c60e1;
89
+ --gr-info-active: #5659d1;
90
+ --gr-slate-hover: #435062;
91
+ --gr-slate-active: #3d4a5b;
92
+ --gr-azure-hover: #0284c7;
93
+ --gr-azure-active: #0369a1;
94
+
95
+ /* Component semantic fallbacks */
96
+ /*--gr-category-tree-branch-line-active-color: #c4cdf7;*/
97
+ }
98
+ }
@@ -0,0 +1,135 @@
1
+ :root {
2
+ /* Foundations: neutral palette */
3
+ --gr-slate-0: #ffffff;
4
+ --gr-slate-50: #f8fafc;
5
+ --gr-slate-100: #f1f5f9;
6
+ --gr-slate-200: #e2e8f0;
7
+ --gr-slate-300: #cbd5e1;
8
+ --gr-slate-400: #94a3b8;
9
+ --gr-slate-500: #64748b;
10
+ --gr-slate-600: #475569;
11
+ --gr-slate-700: #334155;
12
+ --gr-slate-800: #1e293b;
13
+ --gr-slate-900: #0f172a;
14
+
15
+ /* Typography: font families */
16
+ --gr-font-ui: Inter, Roboto, system-ui, -apple-system, Segoe UI, Arial, sans-serif;
17
+ --gr-font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;
18
+
19
+ /* Typography: font sizes */
20
+ --gr-text-xs: 12px;
21
+ --gr-text-sm: 14px;
22
+ --gr-text-base: 16px;
23
+ --gr-text-lg: 18px;
24
+ --gr-text-xl: 20px;
25
+ --gr-text-2xl: 24px;
26
+ --gr-text-3xl: 30px;
27
+ --gr-text-4xl: 36px;
28
+
29
+ /* Typography: line heights */
30
+ --gr-leading-tight: 1.25;
31
+ --gr-leading-normal: 1.5;
32
+ --gr-leading-relaxed: 1.625;
33
+
34
+ /* Typography: font weights */
35
+ --gr-font-regular: 400;
36
+ --gr-font-medium: 500;
37
+ --gr-font-semibold: 600;
38
+ --gr-font-bold: 700;
39
+
40
+ /* Layout: spacing scale */
41
+ --gr-space-0: 0px;
42
+ --gr-space-1: 4px;
43
+ --gr-space-2: 8px;
44
+ --gr-space-3: 12px;
45
+ --gr-space-4: 16px;
46
+ --gr-space-5: 20px;
47
+ --gr-space-6: 24px;
48
+ --gr-space-8: 32px;
49
+ --gr-space-10: 40px;
50
+ --gr-space-12: 48px;
51
+ --gr-space-16: 64px;
52
+ --gr-space-20: 80px;
53
+ --gr-space-24: 96px;
54
+ --gr-space-32: 128px;
55
+ --gr-space-40: 160px;
56
+ --gr-space-48: 192px;
57
+ --gr-space-64: 256px;
58
+
59
+ /* Layout: containers */
60
+ --gr-container-max: 1280px;
61
+ --gr-container-max-2xl: 1440px;
62
+ --gr-container-padding-mobile: 16px;
63
+ --gr-container-padding-tablet: 24px;
64
+ --gr-container-padding-desktop: 32px;
65
+
66
+ /* Layout: breakpoints */
67
+ --gr-bp-sm: 640px;
68
+ --gr-bp-md: 768px;
69
+ --gr-bp-lg: 1024px;
70
+ --gr-bp-xl: 1280px;
71
+ --gr-bp-2xl: 1536px;
72
+
73
+ /* Shapes: radii and compatibility aliases */
74
+ --radius: 0.5rem;
75
+ --gr-radius-none: 0px;
76
+ --gr-radius-sm: 4px;
77
+ --gr-radius-md: 8px;
78
+ --gr-radius-lg: 12px;
79
+ --gr-radius-xl: 16px;
80
+ --gr-radius-full: 9999px;
81
+
82
+ /* Elevation */
83
+ --gr-shadow-0: none;
84
+ --gr-shadow-1: 0 1px 2px rgba(15, 23, 42, 0.08);
85
+ --gr-shadow-2: 0 8px 24px rgba(15, 23, 42, 0.14);
86
+ --gr-shadow-3: 0 16px 48px rgba(15, 23, 42, 0.20);
87
+
88
+ /* Motion */
89
+ --gr-duration-fast: 150ms;
90
+ --gr-duration-base: 200ms;
91
+ --gr-duration-slow: 300ms;
92
+ --gr-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
93
+ --gr-ease-in: cubic-bezier(0.7, 0, 0.84, 0);
94
+
95
+ /*
96
+ * Z-index layering scale.
97
+ *
98
+ * Единый источник истины для слоёв всех компонентов, использующих `position: fixed`
99
+ * поверх остального контента. Правило: чем выше в UI-стеке слой обязан оказаться,
100
+ * тем больше значение. Floating-панели (dropdown/select/tree-select/tooltip) стоят
101
+ * ниже модалок, чтобы поповер, открытый ВНУТРИ модалки, не потерялся под ней, но
102
+ * сам этот поповер не обязан перекрывать модалку снаружи — за пределы своего дерева
103
+ * floating-компоненты не выходят по построению (v-click-outside/portal рядом с триггером).
104
+ * Тосты — единственный слой, который обязан быть виден поверх абсолютно всего,
105
+ * включая открытые модалки (это уведомление уровня приложения).
106
+ */
107
+ --gr-z-dropdown: 1000;
108
+ --gr-z-tooltip: 1050;
109
+ --gr-z-modal: 1100;
110
+ --gr-z-toast: 1200;
111
+
112
+ /* Derived interaction formulas: action roles */
113
+ --primary-hover: color-mix(in srgb, var(--primary) 92%, var(--fg));
114
+ --primary-active: color-mix(in srgb, var(--primary) 84%, var(--fg));
115
+ --secondary-hover: color-mix(in srgb, var(--secondary) 92%, var(--fg));
116
+ --secondary-active: color-mix(in srgb, var(--secondary) 84%, var(--fg));
117
+ --brd-hover: color-mix(in srgb, var(--brd) 70%, var(--fg));
118
+ --brd-active: color-mix(in srgb, var(--brd) 55%, var(--fg));
119
+ --destructive-hover: color-mix(in srgb, var(--destructive) 92%, var(--fg));
120
+ --destructive-active: color-mix(in srgb, var(--destructive) 84%, var(--fg));
121
+
122
+ /* Derived interaction formulas: status roles */
123
+ --gr-success-hover: color-mix(in srgb, var(--gr-success) 92%, var(--fg));
124
+ --gr-success-active: color-mix(in srgb, var(--gr-success) 84%, var(--fg));
125
+ --gr-warning-hover: color-mix(in srgb, var(--gr-warning) 92%, var(--fg));
126
+ --gr-warning-active: color-mix(in srgb, var(--gr-warning) 84%, var(--fg));
127
+ --gr-danger-hover: color-mix(in srgb, var(--gr-danger) 92%, var(--fg));
128
+ --gr-danger-active: color-mix(in srgb, var(--gr-danger) 84%, var(--fg));
129
+ --gr-info-hover: color-mix(in srgb, var(--gr-info) 92%, var(--fg));
130
+ --gr-info-active: color-mix(in srgb, var(--gr-info) 84%, var(--fg));
131
+ --gr-slate-hover: color-mix(in srgb, var(--gr-slate) 92%, var(--fg));
132
+ --gr-slate-active: color-mix(in srgb, var(--gr-slate) 84%, var(--fg));
133
+ --gr-azure-hover: color-mix(in srgb, var(--gr-azure) 92%, var(--fg));
134
+ --gr-azure-active: color-mix(in srgb, var(--gr-azure) 84%, var(--fg));
135
+ }
@@ -1,3 +1,4 @@
1
+ import { type Component } from 'vue';
1
2
  export type { GrButtonSize, GrButtonTone, GrButtonVariant } from './grButtonStyles';
2
3
  import { type GrButtonSize, type GrButtonTone, type GrButtonVariant } from './grButtonStyles';
3
4
  type __VLS_Props = {
@@ -9,10 +10,17 @@ type __VLS_Props = {
9
10
  square?: boolean;
10
11
  type?: 'button' | 'submit' | 'reset';
11
12
  ariaLabel?: string;
13
+ /** Полиморфизм: кастомный корневой тег/компонент (например, RouterLink). */
14
+ as?: string | Component;
15
+ /** Рендерит кнопку как `<a href>` (если не задан `as`). */
16
+ href?: string;
17
+ target?: string;
18
+ rel?: string;
19
+ external?: boolean;
12
20
  };
13
- declare var __VLS_6: {};
21
+ declare var __VLS_15: {};
14
22
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_6) => any;
23
+ default?: (props: typeof __VLS_15) => any;
16
24
  };
17
25
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
18
26
  variant: string;
@@ -23,6 +31,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
23
31
  square: boolean;
24
32
  type: string;
25
33
  ariaLabel: undefined;
34
+ as: undefined;
35
+ href: undefined;
36
+ target: undefined;
37
+ rel: undefined;
38
+ external: boolean;
26
39
  }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
27
40
  variant: string;
28
41
  tone: string;
@@ -32,6 +45,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
32
45
  square: boolean;
33
46
  type: string;
34
47
  ariaLabel: undefined;
48
+ as: undefined;
49
+ href: undefined;
50
+ target: undefined;
51
+ rel: undefined;
52
+ external: boolean;
35
53
  }>>> & Readonly<{}>, {
36
54
  tone: GrButtonTone;
37
55
  variant: GrButtonVariant;
@@ -41,6 +59,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
41
59
  loading: boolean;
42
60
  disabled: boolean;
43
61
  ariaLabel: string;
62
+ as: string | Component;
63
+ href: string;
64
+ target: string;
65
+ rel: string;
66
+ external: boolean;
44
67
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
45
68
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
46
69
  declare const _default: typeof __VLS_export;
@@ -7,10 +7,12 @@ export interface GrCheckboxProps {
7
7
  form?: string;
8
8
  /** Пробрасывается на скрытый нативный `<input>`, чтобы работал `<label for="...">`. */
9
9
  id?: string;
10
+ /** Промежуточное («смешанное») состояние: `aria-checked="mixed"`, индикатор — тире. */
11
+ indeterminate?: boolean;
10
12
  }
11
- declare var __VLS_6: {};
13
+ declare var __VLS_11: {};
12
14
  type __VLS_Slots = {} & {
13
- default?: (props: typeof __VLS_6) => any;
15
+ default?: (props: typeof __VLS_11) => any;
14
16
  };
15
17
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<GrCheckboxProps>, {
16
18
  modelValue: boolean;
@@ -20,6 +22,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
20
22
  required: boolean;
21
23
  form: undefined;
22
24
  id: undefined;
25
+ indeterminate: boolean;
23
26
  }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
24
27
  "update:modelValue": (value: boolean) => void;
25
28
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<GrCheckboxProps>, {
@@ -30,6 +33,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
30
33
  required: boolean;
31
34
  form: undefined;
32
35
  id: undefined;
36
+ indeterminate: boolean;
33
37
  }>>> & Readonly<{
34
38
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
35
39
  }>, {
@@ -40,6 +44,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
40
44
  disabled: boolean;
41
45
  name: string;
42
46
  id: string;
47
+ indeterminate: boolean;
43
48
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
44
49
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
45
50
  declare const _default: typeof __VLS_export;