@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,8 +1,9 @@
1
- import { t as x_default } from "../../../chunks/x-Pa6C2hwi.js";
2
- import { t as _plugin_vue_export_helper_default } from "../../../chunks/_plugin-vue_export-helper-DQR7Sy7Q.js";
3
- import { t as GrButton_default } from "../../GrButton/chunks/GrButton-CPDKonoB.js";
4
- import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-BV7RBU_0.js";
5
- import { l as runFileValidators, o as acceptValidator, u as FileValidationError } from "../../../chunks/fileValidation-c_iBg74s.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 _plugin_vue_export_helper_default } from "../../../chunks/_plugin-vue_export-helper-BOaGB7Aw.js";
4
+ import { t as GrButton_default } from "../../GrButton/chunks/GrButton-BlffdeJr.js";
5
+ import { t as GrIcon_default } from "../../GrIcon/chunks/GrIcon-D9AWQLk2.js";
6
+ import { l as runFileValidators, o as acceptValidator, u as FileValidationError } from "../../../chunks/fileValidation-C3WFaWU2.js";
6
7
  import { vDropzone } from "../../../directives/dropzone.js";
7
8
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, markRaw, nextTick, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, watch, withCtx, withDirectives, withModifiers } from "vue";
8
9
  import '../../../GrFormFile.css';//#region ~icons/lucide/upload
@@ -41,7 +42,7 @@ var _hoisted_7 = ["title"];
41
42
  var _hoisted_8 = {
42
43
  key: 3,
43
44
  class: "text-sm text-[var(--muted-fg)]",
44
- "data-ds-form-file-placeholder": ""
45
+ "data-gr-form-file-placeholder": ""
45
46
  };
46
47
  var _hoisted_9 = {
47
48
  key: 0,
@@ -51,12 +52,12 @@ var _hoisted_10 = ["title"];
51
52
  var _hoisted_11 = ["disabled", "onClick"];
52
53
  var _hoisted_12 = {
53
54
  key: 0,
54
- class: "text-sm text-[var(--ds-danger)]",
55
- "data-ds-form-file-errors": ""
55
+ class: "text-sm text-[var(--gr-danger)]",
56
+ "data-gr-form-file-errors": ""
56
57
  };
57
58
  //#endregion
58
59
  //#region src/components/GrFormFile/GrFormFile.vue
59
- var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
60
+ var GrFormFile_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
60
61
  name: "GrFormFile",
61
62
  __name: "GrFormFile",
62
63
  props: {
@@ -71,11 +72,11 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
71
72
  },
72
73
  accept: { default: void 0 },
73
74
  validators: { default: void 0 },
74
- uploadText: { default: "Upload file" },
75
- changeText: { default: "Change file" },
76
- removeText: { default: "Remove" },
77
- clearAllText: { default: "Clear all" },
78
- placeholder: { default: "No files selected" },
75
+ uploadText: { default: void 0 },
76
+ changeText: { default: void 0 },
77
+ removeText: { default: void 0 },
78
+ clearAllText: { default: void 0 },
79
+ placeholder: { default: void 0 },
79
80
  validate: {
80
81
  type: Function,
81
82
  default: void 0
@@ -91,6 +92,12 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
91
92
  setup(__props, { emit: __emit }) {
92
93
  const props = __props;
93
94
  const emit = __emit;
95
+ const { t } = useGranularityTranslations();
96
+ const resolvedUploadText = computed(() => props.uploadText ?? t("gr.formFile.upload", "Upload file"));
97
+ const resolvedChangeText = computed(() => props.changeText ?? t("gr.formFile.change", "Change file"));
98
+ const resolvedRemoveText = computed(() => props.removeText ?? t("gr.formFile.remove", "Remove"));
99
+ const resolvedClearAllText = computed(() => props.clearAllText ?? t("gr.formFile.clearAll", "Clear all"));
100
+ const resolvedPlaceholder = computed(() => props.placeholder ?? t("gr.formFile.placeholder", "No files selected"));
94
101
  const inputRef = ref(null);
95
102
  const localErrors = ref([]);
96
103
  const files = computed(() => {
@@ -197,7 +204,7 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
197
204
  if (error instanceof FileValidationError) setErrors(error.issues);
198
205
  else setErrors([{
199
206
  code: "accept",
200
- message: "Failed to validate dropped files"
207
+ message: t("gr.formFile.validateError", "Failed to validate dropped files")
201
208
  }]);
202
209
  }
203
210
  };
@@ -208,12 +215,12 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
208
215
  });
209
216
  return (_ctx, _cache) => {
210
217
  return withDirectives((openBlock(), createElementBlock("div", {
211
- "data-ds-form-file": "",
212
- class: normalizeClass(["rounded-[var(--ds-radius-md)]", __props.disabled ? "opacity-60 cursor-not-allowed" : ""])
218
+ "data-gr-form-file": "",
219
+ class: normalizeClass(["rounded-[var(--gr-radius-md)]", __props.disabled ? "opacity-60 cursor-not-allowed" : ""])
213
220
  }, [createElementVNode("input", {
214
221
  ref_key: "inputRef",
215
222
  ref: inputRef,
216
- "data-ds-form-file-input": "",
223
+ "data-gr-form-file-input": "",
217
224
  type: "file",
218
225
  tabindex: "-1",
219
226
  "aria-hidden": "true",
@@ -227,7 +234,7 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
227
234
  createVNode(GrButton_default, {
228
235
  variant: "secondary",
229
236
  size: "sm",
230
- "data-ds-form-file-upload-btn": "",
237
+ "data-gr-form-file-upload-btn": "",
231
238
  disabled: __props.disabled,
232
239
  onClick: withModifiers(openDialog, ["prevent"])
233
240
  }, {
@@ -237,14 +244,14 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
237
244
  }, {
238
245
  default: withCtx(() => [createVNode(unref(upload_default))]),
239
246
  _: 1
240
- }), createElementVNode("span", _hoisted_4, toDisplayString(hasFiles.value ? __props.changeText : __props.uploadText), 1)]),
247
+ }), createElementVNode("span", _hoisted_4, toDisplayString(hasFiles.value ? resolvedChangeText.value : resolvedUploadText.value), 1)]),
241
248
  _: 1
242
249
  }, 8, ["disabled"]),
243
250
  hasFiles.value && !__props.multiple ? (openBlock(), createBlock(GrButton_default, {
244
251
  key: 0,
245
252
  variant: "secondary",
246
253
  size: "sm",
247
- "data-ds-form-file-clear-btn": "",
254
+ "data-gr-form-file-clear-btn": "",
248
255
  disabled: __props.disabled,
249
256
  onClick: withModifiers(clearAll, ["prevent"])
250
257
  }, {
@@ -254,14 +261,14 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
254
261
  }, {
255
262
  default: withCtx(() => [createVNode(unref(x_default))]),
256
263
  _: 1
257
- }), createElementVNode("span", _hoisted_5, toDisplayString(__props.removeText), 1)]),
264
+ }), createElementVNode("span", _hoisted_5, toDisplayString(resolvedRemoveText.value), 1)]),
258
265
  _: 1
259
266
  }, 8, ["disabled"])) : createCommentVNode("", true),
260
267
  __props.multiple && hasFiles.value ? (openBlock(), createBlock(GrButton_default, {
261
268
  key: 1,
262
269
  variant: "secondary",
263
270
  size: "sm",
264
- "data-ds-form-file-clear-all-btn": "",
271
+ "data-gr-form-file-clear-all-btn": "",
265
272
  disabled: __props.disabled,
266
273
  onClick: withModifiers(clearAll, ["prevent"])
267
274
  }, {
@@ -271,30 +278,30 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
271
278
  }, {
272
279
  default: withCtx(() => [createVNode(unref(x_default))]),
273
280
  _: 1
274
- }), createElementVNode("span", _hoisted_6, toDisplayString(__props.clearAllText), 1)]),
281
+ }), createElementVNode("span", _hoisted_6, toDisplayString(resolvedClearAllText.value), 1)]),
275
282
  _: 1
276
283
  }, 8, ["disabled"])) : createCommentVNode("", true),
277
284
  !__props.multiple && hasFiles.value ? (openBlock(), createElementBlock("span", {
278
285
  key: 2,
279
286
  class: "text-sm text-[var(--muted-fg)] truncate max-w-[240px]",
280
- "data-ds-form-file-single-name": "",
287
+ "data-gr-form-file-single-name": "",
281
288
  title: files.value[0]?.name
282
289
  }, toDisplayString(files.value[0]?.name), 9, _hoisted_7)) : createCommentVNode("", true),
283
- !hasFiles.value ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true)
290
+ !hasFiles.value ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(resolvedPlaceholder.value), 1)) : createCommentVNode("", true)
284
291
  ]),
285
292
  __props.multiple && hasFiles.value ? (openBlock(), createElementBlock("div", _hoisted_9, [(openBlock(true), createElementBlock(Fragment, null, renderList(files.value, (file, index) => {
286
293
  return openBlock(), createElementBlock("div", {
287
294
  key: `${file.name}-${file.size}-${index}`,
288
295
  class: "flex items-center gap-2",
289
- "data-ds-form-file-item": ""
296
+ "data-gr-form-file-item": ""
290
297
  }, [createElementVNode("span", {
291
298
  class: "text-sm text-[var(--muted-fg)] truncate max-w-[240px]",
292
299
  title: file.name,
293
- "data-ds-form-file-item-name": ""
300
+ "data-gr-form-file-item-name": ""
294
301
  }, toDisplayString(file.name), 9, _hoisted_10), createElementVNode("button", {
295
302
  type: "button",
296
303
  class: "text-xs text-[var(--muted-fg)] hover:text-[var(--fg)]",
297
- "data-ds-form-file-item-remove": "",
304
+ "data-gr-form-file-item-remove": "",
298
305
  disabled: __props.disabled,
299
306
  onClick: withModifiers(($event) => removeAt(index), ["prevent"])
300
307
  }, toDisplayString(__props.removeText), 9, _hoisted_11)]);
@@ -302,12 +309,12 @@ var GrFormFile_default = /* @__PURE__ */ _plugin_vue_export_helper_default(/* @_
302
309
  renderSlot(_ctx.$slots, "errors", { errors: localErrors.value }, () => [localErrors.value.length ? (openBlock(), createElementBlock("div", _hoisted_12, [(openBlock(true), createElementBlock(Fragment, null, renderList(localErrors.value, (e, i) => {
303
310
  return openBlock(), createElementBlock("div", {
304
311
  key: i,
305
- "data-ds-form-file-error": ""
312
+ "data-gr-form-file-error": ""
306
313
  }, toDisplayString(issueMessage(e)), 1);
307
314
  }), 128))])) : createCommentVNode("", true)], true)
308
315
  ])], 2)), [[unref(vDropzone), dropzone.value]]);
309
316
  };
310
317
  }
311
- }), [["__scopeId", "data-v-a60cb9f7"]]);
318
+ }), [["__scopeId", "data-v-ff219d2a"]]);
312
319
  //#endregion
313
320
  export { GrFormFile_default as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrFormFile-CXcqqdvV.js","names":[],"sources":["../../../../src/components/GrFormFile/GrFormFile.vue","../../../../src/components/GrFormFile/GrFormFile.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport IconUpload from '~icons/lucide/upload'\nimport IconX from '~icons/lucide/x'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { vDropzone } from '../../directives'\nimport { acceptValidator, FileValidationError, runFileValidators } from '../../fileValidation'\nimport type { FileValidationIssue, FileValidator } from '../../fileValidation'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n name: 'GrFormFile',\n})\n\nexport type GrFormFileError = FileValidationIssue\n\n/**\n * Пропы `GrFormFile` — форма-поле для выбора файлов с встроенной валидацией,\n * drag&drop (через `v-dropzone`) и списком выбранных файлов.\n *\n * Все `*Text`/`placeholder` — i18n-friendly, принимают готовые строки локали.\n */\nexport interface GrFormFileProps {\n modelValue: File | File[] | null\n multiple?: boolean\n disabled?: boolean\n /** W3C `accept` для `<input type=\"file\">` + sugar к `acceptValidator(...)`. */\n accept?: string\n validators?: FileValidator[]\n uploadText?: string\n changeText?: string\n removeText?: string\n clearAllText?: string\n placeholder?: string\n /** Дополнительная (кастомная) валидация на стороне потребителя. */\n validate?: (files: File[]) => GrFormFileError[] | Promise<GrFormFileError[]>\n}\n\nconst props = withDefaults(\n defineProps<GrFormFileProps>(),\n {\n multiple: false,\n disabled: false,\n accept: undefined,\n uploadText: undefined,\n changeText: undefined,\n removeText: undefined,\n clearAllText: undefined,\n placeholder: undefined,\n validators: undefined,\n validate: undefined,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: File | File[] | null): void\n (e: 'change', value: File | File[] | null): void\n (e: 'clear'): void\n (e: 'validation', errors: GrFormFileError[]): void\n (e: 'update:errors', errors: GrFormFileError[]): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedUploadText = computed(() => props.uploadText ?? t('gr.formFile.upload', 'Upload file'))\nconst resolvedChangeText = computed(() => props.changeText ?? t('gr.formFile.change', 'Change file'))\nconst resolvedRemoveText = computed(() => props.removeText ?? t('gr.formFile.remove', 'Remove'))\nconst resolvedClearAllText = computed(() => props.clearAllText ?? t('gr.formFile.clearAll', 'Clear all'))\nconst resolvedPlaceholder = computed(() => props.placeholder ?? t('gr.formFile.placeholder', 'No files selected'))\n\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst localErrors = ref<GrFormFileError[]>([])\n\nconst files = computed<File[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n return props.modelValue instanceof File ? [props.modelValue] : []\n})\n\nconst hasFiles = computed(() => files.value.length > 0)\n\nfunction clearInputValue() {\n if (!inputRef.value) return\n inputRef.value.value = ''\n}\n\nfunction setErrors(next: GrFormFileError[]) {\n localErrors.value = next\n emit('validation', next)\n emit('update:errors', next)\n}\n\nfunction clearErrors() {\n if (localErrors.value.length === 0) return\n setErrors([])\n}\n\nfunction openDialog() {\n if (props.disabled) return\n inputRef.value?.click()\n}\n\nfunction emitModel(nextFiles: File[]) {\n const value: File | File[] | null = props.multiple\n ? nextFiles\n : (nextFiles[0] ?? null)\n\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nasync function applyFiles(nextFiles: File[]) {\n const isPromiseLike = (value: unknown): value is PromiseLike<any> => {\n return !!value && typeof (value as any).then === 'function'\n }\n\n const customValidator: FileValidator | undefined = props.validate\n ? async ({ files }) => (await props.validate?.(files)) ?? []\n : undefined\n\n const validators: FileValidator[] = [\n acceptValidator(props.accept),\n ...(props.validators ?? []),\n ...(customValidator ? [customValidator] : []),\n ]\n\n const res = runFileValidators(nextFiles, validators, {\n source: 'input',\n multiple: props.multiple,\n })\n\n const { files: picked, issues } = isPromiseLike(res) ? await res : res\n\n if (issues.length > 0) {\n setErrors(issues)\n clearInputValue()\n await nextTick()\n return\n }\n\n clearErrors()\n emitModel(picked)\n clearInputValue()\n await nextTick()\n}\n\nasync function onInputChange(event: Event) {\n if (props.disabled) return\n\n const target = event.target as HTMLInputElement | null\n const nextFiles = target?.files ? Array.prototype.slice.call(target.files) as File[] : []\n\n // Reset value so selecting the same file twice triggers change.\n if (target) target.value = ''\n await nextTick()\n\n await applyFiles(nextFiles)\n}\n\nfunction clearAll() {\n if (props.disabled) return\n clearErrors()\n clearInputValue()\n emit('clear')\n\n emit('update:modelValue', props.multiple ? [] : null)\n emit('change', props.multiple ? [] : null)\n}\n\nfunction removeAt(index: number) {\n if (props.disabled) return\n if (!props.multiple) {\n clearAll()\n return\n }\n\n const next = files.value.slice()\n next.splice(index, 1)\n\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction issueMessage(issue: GrFormFileError): string {\n if (issue.fileName) return `${issue.fileName}: ${issue.message}`\n return issue.message\n}\n\nconst dropzone = computed(() => {\n const customValidator: FileValidator | undefined = props.validate\n ? async ({ files }) => (await props.validate?.(files)) ?? []\n : undefined\n\n const validators: FileValidator[] = [\n acceptValidator(props.accept),\n ...(props.validators ?? []),\n ...(customValidator ? [customValidator] : []),\n ]\n\n return {\n enabled: !props.disabled,\n multiple: props.multiple,\n validators,\n onFiles: async (dropped: File[]) => {\n // `v-dropzone` уже выполнил валидаторы и нормализацию по `multiple`.\n clearErrors()\n emitModel(dropped)\n clearInputValue()\n await nextTick()\n },\n onError: (error: unknown) => {\n if (error instanceof FileValidationError) {\n setErrors(error.issues)\n }\n else {\n setErrors([\n {\n code: 'accept',\n message: t('gr.formFile.validateError', 'Failed to validate dropped files'),\n },\n ])\n }\n },\n }\n})\n\nwatch(\n () => props.modelValue,\n (value) => {\n if (!inputRef.value) return\n\n if (!value || (Array.isArray(value) && value.length === 0)) {\n // Позволяет выбрать тот же файл снова после внешнего сброса.\n inputRef.value.value = ''\n }\n },\n)\n</script>\n\n<template>\n <div\n v-dropzone=\"dropzone\"\n data-gr-form-file\n class=\"rounded-[var(--gr-radius-md)]\"\n :class=\"disabled ? 'opacity-60 cursor-not-allowed' : ''\"\n >\n <input\n ref=\"inputRef\"\n data-gr-form-file-input\n type=\"file\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"absolute opacity-0 w-px h-px pointer-events-none\"\n :multiple=\"multiple\"\n :accept=\"accept\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n >\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-wrap items-center gap-3\">\n <GrButton\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-upload-btn\n :disabled=\"disabled\"\n @click.prevent=\"openDialog\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconUpload />\n </GrIcon>\n <span class=\"ml-2\">{{ hasFiles ? resolvedChangeText : resolvedUploadText }}</span>\n </GrButton>\n\n <GrButton\n v-if=\"hasFiles && !multiple\"\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-clear-btn\n :disabled=\"disabled\"\n @click.prevent=\"clearAll\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconX />\n </GrIcon>\n <span class=\"ml-2\">{{ resolvedRemoveText }}</span>\n </GrButton>\n\n <GrButton\n v-if=\"multiple && hasFiles\"\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-clear-all-btn\n :disabled=\"disabled\"\n @click.prevent=\"clearAll\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconX />\n </GrIcon>\n <span class=\"ml-2\">{{ resolvedClearAllText }}</span>\n </GrButton>\n\n <span\n v-if=\"!multiple && hasFiles\"\n class=\"text-sm text-[var(--muted-fg)] truncate max-w-[240px]\"\n data-gr-form-file-single-name\n :title=\"files[0]?.name\"\n >\n {{ files[0]?.name }}\n </span>\n\n <span\n v-if=\"!hasFiles\"\n class=\"text-sm text-[var(--muted-fg)]\"\n data-gr-form-file-placeholder\n >\n {{ resolvedPlaceholder }}\n </span>\n </div>\n\n <div v-if=\"multiple && hasFiles\" class=\"flex flex-col gap-2\">\n <div\n v-for=\"(file, index) in files\"\n :key=\"`${file.name}-${file.size}-${index}`\"\n class=\"flex items-center gap-2\"\n data-gr-form-file-item\n >\n <span\n class=\"text-sm text-[var(--muted-fg)] truncate max-w-[240px]\"\n :title=\"file.name\"\n data-gr-form-file-item-name\n >\n {{ file.name }}\n </span>\n\n <button\n type=\"button\"\n class=\"text-xs text-[var(--muted-fg)] hover:text-[var(--fg)]\"\n data-gr-form-file-item-remove\n :disabled=\"disabled\"\n @click.prevent=\"removeAt(index)\"\n >\n {{ removeText }}\n </button>\n </div>\n </div>\n\n <slot name=\"errors\" :errors=\"localErrors\">\n <div v-if=\"localErrors.length\" class=\"text-sm text-[var(--gr-danger)]\" data-gr-form-file-errors>\n <div v-for=\"(e, i) in localErrors\" :key=\"i\" data-gr-form-file-error>\n {{ issueMessage(e) }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n[data-gr-form-file].gr-dropzone--over {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from 'vue'\n\nimport IconUpload from '~icons/lucide/upload'\nimport IconX from '~icons/lucide/x'\n\nimport GrButton from '../GrButton/GrButton.vue'\nimport GrIcon from '../GrIcon/GrIcon.vue'\nimport { vDropzone } from '../../directives'\nimport { acceptValidator, FileValidationError, runFileValidators } from '../../fileValidation'\nimport type { FileValidationIssue, FileValidator } from '../../fileValidation'\nimport { useGranularityTranslations } from '../../internal/granularityI18n'\n\ndefineOptions({\n name: 'GrFormFile',\n})\n\nexport type GrFormFileError = FileValidationIssue\n\n/**\n * Пропы `GrFormFile` — форма-поле для выбора файлов с встроенной валидацией,\n * drag&drop (через `v-dropzone`) и списком выбранных файлов.\n *\n * Все `*Text`/`placeholder` — i18n-friendly, принимают готовые строки локали.\n */\nexport interface GrFormFileProps {\n modelValue: File | File[] | null\n multiple?: boolean\n disabled?: boolean\n /** W3C `accept` для `<input type=\"file\">` + sugar к `acceptValidator(...)`. */\n accept?: string\n validators?: FileValidator[]\n uploadText?: string\n changeText?: string\n removeText?: string\n clearAllText?: string\n placeholder?: string\n /** Дополнительная (кастомная) валидация на стороне потребителя. */\n validate?: (files: File[]) => GrFormFileError[] | Promise<GrFormFileError[]>\n}\n\nconst props = withDefaults(\n defineProps<GrFormFileProps>(),\n {\n multiple: false,\n disabled: false,\n accept: undefined,\n uploadText: undefined,\n changeText: undefined,\n removeText: undefined,\n clearAllText: undefined,\n placeholder: undefined,\n validators: undefined,\n validate: undefined,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: File | File[] | null): void\n (e: 'change', value: File | File[] | null): void\n (e: 'clear'): void\n (e: 'validation', errors: GrFormFileError[]): void\n (e: 'update:errors', errors: GrFormFileError[]): void\n}>()\n\nconst { t } = useGranularityTranslations()\nconst resolvedUploadText = computed(() => props.uploadText ?? t('gr.formFile.upload', 'Upload file'))\nconst resolvedChangeText = computed(() => props.changeText ?? t('gr.formFile.change', 'Change file'))\nconst resolvedRemoveText = computed(() => props.removeText ?? t('gr.formFile.remove', 'Remove'))\nconst resolvedClearAllText = computed(() => props.clearAllText ?? t('gr.formFile.clearAll', 'Clear all'))\nconst resolvedPlaceholder = computed(() => props.placeholder ?? t('gr.formFile.placeholder', 'No files selected'))\n\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst localErrors = ref<GrFormFileError[]>([])\n\nconst files = computed<File[]>(() => {\n if (props.multiple) {\n return Array.isArray(props.modelValue) ? props.modelValue : []\n }\n\n return props.modelValue instanceof File ? [props.modelValue] : []\n})\n\nconst hasFiles = computed(() => files.value.length > 0)\n\nfunction clearInputValue() {\n if (!inputRef.value) return\n inputRef.value.value = ''\n}\n\nfunction setErrors(next: GrFormFileError[]) {\n localErrors.value = next\n emit('validation', next)\n emit('update:errors', next)\n}\n\nfunction clearErrors() {\n if (localErrors.value.length === 0) return\n setErrors([])\n}\n\nfunction openDialog() {\n if (props.disabled) return\n inputRef.value?.click()\n}\n\nfunction emitModel(nextFiles: File[]) {\n const value: File | File[] | null = props.multiple\n ? nextFiles\n : (nextFiles[0] ?? null)\n\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nasync function applyFiles(nextFiles: File[]) {\n const isPromiseLike = (value: unknown): value is PromiseLike<any> => {\n return !!value && typeof (value as any).then === 'function'\n }\n\n const customValidator: FileValidator | undefined = props.validate\n ? async ({ files }) => (await props.validate?.(files)) ?? []\n : undefined\n\n const validators: FileValidator[] = [\n acceptValidator(props.accept),\n ...(props.validators ?? []),\n ...(customValidator ? [customValidator] : []),\n ]\n\n const res = runFileValidators(nextFiles, validators, {\n source: 'input',\n multiple: props.multiple,\n })\n\n const { files: picked, issues } = isPromiseLike(res) ? await res : res\n\n if (issues.length > 0) {\n setErrors(issues)\n clearInputValue()\n await nextTick()\n return\n }\n\n clearErrors()\n emitModel(picked)\n clearInputValue()\n await nextTick()\n}\n\nasync function onInputChange(event: Event) {\n if (props.disabled) return\n\n const target = event.target as HTMLInputElement | null\n const nextFiles = target?.files ? Array.prototype.slice.call(target.files) as File[] : []\n\n // Reset value so selecting the same file twice triggers change.\n if (target) target.value = ''\n await nextTick()\n\n await applyFiles(nextFiles)\n}\n\nfunction clearAll() {\n if (props.disabled) return\n clearErrors()\n clearInputValue()\n emit('clear')\n\n emit('update:modelValue', props.multiple ? [] : null)\n emit('change', props.multiple ? [] : null)\n}\n\nfunction removeAt(index: number) {\n if (props.disabled) return\n if (!props.multiple) {\n clearAll()\n return\n }\n\n const next = files.value.slice()\n next.splice(index, 1)\n\n emit('update:modelValue', next)\n emit('change', next)\n}\n\nfunction issueMessage(issue: GrFormFileError): string {\n if (issue.fileName) return `${issue.fileName}: ${issue.message}`\n return issue.message\n}\n\nconst dropzone = computed(() => {\n const customValidator: FileValidator | undefined = props.validate\n ? async ({ files }) => (await props.validate?.(files)) ?? []\n : undefined\n\n const validators: FileValidator[] = [\n acceptValidator(props.accept),\n ...(props.validators ?? []),\n ...(customValidator ? [customValidator] : []),\n ]\n\n return {\n enabled: !props.disabled,\n multiple: props.multiple,\n validators,\n onFiles: async (dropped: File[]) => {\n // `v-dropzone` уже выполнил валидаторы и нормализацию по `multiple`.\n clearErrors()\n emitModel(dropped)\n clearInputValue()\n await nextTick()\n },\n onError: (error: unknown) => {\n if (error instanceof FileValidationError) {\n setErrors(error.issues)\n }\n else {\n setErrors([\n {\n code: 'accept',\n message: t('gr.formFile.validateError', 'Failed to validate dropped files'),\n },\n ])\n }\n },\n }\n})\n\nwatch(\n () => props.modelValue,\n (value) => {\n if (!inputRef.value) return\n\n if (!value || (Array.isArray(value) && value.length === 0)) {\n // Позволяет выбрать тот же файл снова после внешнего сброса.\n inputRef.value.value = ''\n }\n },\n)\n</script>\n\n<template>\n <div\n v-dropzone=\"dropzone\"\n data-gr-form-file\n class=\"rounded-[var(--gr-radius-md)]\"\n :class=\"disabled ? 'opacity-60 cursor-not-allowed' : ''\"\n >\n <input\n ref=\"inputRef\"\n data-gr-form-file-input\n type=\"file\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"absolute opacity-0 w-px h-px pointer-events-none\"\n :multiple=\"multiple\"\n :accept=\"accept\"\n :disabled=\"disabled\"\n @change=\"onInputChange\"\n >\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-wrap items-center gap-3\">\n <GrButton\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-upload-btn\n :disabled=\"disabled\"\n @click.prevent=\"openDialog\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconUpload />\n </GrIcon>\n <span class=\"ml-2\">{{ hasFiles ? resolvedChangeText : resolvedUploadText }}</span>\n </GrButton>\n\n <GrButton\n v-if=\"hasFiles && !multiple\"\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-clear-btn\n :disabled=\"disabled\"\n @click.prevent=\"clearAll\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconX />\n </GrIcon>\n <span class=\"ml-2\">{{ resolvedRemoveText }}</span>\n </GrButton>\n\n <GrButton\n v-if=\"multiple && hasFiles\"\n variant=\"secondary\"\n size=\"sm\"\n data-gr-form-file-clear-all-btn\n :disabled=\"disabled\"\n @click.prevent=\"clearAll\"\n >\n <GrIcon size=\"sm\" aria-hidden=\"true\">\n <IconX />\n </GrIcon>\n <span class=\"ml-2\">{{ resolvedClearAllText }}</span>\n </GrButton>\n\n <span\n v-if=\"!multiple && hasFiles\"\n class=\"text-sm text-[var(--muted-fg)] truncate max-w-[240px]\"\n data-gr-form-file-single-name\n :title=\"files[0]?.name\"\n >\n {{ files[0]?.name }}\n </span>\n\n <span\n v-if=\"!hasFiles\"\n class=\"text-sm text-[var(--muted-fg)]\"\n data-gr-form-file-placeholder\n >\n {{ resolvedPlaceholder }}\n </span>\n </div>\n\n <div v-if=\"multiple && hasFiles\" class=\"flex flex-col gap-2\">\n <div\n v-for=\"(file, index) in files\"\n :key=\"`${file.name}-${file.size}-${index}`\"\n class=\"flex items-center gap-2\"\n data-gr-form-file-item\n >\n <span\n class=\"text-sm text-[var(--muted-fg)] truncate max-w-[240px]\"\n :title=\"file.name\"\n data-gr-form-file-item-name\n >\n {{ file.name }}\n </span>\n\n <button\n type=\"button\"\n class=\"text-xs text-[var(--muted-fg)] hover:text-[var(--fg)]\"\n data-gr-form-file-item-remove\n :disabled=\"disabled\"\n @click.prevent=\"removeAt(index)\"\n >\n {{ removeText }}\n </button>\n </div>\n </div>\n\n <slot name=\"errors\" :errors=\"localErrors\">\n <div v-if=\"localErrors.length\" class=\"text-sm text-[var(--gr-danger)]\" data-gr-form-file-errors>\n <div v-for=\"(e, i) in localErrors\" :key=\"i\" data-gr-form-file-error>\n {{ issueMessage(e) }}\n </div>\n </div>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n[data-gr-form-file].gr-dropzone--over {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n</style>\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { t as GrFormFile_default } from "./chunks/GrFormFile-CkR6cYqf.js";
2
- import { t as grFormFileConfig } from "../../chunks/config-C5-ujXCI.js";
1
+ import { t as GrFormFile_default } from "./chunks/GrFormFile-CXcqqdvV.js";
2
+ import { t as grFormFileConfig } from "../../chunks/config-D7GZO-Dx.js";
3
3
  export { GrFormFile_default as GrFormFile, GrFormFile_default as default, grFormFileConfig };
@@ -16,7 +16,7 @@ var GrFormSection_default = /* @__PURE__ */ defineComponent({
16
16
  const descriptionId = useId();
17
17
  return (_ctx, _cache) => {
18
18
  return openBlock(), createElementBlock("section", {
19
- "data-ds-form-section": "",
19
+ "data-gr-form-section": "",
20
20
  class: "grid gap-4",
21
21
  "aria-labelledby": unref(titleId),
22
22
  "aria-describedby": __props.description ? unref(descriptionId) : void 0
@@ -1 +1 @@
1
- {"version":3,"file":"GrFormSection-dbyzqxYk.js","names":[],"sources":["../../../../src/components/GrFormSection/GrFormSection.vue","../../../../src/components/GrFormSection/GrFormSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useId } from 'vue'\n\n/**\n * GrFormSection — секция формы с заголовком, опциональным описанием и контентом.\n *\n * - `section` связан с заголовком через `aria-labelledby` и c описанием\n * (если есть) через `aria-describedby` — для a11y.\n */\nexport interface GrFormSectionProps {\n title: string\n description?: string\n}\n\nwithDefaults(defineProps<GrFormSectionProps>(), {\n description: undefined,\n})\n\nconst titleId = useId()\nconst descriptionId = useId()\n</script>\n\n<template>\n <section\n data-ds-form-section\n class=\"grid gap-4\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n >\n <div>\n <div :id=\"titleId\" class=\"text-[14px] font-700\">\n {{ title }}\n </div>\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"mt-1 text-[13px] text-[var(--muted-fg)]\"\n >\n {{ description }}\n </div>\n </div>\n <slot />\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { useId } from 'vue'\n\n/**\n * GrFormSection — секция формы с заголовком, опциональным описанием и контентом.\n *\n * - `section` связан с заголовком через `aria-labelledby` и c описанием\n * (если есть) через `aria-describedby` — для a11y.\n */\nexport interface GrFormSectionProps {\n title: string\n description?: string\n}\n\nwithDefaults(defineProps<GrFormSectionProps>(), {\n description: undefined,\n})\n\nconst titleId = useId()\nconst descriptionId = useId()\n</script>\n\n<template>\n <section\n data-ds-form-section\n class=\"grid gap-4\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n >\n <div>\n <div :id=\"titleId\" class=\"text-[14px] font-700\">\n {{ title }}\n </div>\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"mt-1 text-[13px] text-[var(--muted-fg)]\"\n >\n {{ description }}\n </div>\n </div>\n <slot />\n </section>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAkBA,MAAM,UAAU,OAAM;EACtB,MAAM,gBAAgB,OAAM;;uBAI1B,mBAmBU,WAAA;IAlBR,wBAAA;IACA,OAAM;IACL,mBAAiB,MAAA,QAAO;IACxB,oBAAkB,QAAA,cAAc,MAAA,cAAa,GAAG,KAAA;OAEjD,mBAWM,OAAA,MAAA,CAVJ,mBAEM,OAAA;IAFA,IAAI,MAAA,QAAO;IAAE,OAAM;sBACpB,QAAA,MAAK,EAAA,GAAA,WAAA,EAGF,QAAA,eAAA,WAAA,EADR,mBAMM,OAAA;;IAJH,IAAI,MAAA,cAAa;IAClB,OAAM;sBAEH,QAAA,YAAW,EAAA,GAAA,WAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,EAGlB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,GAAA,WAAA"}
1
+ {"version":3,"file":"GrFormSection-Ce21jcgo.js","names":[],"sources":["../../../../src/components/GrFormSection/GrFormSection.vue","../../../../src/components/GrFormSection/GrFormSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useId } from 'vue'\n\n/**\n * GrFormSection — секция формы с заголовком, опциональным описанием и контентом.\n *\n * - `section` связан с заголовком через `aria-labelledby` и c описанием\n * (если есть) через `aria-describedby` — для a11y.\n */\nexport interface GrFormSectionProps {\n title: string\n description?: string\n}\n\nwithDefaults(defineProps<GrFormSectionProps>(), {\n description: undefined,\n})\n\nconst titleId = useId()\nconst descriptionId = useId()\n</script>\n\n<template>\n <section\n data-gr-form-section\n class=\"grid gap-4\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n >\n <div>\n <div :id=\"titleId\" class=\"text-[14px] font-700\">\n {{ title }}\n </div>\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"mt-1 text-[13px] text-[var(--muted-fg)]\"\n >\n {{ description }}\n </div>\n </div>\n <slot />\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { useId } from 'vue'\n\n/**\n * GrFormSection — секция формы с заголовком, опциональным описанием и контентом.\n *\n * - `section` связан с заголовком через `aria-labelledby` и c описанием\n * (если есть) через `aria-describedby` — для a11y.\n */\nexport interface GrFormSectionProps {\n title: string\n description?: string\n}\n\nwithDefaults(defineProps<GrFormSectionProps>(), {\n description: undefined,\n})\n\nconst titleId = useId()\nconst descriptionId = useId()\n</script>\n\n<template>\n <section\n data-gr-form-section\n class=\"grid gap-4\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descriptionId : undefined\"\n >\n <div>\n <div :id=\"titleId\" class=\"text-[14px] font-700\">\n {{ title }}\n </div>\n <div\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"mt-1 text-[13px] text-[var(--muted-fg)]\"\n >\n {{ description }}\n </div>\n </div>\n <slot />\n </section>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAkBA,MAAM,UAAU,MAAM;EACtB,MAAM,gBAAgB,MAAM;;uBAI1B,mBAmBU,WAAA;IAlBR,wBAAA;IACA,OAAM;IACL,mBAAiB,MAAA,OAAA;IACjB,oBAAkB,QAAA,cAAc,MAAA,aAAA,IAAgB,KAAA;OAEjD,mBAWM,OAAA,MAAA,CAVJ,mBAEM,OAAA;IAFA,IAAI,MAAA,OAAA;IAAS,OAAM;sBACpB,QAAA,KAAK,GAAA,GAAA,UAAA,GAGF,QAAA,eAAA,UAAA,GADR,mBAMM,OAAA;;IAJH,IAAI,MAAA,aAAA;IACL,OAAM;sBAEH,QAAA,WAAW,GAAA,GAAA,UAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,GAGlB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,GAAA,UAAA"}
@@ -1,3 +1,3 @@
1
- import { t as GrFormSection_default } from "./chunks/GrFormSection-dbyzqxYk.js";
2
- import { t as grFormSectionConfig } from "../../chunks/config-VJuoznpH.js";
1
+ import { t as GrFormSection_default } from "./chunks/GrFormSection-Ce21jcgo.js";
2
+ import { t as grFormSectionConfig } from "../../chunks/config-B0qIpo8m.js";
3
3
  export { GrFormSection_default as GrFormSection, GrFormSection_default as default, grFormSectionConfig };
@@ -17,12 +17,12 @@ var GrIcon_default = /* @__PURE__ */ defineComponent({
17
17
  const props = __props;
18
18
  const resolvedSize = computed(() => props.size ?? "md");
19
19
  const iconStyle = computed(() => {
20
- return { "--ds-icon-size": `${resolveGrIconSizePx(resolvedSize.value)}px` };
20
+ return { "--gr-icon-size": `${resolveGrIconSizePx(resolvedSize.value)}px` };
21
21
  });
22
22
  return (_ctx, _cache) => {
23
23
  return openBlock(), createElementBlock("span", {
24
- "data-ds-icon": "",
25
- class: "ds-icon inline-flex items-center justify-center align-middle",
24
+ "data-gr-icon": "",
25
+ class: "gr-icon inline-flex items-center justify-center align-middle",
26
26
  style: normalizeStyle(iconStyle.value)
27
27
  }, [renderSlot(_ctx.$slots, "default")], 4);
28
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GrIcon-BV7RBU_0.js","names":[],"sources":["../../../../src/components/GrIcon/GrIcon.vue","../../../../src/components/GrIcon/GrIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nexport type GrIconSize = 'sm' | 'md' | 'lg'\n\nconst GR_ICON_SIZE_MAP: Record<GrIconSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n}\n\nfunction resolveGrIconSizePx(size: GrIconSize | number): number {\n if (typeof size === 'number') return size\n return GR_ICON_SIZE_MAP[size]\n}\n\nconst props = defineProps<{\n size?: GrIconSize | number\n}>()\n\nconst resolvedSize = computed(() => props.size ?? 'md')\n\nconst iconStyle = computed(() => {\n return {\n '--ds-icon-size': `${resolveGrIconSizePx(resolvedSize.value)}px`,\n } as Record<string, string>\n})\n</script>\n\n<template>\n <span\n data-ds-icon\n class=\"ds-icon inline-flex items-center justify-center align-middle\"\n :style=\"iconStyle\"\n >\n <slot />\n </span>\n</template>\n<style>\n/*\n * GrIcon.\n *\n * This must be global because icons are usually passed via slots (SVG),\n * and we want consistent sizing without relying on SFC scoped + :deep.\n */\n:where(.ds-icon) {\n --ds-icon-size: 18px;\n width: var(--ds-icon-size);\n min-width: var(--ds-icon-size);\n height: var(--ds-icon-size);\n line-height: 0;\n flex: none;\n}\n\n:where(.ds-icon svg) {\n width: 100%;\n height: 100%;\n display: block;\n}\n</style>","<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nexport type GrIconSize = 'sm' | 'md' | 'lg'\n\nconst GR_ICON_SIZE_MAP: Record<GrIconSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n}\n\nfunction resolveGrIconSizePx(size: GrIconSize | number): number {\n if (typeof size === 'number') return size\n return GR_ICON_SIZE_MAP[size]\n}\n\nconst props = defineProps<{\n size?: GrIconSize | number\n}>()\n\nconst resolvedSize = computed(() => props.size ?? 'md')\n\nconst iconStyle = computed(() => {\n return {\n '--ds-icon-size': `${resolveGrIconSizePx(resolvedSize.value)}px`,\n } as Record<string, string>\n})\n</script>\n\n<template>\n <span\n data-ds-icon\n class=\"ds-icon inline-flex items-center justify-center align-middle\"\n :style=\"iconStyle\"\n >\n <slot />\n </span>\n</template>\n<style>\n/*\n * GrIcon.\n *\n * This must be global because icons are usually passed via slots (SVG),\n * and we want consistent sizing without relying on SFC scoped + :deep.\n */\n:where(.ds-icon) {\n --ds-icon-size: 18px;\n width: var(--ds-icon-size);\n min-width: var(--ds-icon-size);\n height: var(--ds-icon-size);\n line-height: 0;\n flex: none;\n}\n\n:where(.ds-icon svg) {\n width: 100%;\n height: 100%;\n display: block;\n}\n</style>"],"mappings":";;;;;;;EAKA,MAAM,mBAA+C;GACnD,IAAI;GACJ,IAAI;GACJ,IAAI;GACN;EAEA,SAAS,oBAAoB,MAAmC;AAC9D,OAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAO,iBAAiB;;EAG1B,MAAM,QAAQ;EAId,MAAM,eAAe,eAAe,MAAM,QAAQ,KAAI;EAEtD,MAAM,YAAY,eAAe;AAC/B,UAAO,EACL,kBAAkB,GAAG,oBAAoB,aAAa,MAAM,CAAC,KAC9D;IACF;;uBAIC,mBAMO,QAAA;IALH,gBAAA;IACA,OAAM;IACL,OAAK,eAAE,UAAA,MAAS;OAEnB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"GrIcon-D9AWQLk2.js","names":[],"sources":["../../../../src/components/GrIcon/GrIcon.vue","../../../../src/components/GrIcon/GrIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nexport type GrIconSize = 'sm' | 'md' | 'lg'\n\nconst GR_ICON_SIZE_MAP: Record<GrIconSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n}\n\nfunction resolveGrIconSizePx(size: GrIconSize | number): number {\n if (typeof size === 'number') return size\n return GR_ICON_SIZE_MAP[size]\n}\n\nconst props = defineProps<{\n size?: GrIconSize | number\n}>()\n\nconst resolvedSize = computed(() => props.size ?? 'md')\n\nconst iconStyle = computed(() => {\n return {\n '--gr-icon-size': `${resolveGrIconSizePx(resolvedSize.value)}px`,\n } as Record<string, string>\n})\n</script>\n\n<template>\n <span\n data-gr-icon\n class=\"gr-icon inline-flex items-center justify-center align-middle\"\n :style=\"iconStyle\"\n >\n <slot />\n </span>\n</template>\n<style>\n/*\n * GrIcon.\n *\n * This must be global because icons are usually passed via slots (SVG),\n * and we want consistent sizing without relying on SFC scoped + :deep.\n */\n:where(.gr-icon) {\n --gr-icon-size: 18px;\n width: var(--gr-icon-size);\n min-width: var(--gr-icon-size);\n height: var(--gr-icon-size);\n line-height: 0;\n flex: none;\n}\n\n:where(.gr-icon svg) {\n width: 100%;\n height: 100%;\n display: block;\n}\n</style>","<script setup lang=\"ts\">\nimport {computed} from 'vue'\n\nexport type GrIconSize = 'sm' | 'md' | 'lg'\n\nconst GR_ICON_SIZE_MAP: Record<GrIconSize, number> = {\n sm: 16,\n md: 18,\n lg: 20,\n}\n\nfunction resolveGrIconSizePx(size: GrIconSize | number): number {\n if (typeof size === 'number') return size\n return GR_ICON_SIZE_MAP[size]\n}\n\nconst props = defineProps<{\n size?: GrIconSize | number\n}>()\n\nconst resolvedSize = computed(() => props.size ?? 'md')\n\nconst iconStyle = computed(() => {\n return {\n '--gr-icon-size': `${resolveGrIconSizePx(resolvedSize.value)}px`,\n } as Record<string, string>\n})\n</script>\n\n<template>\n <span\n data-gr-icon\n class=\"gr-icon inline-flex items-center justify-center align-middle\"\n :style=\"iconStyle\"\n >\n <slot />\n </span>\n</template>\n<style>\n/*\n * GrIcon.\n *\n * This must be global because icons are usually passed via slots (SVG),\n * and we want consistent sizing without relying on SFC scoped + :deep.\n */\n:where(.gr-icon) {\n --gr-icon-size: 18px;\n width: var(--gr-icon-size);\n min-width: var(--gr-icon-size);\n height: var(--gr-icon-size);\n line-height: 0;\n flex: none;\n}\n\n:where(.gr-icon svg) {\n width: 100%;\n height: 100%;\n display: block;\n}\n</style>"],"mappings":";;;;;;;EAKA,MAAM,mBAA+C;GACnD,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EAEA,SAAS,oBAAoB,MAAmC;GAC9D,IAAI,OAAO,SAAS,UAAU,OAAO;GACrC,OAAO,iBAAiB;EAC1B;EAEA,MAAM,QAAQ;EAId,MAAM,eAAe,eAAe,MAAM,QAAQ,IAAI;EAEtD,MAAM,YAAY,eAAe;GAC/B,OAAO,EACL,kBAAkB,GAAG,oBAAoB,aAAa,KAAK,EAAE,IAC/D;EACF,CAAC;;uBAIC,mBAMO,QAAA;IALH,gBAAA;IACA,OAAM;IACL,OAAK,eAAE,UAAA,KAAS;OAEnB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1,3 +1,3 @@
1
- import { t as GrIcon_default } from "./chunks/GrIcon-BV7RBU_0.js";
2
- import { t as grIconConfig } from "../../chunks/config-DbghHyY_.js";
1
+ import { t as GrIcon_default } from "./chunks/GrIcon-D9AWQLk2.js";
2
+ import { t as grIconConfig } from "../../chunks/config-BEegFP74.js";
3
3
  export { GrIcon_default as GrIcon, GrIcon_default as default, grIconConfig };